Skip to content

Commit

Permalink
ARM: imx: dynamically allocate imx_udc device
Browse files Browse the repository at this point in the history
This is only available for mx1 machines with no in-tree user.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
  • Loading branch information
Uwe Kleine-König committed Nov 17, 2010
1 parent 300f86d commit e083000
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 52 deletions.
43 changes: 0 additions & 43 deletions arch/arm/mach-imx/devices.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,49 +70,6 @@ struct platform_device imx1_camera_device = {
.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 */
static struct mxc_gpio_port imx_gpio_ports[] = {
{
Expand Down
1 change: 0 additions & 1 deletion arch/arm/mach-imx/devices.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#ifdef CONFIG_ARCH_MX1
extern struct platform_device imx1_camera_device;
extern struct platform_device imx_usb_device;
#endif

#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
Expand Down
3 changes: 3 additions & 0 deletions arch/arm/plat-mxc/devices/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ config IMX_HAVE_PLATFORM_IMX_SSI
config IMX_HAVE_PLATFORM_IMX_UART
bool

config IMX_HAVE_PLATFORM_IMX_UDC
bool

config IMX_HAVE_PLATFORM_MXC_NAND
bool

Expand Down
1 change: 1 addition & 0 deletions arch/arm/plat-mxc/devices/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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_SSI) += platform-imx-ssi.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_W1) += platform-mxc_w1.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) += platform-spi_imx.o
75 changes: 75 additions & 0 deletions arch/arm/plat-mxc/devices/platform-imx_udc.c
Original file line number Diff line number Diff line change
@@ -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));
}
16 changes: 16 additions & 0 deletions arch/arm/plat-mxc/include/mach/devices-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,22 @@ struct platform_device *__init imx_add_imx_uart_1irq(
const struct imx_imx_uart_1irq_data *data,
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>
struct imx_mxc_nand_data {
/*
Expand Down
16 changes: 8 additions & 8 deletions arch/arm/plat-mxc/include/mach/mx1.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,13 @@
#define MX1_SSI_RX_INT 44
#define MX1_SSI_RX_ERR_INT 45
#define MX1_TOUCH_INT 46
#define MX1_USBD_INT0 47
#define MX1_USBD_INT1 48
#define MX1_USBD_INT2 49
#define MX1_USBD_INT3 50
#define MX1_USBD_INT4 51
#define MX1_USBD_INT5 52
#define MX1_USBD_INT6 53
#define MX1_INT_USBD0 47
#define MX1_INT_USBD1 48
#define MX1_INT_USBD2 49
#define MX1_INT_USBD3 50
#define MX1_INT_USBD4 51
#define MX1_INT_USBD5 52
#define MX1_INT_USBD6 53
#define MX1_BTSYS_INT 55
#define MX1_BTTIM_INT 56
#define MX1_BTWUI_INT 57
Expand Down Expand Up @@ -163,6 +163,6 @@
* to not break drivers/usb/gadget/imx_udc. Should go
* 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__ */

0 comments on commit e083000

Please sign in to comment.