diff options
Diffstat (limited to 'arch/arm/mach-mx3/mach-pcm043.c')
-rw-r--r-- | arch/arm/mach-mx3/mach-pcm043.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/arch/arm/mach-mx3/mach-pcm043.c b/arch/arm/mach-mx3/mach-pcm043.c index 25942b8e8bed..a9741c2b379f 100644 --- a/arch/arm/mach-mx3/mach-pcm043.c +++ b/arch/arm/mach-mx3/mach-pcm043.c | |||
@@ -28,6 +28,9 @@ | |||
28 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
29 | #include <linux/i2c.h> | 29 | #include <linux/i2c.h> |
30 | #include <linux/i2c/at24.h> | 30 | #include <linux/i2c/at24.h> |
31 | #include <linux/usb/otg.h> | ||
32 | #include <linux/usb/ulpi.h> | ||
33 | #include <linux/fsl_devices.h> | ||
31 | 34 | ||
32 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
33 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
@@ -44,6 +47,8 @@ | |||
44 | #include <mach/ipu.h> | 47 | #include <mach/ipu.h> |
45 | #include <mach/mx3fb.h> | 48 | #include <mach/mx3fb.h> |
46 | #include <mach/mxc_nand.h> | 49 | #include <mach/mxc_nand.h> |
50 | #include <mach/mxc_ehci.h> | ||
51 | #include <mach/ulpi.h> | ||
47 | 52 | ||
48 | #include "devices.h" | 53 | #include "devices.h" |
49 | 54 | ||
@@ -205,6 +210,9 @@ static struct pad_desc pcm043_pads[] = { | |||
205 | MX35_PAD_D3_CLS__IPU_DISPB_D3_CLS, | 210 | MX35_PAD_D3_CLS__IPU_DISPB_D3_CLS, |
206 | /* gpio */ | 211 | /* gpio */ |
207 | MX35_PAD_ATA_CS0__GPIO2_6, | 212 | MX35_PAD_ATA_CS0__GPIO2_6, |
213 | /* USB host */ | ||
214 | MX35_PAD_I2C2_CLK__USB_TOP_USBH2_PWR, | ||
215 | MX35_PAD_I2C2_DAT__USB_TOP_USBH2_OC, | ||
208 | }; | 216 | }; |
209 | 217 | ||
210 | static struct mxc_nand_platform_data pcm037_nand_board_info = { | 218 | static struct mxc_nand_platform_data pcm037_nand_board_info = { |
@@ -212,6 +220,37 @@ static struct mxc_nand_platform_data pcm037_nand_board_info = { | |||
212 | .hw_ecc = 1, | 220 | .hw_ecc = 1, |
213 | }; | 221 | }; |
214 | 222 | ||
223 | static struct mxc_usbh_platform_data otg_pdata = { | ||
224 | .portsc = MXC_EHCI_MODE_UTMI, | ||
225 | .flags = MXC_EHCI_INTERFACE_DIFF_UNI, | ||
226 | }; | ||
227 | |||
228 | static struct mxc_usbh_platform_data usbh1_pdata = { | ||
229 | .portsc = MXC_EHCI_MODE_SERIAL, | ||
230 | .flags = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY | | ||
231 | MXC_EHCI_IPPUE_DOWN, | ||
232 | }; | ||
233 | |||
234 | static struct fsl_usb2_platform_data otg_device_pdata = { | ||
235 | .operating_mode = FSL_USB2_DR_DEVICE, | ||
236 | .phy_mode = FSL_USB2_PHY_UTMI, | ||
237 | }; | ||
238 | |||
239 | static int otg_mode_host; | ||
240 | |||
241 | static int __init pcm043_otg_mode(char *options) | ||
242 | { | ||
243 | if (!strcmp(options, "host")) | ||
244 | otg_mode_host = 1; | ||
245 | else if (!strcmp(options, "device")) | ||
246 | otg_mode_host = 0; | ||
247 | else | ||
248 | pr_info("otg_mode neither \"host\" nor \"device\". " | ||
249 | "Defaulting to device\n"); | ||
250 | return 0; | ||
251 | } | ||
252 | __setup("otg_mode=", pcm043_otg_mode); | ||
253 | |||
215 | /* | 254 | /* |
216 | * Board specific initialization. | 255 | * Board specific initialization. |
217 | */ | 256 | */ |
@@ -235,6 +274,20 @@ static void __init mxc_board_init(void) | |||
235 | 274 | ||
236 | mxc_register_device(&mx3_ipu, &mx3_ipu_data); | 275 | mxc_register_device(&mx3_ipu, &mx3_ipu_data); |
237 | mxc_register_device(&mx3_fb, &mx3fb_pdata); | 276 | mxc_register_device(&mx3_fb, &mx3fb_pdata); |
277 | |||
278 | #if defined(CONFIG_USB_ULPI) | ||
279 | if (otg_mode_host) { | ||
280 | otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, | ||
281 | USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT); | ||
282 | |||
283 | mxc_register_device(&mxc_otg_host, &otg_pdata); | ||
284 | } | ||
285 | |||
286 | mxc_register_device(&mxc_usbh1, &usbh1_pdata); | ||
287 | #endif | ||
288 | if (!otg_mode_host) | ||
289 | mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata); | ||
290 | |||
238 | } | 291 | } |
239 | 292 | ||
240 | static void __init pcm043_timer_init(void) | 293 | static void __init pcm043_timer_init(void) |