--- a/arch/mips/ath79/dev-wmac.c +++ b/arch/mips/ath79/dev-wmac.c @@ -18,9 +18,11 @@ #include #include #include +#include #include #include +#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 *label; + int err; + + label = kasprintf(GFP_KERNEL, "external LNA%u", chain); + if (!label) + return -ENOMEM; + + 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);