diff options
Diffstat (limited to 'package/mac80211/patches/550-ath9k-enable-2GHz-band-only-if-the-device-supports.patch')
-rw-r--r-- | package/mac80211/patches/550-ath9k-enable-2GHz-band-only-if-the-device-supports.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/package/mac80211/patches/550-ath9k-enable-2GHz-band-only-if-the-device-supports.patch b/package/mac80211/patches/550-ath9k-enable-2GHz-band-only-if-the-device-supports.patch index dca58ed1f6..ed07822e7c 100644 --- a/package/mac80211/patches/550-ath9k-enable-2GHz-band-only-if-the-device-supports.patch +++ b/package/mac80211/patches/550-ath9k-enable-2GHz-band-only-if-the-device-supports.patch @@ -1,3 +1,59 @@ +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -979,7 +979,10 @@ int ath9k_hw_init(struct ath_hw *ah) + return r; + + ath9k_hw_init_mode_gain_regs(ah); +- ath9k_hw_fill_cap_info(ah); ++ r = ath9k_hw_fill_cap_info(ah); ++ if (r) ++ return r; ++ + ath9k_hw_init_11a_eeprom_fix(ah); + + r = ath9k_hw_init_macaddr(ah); +@@ -3115,7 +3118,7 @@ EXPORT_SYMBOL(ath9k_hw_set_sta_beacon_ti + /* HW Capabilities */ + /*******************/ + +-void ath9k_hw_fill_cap_info(struct ath_hw *ah) ++int ath9k_hw_fill_cap_info(struct ath_hw *ah) + { + struct ath9k_hw_capabilities *pCap = &ah->caps; + struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah); +@@ -3146,6 +3149,12 @@ void ath9k_hw_fill_cap_info(struct ath_h + } + + eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE); ++ if ((eeval & (AR5416_OPFLAGS_11G | AR5416_OPFLAGS_11A)) == 0) { ++ ath_print(common, ATH_DBG_FATAL, ++ "no band has been marked as supported in EEPROM.\n"); ++ return -EINVAL; ++ } ++ + bitmap_zero(pCap->wireless_modes, ATH9K_MODE_MAX); + + if (eeval & AR5416_OPFLAGS_11A) { +@@ -3305,6 +3314,8 @@ void ath9k_hw_fill_cap_info(struct ath_h + } else { + btcoex_hw->scheme = ATH_BTCOEX_CFG_NONE; + } ++ ++ return 0; + } + + bool ath9k_hw_getcapability(struct ath_hw *ah, enum ath9k_capability_type type, +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -619,7 +619,7 @@ void ath9k_hw_detach(struct ath_hw *ah); + int ath9k_hw_init(struct ath_hw *ah); + int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, + bool bChannelChange); +-void ath9k_hw_fill_cap_info(struct ath_hw *ah); ++int ath9k_hw_fill_cap_info(struct ath_hw *ah); + bool ath9k_hw_getcapability(struct ath_hw *ah, enum ath9k_capability_type type, + u32 capability, u32 *result); + bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type, --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1805,13 +1805,15 @@ static int ath_init_softc(u16 devid, str |