Commit 08fc5c1b authored by Vivek Natarajan's avatar Vivek Natarajan Committed by John W. Linville

ath9k: Enable LEDs for AR9287 chipsets.

Signed-off-by: default avatarVivek Natarajan <vnatarajan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent d340b1f0
...@@ -454,7 +454,8 @@ struct ath_ani { ...@@ -454,7 +454,8 @@ struct ath_ani {
/* LED Control */ /* LED Control */
/********************/ /********************/
#define ATH_LED_PIN 1 #define ATH_LED_PIN_DEF 1
#define ATH_LED_PIN_9287 8
#define ATH_LED_ON_DURATION_IDLE 350 /* in msecs */ #define ATH_LED_ON_DURATION_IDLE 350 /* in msecs */
#define ATH_LED_OFF_DURATION_IDLE 250 /* in msecs */ #define ATH_LED_OFF_DURATION_IDLE 250 /* in msecs */
......
...@@ -522,6 +522,7 @@ struct ath_hw { ...@@ -522,6 +522,7 @@ struct ath_hw {
u32 originalGain[22]; u32 originalGain[22];
int initPDADC; int initPDADC;
int PDADCdelta; int PDADCdelta;
u8 led_pin;
struct ar5416IniArray iniModes; struct ar5416IniArray iniModes;
struct ar5416IniArray iniCommon; struct ar5416IniArray iniCommon;
......
...@@ -968,9 +968,9 @@ static void ath_led_blink_work(struct work_struct *work) ...@@ -968,9 +968,9 @@ static void ath_led_blink_work(struct work_struct *work)
if ((sc->led_on_duration == ATH_LED_ON_DURATION_IDLE) || if ((sc->led_on_duration == ATH_LED_ON_DURATION_IDLE) ||
(sc->led_off_duration == ATH_LED_OFF_DURATION_IDLE)) (sc->led_off_duration == ATH_LED_OFF_DURATION_IDLE))
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 0); ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 0);
else else
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin,
(sc->sc_flags & SC_OP_LED_ON) ? 1 : 0); (sc->sc_flags & SC_OP_LED_ON) ? 1 : 0);
ieee80211_queue_delayed_work(sc->hw, ieee80211_queue_delayed_work(sc->hw,
...@@ -1002,7 +1002,7 @@ static void ath_led_brightness(struct led_classdev *led_cdev, ...@@ -1002,7 +1002,7 @@ static void ath_led_brightness(struct led_classdev *led_cdev,
case LED_OFF: case LED_OFF:
if (led->led_type == ATH_LED_ASSOC || if (led->led_type == ATH_LED_ASSOC ||
led->led_type == ATH_LED_RADIO) { led->led_type == ATH_LED_RADIO) {
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin,
(led->led_type == ATH_LED_RADIO)); (led->led_type == ATH_LED_RADIO));
sc->sc_flags &= ~SC_OP_LED_ASSOCIATED; sc->sc_flags &= ~SC_OP_LED_ASSOCIATED;
if (led->led_type == ATH_LED_RADIO) if (led->led_type == ATH_LED_RADIO)
...@@ -1017,7 +1017,7 @@ static void ath_led_brightness(struct led_classdev *led_cdev, ...@@ -1017,7 +1017,7 @@ static void ath_led_brightness(struct led_classdev *led_cdev,
ieee80211_queue_delayed_work(sc->hw, ieee80211_queue_delayed_work(sc->hw,
&sc->ath_led_blink_work, 0); &sc->ath_led_blink_work, 0);
} else if (led->led_type == ATH_LED_RADIO) { } else if (led->led_type == ATH_LED_RADIO) {
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 0); ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 0);
sc->sc_flags |= SC_OP_LED_ON; sc->sc_flags |= SC_OP_LED_ON;
} else { } else {
sc->led_on_cnt++; sc->led_on_cnt++;
...@@ -1062,7 +1062,7 @@ static void ath_deinit_leds(struct ath_softc *sc) ...@@ -1062,7 +1062,7 @@ static void ath_deinit_leds(struct ath_softc *sc)
ath_unregister_led(&sc->tx_led); ath_unregister_led(&sc->tx_led);
ath_unregister_led(&sc->rx_led); ath_unregister_led(&sc->rx_led);
ath_unregister_led(&sc->radio_led); ath_unregister_led(&sc->radio_led);
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 1); ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
} }
static void ath_init_leds(struct ath_softc *sc) static void ath_init_leds(struct ath_softc *sc)
...@@ -1070,11 +1070,16 @@ static void ath_init_leds(struct ath_softc *sc) ...@@ -1070,11 +1070,16 @@ static void ath_init_leds(struct ath_softc *sc)
char *trigger; char *trigger;
int ret; int ret;
if (AR_SREV_9287(sc->sc_ah))
sc->sc_ah->led_pin = ATH_LED_PIN_9287;
else
sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
/* Configure gpio 1 for output */ /* Configure gpio 1 for output */
ath9k_hw_cfg_output(sc->sc_ah, ATH_LED_PIN, ath9k_hw_cfg_output(sc->sc_ah, sc->sc_ah->led_pin,
AR_GPIO_OUTPUT_MUX_AS_OUTPUT); AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
/* LED off, active low */ /* LED off, active low */
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 1); ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
INIT_DELAYED_WORK(&sc->ath_led_blink_work, ath_led_blink_work); INIT_DELAYED_WORK(&sc->ath_led_blink_work, ath_led_blink_work);
...@@ -1153,9 +1158,9 @@ void ath_radio_enable(struct ath_softc *sc) ...@@ -1153,9 +1158,9 @@ void ath_radio_enable(struct ath_softc *sc)
ath9k_hw_set_interrupts(ah, sc->imask); ath9k_hw_set_interrupts(ah, sc->imask);
/* Enable LED */ /* Enable LED */
ath9k_hw_cfg_output(ah, ATH_LED_PIN, ath9k_hw_cfg_output(ah, ah->led_pin,
AR_GPIO_OUTPUT_MUX_AS_OUTPUT); AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
ath9k_hw_set_gpio(ah, ATH_LED_PIN, 0); ath9k_hw_set_gpio(ah, ah->led_pin, 0);
ieee80211_wake_queues(sc->hw); ieee80211_wake_queues(sc->hw);
ath9k_ps_restore(sc); ath9k_ps_restore(sc);
...@@ -1171,8 +1176,8 @@ void ath_radio_disable(struct ath_softc *sc) ...@@ -1171,8 +1176,8 @@ void ath_radio_disable(struct ath_softc *sc)
ieee80211_stop_queues(sc->hw); ieee80211_stop_queues(sc->hw);
/* Disable LED */ /* Disable LED */
ath9k_hw_set_gpio(ah, ATH_LED_PIN, 1); ath9k_hw_set_gpio(ah, ah->led_pin, 1);
ath9k_hw_cfg_gpio_input(ah, ATH_LED_PIN); ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
/* Disable interrupts */ /* Disable interrupts */
ath9k_hw_set_interrupts(ah, 0); ath9k_hw_set_interrupts(ah, 0);
......
...@@ -236,7 +236,7 @@ static int ath_pci_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -236,7 +236,7 @@ static int ath_pci_suspend(struct pci_dev *pdev, pm_message_t state)
struct ath_wiphy *aphy = hw->priv; struct ath_wiphy *aphy = hw->priv;
struct ath_softc *sc = aphy->sc; struct ath_softc *sc = aphy->sc;
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 1); ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
pci_save_state(pdev); pci_save_state(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
...@@ -269,9 +269,9 @@ static int ath_pci_resume(struct pci_dev *pdev) ...@@ -269,9 +269,9 @@ static int ath_pci_resume(struct pci_dev *pdev)
pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
/* Enable LED */ /* Enable LED */
ath9k_hw_cfg_output(sc->sc_ah, ATH_LED_PIN, ath9k_hw_cfg_output(sc->sc_ah, sc->sc_ah->led_pin,
AR_GPIO_OUTPUT_MUX_AS_OUTPUT); AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 1); ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
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