| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- --- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
- @@ -262,7 +262,7 @@ static int ath9k_hw_def_check_eeprom(str
- {
- struct ar5416_eeprom_def *eep = &ah->eeprom.def;
- struct ath_common *common = ath9k_hw_common(ah);
- - u16 *eepdata, temp, magic, magic2;
- + u16 *eepdata, temp, magic;
- u32 sum = 0, el;
- bool need_swap = false;
- int i, addr, size;
- @@ -272,27 +272,16 @@ static int ath9k_hw_def_check_eeprom(str
- return false;
- }
-
- - if (!ath9k_hw_use_flash(ah)) {
- - ath_dbg(common, EEPROM, "Read Magic = 0x%04X\n", magic);
- -
- - if (magic != AR5416_EEPROM_MAGIC) {
- - magic2 = swab16(magic);
- -
- - if (magic2 == AR5416_EEPROM_MAGIC) {
- - size = sizeof(struct ar5416_eeprom_def);
- - need_swap = true;
- - eepdata = (u16 *) (&ah->eeprom);
- -
- - for (addr = 0; addr < size / sizeof(u16); addr++) {
- - temp = swab16(*eepdata);
- - *eepdata = temp;
- - eepdata++;
- - }
- - } else {
- - ath_err(common,
- - "Invalid EEPROM Magic. Endianness mismatch.\n");
- - return -EINVAL;
- - }
- + if (swab16(magic) == AR5416_EEPROM_MAGIC &&
- + !(ah->ah_flags & AH_NO_EEP_SWAP)) {
- + size = sizeof(struct ar5416_eeprom_def);
- + need_swap = true;
- + eepdata = (u16 *) (&ah->eeprom);
- +
- + for (addr = 0; addr < size / sizeof(u16); addr++) {
- + temp = swab16(*eepdata);
- + *eepdata = temp;
- + eepdata++;
- }
- }
-
- --- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
- @@ -57,7 +57,7 @@ static bool ath9k_hw_4k_fill_eeprom(stru
- {
- struct ath_common *common = ath9k_hw_common(ah);
-
- - if (!ath9k_hw_use_flash(ah)) {
- + if (!(ah->ah_flags & AH_NO_EEP_SWAP)) {
- ath_dbg(common, EEPROM, "Reading from EEPROM, not flash\n");
- }
-
- --- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
- +++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
- @@ -60,7 +60,7 @@ static bool ath9k_hw_ar9287_fill_eeprom(
- {
- struct ath_common *common = ath9k_hw_common(ah);
-
- - if (!ath9k_hw_use_flash(ah)) {
- + if (!(ah->ah_flags & AH_NO_EEP_SWAP)) {
- ath_dbg(common, EEPROM, "Reading from EEPROM, not flash\n");
- }
-
- --- a/drivers/net/wireless/ath/ath9k/hw.h
- +++ b/drivers/net/wireless/ath/ath9k/hw.h
- @@ -739,6 +739,7 @@ enum ath_cal_list {
- #define AH_USE_EEPROM 0x1
- #define AH_UNPLUGGED 0x2 /* The card has been physically removed. */
- #define AH_FASTCC 0x4
- +#define AH_NO_EEP_SWAP 0x8 /* Do not swap EEPROM data */
-
- struct ath_hw {
- struct ath_ops reg_ops;
- --- a/drivers/net/wireless/ath/ath9k/init.c
- +++ b/drivers/net/wireless/ath/ath9k/init.c
- @@ -613,6 +613,8 @@ static int ath9k_init_softc(u16 devid, s
- ah->is_clk_25mhz = pdata->is_clk_25mhz;
- ah->get_mac_revision = pdata->get_mac_revision;
- ah->external_reset = pdata->external_reset;
- + if (!pdata->endian_check)
- + ah->ah_flags |= AH_NO_EEP_SWAP;
- }
-
- common = ath9k_hw_common(ah);
- --- a/include/linux/ath9k_platform.h
- +++ b/include/linux/ath9k_platform.h
- @@ -31,6 +31,7 @@ struct ath9k_platform_data {
- u32 gpio_mask;
- u32 gpio_val;
-
- + bool endian_check;
- bool is_clk_25mhz;
- int (*get_mac_revision)(void);
- int (*external_reset)(void);
|