ath9k: Fix RFKILL bugs
This patch fixes 2 issues in RFKILL: * Calling wiphy_rfkill_stop_polling() in ath9k_stop would mean that the driver cannot report HW status when the radio is re-enabled. Move this to ath_detach(). * Calling ath_radio_{enable/disable} without checking the current state results in ath_radio_enable() being called repeatedly for every invocation of rfkill_poll(). This is not needed in any case since wiphy_rfkill_set_hw_state() would call ->stop() if the radio has been disabled. Signed-off-by: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
33e2fb2f2b
commit
e31f7b96f0
|
@ -1226,11 +1226,6 @@ static void ath9k_rfkill_poll_state(struct ieee80211_hw *hw)
|
||||||
bool blocked = !!ath_is_rfkill_set(sc);
|
bool blocked = !!ath_is_rfkill_set(sc);
|
||||||
|
|
||||||
wiphy_rfkill_set_hw_state(hw->wiphy, blocked);
|
wiphy_rfkill_set_hw_state(hw->wiphy, blocked);
|
||||||
|
|
||||||
if (blocked)
|
|
||||||
ath_radio_disable(sc);
|
|
||||||
else
|
|
||||||
ath_radio_enable(sc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath_start_rfkill_poll(struct ath_softc *sc)
|
static void ath_start_rfkill_poll(struct ath_softc *sc)
|
||||||
|
@ -1260,6 +1255,7 @@ void ath_detach(struct ath_softc *sc)
|
||||||
DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");
|
DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");
|
||||||
|
|
||||||
ath_deinit_leds(sc);
|
ath_deinit_leds(sc);
|
||||||
|
wiphy_rfkill_stop_polling(sc->hw->wiphy);
|
||||||
|
|
||||||
for (i = 0; i < sc->num_sec_wiphy; i++) {
|
for (i = 0; i < sc->num_sec_wiphy; i++) {
|
||||||
struct ath_wiphy *aphy = sc->sec_wiphy[i];
|
struct ath_wiphy *aphy = sc->sec_wiphy[i];
|
||||||
|
@ -2166,8 +2162,6 @@ static void ath9k_stop(struct ieee80211_hw *hw)
|
||||||
} else
|
} else
|
||||||
sc->rx.rxlink = NULL;
|
sc->rx.rxlink = NULL;
|
||||||
|
|
||||||
wiphy_rfkill_stop_polling(sc->hw->wiphy);
|
|
||||||
|
|
||||||
/* disable HAL and put h/w to sleep */
|
/* disable HAL and put h/w to sleep */
|
||||||
ath9k_hw_disable(sc->sc_ah);
|
ath9k_hw_disable(sc->sc_ah);
|
||||||
ath9k_hw_configpcipowersave(sc->sc_ah, 1, 1);
|
ath9k_hw_configpcipowersave(sc->sc_ah, 1, 1);
|
||||||
|
|
Loading…
Reference in a new issue