diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index 8ef8735..ea5713a 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c @@ -360,6 +360,10 @@ static void ath5k_led_enable(struct ath5k_softc *sc); static void ath5k_led_off(struct ath5k_softc *sc); static void ath5k_unregister_leds(struct ath5k_softc *sc); +/* RFKILL functions */ +static int ath5k_init_rfkill(struct ath5k_softc *sc); +static void ath5k_rfkill_off(struct ath5k_softc *sc); + /* * Module init/exit functions */ @@ -801,6 +805,7 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw) goto err_queues; } + ath5k_init_rfkill(sc); ath5k_init_leds(sc); return 0; @@ -2571,6 +2576,22 @@ ath5k_unregister_leds(struct ath5k_softc *sc) ath5k_unregister_led(&sc->tx_led); } +static int +ath5k_init_rfkill(struct ath5k_softc *sc) +{ + sc->rfkill_pin = 0; + sc->rfkill_on = 0; + + ath5k_hw_set_gpio_output(sc->ah, sc->rfkill_pin); + ath5k_rfkill_off(sc); + return 0; +} + +static void +ath5k_rfkill_off(struct ath5k_softc *sc) +{ + ath5k_hw_set_gpio(sc->ah, sc->rfkill_pin, !sc->rfkill_on); +} static int ath5k_init_leds(struct ath5k_softc *sc) diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h index facc60d..3071760 100644 --- a/drivers/net/wireless/ath5k/base.h +++ b/drivers/net/wireless/ath5k/base.h @@ -151,6 +151,9 @@ struct ath5k_softc { led_on, /* pin setting for LED on */ led_off; /* off time for current blink */ + u8 rfkill_pin; /* GPIO pin for rfkill */ + u8 rfkill_on; /* polarity for rfkill */ + struct tasklet_struct restq; /* reset tasklet */ unsigned int rxbufsize; /* rx size based on mtu */