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);
|
ath5k_hw_rfgain_opt_init(ah);
|
||||||
|
|
||||||
|
/* turn on HW LEDs */
|
||||||
|
ath5k_hw_set_ledstate(ah, AR5K_LED_INIT);
|
||||||
|
|
||||||
return ah;
|
return ah;
|
||||||
err_free:
|
err_free:
|
||||||
kfree(ah);
|
kfree(ah);
|
||||||
|
|
|
@ -248,6 +248,8 @@ static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct ieee80211_bss_conf *bss_conf,
|
struct ieee80211_bss_conf *bss_conf,
|
||||||
u32 changes);
|
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 = {
|
static const struct ieee80211_ops ath5k_hw_ops = {
|
||||||
.tx = ath5k_tx,
|
.tx = ath5k_tx,
|
||||||
|
@ -265,6 +267,8 @@ static const struct ieee80211_ops ath5k_hw_ops = {
|
||||||
.set_tsf = ath5k_set_tsf,
|
.set_tsf = ath5k_set_tsf,
|
||||||
.reset_tsf = ath5k_reset_tsf,
|
.reset_tsf = ath5k_reset_tsf,
|
||||||
.bss_info_changed = ath5k_bss_info_changed,
|
.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;
|
sc->assoc = bss_conf->assoc;
|
||||||
if (sc->opmode == NL80211_IFTYPE_STATION)
|
if (sc->opmode == NL80211_IFTYPE_STATION)
|
||||||
set_beacon_filter(hw, sc->assoc);
|
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 &&
|
if (changes & BSS_CHANGED_BEACON &&
|
||||||
|
@ -3179,3 +3185,17 @@ static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
unlock:
|
unlock:
|
||||||
mutex_unlock(&sc->lock);
|
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