gemini: drop Linux 4.1 support
[openwrt/staging/yousong.git] / target / linux / gemini / patches / 131-arm-gemini-add-usb-device.patch
diff --git a/target/linux/gemini/patches/131-arm-gemini-add-usb-device.patch b/target/linux/gemini/patches/131-arm-gemini-add-usb-device.patch
new file mode 100644 (file)
index 0000000..a75a5c1
--- /dev/null
@@ -0,0 +1,77 @@
+--- a/arch/arm/mach-gemini/devices.c
++++ b/arch/arm/mach-gemini/devices.c
+@@ -187,3 +187,64 @@ int platform_register_ethernet(struct ge
+       return platform_device_register(&ethernet_device);
+ }
++
++static struct resource usb0_resources[] = {
++      {
++              .start  = GEMINI_USB0_BASE,
++              .end    = GEMINI_USB0_BASE + 0xfff,
++              .flags  = IORESOURCE_MEM,
++      },
++      {
++              .start  = IRQ_USB0,
++              .end    = IRQ_USB0,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct resource usb1_resources[] = {
++      {
++              .start  = GEMINI_USB1_BASE,
++              .end    = GEMINI_USB1_BASE + 0xfff,
++              .flags  = IORESOURCE_MEM,
++      },
++      {
++              .start  = IRQ_USB1,
++              .end    = IRQ_USB1,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static u64 usb0_dmamask = 0xffffffffUL;
++static u64 usb1_dmamask = 0xffffffffUL;
++
++static struct platform_device usb_device[] = {
++      {
++              .name   = "ehci-fotg2",
++              .id     = 0,
++              .dev    = {
++                      .dma_mask = &usb0_dmamask,
++                      .coherent_dma_mask = 0xffffffff,
++              },
++              .num_resources  = ARRAY_SIZE(usb0_resources),
++              .resource       = usb0_resources,
++      },
++      {
++              .name   = "ehci-fotg2",
++              .id     = 1,
++              .dev    = {
++                      .dma_mask = &usb1_dmamask,
++                      .coherent_dma_mask = 0xffffffff,
++              },
++              .num_resources  = ARRAY_SIZE(usb1_resources),
++              .resource       = usb1_resources,
++      },
++};
++
++int __init platform_register_usb(unsigned int id)
++{
++      if (id > 1)
++              return -EINVAL;
++
++      return platform_device_register(&usb_device[id]);
++}
++
+--- a/arch/arm/mach-gemini/common.h
++++ b/arch/arm/mach-gemini/common.h
+@@ -30,6 +30,7 @@ extern int platform_register_pflash(unsi
+                                   unsigned int nr_parts);
+ extern int platform_register_watchdog(void);
+ extern int platform_register_ethernet(struct gemini_gmac_platform_data *pdata);
++extern int platform_register_usb(unsigned int id);
+ extern void gemini_restart(enum reboot_mode mode, const char *cmd);