aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx/patches-4.1/613-MIPS-ath79-add-ath79_wmac_setup_ext_lna_gpio-helper.patch
blob: a832bf84ceb0249e60745aadca6b7c837ff267b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
--- a/arch/mips/ath79/dev-wmac.c
+++ b/arch/mips/ath79/dev-wmac.c
@@ -18,9 +18,11 @@
 #include <linux/etherdevice.h>
 #include <linux/platform_device.h>
 #include <linux/ath9k_platform.h>
+#include <linux/gpio.h>
 
 #include <asm/mach-ath79/ath79.h>
 #include <asm/mach-ath79/ar71xx_regs.h>
+#include "common.h"
 #include "dev-wmac.h"
 
 static u8 ath79_wmac_mac[ETH_ALEN];
@@ -313,6 +315,51 @@ void __init ath79_wmac_set_tx_gain_buffa
 	ath79_wmac_data.tx_gain_buffalo = true;
 }
 
+static int ath79_request_ext_lna_gpio(unsigned chain, int gpio)
+{
+	char buf[32];
+	char *label;
+	int err;
+
+	scnprintf(buf, sizeof(buf), "external LNA%u", chain);
+	label = kstrdup(buf, GFP_KERNEL);
+
+	err = gpio_request_one(gpio, GPIOF_DIR_OUT | GPIOF_INIT_LOW, label);
+	if (err) {
+		pr_err("unable to request GPIO%d for external LNA%u\n",
+			gpio, chain);
+		kfree(label);
+	}
+
+	return err;
+}
+
+static void ar934x_set_ext_lna_gpio(unsigned chain, int gpio)
+{
+	unsigned int sel;
+	int err;
+
+	if (WARN_ON(chain > 1))
+		return;
+
+	err = ath79_request_ext_lna_gpio(chain, gpio);
+	if (err)
+		return;
+
+	if (chain == 0)
+		sel = AR934X_GPIO_OUT_EXT_LNA0;
+	else
+		sel = AR934X_GPIO_OUT_EXT_LNA1;
+
+	ath79_gpio_output_select(gpio, sel);
+}
+
+void __init ath79_wmac_set_ext_lna_gpio(unsigned chain, int gpio)
+{
+	if (soc_is_ar934x())
+		ar934x_set_ext_lna_gpio(chain, gpio);
+}
+
 void __init ath79_register_wmac(u8 *cal_data, u8 *mac_addr)
 {
 	if (soc_is_ar913x())
--- a/arch/mips/ath79/dev-wmac.h
+++ b/arch/mips/ath79/dev-wmac.h
@@ -17,6 +17,7 @@ void ath79_register_wmac_simple(void);
 void ath79_wmac_disable_2ghz(void);
 void ath79_wmac_disable_5ghz(void);
 void ath79_wmac_set_tx_gain_buffalo(void);
+void ath79_wmac_set_ext_lna_gpio(unsigned chain, int gpio);
 
 bool ar93xx_wmac_read_mac_address(u8 *dest);