mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 13:34:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- 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
 | |
| @@ -747,6 +747,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
 | |
| @@ -631,6 +631,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);
 |