diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2011-09-14 17:50:23 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-10-03 14:40:40 -0400 |
commit | 35ff9b5a4d0c8881d85dc5874964460f858f7e2d (patch) | |
tree | 3376e3e071c2ea8d07794327ca48e72540d5778f | |
parent | cb49a34465aff5bb9c5209e2b8e775cead9712c7 (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.c | 17 |
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, ®); | 3512 | rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, ®); |
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, ®); |
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, ®); |
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, ®); |
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, ®); |
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 | } |