From 4bec245f209642dc2ac8a72c1294a49f064c6196 Mon Sep 17 00:00:00 2001 From: David Brownell Date: Tue, 20 Jan 2004 16:45:06 +0000 Subject: [PATCH] [ARM PATCH] 1711/1: pxa2xx_udc (3/5) add udc platform_device, platform_data 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 | 38 ++++++++++++++++++++++++++++++++++ include/asm-arm/arch-pxa/udc.h | 18 ++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 include/asm-arm/arch-pxa/udc.h diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index a811fa344b8bc..5f6b151ff5b44 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c @@ -30,6 +30,8 @@ #include #include +#include + #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 index 0000000000000..30548a30c773e --- /dev/null +++ b/include/asm-arm/arch-pxa/udc.h @@ -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/.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); + -- 2.53.0