backfire: ar71xx: improve the wndr3700 quirks (backport of r23822, r23875)
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 8 Jan 2011 10:17:35 +0000 (10:17 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 8 Jan 2011 10:17:35 +0000 (10:17 +0000)
- 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/branches/backfire@24921 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap91-pci.c
target/linux/ar71xx/files/arch/mips/ar71xx/dev-ap94-pci.c
target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar913x-wmac.c
target/linux/ar71xx/files/include/linux/ath9k_platform.h

index e81a01a..4bee3bf 100644 (file)
@@ -17,7 +17,9 @@
 
 #include "dev-ap91-pci.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 int ap91_pci_fixup_enabled;
 
index bfa668f..e6be00a 100644 (file)
 
 #include "dev-ap94-pci.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];
 static int ap94_pci_fixup_enabled;
@@ -127,8 +131,17 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ap94_pci_fixup);
 
 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 = (10 << 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,
index 024d290..7840ff9 100644 (file)
@@ -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[] = {
index 3c22012..020387a 100644 (file)
@@ -1,11 +1,19 @@
 /*
- * ath9k platform data defines
+ * Copyright (c) 2008 Atheros Communications Inc.
+ * Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org>
  *
- * Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org>
+ * 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 */