aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-11-05 13:52:09 -0400
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-11-17 04:01:31 -0500
commit2eb42d5c287f5e883a4b3ebe668ba880caa351e5 (patch)
tree05bba579ebdc9d945658f76f0b6476a65b69b3c3 /arch/arm/mach-imx
parent9d3d945a8d5be2c915f646e8dff8422486a77030 (diff)
ARM: imx: dynamically allocate mxc-ehci devices
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/Kconfig4
-rw-r--r--arch/arm/mach-imx/devices-imx27.h7
-rw-r--r--arch/arm/mach-imx/devices.c73
-rw-r--r--arch/arm/mach-imx/devices.h3
-rw-r--r--arch/arm/mach-imx/mach-cpuimx27.c9
-rw-r--r--arch/arm/mach-imx/mach-imx27_visstrim_m10.c6
-rw-r--r--arch/arm/mach-imx/mach-pca100.c9
-rw-r--r--arch/arm/mach-imx/mach-pcm038.c5
8 files changed, 28 insertions, 88 deletions
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 8e9297b84830..025e96925561 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -102,6 +102,7 @@ config MACH_PCM038
102 select IMX_HAVE_PLATFORM_IMX2_WDT 102 select IMX_HAVE_PLATFORM_IMX2_WDT
103 select IMX_HAVE_PLATFORM_IMX_I2C 103 select IMX_HAVE_PLATFORM_IMX_I2C
104 select IMX_HAVE_PLATFORM_IMX_UART 104 select IMX_HAVE_PLATFORM_IMX_UART
105 select IMX_HAVE_PLATFORM_MXC_EHCI
105 select IMX_HAVE_PLATFORM_MXC_NAND 106 select IMX_HAVE_PLATFORM_MXC_NAND
106 select IMX_HAVE_PLATFORM_MXC_W1 107 select IMX_HAVE_PLATFORM_MXC_W1
107 select IMX_HAVE_PLATFORM_SPI_IMX 108 select IMX_HAVE_PLATFORM_SPI_IMX
@@ -130,6 +131,7 @@ config MACH_CPUIMX27
130 select IMX_HAVE_PLATFORM_IMX2_WDT 131 select IMX_HAVE_PLATFORM_IMX2_WDT
131 select IMX_HAVE_PLATFORM_IMX_I2C 132 select IMX_HAVE_PLATFORM_IMX_I2C
132 select IMX_HAVE_PLATFORM_IMX_UART 133 select IMX_HAVE_PLATFORM_IMX_UART
134 select IMX_HAVE_PLATFORM_MXC_EHCI
133 select IMX_HAVE_PLATFORM_MXC_NAND 135 select IMX_HAVE_PLATFORM_MXC_NAND
134 select IMX_HAVE_PLATFORM_MXC_W1 136 select IMX_HAVE_PLATFORM_MXC_W1
135 select MXC_ULPI if USB_ULPI 137 select MXC_ULPI if USB_ULPI
@@ -183,6 +185,7 @@ config MACH_IMX27_VISSTRIM_M10
183 select IMX_HAVE_PLATFORM_IMX_I2C 185 select IMX_HAVE_PLATFORM_IMX_I2C
184 select IMX_HAVE_PLATFORM_IMX_UART 186 select IMX_HAVE_PLATFORM_IMX_UART
185 select IMX_HAVE_PLATFORM_MXC_MMC 187 select IMX_HAVE_PLATFORM_MXC_MMC
188 select IMX_HAVE_PLATFORM_MXC_EHCI
186 help 189 help
187 Include support for Visstrim_m10 platform and its different variants. 190 Include support for Visstrim_m10 platform and its different variants.
188 This includes specific configurations for the board and its 191 This includes specific configurations for the board and its
@@ -202,6 +205,7 @@ config MACH_PCA100
202 select IMX_HAVE_PLATFORM_IMX_I2C 205 select IMX_HAVE_PLATFORM_IMX_I2C
203 select IMX_HAVE_PLATFORM_IMX_SSI 206 select IMX_HAVE_PLATFORM_IMX_SSI
204 select IMX_HAVE_PLATFORM_IMX_UART 207 select IMX_HAVE_PLATFORM_IMX_UART
208 select IMX_HAVE_PLATFORM_MXC_EHCI
205 select IMX_HAVE_PLATFORM_MXC_MMC 209 select IMX_HAVE_PLATFORM_MXC_MMC
206 select IMX_HAVE_PLATFORM_MXC_NAND 210 select IMX_HAVE_PLATFORM_MXC_NAND
207 select IMX_HAVE_PLATFORM_MXC_W1 211 select IMX_HAVE_PLATFORM_MXC_W1
diff --git a/arch/arm/mach-imx/devices-imx27.h b/arch/arm/mach-imx/devices-imx27.h
index 646674485a0d..51b91553c590 100644
--- a/arch/arm/mach-imx/devices-imx27.h
+++ b/arch/arm/mach-imx/devices-imx27.h
@@ -43,6 +43,13 @@ extern const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst;
43#define imx27_add_mx2_camera(pdata) \ 43#define imx27_add_mx2_camera(pdata) \
44 imx_add_mx2_camera(&imx27_mx2_camera_data, pdata) 44 imx_add_mx2_camera(&imx27_mx2_camera_data, pdata)
45 45
46extern const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst;
47#define imx27_add_mxc_ehci_otg(pdata) \
48 imx_add_mxc_ehci(&imx27_mxc_ehci_otg_data, pdata)
49extern const struct imx_mxc_ehci_data imx27_mxc_ehci_hs_data[] __initconst;
50#define imx27_add_mxc_ehci_hs(id, pdata) \
51 imx_add_mxc_ehci(&imx27_mxc_ehci_hs_data[id - 1], pdata)
52
46extern const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst; 53extern const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst;
47#define imx27_add_mxc_mmc(id, pdata) \ 54#define imx27_add_mxc_mmc(id, pdata) \
48 imx_add_mxc_mmc(&imx27_mxc_mmc_data[id], pdata) 55 imx_add_mxc_mmc(&imx27_mxc_mmc_data[id], pdata)
diff --git a/arch/arm/mach-imx/devices.c b/arch/arm/mach-imx/devices.c
index 7609e8a8f13c..2a6d70720e99 100644
--- a/arch/arm/mach-imx/devices.c
+++ b/arch/arm/mach-imx/devices.c
@@ -79,12 +79,12 @@ int __init imx1_register_gpios(void)
79#ifdef CONFIG_MACH_MX27 79#ifdef CONFIG_MACH_MX27
80static struct resource otg_resources[] = { 80static struct resource otg_resources[] = {
81 { 81 {
82 .start = MX27_USBOTG_BASE_ADDR, 82 .start = MX27_USB_OTG_BASE_ADDR,
83 .end = MX27_USBOTG_BASE_ADDR + 0x1ff, 83 .end = MX27_USB_OTG_BASE_ADDR + 0x1ff,
84 .flags = IORESOURCE_MEM, 84 .flags = IORESOURCE_MEM,
85 }, { 85 }, {
86 .start = MX27_INT_USB3, 86 .start = MX27_INT_USB_OTG,
87 .end = MX27_INT_USB3, 87 .end = MX27_INT_USB_OTG,
88 .flags = IORESOURCE_IRQ, 88 .flags = IORESOURCE_IRQ,
89 }, 89 },
90}; 90};
@@ -102,71 +102,6 @@ struct platform_device mxc_otg_udc_device = {
102 .resource = otg_resources, 102 .resource = otg_resources,
103 .num_resources = ARRAY_SIZE(otg_resources), 103 .num_resources = ARRAY_SIZE(otg_resources),
104}; 104};
105
106/* OTG host */
107struct platform_device mxc_otg_host = {
108 .name = "mxc-ehci",
109 .id = 0,
110 .dev = {
111 .coherent_dma_mask = DMA_BIT_MASK(32),
112 .dma_mask = &otg_dmamask,
113 },
114 .resource = otg_resources,
115 .num_resources = ARRAY_SIZE(otg_resources),
116};
117
118/* USB host 1 */
119
120static u64 usbh1_dmamask = DMA_BIT_MASK(32);
121
122static struct resource mxc_usbh1_resources[] = {
123 {
124 .start = MX27_USBOTG_BASE_ADDR + 0x200,
125 .end = MX27_USBOTG_BASE_ADDR + 0x3ff,
126 .flags = IORESOURCE_MEM,
127 }, {
128 .start = MX27_INT_USB1,
129 .end = MX27_INT_USB1,
130 .flags = IORESOURCE_IRQ,
131 },
132};
133
134struct platform_device mxc_usbh1 = {
135 .name = "mxc-ehci",
136 .id = 1,
137 .dev = {
138 .coherent_dma_mask = DMA_BIT_MASK(32),
139 .dma_mask = &usbh1_dmamask,
140 },
141 .resource = mxc_usbh1_resources,
142 .num_resources = ARRAY_SIZE(mxc_usbh1_resources),
143};
144
145/* USB host 2 */
146static u64 usbh2_dmamask = DMA_BIT_MASK(32);
147
148static struct resource mxc_usbh2_resources[] = {
149 {
150 .start = MX27_USBOTG_BASE_ADDR + 0x400,
151 .end = MX27_USBOTG_BASE_ADDR + 0x5ff,
152 .flags = IORESOURCE_MEM,
153 }, {
154 .start = MX27_INT_USB2,
155 .end = MX27_INT_USB2,
156 .flags = IORESOURCE_IRQ,
157 },
158};
159
160struct platform_device mxc_usbh2 = {
161 .name = "mxc-ehci",
162 .id = 2,
163 .dev = {
164 .coherent_dma_mask = DMA_BIT_MASK(32),
165 .dma_mask = &usbh2_dmamask,
166 },
167 .resource = mxc_usbh2_resources,
168 .num_resources = ARRAY_SIZE(mxc_usbh2_resources),
169};
170#endif 105#endif
171 106
172#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27) 107#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
diff --git a/arch/arm/mach-imx/devices.h b/arch/arm/mach-imx/devices.h
index a45d760f3c77..7a00bba3688e 100644
--- a/arch/arm/mach-imx/devices.h
+++ b/arch/arm/mach-imx/devices.h
@@ -1,8 +1,5 @@
1#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27) 1#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
2extern struct platform_device mxc_otg_udc_device; 2extern struct platform_device mxc_otg_udc_device;
3extern struct platform_device mxc_otg_host;
4extern struct platform_device mxc_usbh1;
5extern struct platform_device mxc_usbh2;
6extern struct platform_device mx21_usbhc_device; 3extern struct platform_device mx21_usbhc_device;
7extern struct platform_device imx_kpp_device; 4extern struct platform_device imx_kpp_device;
8#endif 5#endif
diff --git a/arch/arm/mach-imx/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c
index 06ff79a60901..c70b0382363e 100644
--- a/arch/arm/mach-imx/mach-cpuimx27.c
+++ b/arch/arm/mach-imx/mach-cpuimx27.c
@@ -40,7 +40,6 @@
40#include <mach/hardware.h> 40#include <mach/hardware.h>
41#include <mach/iomux-mx27.h> 41#include <mach/iomux-mx27.h>
42#include <mach/mxc_nand.h> 42#include <mach/mxc_nand.h>
43#include <mach/mxc_ehci.h>
44#include <mach/ulpi.h> 43#include <mach/ulpi.h>
45 44
46#include "devices-imx27.h" 45#include "devices-imx27.h"
@@ -213,12 +212,12 @@ static struct platform_device serial_device = {
213#endif 212#endif
214 213
215#if defined(CONFIG_USB_ULPI) 214#if defined(CONFIG_USB_ULPI)
216static struct mxc_usbh_platform_data otg_pdata = { 215static struct mxc_usbh_platform_data otg_pdata __initdata = {
217 .portsc = MXC_EHCI_MODE_ULPI, 216 .portsc = MXC_EHCI_MODE_ULPI,
218 .flags = MXC_EHCI_INTERFACE_DIFF_UNI, 217 .flags = MXC_EHCI_INTERFACE_DIFF_UNI,
219}; 218};
220 219
221static struct mxc_usbh_platform_data usbh2_pdata = { 220static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
222 .portsc = MXC_EHCI_MODE_ULPI, 221 .portsc = MXC_EHCI_MODE_ULPI,
223 .flags = MXC_EHCI_INTERFACE_DIFF_UNI, 222 .flags = MXC_EHCI_INTERFACE_DIFF_UNI,
224}; 223};
@@ -281,13 +280,13 @@ static void __init eukrea_cpuimx27_init(void)
281 otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, 280 otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
282 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT); 281 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
283 282
284 mxc_register_device(&mxc_otg_host, &otg_pdata); 283 imx27_add_mxc_ehci_otg(&otg_pdata);
285 } 284 }
286 285
287 usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, 286 usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
288 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT); 287 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
289 288
290 mxc_register_device(&mxc_usbh2, &usbh2_pdata); 289 imx27_add_mxc_ehci_hs(2, &usbh2_pdata);
291#endif 290#endif
292 if (!otg_mode_host) 291 if (!otg_mode_host)
293 mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata); 292 mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata);
diff --git a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
index deef1fa1138e..c9f12e44a2ab 100644
--- a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
+++ b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c
@@ -35,7 +35,6 @@
35#include <asm/mach/time.h> 35#include <asm/mach/time.h>
36#include <mach/common.h> 36#include <mach/common.h>
37#include <mach/iomux.h> 37#include <mach/iomux.h>
38#include <mach/mxc_ehci.h>
39 38
40#include "devices-imx27.h" 39#include "devices-imx27.h"
41#include "devices.h" 40#include "devices.h"
@@ -215,7 +214,8 @@ static int otg_phy_init(struct platform_device *pdev)
215 return 0; 214 return 0;
216} 215}
217 216
218static struct mxc_usbh_platform_data visstrim_m10_usbotg_pdata = { 217static const struct mxc_usbh_platform_data
218visstrim_m10_usbotg_pdata __initconst = {
219 .init = otg_phy_init, 219 .init = otg_phy_init,
220 .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT, 220 .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
221 .flags = MXC_EHCI_POWER_PINS_ENABLED, 221 .flags = MXC_EHCI_POWER_PINS_ENABLED,
@@ -237,7 +237,7 @@ static void __init visstrim_m10_board_init(void)
237 imx27_add_imx_i2c(0, &visstrim_m10_i2c_data); 237 imx27_add_imx_i2c(0, &visstrim_m10_i2c_data);
238 imx27_add_imx_i2c(1, &visstrim_m10_i2c_data); 238 imx27_add_imx_i2c(1, &visstrim_m10_i2c_data);
239 imx27_add_mxc_mmc(0, &visstrim_m10_sdhc_pdata); 239 imx27_add_mxc_mmc(0, &visstrim_m10_sdhc_pdata);
240 mxc_register_device(&mxc_otg_host, &visstrim_m10_usbotg_pdata); 240 imx27_add_mxc_ehci_otg(&visstrim_m10_usbotg_pdata);
241 imx27_add_fec(NULL); 241 imx27_add_fec(NULL);
242 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); 242 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
243} 243}
diff --git a/arch/arm/mach-imx/mach-pca100.c b/arch/arm/mach-imx/mach-pca100.c
index b05f528bfc00..683374d94024 100644
--- a/arch/arm/mach-imx/mach-pca100.c
+++ b/arch/arm/mach-imx/mach-pca100.c
@@ -40,7 +40,6 @@
40#include <mach/audmux.h> 40#include <mach/audmux.h>
41#include <mach/mxc_nand.h> 41#include <mach/mxc_nand.h>
42#include <mach/irqs.h> 42#include <mach/irqs.h>
43#include <mach/mxc_ehci.h>
44#include <mach/ulpi.h> 43#include <mach/ulpi.h>
45 44
46#include "devices-imx27.h" 45#include "devices-imx27.h"
@@ -279,7 +278,7 @@ static int otg_phy_init(struct platform_device *pdev)
279 return 0; 278 return 0;
280} 279}
281 280
282static struct mxc_usbh_platform_data otg_pdata = { 281static struct mxc_usbh_platform_data otg_pdata __initdata = {
283 .init = otg_phy_init, 282 .init = otg_phy_init,
284 .portsc = MXC_EHCI_MODE_ULPI, 283 .portsc = MXC_EHCI_MODE_ULPI,
285 .flags = MXC_EHCI_INTERFACE_DIFF_UNI, 284 .flags = MXC_EHCI_INTERFACE_DIFF_UNI,
@@ -291,7 +290,7 @@ static int usbh2_phy_init(struct platform_device *pdev)
291 return 0; 290 return 0;
292} 291}
293 292
294static struct mxc_usbh_platform_data usbh2_pdata = { 293static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
295 .init = usbh2_phy_init, 294 .init = usbh2_phy_init,
296 .portsc = MXC_EHCI_MODE_ULPI, 295 .portsc = MXC_EHCI_MODE_ULPI,
297 .flags = MXC_EHCI_INTERFACE_DIFF_UNI, 296 .flags = MXC_EHCI_INTERFACE_DIFF_UNI,
@@ -410,13 +409,13 @@ static void __init pca100_init(void)
410 otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, 409 otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
411 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT); 410 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
412 411
413 mxc_register_device(&mxc_otg_host, &otg_pdata); 412 imx27_add_mxc_ehci_otg(&otg_pdata);
414 } 413 }
415 414
416 usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, 415 usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
417 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT); 416 ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
418 417
419 mxc_register_device(&mxc_usbh2, &usbh2_pdata); 418 imx27_add_mxc_ehci_hs(2, &usbh2_pdata);
420#endif 419#endif
421 if (!otg_mode_host) { 420 if (!otg_mode_host) {
422 gpio_set_value(OTG_PHY_CS_GPIO, 0); 421 gpio_set_value(OTG_PHY_CS_GPIO, 0);
diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c
index b3340cd8ccdd..e209b28bee4d 100644
--- a/arch/arm/mach-imx/mach-pcm038.c
+++ b/arch/arm/mach-imx/mach-pcm038.c
@@ -37,7 +37,6 @@
37#include <mach/hardware.h> 37#include <mach/hardware.h>
38#include <mach/iomux-mx27.h> 38#include <mach/iomux-mx27.h>
39#include <mach/mxc_nand.h> 39#include <mach/mxc_nand.h>
40#include <mach/mxc_ehci.h>
41#include <mach/ulpi.h> 40#include <mach/ulpi.h>
42 41
43#include "devices-imx27.h" 42#include "devices-imx27.h"
@@ -283,7 +282,7 @@ static struct spi_board_info pcm038_spi_board_info[] __initdata = {
283 } 282 }
284}; 283};
285 284
286static struct mxc_usbh_platform_data usbh2_pdata = { 285static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {
287 .portsc = MXC_EHCI_MODE_ULPI, 286 .portsc = MXC_EHCI_MODE_ULPI,
288 .flags = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI, 287 .flags = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI,
289}; 288};
@@ -320,7 +319,7 @@ static void __init pcm038_init(void)
320 spi_register_board_info(pcm038_spi_board_info, 319 spi_register_board_info(pcm038_spi_board_info,
321 ARRAY_SIZE(pcm038_spi_board_info)); 320 ARRAY_SIZE(pcm038_spi_board_info));
322 321
323 mxc_register_device(&mxc_usbh2, &usbh2_pdata); 322 imx27_add_mxc_ehci_hs(2, &usbh2_pdata);
324 323
325 imx27_add_fec(NULL); 324 imx27_add_fec(NULL);
326 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); 325 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));