aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/hw.c
diff options
context:
space:
mode:
authorMiaoqing Pan <miaoqing@qca.qualcomm.com>2015-03-31 22:19:57 -0400
committerKalle Valo <kvalo@codeaurora.org>2015-04-07 13:15:01 -0400
commit61b559dea40ec1712be4a0ea712a2922a8f38588 (patch)
treeafaa7ccd4fbc1e675c7a840532e30c288c23ed6c /drivers/net/wireless/ath/ath9k/hw.c
parentfcc658dabf5ef0320de1fbb28a9478e265e60422 (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.c17
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}
2717EXPORT_SYMBOL(ath9k_hw_set_gpio); 2721EXPORT_SYMBOL(ath9k_hw_set_gpio);
2718 2722
2723void 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}
2730EXPORT_SYMBOL(ath9k_hw_request_gpio);
2731
2719void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna) 2732void 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));