| From daabead1c32f331edcfb255fd973411c667977e8 Mon Sep 17 00:00:00 2001 |
| From: Larry Finger <Larry.Finger@lwfinger.net> |
| Date: Wed, 14 Sep 2011 16:50:23 -0500 |
| Subject: rtl2800usb: Fix incorrect storage of MAC address on |
| big-endian platforms |
| |
| From: Larry Finger <Larry.Finger@lwfinger.net> |
| |
| 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> |
| |
| --- |
| drivers/net/wireless/rt2x00/rt2800lib.c | 17 +++++++++-------- |
| 1 file changed, 9 insertions(+), 8 deletions(-) |
| |
| --- a/drivers/net/wireless/rt2x00/rt2800lib.c |
| +++ b/drivers/net/wireless/rt2x00/rt2800lib.c |
| @@ -1694,14 +1694,15 @@ static void rt2800_efuse_read(struct rt2 |
| rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, ®); |
| |
| /* Apparently the data is read from end to start */ |
| - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, |
| - (u32 *)&rt2x00dev->eeprom[i]); |
| - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, |
| - (u32 *)&rt2x00dev->eeprom[i + 2]); |
| - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, |
| - (u32 *)&rt2x00dev->eeprom[i + 4]); |
| - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, |
| - (u32 *)&rt2x00dev->eeprom[i + 6]); |
| + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, ®); |
| + /* The returned value is in CPU order, but eeprom is le */ |
| + rt2x00dev->eeprom[i] = cpu_to_le32(reg); |
| + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, ®); |
| + *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg); |
| + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, ®); |
| + *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg); |
| + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, ®); |
| + *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg); |
| |
| mutex_unlock(&rt2x00dev->csr_mutex); |
| } |