projects/linux·commit f00a1892

w1: fix slave selection on big-endian systems

f00a1892 · Evgeniy Polyakov <[email protected]> · 2008-12-23 13:57:12 -08:00

During test of the w1-gpio driver i found that in "w1.c:679
w1_slave_found()" the device id is converted to little-endian with
"cpu_to_le64()", but its not converted back to cpu format in "w1_io.c:293
w1_reset_select_slave()".

Based on a patch created by Andreas Hummel.

[[email protected]: remove unneeded cast]
Reported-by: Andreas Hummel <[email protected]>
Signed-off-by: Evgeniy Polyakov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Commit
f00a189257836e5237ace3265f6991ef66a16c86
Parents
cc6c2ca3

Changes

1 files changed · +3 −1

FileStatusAddDelContent
drivers/w1/w1_io.cmodified+3−1View file

drivers/w1/w1_io.c

View file
diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c
index 0d15b0e..5139c25 100644
--- a/drivers/w1/w1_io.c
+++ b/drivers/w1/w1_io.c
@@ -356,7 +356,9 @@ int w1_reset_select_slave(struct w1_slave *sl)
w1_write_8(sl->master, W1_SKIP_ROM);
else {
u8 match[9] = {W1_MATCH_ROM, };
- memcpy(&match[1], (u8 *)&sl->reg_num, 8);
+ u64 rn = le64_to_cpu(*((u64*)&sl->reg_num));
+
+ memcpy(&match[1], &rn, 8);
w1_write_block(sl->master, match, 9);
}
return 0;