From 03d213eff1d1ea0c4e7e3e47a89d292dfc83081a Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 3 Nov 2010 14:55:53 +0000 Subject: ar71xx: improve the wndr3700 quirks - move most of the code out of ath9k and instead allow the platform device to specify gpio overrides - fixes 5ghz signal strength issues git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23822 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c | 4 +++- .../ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c | 21 +++++++++++++++++---- .../files/arch/mips/ar71xx/dev-ar913x-wmac.c | 4 +++- .../ar71xx/files/include/linux/ath9k_platform.h | 22 ++++++++++++++++------ 4 files changed, 39 insertions(+), 12 deletions(-) (limited to 'target') diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c index 2342d7f7ea..e773702e14 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c @@ -18,7 +18,9 @@ #include "dev-ap91-pci.h" #include "pci-ath9k-fixup.h" -static struct ath9k_platform_data ap91_wmac_data; +static struct ath9k_platform_data ap91_wmac_data = { + .led_pin = -1, +}; static char ap91_wmac_mac[6]; static struct ar71xx_pci_irq ap91_pci_irqs[] __initdata = { diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c index 2436491b4e..1fd40bb628 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c @@ -18,8 +18,12 @@ #include "dev-ap94-pci.h" #include "pci-ath9k-fixup.h" -static struct ath9k_platform_data ap94_wmac0_data; -static struct ath9k_platform_data ap94_wmac1_data; +static struct ath9k_platform_data ap94_wmac0_data = { + .led_pin = -1, +}; +static struct ath9k_platform_data ap94_wmac1_data = { + .led_pin = -1, +}; static char ap94_wmac0_mac[6]; static char ap94_wmac1_mac[6]; @@ -52,8 +56,17 @@ static int ap94_pci_plat_dev_init(struct pci_dev *dev) void __init ap94_pci_enable_quirk_wndr3700(void) { - ap94_wmac0_data.quirk_wndr3700 = 1; - ap94_wmac1_data.quirk_wndr3700 = 1; + /* WNDR3700 uses GPIO 6-9 for antenna configuration */ + + ap94_wmac0_data.led_pin = 5; + ap94_wmac0_data.gpio_mask = (0xf << 6); + /* 2.4 GHz uses the first fixed antenna group (0, 1, 0, 1) */ + ap94_wmac0_data.gpio_val = (5 << 6); + + ap94_wmac1_data.led_pin = 5; + ap94_wmac1_data.gpio_mask = (0xf << 6); + /* 5 GHz uses the second fixed antenna group (0, 1, 1, 0) */ + ap94_wmac1_data.gpio_val = (6 << 6); } void __init ap94_pci_init(u8 *cal_data0, u8 *mac_addr0, diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar913x-wmac.c b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar913x-wmac.c index 024d29044b..7840ff9c58 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar913x-wmac.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar913x-wmac.c @@ -22,7 +22,9 @@ #include "dev-ar913x-wmac.h" -static struct ath9k_platform_data ar913x_wmac_data; +static struct ath9k_platform_data ar913x_wmac_data = { + .led_pin = -1, +}; static char ar913x_wmac_mac[6]; static struct resource ar913x_wmac_resources[] = { diff --git a/target/linux/ar71xx/files/include/linux/ath9k_platform.h b/target/linux/ar71xx/files/include/linux/ath9k_platform.h index 3c22012028..020387a114 100644 --- a/target/linux/ar71xx/files/include/linux/ath9k_platform.h +++ b/target/linux/ar71xx/files/include/linux/ath9k_platform.h @@ -1,11 +1,19 @@ /* - * ath9k platform data defines + * Copyright (c) 2008 Atheros Communications Inc. + * Copyright (c) 2009 Gabor Juhos + * Copyright (c) 2009 Imre Kaloz * - * Copyright (C) 2008 Gabor Juhos + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _LINUX_ATH9K_PLATFORM_H @@ -17,7 +25,9 @@ struct ath9k_platform_data { u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; u8 *macaddr; - unsigned long quirk_wndr3700:1; + int led_pin; + u32 gpio_mask; + u32 gpio_val; }; #endif /* _LINUX_ATH9K_PLATFORM_H */ -- cgit v1.2.3