aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2011-09-14 17:50:23 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-10-03 14:40:40 -0400
commit35ff9b5a4d0c8881d85dc5874964460f858f7e2d (patch)
tree3376e3e071c2ea8d07794327ca48e72540d5778f
parentcb49a34465aff5bb9c5209e2b8e775cead9712c7 (diff)
rtl2800usb: Fix incorrect storage of MAC address on big-endian platforms
commit daabead1c32f331edcfb255fd973411c667977e8 upstream. The eeprom data is stored in little-endian order in the rt2x00 library. As it was converted to cpu order in the read routines, the data need to be converted to LE on a big-endian platform. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index d7e76c1d6ce..3f7ea1ce295 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3512,14 +3512,15 @@ static void rt2800_efuse_read(struct rt2x00_dev *rt2x00dev, unsigned int i)
3512 rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, &reg); 3512 rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, &reg);
3513 3513
3514 /* Apparently the data is read from end to start */ 3514 /* Apparently the data is read from end to start */
3515 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, 3515 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, &reg);
3516 (u32 *)&rt2x00dev->eeprom[i]); 3516 /* The returned value is in CPU order, but eeprom is le */
3517 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, 3517 rt2x00dev->eeprom[i] = cpu_to_le32(reg);
3518 (u32 *)&rt2x00dev->eeprom[i + 2]); 3518 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, &reg);
3519 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, 3519 *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg);
3520 (u32 *)&rt2x00dev->eeprom[i + 4]); 3520 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, &reg);
3521 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, 3521 *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg);
3522 (u32 *)&rt2x00dev->eeprom[i + 6]); 3522 rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, &reg);
3523 *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg);
3523 3524
3524 mutex_unlock(&rt2x00dev->csr_mutex); 3525 mutex_unlock(&rt2x00dev->csr_mutex);
3525} 3526}