+--- 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