ath5k: enable hardware LEDs
Cardbus and some PCI cards use hardware LEDs rather than software GPIOs. Program them with the proper blink patterns when idle, scanning or associated. Fixes http://bugzilla.kernel.org/show_bug.cgi?id=13288. Tested-by: Frans Pop <elendil@planet.nl> Tested-by: Mark Hindley <mark@hindley.org.uk> Signed-off-by: Bob Copeland <me@bobcopeland.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
46026e8f48
commit
f0f3d388ba
|
@ -319,6 +319,9 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
|
|||
|
||||
ath5k_hw_rfgain_opt_init(ah);
|
||||
|
||||
/* turn on HW LEDs */
|
||||
ath5k_hw_set_ledstate(ah, AR5K_LED_INIT);
|
||||
|
||||
return ah;
|
||||
err_free:
|
||||
kfree(ah);
|
||||
|
|
|
@ -248,6 +248,8 @@ static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
|
|||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_bss_conf *bss_conf,
|
||||
u32 changes);
|
||||
static void ath5k_sw_scan_start(struct ieee80211_hw *hw);
|
||||
static void ath5k_sw_scan_complete(struct ieee80211_hw *hw);
|
||||
|
||||
static const struct ieee80211_ops ath5k_hw_ops = {
|
||||
.tx = ath5k_tx,
|
||||
|
@ -265,6 +267,8 @@ static const struct ieee80211_ops ath5k_hw_ops = {
|
|||
.set_tsf = ath5k_set_tsf,
|
||||
.reset_tsf = ath5k_reset_tsf,
|
||||
.bss_info_changed = ath5k_bss_info_changed,
|
||||
.sw_scan_start = ath5k_sw_scan_start,
|
||||
.sw_scan_complete = ath5k_sw_scan_complete,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -3167,6 +3171,8 @@ static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
|
|||
sc->assoc = bss_conf->assoc;
|
||||
if (sc->opmode == NL80211_IFTYPE_STATION)
|
||||
set_beacon_filter(hw, sc->assoc);
|
||||
ath5k_hw_set_ledstate(sc->ah, sc->assoc ?
|
||||
AR5K_LED_ASSOC : AR5K_LED_INIT);
|
||||
}
|
||||
|
||||
if (changes & BSS_CHANGED_BEACON &&
|
||||
|
@ -3179,3 +3185,17 @@ static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
|
|||
unlock:
|
||||
mutex_unlock(&sc->lock);
|
||||
}
|
||||
|
||||
static void ath5k_sw_scan_start(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct ath5k_softc *sc = hw->priv;
|
||||
if (!sc->assoc)
|
||||
ath5k_hw_set_ledstate(sc->ah, AR5K_LED_SCAN);
|
||||
}
|
||||
|
||||
static void ath5k_sw_scan_complete(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct ath5k_softc *sc = hw->priv;
|
||||
ath5k_hw_set_ledstate(sc->ah, sc->assoc ?
|
||||
AR5K_LED_ASSOC : AR5K_LED_INIT);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue