diff options
| -rw-r--r-- | arch/arm/mach-mx5/board-mx51_babbage.c | 28 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/clock-mx51.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/devices.c | 12 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/devices.h | 1 |
4 files changed, 42 insertions, 1 deletions
diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c index 99f7ea903a51..dacf506f18ba 100644 --- a/arch/arm/mach-mx5/board-mx51_babbage.c +++ b/arch/arm/mach-mx5/board-mx51_babbage.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/gpio.h> | 15 | #include <linux/gpio.h> |
| 16 | #include <linux/delay.h> | 16 | #include <linux/delay.h> |
| 17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
| 18 | #include <linux/fsl_devices.h> | ||
| 18 | 19 | ||
| 19 | #include <mach/common.h> | 20 | #include <mach/common.h> |
| 20 | #include <mach/hardware.h> | 21 | #include <mach/hardware.h> |
| @@ -179,12 +180,32 @@ static struct mxc_usbh_platform_data dr_utmi_config = { | |||
| 179 | .flags = MXC_EHCI_INTERNAL_PHY, | 180 | .flags = MXC_EHCI_INTERNAL_PHY, |
| 180 | }; | 181 | }; |
| 181 | 182 | ||
| 183 | static struct fsl_usb2_platform_data usb_pdata = { | ||
| 184 | .operating_mode = FSL_USB2_DR_DEVICE, | ||
| 185 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, | ||
| 186 | }; | ||
| 187 | |||
| 182 | static struct mxc_usbh_platform_data usbh1_config = { | 188 | static struct mxc_usbh_platform_data usbh1_config = { |
| 183 | .init = initialize_usbh1_port, | 189 | .init = initialize_usbh1_port, |
| 184 | .portsc = MXC_EHCI_MODE_ULPI, | 190 | .portsc = MXC_EHCI_MODE_ULPI, |
| 185 | .flags = (MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_ITC_NO_THRESHOLD), | 191 | .flags = (MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_ITC_NO_THRESHOLD), |
| 186 | }; | 192 | }; |
| 187 | 193 | ||
| 194 | static int otg_mode_host; | ||
| 195 | |||
| 196 | static int __init babbage_otg_mode(char *options) | ||
| 197 | { | ||
| 198 | if (!strcmp(options, "host")) | ||
| 199 | otg_mode_host = 1; | ||
| 200 | else if (!strcmp(options, "device")) | ||
| 201 | otg_mode_host = 0; | ||
| 202 | else | ||
| 203 | pr_info("otg_mode neither \"host\" nor \"device\". " | ||
| 204 | "Defaulting to device\n"); | ||
| 205 | return 0; | ||
| 206 | } | ||
| 207 | __setup("otg_mode=", babbage_otg_mode); | ||
| 208 | |||
| 188 | /* | 209 | /* |
| 189 | * Board specific initialization. | 210 | * Board specific initialization. |
| 190 | */ | 211 | */ |
| @@ -197,7 +218,12 @@ static void __init mxc_board_init(void) | |||
| 197 | mxc_init_imx_uart(); | 218 | mxc_init_imx_uart(); |
| 198 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 219 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 199 | 220 | ||
| 200 | mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); | 221 | if (otg_mode_host) |
| 222 | mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); | ||
| 223 | else { | ||
| 224 | initialize_otg_port(NULL); | ||
| 225 | mxc_register_device(&mxc_usbdr_udc_device, &usb_pdata); | ||
| 226 | } | ||
| 201 | 227 | ||
| 202 | gpio_usbh1_active(); | 228 | gpio_usbh1_active(); |
| 203 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); | 229 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); |
diff --git a/arch/arm/mach-mx5/clock-mx51.c b/arch/arm/mach-mx5/clock-mx51.c index 566cfda6185e..9b93de36cf25 100644 --- a/arch/arm/mach-mx5/clock-mx51.c +++ b/arch/arm/mach-mx5/clock-mx51.c | |||
| @@ -818,6 +818,8 @@ static struct clk_lookup lookups[] = { | |||
| 818 | _REGISTER_CLOCK("mxc-ehci.0", "usb_ahb", ahb_clk) | 818 | _REGISTER_CLOCK("mxc-ehci.0", "usb_ahb", ahb_clk) |
| 819 | _REGISTER_CLOCK("mxc-ehci.1", "usb", usboh3_clk) | 819 | _REGISTER_CLOCK("mxc-ehci.1", "usb", usboh3_clk) |
| 820 | _REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", ahb_clk) | 820 | _REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", ahb_clk) |
| 821 | _REGISTER_CLOCK("fsl-usb2-udc", "usb", usboh3_clk) | ||
| 822 | _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", ahb_clk) | ||
| 821 | }; | 823 | }; |
| 822 | 824 | ||
| 823 | static void clk_tree_init(void) | 825 | static void clk_tree_init(void) |
diff --git a/arch/arm/mach-mx5/devices.c b/arch/arm/mach-mx5/devices.c index e6262f31ed8f..23850e637dc3 100644 --- a/arch/arm/mach-mx5/devices.c +++ b/arch/arm/mach-mx5/devices.c | |||
| @@ -107,6 +107,18 @@ static struct resource usbotg_resources[] = { | |||
| 107 | }, | 107 | }, |
| 108 | }; | 108 | }; |
| 109 | 109 | ||
| 110 | /* OTG gadget device */ | ||
| 111 | struct platform_device mxc_usbdr_udc_device = { | ||
| 112 | .name = "fsl-usb2-udc", | ||
| 113 | .id = -1, | ||
| 114 | .num_resources = ARRAY_SIZE(usbotg_resources), | ||
| 115 | .resource = usbotg_resources, | ||
| 116 | .dev = { | ||
| 117 | .dma_mask = &usb_dma_mask, | ||
| 118 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 119 | }, | ||
| 120 | }; | ||
| 121 | |||
| 110 | struct platform_device mxc_usbdr_host_device = { | 122 | struct platform_device mxc_usbdr_host_device = { |
| 111 | .name = "mxc-ehci", | 123 | .name = "mxc-ehci", |
| 112 | .id = 0, | 124 | .id = 0, |
diff --git a/arch/arm/mach-mx5/devices.h b/arch/arm/mach-mx5/devices.h index 95c45f9e46ca..0494d6bbcc5f 100644 --- a/arch/arm/mach-mx5/devices.h +++ b/arch/arm/mach-mx5/devices.h | |||
| @@ -4,3 +4,4 @@ extern struct platform_device mxc_uart_device2; | |||
| 4 | extern struct platform_device mxc_fec_device; | 4 | extern struct platform_device mxc_fec_device; |
| 5 | extern struct platform_device mxc_usbdr_host_device; | 5 | extern struct platform_device mxc_usbdr_host_device; |
| 6 | extern struct platform_device mxc_usbh1_device; | 6 | extern struct platform_device mxc_usbh1_device; |
| 7 | extern struct platform_device mxc_usbdr_udc_device; | ||
