71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/include/linux/ath9k_platform.h
 | 
						|
+++ b/include/linux/ath9k_platform.h
 | 
						|
@@ -33,6 +33,9 @@ struct ath9k_platform_data {
 | 
						|
 
 | 
						|
 	bool endian_check;
 | 
						|
 	bool is_clk_25mhz;
 | 
						|
+	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
 | 
						|
@@ -2432,17 +2432,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
 | 
						|
@@ -925,6 +925,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
 | 
						|
@@ -665,6 +665,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;
 | 
						|
 	}
 |