Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e31f7b96 authored by Sujith's avatar Sujith Committed by John W. Linville
Browse files

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: default avatarSujith <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarVasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 33e2fb2f
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -1226,11 +1226,6 @@ static void ath9k_rfkill_poll_state(struct ieee80211_hw *hw)
	bool blocked = !!ath_is_rfkill_set(sc);

	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)
@@ -1260,6 +1255,7 @@ void ath_detach(struct ath_softc *sc)
	DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");

	ath_deinit_leds(sc);
	wiphy_rfkill_stop_polling(sc->hw->wiphy);

	for (i = 0; i < sc->num_sec_wiphy; i++) {
		struct ath_wiphy *aphy = sc->sec_wiphy[i];
@@ -2166,8 +2162,6 @@ static void ath9k_stop(struct ieee80211_hw *hw)
	} else
		sc->rx.rxlink = NULL;

	wiphy_rfkill_stop_polling(sc->hw->wiphy);

	/* disable HAL and put h/w to sleep */
	ath9k_hw_disable(sc->sc_ah);
	ath9k_hw_configpcipowersave(sc->sc_ah, 1, 1);