ARM: imx: dynamically allocate imx_udc device
This is only available for mx1 machines with no in-tree user. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This commit is contained in:
		
					parent
					
						
							
								300f86da17
							
						
					
				
			
			
				commit
				
					
						e08300043e
					
				
			
		
					 7 changed files with 103 additions and 52 deletions
				
			
		|  | @ -70,49 +70,6 @@ struct platform_device imx1_camera_device = { | ||||||
| 	.num_resources  = ARRAY_SIZE(imx1_camera_resources), | 	.num_resources  = ARRAY_SIZE(imx1_camera_resources), | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct resource imx_usb_resources[] = { |  | ||||||
| 	{ |  | ||||||
| 		.start	= 0x00212000, |  | ||||||
| 		.end	= 0x00212148, |  | ||||||
| 		.flags	= IORESOURCE_MEM, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT0, |  | ||||||
| 		.end	= MX1_USBD_INT0, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT1, |  | ||||||
| 		.end	= MX1_USBD_INT1, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT2, |  | ||||||
| 		.end	= MX1_USBD_INT2, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT3, |  | ||||||
| 		.end	= MX1_USBD_INT3, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT4, |  | ||||||
| 		.end	= MX1_USBD_INT4, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT5, |  | ||||||
| 		.end	= MX1_USBD_INT5, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, { |  | ||||||
| 		.start	= MX1_USBD_INT6, |  | ||||||
| 		.end	= MX1_USBD_INT6, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| struct platform_device imx_usb_device = { |  | ||||||
| 	.name		= "imx_udc", |  | ||||||
| 	.id		= 0, |  | ||||||
| 	.num_resources	= ARRAY_SIZE(imx_usb_resources), |  | ||||||
| 	.resource	= imx_usb_resources, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* GPIO port description */ | /* GPIO port description */ | ||||||
| static struct mxc_gpio_port imx_gpio_ports[] = { | static struct mxc_gpio_port imx_gpio_ports[] = { | ||||||
| 	{ | 	{ | ||||||
|  |  | ||||||
|  | @ -1,6 +1,5 @@ | ||||||
| #ifdef CONFIG_ARCH_MX1 | #ifdef CONFIG_ARCH_MX1 | ||||||
| extern struct platform_device imx1_camera_device; | extern struct platform_device imx1_camera_device; | ||||||
| extern struct platform_device imx_usb_device; |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27) | #if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27) | ||||||
|  |  | ||||||
|  | @ -22,6 +22,9 @@ config IMX_HAVE_PLATFORM_IMX_SSI | ||||||
| config IMX_HAVE_PLATFORM_IMX_UART | config IMX_HAVE_PLATFORM_IMX_UART | ||||||
| 	bool | 	bool | ||||||
| 
 | 
 | ||||||
|  | config IMX_HAVE_PLATFORM_IMX_UDC | ||||||
|  | 	bool | ||||||
|  | 
 | ||||||
| config IMX_HAVE_PLATFORM_MXC_NAND | config IMX_HAVE_PLATFORM_MXC_NAND | ||||||
| 	bool | 	bool | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ obj-y += platform-imx-dma.o | ||||||
| obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o | obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o | ||||||
| obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_SSI) += platform-imx-ssi.o | obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_SSI) += platform-imx-ssi.o | ||||||
| obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o | obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o | ||||||
|  | obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UDC) += platform-imx_udc.o | ||||||
| obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o | obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o | ||||||
| obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o | obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o | ||||||
| obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) +=  platform-spi_imx.o | obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) +=  platform-spi_imx.o | ||||||
|  |  | ||||||
							
								
								
									
										75
									
								
								arch/arm/plat-mxc/devices/platform-imx_udc.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								arch/arm/plat-mxc/devices/platform-imx_udc.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (C) 2010 Pengutronix | ||||||
|  |  * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> | ||||||
|  |  * | ||||||
|  |  * 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. | ||||||
|  |  */ | ||||||
|  | #include <mach/hardware.h> | ||||||
|  | #include <mach/devices-common.h> | ||||||
|  | 
 | ||||||
|  | #define imx_imx_udc_data_entry_single(soc, _size)			\ | ||||||
|  | 	{								\ | ||||||
|  | 		.iobase = soc ## _USBD_BASE_ADDR,			\ | ||||||
|  | 		.iosize = _size,					\ | ||||||
|  | 		.irq0 = soc ## _INT_USBD0,				\ | ||||||
|  | 		.irq1 = soc ## _INT_USBD1,				\ | ||||||
|  | 		.irq2 = soc ## _INT_USBD2,				\ | ||||||
|  | 		.irq3 = soc ## _INT_USBD3,				\ | ||||||
|  | 		.irq4 = soc ## _INT_USBD4,				\ | ||||||
|  | 		.irq5 = soc ## _INT_USBD5,				\ | ||||||
|  | 		.irq6 = soc ## _INT_USBD6,				\ | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | #define imx_imx_udc_data_entry(soc, _size)				\ | ||||||
|  | 	[_id] = imx_imx_udc_data_entry_single(soc, _size) | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_SOC_IMX1 | ||||||
|  | const struct imx_imx_udc_data imx1_imx_udc_data __initconst = | ||||||
|  | 	imx_imx_udc_data_entry_single(MX1, SZ_4K); | ||||||
|  | #endif /* ifdef CONFIG_SOC_IMX1 */ | ||||||
|  | 
 | ||||||
|  | struct platform_device *__init imx_add_imx_udc( | ||||||
|  | 		const struct imx_imx_udc_data *data, | ||||||
|  | 		const struct imxusb_platform_data *pdata) | ||||||
|  | { | ||||||
|  | 	struct resource res[] = { | ||||||
|  | 		{ | ||||||
|  | 			.start = data->iobase, | ||||||
|  | 			.end = data->iobase + data->iosize - 1, | ||||||
|  | 			.flags = IORESOURCE_MEM, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq0, | ||||||
|  | 			.end = data->irq0, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq1, | ||||||
|  | 			.end = data->irq1, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq2, | ||||||
|  | 			.end = data->irq2, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq3, | ||||||
|  | 			.end = data->irq3, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq4, | ||||||
|  | 			.end = data->irq4, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq5, | ||||||
|  | 			.end = data->irq5, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, { | ||||||
|  | 			.start = data->irq6, | ||||||
|  | 			.end = data->irq6, | ||||||
|  | 			.flags = IORESOURCE_IRQ, | ||||||
|  | 		}, | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	return imx_add_platform_device("imx_udc", 0, | ||||||
|  | 			res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); | ||||||
|  | } | ||||||
|  | @ -82,6 +82,22 @@ struct platform_device *__init imx_add_imx_uart_1irq( | ||||||
| 		const struct imx_imx_uart_1irq_data *data, | 		const struct imx_imx_uart_1irq_data *data, | ||||||
| 		const struct imxuart_platform_data *pdata); | 		const struct imxuart_platform_data *pdata); | ||||||
| 
 | 
 | ||||||
|  | #include <mach/usb.h> | ||||||
|  | struct imx_imx_udc_data { | ||||||
|  | 	resource_size_t iobase; | ||||||
|  | 	resource_size_t iosize; | ||||||
|  | 	resource_size_t irq0; | ||||||
|  | 	resource_size_t irq1; | ||||||
|  | 	resource_size_t irq2; | ||||||
|  | 	resource_size_t irq3; | ||||||
|  | 	resource_size_t irq4; | ||||||
|  | 	resource_size_t irq5; | ||||||
|  | 	resource_size_t irq6; | ||||||
|  | }; | ||||||
|  | struct platform_device *__init imx_add_imx_udc( | ||||||
|  | 		const struct imx_imx_udc_data *data, | ||||||
|  | 		const struct imxusb_platform_data *pdata); | ||||||
|  | 
 | ||||||
| #include <mach/mxc_nand.h> | #include <mach/mxc_nand.h> | ||||||
| struct imx_mxc_nand_data { | struct imx_mxc_nand_data { | ||||||
| 	/*
 | 	/*
 | ||||||
|  |  | ||||||
|  | @ -114,13 +114,13 @@ | ||||||
| #define MX1_SSI_RX_INT		44 | #define MX1_SSI_RX_INT		44 | ||||||
| #define MX1_SSI_RX_ERR_INT	45 | #define MX1_SSI_RX_ERR_INT	45 | ||||||
| #define MX1_TOUCH_INT		46 | #define MX1_TOUCH_INT		46 | ||||||
| #define MX1_USBD_INT0		47 | #define MX1_INT_USBD0		47 | ||||||
| #define MX1_USBD_INT1		48 | #define MX1_INT_USBD1		48 | ||||||
| #define MX1_USBD_INT2		49 | #define MX1_INT_USBD2		49 | ||||||
| #define MX1_USBD_INT3		50 | #define MX1_INT_USBD3		50 | ||||||
| #define MX1_USBD_INT4		51 | #define MX1_INT_USBD4		51 | ||||||
| #define MX1_USBD_INT5		52 | #define MX1_INT_USBD5		52 | ||||||
| #define MX1_USBD_INT6		53 | #define MX1_INT_USBD6		53 | ||||||
| #define MX1_BTSYS_INT		55 | #define MX1_BTSYS_INT		55 | ||||||
| #define MX1_BTTIM_INT		56 | #define MX1_BTTIM_INT		56 | ||||||
| #define MX1_BTWUI_INT		57 | #define MX1_BTWUI_INT		57 | ||||||
|  | @ -163,6 +163,6 @@ | ||||||
|  * to not break drivers/usb/gadget/imx_udc.  Should go |  * to not break drivers/usb/gadget/imx_udc.  Should go | ||||||
|  * away after this driver uses the new name. |  * away after this driver uses the new name. | ||||||
|  */ |  */ | ||||||
| #define USBD_INT0		MX1_USBD_INT0 | #define USBD_INT0		MX1_INT_USBD0 | ||||||
| 
 | 
 | ||||||
| #endif /* ifndef __MACH_MX1_H__ */ | #endif /* ifndef __MACH_MX1_H__ */ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Uwe Kleine-König
				Uwe Kleine-König