123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- From: Felix Fietkau <[email protected]>
- Date: Sat, 18 Oct 2014 18:27:23 +0200
- Subject: [PATCH] ath9k: allow disabling bands via platform data
- Some devices have multiple bands enables in the EEPROM data, even though
- they are only calibrated for one. Allow platform data to disable
- unsupported bands.
- Signed-off-by: Gabor Juhos <[email protected]>
- Signed-off-by: Felix Fietkau <[email protected]>
- ---
- --- a/drivers/net/wireless/ath/ath9k/hw.c
- +++ b/drivers/net/wireless/ath/ath9k/hw.c
- @@ -2344,17 +2344,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
- @@ -930,6 +930,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
- @@ -531,6 +531,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;
- }
- --- 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);
|