]> git.neil.brown.name Git - history.git/commitdiff
[ARM PATCH] 1711/1: pxa2xx_udc (3/5) add udc platform_device, platform_data
authorDavid Brownell <david-b@net.rmk.(none)>
Tue, 20 Jan 2004 16:45:06 +0000 (16:45 +0000)
committerRussell King <rmk@flint.arm.linux.org.uk>
Tue, 20 Jan 2004 16:45:06 +0000 (16:45 +0000)
Patch from David Brownell

This declares the pxa2xx_udc platform device, defines
the platform_data made available to that driver, and
allows different machines to customize that platform_data.

Same idea as in the FB driver.  Be careful of patch conflicts
applying to other kernels, mostly due to different platform
devices being listed.

arch/arm/mach-pxa/generic.c
include/asm-arm/arch-pxa/udc.h [new file with mode: 0644]

index a811fa344b8bcd11f4214f47cf3e2156a0386e8e..5f6b151ff5b4492e652d4e72c111cc7ba0a2234b 100644 (file)
@@ -30,6 +30,8 @@
 #include <asm/pgtable.h>
 #include <asm/mach/map.h>
 
+#include <asm/arch/udc.h>
+
 #include "generic.h"
 
 /*
@@ -168,8 +170,44 @@ static struct platform_device pxamci_device = {
        .resource       = pxamci_resources,
 };
 
+
+static struct pxa2xx_udc_mach_info pxa_udc_info;
+
+void __init pxa_set_udc_info(struct pxa2xx_udc_mach_info *info)
+{
+       memcpy(&pxa_udc_info, info, sizeof *info);
+}
+EXPORT_SYMBOL(pxa_set_udc_info);
+
+static struct resource pxa2xx_udc_resources[] = {
+       [0] = {
+               .start  = 0x40600000,
+               .end    = 0x4060ffff,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_USB,
+               .end    = IRQ_USB,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static u64 udc_dma_mask = ~(u32)0;
+
+static struct platform_device udc_device = {
+       .name           = "pxa2xx_udc",
+       .id             = 0,
+       .resource       = pxa2xx_udc_resources,
+       .num_resources  = ARRAY_SIZE(pxa2xx_udc_resources),
+       .dev            =  {
+               .platform_data  = &pxa_udc_info,
+               .dma_mask       = &udc_dma_mask,
+       }
+};
+
 static struct platform_device *devices[] __initdata = {
        &pxamci_device,
+       &udc_device,
 };
 
 static int __init pxa_init(void)
diff --git a/include/asm-arm/arch-pxa/udc.h b/include/asm-arm/arch-pxa/udc.h
new file mode 100644 (file)
index 0000000..30548a3
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * linux/include/asm-arm/arch-pxa/udc.h
+ *
+ * This supports machine-specific differences in how the PXA2xx
+ * USB Device Controller (UDC) is wired.
+ *
+ * It is set in linux/arch/arm/mach-pxa/<machine>.c and used in
+ * the probe routine of linux/drivers/usb/gadget/pxa2xx_udc.c
+ */
+struct pxa2xx_udc_mach_info {
+        int  (*udc_is_connected)(void);                /* do we see host? */
+        void (*udc_command)(int cmd);
+#define        PXA2XX_UDC_CMD_CONNECT          0       /* let host see us */
+#define        PXA2XX_UDC_CMD_DISCONNECT       1       /* so host won't see us */
+};
+
+extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info);
+