diff options
author | Miaoqing Pan <miaoqing@qca.qualcomm.com> | 2015-03-31 22:19:57 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-04-07 13:15:01 -0400 |
commit | 61b559dea40ec1712be4a0ea712a2922a8f38588 (patch) | |
tree | afaa7ccd4fbc1e675c7a840532e30c288c23ed6c /drivers/net/wireless/ath/ath9k/hw.c | |
parent | fcc658dabf5ef0320de1fbb28a9478e265e60422 (diff) |
ath9k: add extra GPIO led support
ar9550 or later chips, the AR_GPIO_IN_OUT register only can
control GPIO[0:3]. For the extra GPIO, use standard GPIO calls
instead of WMAC internal registers.
Signed-off-by: Miaoqing Pan <miaoqing@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/hw.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index 5cdbdb038371..5e15e8e10ed3 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/time.h> | 20 | #include <linux/time.h> |
21 | #include <linux/bitops.h> | 21 | #include <linux/bitops.h> |
22 | #include <linux/etherdevice.h> | 22 | #include <linux/etherdevice.h> |
23 | #include <linux/gpio.h> | ||
23 | #include <asm/unaligned.h> | 24 | #include <asm/unaligned.h> |
24 | 25 | ||
25 | #include "hw.h" | 26 | #include "hw.h" |
@@ -2711,11 +2712,23 @@ void ath9k_hw_set_gpio(struct ath_hw *ah, u32 gpio, u32 val) | |||
2711 | if (AR_SREV_9271(ah)) | 2712 | if (AR_SREV_9271(ah)) |
2712 | val = ~val; | 2713 | val = ~val; |
2713 | 2714 | ||
2714 | REG_RMW(ah, AR_GPIO_IN_OUT, ((val & 1) << gpio), | 2715 | if ((1 << gpio) & AR_GPIO_OE_OUT_MASK) |
2715 | AR_GPIO_BIT(gpio)); | 2716 | REG_RMW(ah, AR_GPIO_IN_OUT, ((val & 1) << gpio), |
2717 | AR_GPIO_BIT(gpio)); | ||
2718 | else | ||
2719 | gpio_set_value(gpio, val & 1); | ||
2716 | } | 2720 | } |
2717 | EXPORT_SYMBOL(ath9k_hw_set_gpio); | 2721 | EXPORT_SYMBOL(ath9k_hw_set_gpio); |
2718 | 2722 | ||
2723 | void ath9k_hw_request_gpio(struct ath_hw *ah, u32 gpio, const char *label) | ||
2724 | { | ||
2725 | if (gpio >= ah->caps.num_gpio_pins) | ||
2726 | return; | ||
2727 | |||
2728 | gpio_request_one(gpio, GPIOF_DIR_OUT | GPIOF_INIT_LOW, label); | ||
2729 | } | ||
2730 | EXPORT_SYMBOL(ath9k_hw_request_gpio); | ||
2731 | |||
2719 | void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna) | 2732 | void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna) |
2720 | { | 2733 | { |
2721 | REG_WRITE(ah, AR_DEF_ANTENNA, (antenna & 0x7)); | 2734 | REG_WRITE(ah, AR_DEF_ANTENNA, (antenna & 0x7)); |