Commit 2ff6575b authored by Sujith's avatar Sujith Committed by John W. Linville

ath9k_htc: Handle IDLE LED properly

Switch LED off/on when handling CONF_CHANGE_IDLE.
Not doing this would leave the radio LED on even
though the chip would be in full sleep mode.
Signed-off-by: default avatarSujith <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent bc6fb356
...@@ -1099,7 +1099,7 @@ static int ath9k_htc_tx(struct ieee80211_hw *hw, struct sk_buff *skb) ...@@ -1099,7 +1099,7 @@ static int ath9k_htc_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
return 0; return 0;
} }
static int ath9k_htc_radio_enable(struct ieee80211_hw *hw) static int ath9k_htc_radio_enable(struct ieee80211_hw *hw, bool led)
{ {
struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_priv *priv = hw->priv;
struct ath_hw *ah = priv->ah; struct ath_hw *ah = priv->ah;
...@@ -1147,6 +1147,13 @@ static int ath9k_htc_radio_enable(struct ieee80211_hw *hw) ...@@ -1147,6 +1147,13 @@ static int ath9k_htc_radio_enable(struct ieee80211_hw *hw)
priv->tx_queues_stop = false; priv->tx_queues_stop = false;
spin_unlock_bh(&priv->tx_lock); spin_unlock_bh(&priv->tx_lock);
if (led) {
/* Enable LED */
ath9k_hw_cfg_output(ah, ah->led_pin,
AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
ath9k_hw_set_gpio(ah, ah->led_pin, 0);
}
ieee80211_wake_queues(hw); ieee80211_wake_queues(hw);
return ret; return ret;
...@@ -1158,13 +1165,13 @@ static int ath9k_htc_start(struct ieee80211_hw *hw) ...@@ -1158,13 +1165,13 @@ static int ath9k_htc_start(struct ieee80211_hw *hw)
int ret = 0; int ret = 0;
mutex_lock(&priv->mutex); mutex_lock(&priv->mutex);
ret = ath9k_htc_radio_enable(hw); ret = ath9k_htc_radio_enable(hw, false);
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
return ret; return ret;
} }
static void ath9k_htc_radio_disable(struct ieee80211_hw *hw) static void ath9k_htc_radio_disable(struct ieee80211_hw *hw, bool led)
{ {
struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_priv *priv = hw->priv;
struct ath_hw *ah = priv->ah; struct ath_hw *ah = priv->ah;
...@@ -1177,6 +1184,12 @@ static void ath9k_htc_radio_disable(struct ieee80211_hw *hw) ...@@ -1177,6 +1184,12 @@ static void ath9k_htc_radio_disable(struct ieee80211_hw *hw)
return; return;
} }
if (led) {
/* Disable LED */
ath9k_hw_set_gpio(ah, ah->led_pin, 1);
ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
}
/* Cancel all the running timers/work .. */ /* Cancel all the running timers/work .. */
cancel_work_sync(&priv->ps_work); cancel_work_sync(&priv->ps_work);
cancel_delayed_work_sync(&priv->ath9k_ani_work); cancel_delayed_work_sync(&priv->ath9k_ani_work);
...@@ -1217,7 +1230,7 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw) ...@@ -1217,7 +1230,7 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw)
struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_priv *priv = hw->priv;
mutex_lock(&priv->mutex); mutex_lock(&priv->mutex);
ath9k_htc_radio_disable(hw); ath9k_htc_radio_disable(hw, false);
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
} }
...@@ -1337,7 +1350,7 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed) ...@@ -1337,7 +1350,7 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed)
if (enable_radio) { if (enable_radio) {
ath9k_htc_setpower(priv, ATH9K_PM_AWAKE); ath9k_htc_setpower(priv, ATH9K_PM_AWAKE);
ath9k_htc_radio_enable(hw); ath9k_htc_radio_enable(hw, true);
ath_print(common, ATH_DBG_CONFIG, ath_print(common, ATH_DBG_CONFIG,
"not-idle: enabling radio\n"); "not-idle: enabling radio\n");
} }
...@@ -1389,10 +1402,9 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed) ...@@ -1389,10 +1402,9 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed)
if (priv->ps_idle) { if (priv->ps_idle) {
ath_print(common, ATH_DBG_CONFIG, ath_print(common, ATH_DBG_CONFIG,
"idle: disabling radio\n"); "idle: disabling radio\n");
ath9k_htc_radio_disable(hw); ath9k_htc_radio_disable(hw, true);
} }
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment