12eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König/* 22eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König * Copyright (C) 2010 Pengutronix 32eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> 42eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König * 52eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König * This program is free software; you can redistribute it and/or modify it under 62eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König * the terms of the GNU General Public License version 2 as published by the 72eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König * Free Software Foundation. 82eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König */ 9b7f080cfe223b3b7424872639d153695615a9255Alexey Dobriyan#include <linux/dma-mapping.h> 102eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König#include <mach/hardware.h> 112eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König#include <mach/devices-common.h> 122eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König 132eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König#define imx_mxc_ehci_data_entry_single(soc, _id, hs) \ 142eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König { \ 152eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .id = _id, \ 162eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .iobase = soc ## _USB_ ## hs ## _BASE_ADDR, \ 172eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .irq = soc ## _INT_USB_ ## hs, \ 182eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König } 192eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König 20972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#ifdef CONFIG_SOC_IMX25 212c20b9f19add2248dc867f1f78dcef1eb0944543Uwe Kleine-Königconst struct imx_mxc_ehci_data imx25_mxc_ehci_otg_data __initconst = 222c20b9f19add2248dc867f1f78dcef1eb0944543Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX25, 0, OTG); 232c20b9f19add2248dc867f1f78dcef1eb0944543Uwe Kleine-Königconst struct imx_mxc_ehci_data imx25_mxc_ehci_hs_data __initconst = 242c20b9f19add2248dc867f1f78dcef1eb0944543Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX25, 1, HS); 25972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX25 */ 262c20b9f19add2248dc867f1f78dcef1eb0944543Uwe Kleine-König 272eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König#ifdef CONFIG_SOC_IMX27 282eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-Königconst struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst = 292eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX27, 0, OTG); 302eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-Königconst struct imx_mxc_ehci_data imx27_mxc_ehci_hs_data[] __initconst = { 312eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX27, 1, HS1), 322eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX27, 2, HS2), 332eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König}; 342eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX27 */ 352eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König 362d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König#ifdef CONFIG_SOC_IMX31 372d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-Königconst struct imx_mxc_ehci_data imx31_mxc_ehci_otg_data __initconst = 382d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX31, 0, OTG); 392d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-Königconst struct imx_mxc_ehci_data imx31_mxc_ehci_hs_data[] __initconst = { 402d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX31, 1, HS1), 412d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX31, 2, HS2), 422d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König}; 432d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX31 */ 442d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König 452d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König#ifdef CONFIG_SOC_IMX35 462d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-Königconst struct imx_mxc_ehci_data imx35_mxc_ehci_otg_data __initconst = 472d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX35, 0, OTG); 482d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-Königconst struct imx_mxc_ehci_data imx35_mxc_ehci_hs_data __initconst = 492d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX35, 1, HS); 502d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX35 */ 512d58de2805f93bdb8fa0608d98e1871bb28ec091Uwe Kleine-König 527d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König#ifdef CONFIG_SOC_IMX51 537d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-Königconst struct imx_mxc_ehci_data imx51_mxc_ehci_otg_data __initconst = 547d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX51, 0, OTG); 557d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-Königconst struct imx_mxc_ehci_data imx51_mxc_ehci_hs_data[] __initconst = { 567d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX51, 1, HS1), 577d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König imx_mxc_ehci_data_entry_single(MX51, 2, HS2), 587d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König}; 597d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX51 */ 607d92e8e6c4d45d33dd32a028081c89a6dedab032Uwe Kleine-König 612eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-Königstruct platform_device *__init imx_add_mxc_ehci( 622eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König const struct imx_mxc_ehci_data *data, 632eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König const struct mxc_usbh_platform_data *pdata) 642eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König{ 652eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König struct resource res[] = { 662eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König { 672eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .start = data->iobase, 682eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .end = data->iobase + SZ_512 - 1, 692eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .flags = IORESOURCE_MEM, 702eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König }, { 712eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .start = data->irq, 722eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .end = data->irq, 732eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König .flags = IORESOURCE_IRQ, 742eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König }, 752eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König }; 762eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König return imx_add_platform_device_dmamask("mxc-ehci", data->id, 772eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König res, ARRAY_SIZE(res), 782eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König pdata, sizeof(*pdata), DMA_BIT_MASK(32)); 792eb42d5c287f5e883a4b3ebe668ba880caa351e5Uwe Kleine-König} 80