1bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König/*
2bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König * Copyright (C) 2010 Pengutronix
3bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
4bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König *
5bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König * This program is free software; you can redistribute it and/or modify it under
6bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König * the terms of the GNU General Public License version 2 as published by the
7bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König * Free Software Foundation.
8bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König */
9b7f080cfe223b3b7424872639d153695615a9255Alexey Dobriyan#include <linux/dma-mapping.h>
10bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König#include <mach/hardware.h>
11bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König#include <mach/devices-common.h>
12bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König
13bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König#define imx_fsl_usb2_udc_data_entry_single(soc)				\
14bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König	{								\
15bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		.iobase = soc ## _USB_OTG_BASE_ADDR,			\
16bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		.irq = soc ## _INT_USB_OTG,				\
17bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König	}
18bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König
19972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#ifdef CONFIG_SOC_IMX25
20224b8c83641c2f31e3efc9bc5956636cc42cadf7Uwe Kleine-Königconst struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data __initconst =
21224b8c83641c2f31e3efc9bc5956636cc42cadf7Uwe Kleine-König	imx_fsl_usb2_udc_data_entry_single(MX25);
22972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX25 */
23224b8c83641c2f31e3efc9bc5956636cc42cadf7Uwe Kleine-König
24bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König#ifdef CONFIG_SOC_IMX27
25bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-Königconst struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst =
26bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König	imx_fsl_usb2_udc_data_entry_single(MX27);
27bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX27 */
28bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König
299e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König#ifdef CONFIG_SOC_IMX31
309e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-Königconst struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data __initconst =
319e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König	imx_fsl_usb2_udc_data_entry_single(MX31);
329e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX31 */
339e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König
349e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König#ifdef CONFIG_SOC_IMX35
359e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-Königconst struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data __initconst =
369e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König	imx_fsl_usb2_udc_data_entry_single(MX35);
379e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX35 */
389e1dde33876ba83ad586c336647fff133d0f5472Uwe Kleine-König
396cafe48a6bfa8934d5564fbf9976a51040dac819Uwe Kleine-König#ifdef CONFIG_SOC_IMX51
406cafe48a6bfa8934d5564fbf9976a51040dac819Uwe Kleine-Königconst struct imx_fsl_usb2_udc_data imx51_fsl_usb2_udc_data __initconst =
416cafe48a6bfa8934d5564fbf9976a51040dac819Uwe Kleine-König	imx_fsl_usb2_udc_data_entry_single(MX51);
426cafe48a6bfa8934d5564fbf9976a51040dac819Uwe Kleine-König#endif
436cafe48a6bfa8934d5564fbf9976a51040dac819Uwe Kleine-König
44bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-Königstruct platform_device *__init imx_add_fsl_usb2_udc(
45bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		const struct imx_fsl_usb2_udc_data *data,
46bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		const struct fsl_usb2_platform_data *pdata)
47bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König{
48bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König	struct resource res[] = {
49bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		{
50bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			.start = data->iobase,
51bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			.end = data->iobase + SZ_512 - 1,
52bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			.flags = IORESOURCE_MEM,
53bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		}, {
54bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			.start = data->irq,
55bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			.end = data->irq,
56bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			.flags = IORESOURCE_IRQ,
57bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König		},
58bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König	};
59bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König	return imx_add_platform_device_dmamask("fsl-usb2-udc", -1,
60bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			res, ARRAY_SIZE(res),
61bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König			pdata, sizeof(*pdata), DMA_BIT_MASK(32));
62bd455ed36c487b949068182bfee478b785ee090bUwe Kleine-König}
63