Răsfoiți Sursa

ath9k: fix custom regulatory call position

ath_regd_init() needs to be called with the wiphy already
properly set with the bands. Without this the custom regulatory
settings were not taking effect, and the device would get
the default channel settings from ath9k_[25]ghz_chantable.

Reported-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Luis R. Rodriguez 16 ani în urmă
părinte
comite
c26c2e576d
1 a modificat fișierele cu 7 adăugiri și 4 ștergeri
  1. 7 4
      drivers/net/wireless/ath/ath9k/main.c

+ 7 - 4
drivers/net/wireless/ath/ath9k/main.c

@@ -1430,8 +1430,6 @@ static int ath_init(u16 devid, struct ath_softc *sc)
 	for (i = 0; i < sc->keymax; i++)
 	for (i = 0; i < sc->keymax; i++)
 		ath9k_hw_keyreset(ah, (u16) i);
 		ath9k_hw_keyreset(ah, (u16) i);
 
 
-	error = ath_regd_init(&sc->sc_ah->regulatory, sc->hw->wiphy,
-			      ath9k_reg_notifier);
 	if (error)
 	if (error)
 		goto bad;
 		goto bad;
 
 
@@ -1644,14 +1642,19 @@ int ath_attach(u16 devid, struct ath_softc *sc)
 	if (error != 0)
 	if (error != 0)
 		return error;
 		return error;
 
 
-	reg = &sc->sc_ah->regulatory;
-
 	/* get mac address from hardware and set in mac80211 */
 	/* get mac address from hardware and set in mac80211 */
 
 
 	SET_IEEE80211_PERM_ADDR(hw, sc->sc_ah->macaddr);
 	SET_IEEE80211_PERM_ADDR(hw, sc->sc_ah->macaddr);
 
 
 	ath_set_hw_capab(sc, hw);
 	ath_set_hw_capab(sc, hw);
 
 
+	error = ath_regd_init(&sc->sc_ah->regulatory, sc->hw->wiphy,
+			      ath9k_reg_notifier);
+	if (error)
+		return error;
+
+	reg = &sc->sc_ah->regulatory;
+
 	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
 	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
 		setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
 		setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
 		if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes))
 		if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes))