ar71xx: add initial support for 3.6
[openwrt/svn-archive/archive.git] / target / linux / ar71xx / patches-3.6 / 001-MIPS-ath79-use-a-helper-function-for-USB-resource-in.patch
diff --git a/target/linux/ar71xx/patches-3.6/001-MIPS-ath79-use-a-helper-function-for-USB-resource-in.patch b/target/linux/ar71xx/patches-3.6/001-MIPS-ath79-use-a-helper-function-for-USB-resource-in.patch
new file mode 100644 (file)
index 0000000..1d6d1c5
--- /dev/null
@@ -0,0 +1,145 @@
+From 58a4dbd4160ee4a1428da23b81ff6d94c9a067a8 Mon Sep 17 00:00:00 2001
+From: Gabor Juhos <juhosg@openwrt.org>
+Date: Sat, 4 Aug 2012 15:03:55 +0000
+Subject: [PATCH] MIPS: ath79: use a helper function for USB resource
+ initialization
+
+commit 8d3e03e186cb94a333d0176fe8b22a6df200fcc7 upstream.
+
+This improves code readability, and ensures that
+all resource fields will be initialized correctly.
+Additionally, it helps to reduce the size of the
+kernel image by using uninitialized resource
+variables.
+
+Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
+Patchwork: http://patchwork.linux-mips.org/patch/4171/
+Signed-off-by: John Crispin <blogic@openwrt.org>
+---
+ arch/mips/ath79/dev-usb.c |   64 ++++++++++++++++++++-------------------------
+ 1 file changed, 28 insertions(+), 36 deletions(-)
+
+--- a/arch/mips/ath79/dev-usb.c
++++ b/arch/mips/ath79/dev-usb.c
+@@ -25,17 +25,7 @@
+ #include "common.h"
+ #include "dev-usb.h"
+-static struct resource ath79_ohci_resources[] = {
+-      [0] = {
+-              /* .start and .end fields are filled dynamically */
+-              .flags  = IORESOURCE_MEM,
+-      },
+-      [1] = {
+-              .start  = ATH79_MISC_IRQ_OHCI,
+-              .end    = ATH79_MISC_IRQ_OHCI,
+-              .flags  = IORESOURCE_IRQ,
+-      },
+-};
++static struct resource ath79_ohci_resources[2];
+ static u64 ath79_ohci_dmamask = DMA_BIT_MASK(32);
+@@ -54,17 +44,7 @@ static struct platform_device ath79_ohci
+       },
+ };
+-static struct resource ath79_ehci_resources[] = {
+-      [0] = {
+-              /* .start and .end fields are filled dynamically */
+-              .flags  = IORESOURCE_MEM,
+-      },
+-      [1] = {
+-              .start  = ATH79_CPU_IRQ_USB,
+-              .end    = ATH79_CPU_IRQ_USB,
+-              .flags  = IORESOURCE_IRQ,
+-      },
+-};
++static struct resource ath79_ehci_resources[2];
+ static u64 ath79_ehci_dmamask = DMA_BIT_MASK(32);
+@@ -90,6 +70,20 @@ static struct platform_device ath79_ehci
+       },
+ };
++static void __init ath79_usb_init_resource(struct resource res[2],
++                                         unsigned long base,
++                                         unsigned long size,
++                                         int irq)
++{
++      res[0].flags = IORESOURCE_MEM;
++      res[0].start = base;
++      res[0].end = base + size - 1;
++
++      res[1].flags = IORESOURCE_IRQ;
++      res[1].start = irq;
++      res[1].end = irq;
++}
++
+ #define AR71XX_USB_RESET_MASK (AR71XX_RESET_USB_HOST | \
+                                AR71XX_RESET_USB_PHY | \
+                                AR71XX_RESET_USB_OHCI_DLL)
+@@ -114,12 +108,12 @@ static void __init ath79_usb_setup(void)
+       mdelay(900);
+-      ath79_ohci_resources[0].start = AR71XX_OHCI_BASE;
+-      ath79_ohci_resources[0].end = AR71XX_OHCI_BASE + AR71XX_OHCI_SIZE - 1;
++      ath79_usb_init_resource(ath79_ohci_resources, AR71XX_OHCI_BASE,
++                              AR71XX_OHCI_SIZE, ATH79_MISC_IRQ_OHCI);
+       platform_device_register(&ath79_ohci_device);
+-      ath79_ehci_resources[0].start = AR71XX_EHCI_BASE;
+-      ath79_ehci_resources[0].end = AR71XX_EHCI_BASE + AR71XX_EHCI_SIZE - 1;
++      ath79_usb_init_resource(ath79_ehci_resources, AR71XX_EHCI_BASE,
++                              AR71XX_EHCI_SIZE, ATH79_CPU_IRQ_USB);
+       ath79_ehci_device.dev.platform_data = &ath79_ehci_pdata_v1;
+       platform_device_register(&ath79_ehci_device);
+ }
+@@ -143,10 +137,8 @@ static void __init ar7240_usb_setup(void
+       iounmap(usb_ctrl_base);
+-      ath79_ohci_resources[0].start = AR7240_OHCI_BASE;
+-      ath79_ohci_resources[0].end = AR7240_OHCI_BASE + AR7240_OHCI_SIZE - 1;
+-      ath79_ohci_resources[1].start = ATH79_CPU_IRQ_USB;
+-      ath79_ohci_resources[1].end = ATH79_CPU_IRQ_USB;
++      ath79_usb_init_resource(ath79_ohci_resources, AR7240_OHCI_BASE,
++                              AR7240_OHCI_SIZE, ATH79_CPU_IRQ_USB);
+       platform_device_register(&ath79_ohci_device);
+ }
+@@ -161,8 +153,8 @@ static void __init ar724x_usb_setup(void
+       ath79_device_reset_clear(AR724X_RESET_USB_PHY);
+       mdelay(10);
+-      ath79_ehci_resources[0].start = AR724X_EHCI_BASE;
+-      ath79_ehci_resources[0].end = AR724X_EHCI_BASE + AR724X_EHCI_SIZE - 1;
++      ath79_usb_init_resource(ath79_ehci_resources, AR724X_EHCI_BASE,
++                              AR724X_EHCI_SIZE, ATH79_CPU_IRQ_USB);
+       ath79_ehci_device.dev.platform_data = &ath79_ehci_pdata_v2;
+       platform_device_register(&ath79_ehci_device);
+ }
+@@ -178,8 +170,8 @@ static void __init ar913x_usb_setup(void
+       ath79_device_reset_clear(AR913X_RESET_USB_PHY);
+       mdelay(10);
+-      ath79_ehci_resources[0].start = AR913X_EHCI_BASE;
+-      ath79_ehci_resources[0].end = AR913X_EHCI_BASE + AR913X_EHCI_SIZE - 1;
++      ath79_usb_init_resource(ath79_ehci_resources, AR913X_EHCI_BASE,
++                              AR913X_EHCI_SIZE, ATH79_CPU_IRQ_USB);
+       ath79_ehci_device.dev.platform_data = &ath79_ehci_pdata_v2;
+       platform_device_register(&ath79_ehci_device);
+ }
+@@ -195,8 +187,8 @@ static void __init ar933x_usb_setup(void
+       ath79_device_reset_clear(AR933X_RESET_USB_PHY);
+       mdelay(10);
+-      ath79_ehci_resources[0].start = AR933X_EHCI_BASE;
+-      ath79_ehci_resources[0].end = AR933X_EHCI_BASE + AR933X_EHCI_SIZE - 1;
++      ath79_usb_init_resource(ath79_ehci_resources, AR933X_EHCI_BASE,
++                              AR933X_EHCI_SIZE, ATH79_CPU_IRQ_USB);
+       ath79_ehci_device.dev.platform_data = &ath79_ehci_pdata_v2;
+       platform_device_register(&ath79_ehci_device);
+ }