mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/include/linux/ath9k_platform.h
 | |
| +++ b/include/linux/ath9k_platform.h
 | |
| @@ -34,6 +34,8 @@ struct ath9k_platform_data {
 | |
|  	bool endian_check;
 | |
|  	bool is_clk_25mhz;
 | |
|  	bool tx_gain_buffalo;
 | |
| +	bool disable_2ghz;
 | |
| +	bool disable_5ghz;
 | |
|  
 | |
|  	int (*get_mac_revision)(void);
 | |
|  	int (*external_reset)(void);
 | |
| --- a/drivers/net/wireless/ath/ath9k/hw.c
 | |
| +++ b/drivers/net/wireless/ath/ath9k/hw.c
 | |
| @@ -2409,17 +2409,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
 | |
|  	}
 | |
|  
 | |
|  	eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE);
 | |
| -	if ((eeval & (AR5416_OPFLAGS_11G | AR5416_OPFLAGS_11A)) == 0) {
 | |
| -		ath_err(common,
 | |
| -			"no band has been marked as supported in EEPROM\n");
 | |
| -		return -EINVAL;
 | |
| +
 | |
| +	if (eeval & AR5416_OPFLAGS_11A) {
 | |
| +		if (ah->disable_5ghz)
 | |
| +			ath_warn(common, "disabling 5GHz band\n");
 | |
| +		else
 | |
| +			pCap->hw_caps |= ATH9K_HW_CAP_5GHZ;
 | |
|  	}
 | |
|  
 | |
| -	if (eeval & AR5416_OPFLAGS_11A)
 | |
| -		pCap->hw_caps |= ATH9K_HW_CAP_5GHZ;
 | |
| +	if (eeval & AR5416_OPFLAGS_11G) {
 | |
| +		if (ah->disable_2ghz)
 | |
| +			ath_warn(common, "disabling 2GHz band\n");
 | |
| +		else
 | |
| +			pCap->hw_caps |= ATH9K_HW_CAP_2GHZ;
 | |
| +	}
 | |
|  
 | |
| -	if (eeval & AR5416_OPFLAGS_11G)
 | |
| -		pCap->hw_caps |= ATH9K_HW_CAP_2GHZ;
 | |
| +	if ((pCap->hw_caps & (ATH9K_HW_CAP_2GHZ | ATH9K_HW_CAP_5GHZ)) == 0) {
 | |
| +		ath_err(common, "both bands are disabled\n");
 | |
| +		return -EINVAL;
 | |
| +	}
 | |
|  
 | |
|  	if (AR_SREV_9485(ah) ||
 | |
|  	    AR_SREV_9285(ah) ||
 | |
| --- a/drivers/net/wireless/ath/ath9k/hw.h
 | |
| +++ b/drivers/net/wireless/ath/ath9k/hw.h
 | |
| @@ -915,6 +915,8 @@ struct ath_hw {
 | |
|  	bool is_clk_25mhz;
 | |
|  	int (*get_mac_revision)(void);
 | |
|  	int (*external_reset)(void);
 | |
| +	bool disable_2ghz;
 | |
| +	bool disable_5ghz;
 | |
|  
 | |
|  	const struct firmware *eeprom_blob;
 | |
|  };
 | |
| --- a/drivers/net/wireless/ath/ath9k/init.c
 | |
| +++ b/drivers/net/wireless/ath/ath9k/init.c
 | |
| @@ -719,6 +719,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;
 | |
| +		ah->disable_2ghz = pdata->disable_2ghz;
 | |
| +		ah->disable_5ghz = pdata->disable_5ghz;
 | |
|  		if (!pdata->endian_check)
 | |
|  			ah->ah_flags |= AH_NO_EEP_SWAP;
 | |
|  	}
 |