1e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König/*
2e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König * Copyright (C) 2010 Pengutronix
3e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
4e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König *
5e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König * This program is free software; you can redistribute it and/or modify it under
6e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König * the terms of the GNU General Public License version 2 as published by the
7e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König * Free Software Foundation.
8e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König */
9e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König#include <mach/hardware.h>
10e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König#include <mach/devices-common.h>
11e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König
12e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König#define imx_imx_udc_data_entry_single(soc, _size)			\
13e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	{								\
14e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.iobase = soc ## _USBD_BASE_ADDR,			\
15e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.iosize = _size,					\
16e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq0 = soc ## _INT_USBD0,				\
17e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq1 = soc ## _INT_USBD1,				\
18e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq2 = soc ## _INT_USBD2,				\
19e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq3 = soc ## _INT_USBD3,				\
20e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq4 = soc ## _INT_USBD4,				\
21e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq5 = soc ## _INT_USBD5,				\
22e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		.irq6 = soc ## _INT_USBD6,				\
23e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	}
24e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König
25e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König#define imx_imx_udc_data_entry(soc, _size)				\
26e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	[_id] = imx_imx_udc_data_entry_single(soc, _size)
27e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König
28e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König#ifdef CONFIG_SOC_IMX1
29e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-Königconst struct imx_imx_udc_data imx1_imx_udc_data __initconst =
30e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	imx_imx_udc_data_entry_single(MX1, SZ_4K);
31e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX1 */
32e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König
33e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-Königstruct platform_device *__init imx_add_imx_udc(
34e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		const struct imx_imx_udc_data *data,
35e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		const struct imxusb_platform_data *pdata)
36e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König{
37e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	struct resource res[] = {
38e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		{
39e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->iobase,
40e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->iobase + data->iosize - 1,
41e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_MEM,
42e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
43e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq0,
44e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq0,
45e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
46e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
47e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq1,
48e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq1,
49e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
50e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
51e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq2,
52e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq2,
53e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
54e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
55e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq3,
56e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq3,
57e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
58e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
59e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq4,
60e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq4,
61e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
62e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
63e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq5,
64e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq5,
65e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
66e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		}, {
67e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.start = data->irq6,
68e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.end = data->irq6,
69e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			.flags = IORESOURCE_IRQ,
70e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König		},
71e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	};
72e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König
73e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König	return imx_add_platform_device("imx_udc", 0,
74e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König			res, ARRAY_SIZE(res), pdata, sizeof(*pdata));
75e08300043ee4e2df10be551b76e126d6c02f26ccUwe Kleine-König}
76