ARM i.MX ehci: do ehci init in board specific functions
authorSascha Hauer <s.hauer@pengutronix.de>
Mon, 3 Jan 2011 10:30:28 +0000 (11:30 +0100)
committerSascha Hauer <s.hauer@pengutronix.de>
Fri, 11 Feb 2011 07:40:45 +0000 (08:40 +0100)
The mxc-ehci driver calls SoC specific phy initialization right after
calling board specific initialization. To offer greater flexibility for
boards to setup the phy and to get rid of some unnecessary flags in
platform data this patch lets the boards call the SoC specific phy
initialization and remove it from the driver.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
27 files changed:
arch/arm/mach-imx/mach-cpuimx27.c
arch/arm/mach-imx/mach-eukrea_cpuimx25.c
arch/arm/mach-imx/mach-imx27_visstrim_m10.c
arch/arm/mach-imx/mach-mx25_3ds.c
arch/arm/mach-imx/mach-mx27_3ds.c
arch/arm/mach-imx/mach-pca100.c
arch/arm/mach-imx/mach-pcm038.c
arch/arm/mach-mx3/mach-armadillo5x0.c
arch/arm/mach-mx3/mach-cpuimx35.c
arch/arm/mach-mx3/mach-mx31_3ds.c
arch/arm/mach-mx3/mach-mx31lilly.c
arch/arm/mach-mx3/mach-mx31lite.c
arch/arm/mach-mx3/mach-mx31moboard.c
arch/arm/mach-mx3/mach-mx35_3ds.c
arch/arm/mach-mx3/mach-pcm037.c
arch/arm/mach-mx3/mach-pcm043.c
arch/arm/mach-mx3/mx31moboard-devboard.c
arch/arm/mach-mx3/mx31moboard-marxbot.c
arch/arm/mach-mx3/mx31moboard-smartbot.c
arch/arm/mach-mx5/board-cpuimx51.c
arch/arm/mach-mx5/board-cpuimx51sd.c
arch/arm/mach-mx5/board-mx51_babbage.c
arch/arm/mach-mx5/board-mx51_efikamx.c
arch/arm/plat-mxc/Makefile
arch/arm/plat-mxc/ehci.c [deleted file]
arch/arm/plat-mxc/include/mach/mxc_ehci.h
drivers/usb/host/ehci-mxc.c

index cabb800adbb643a0aad8a07928bab9b325496b51..6b724c2ed0a7ead99954b13c989a04f7addc1f43 100644 (file)
@@ -210,14 +210,24 @@ static struct platform_device serial_device = {
 #endif
 
 #if defined(CONFIG_USB_ULPI)
+static int eukrea_cpuimx27_otg_init(struct platform_device *pdev)
+{
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
+       .init   = eukrea_cpuimx27_otg_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
+static int eukrea_cpuimx27_usbh2_init(struct platform_device *pdev)
+{
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
+       .init   = eukrea_cpuimx27_usbh2_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 #endif
 
index 439167dbe8f64ed29b78117a320a2be5432e3345..9da8d18eeb00667b484086773d7ba1b807b3ed68 100644 (file)
@@ -84,15 +84,25 @@ static struct i2c_board_info eukrea_cpuimx25_i2c_devices[] = {
        },
 };
 
+static int eukrea_cpuimx25_otg_init(struct platform_device *pdev)
+{
+       return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static const struct mxc_usbh_platform_data otg_pdata __initconst = {
+       .init   = eukrea_cpuimx25_otg_init,
        .portsc = MXC_EHCI_MODE_UTMI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
+static int eukrea_cpuimx25_usbh2_init(struct platform_device *pdev)
+{
+       return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
+                       MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN);
+}
+
 static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {
+       .init   = eukrea_cpuimx25_usbh2_init,
        .portsc = MXC_EHCI_MODE_SERIAL,
-       .flags  = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY |
-                 MXC_EHCI_IPPUE_DOWN,
 };
 
 static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
index 494723bf7ea74d6df468ee960d3d42f5a12b1543..ffff2d03f7824cad57557a97e688734bae8c1e1e 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/gpio_keys.h>
 #include <linux/input.h>
 #include <linux/gpio.h>
+#include <linux/delay.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/time.h>
@@ -210,14 +211,16 @@ static struct i2c_board_info visstrim_m10_i2c_devices[] = {
 static int otg_phy_init(struct platform_device *pdev)
 {
        gpio_set_value(OTG_PHY_CS_GPIO, 0);
-       return 0;
+
+       mdelay(10);
+
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
 }
 
 static const struct mxc_usbh_platform_data
 visstrim_m10_usbotg_pdata __initconst = {
        .init = otg_phy_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 
 static void __init visstrim_m10_board_init(void)
index cd18a0c91b837a491e217b9606949d6eaff60f9a..aafc6f7f1816f84af6ca93f7bb3243f9ae8f7aad 100644 (file)
@@ -185,9 +185,14 @@ static const struct matrix_keymap_data mx25pdk_keymap_data __initconst = {
        .keymap_size    = ARRAY_SIZE(mx25pdk_keymap),
 };
 
+static int mx25pdk_usbh2_init(struct platform_device *pdev)
+{
+       return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY);
+}
+
 static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {
+       .init   = mx25pdk_usbh2_init,
        .portsc = MXC_EHCI_MODE_SERIAL,
-       .flags  = MXC_EHCI_INTERNAL_PHY,
 };
 
 static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
index 4e0e225ca4a231f9a3ff068560e749f80fcfcc81..ba88417345abe9e5dce5aa1e5d8c1902c56427d7 100644 (file)
@@ -160,10 +160,14 @@ static int otg_phy_init(void)
 }
 
 #if defined(CONFIG_USB_ULPI)
+static int mx27_3ds_otg_init(struct platform_device *pdev)
+{
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
 
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
+       .init   = mx27_3ds_otg_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 #endif
 
index 3514178caeda56af156aee326ec5f09335f2fe5d..f754bab040b65405e0822fd8e74f5d792f1ed82b 100644 (file)
@@ -271,25 +271,29 @@ static const struct imxmmc_platform_data sdhc_pdata __initconst = {
 static int otg_phy_init(struct platform_device *pdev)
 {
        gpio_set_value(OTG_PHY_CS_GPIO, 0);
-       return 0;
+
+       mdelay(10);
+
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
 }
 
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
        .init   = otg_phy_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
 static int usbh2_phy_init(struct platform_device *pdev)
 {
        gpio_set_value(USBH2_PHY_CS_GPIO, 0);
-       return 0;
+
+       mdelay(10);
+
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
 }
 
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
        .init   = usbh2_phy_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 #endif
 
index 9656ef38ca961a0b423c55ddf0b383b184caef10..38c77084b615222d4064fae7d8f7b1c5adaa4426 100644 (file)
@@ -281,9 +281,15 @@ static struct spi_board_info pcm038_spi_board_info[] __initdata = {
        }
 };
 
+static int pcm038_usbh2_init(struct platform_device *pdev)
+{
+       return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {
+       .init   = pcm038_usbh2_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
 static void __init pcm038_init(void)
index 835e2a082b41f5d9b2933d5497c3ca72c59df78f..34e619e811e6f65be0a2b8c36a4608b8f024fe7c 100644 (file)
@@ -176,8 +176,10 @@ static int usbotg_init(struct platform_device *pdev)
        gpio_set_value(OTG_RESET, 0/*LOW*/);
        mdelay(5);
        gpio_set_value(OTG_RESET, 1/*HIGH*/);
+       mdelay(10);
 
-       return 0;
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_INTERFACE_DIFF_UNI);
 
 otg_free_reset:
        gpio_free(OTG_RESET);
@@ -233,8 +235,10 @@ static int usbh2_init(struct platform_device *pdev)
        gpio_set_value(USBH2_RESET, 0/*LOW*/);
        mdelay(5);
        gpio_set_value(USBH2_RESET, 1/*HIGH*/);
+       mdelay(10);
 
-       return 0;
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_INTERFACE_DIFF_UNI);
 
 h2_free_reset:
        gpio_free(USBH2_RESET);
@@ -246,13 +250,11 @@ h2_free_cs:
 static struct mxc_usbh_platform_data usbotg_pdata __initdata = {
        .init   = usbotg_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
        .init   = usbh2_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 #endif /* CONFIG_USB_ULPI */
 
index 3eedf0fcaeddae82bfbbbf0d221508551547a0fc..0f2305626e17a840631efdaa142a071ef12bcd2f 100644 (file)
@@ -111,15 +111,25 @@ static const struct mxc_nand_platform_data
        .flash_bbt      = 1,
 };
 
+static int eukrea_cpuimx35_otg_init(struct platform_device *pdev)
+{
+       return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static const struct mxc_usbh_platform_data otg_pdata __initconst = {
+       .init   = eukrea_cpuimx35_otg_init,
        .portsc = MXC_EHCI_MODE_UTMI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
+static int eukrea_cpuimx35_usbh1_init(struct platform_device *pdev)
+{
+       return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
+                       MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN);
+}
+
 static const struct mxc_usbh_platform_data usbh1_pdata __initconst = {
+       .init   = eukrea_cpuimx35_usbh1_init,
        .portsc = MXC_EHCI_MODE_SERIAL,
-       .flags  = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY |
-                 MXC_EHCI_IPPUE_DOWN,
 };
 
 static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
index 3d0ded92a8a2a08f631698774430ea39c28152eb..2d744b27f63cbdb346de2c08b7c5dffe44d0070d 100644 (file)
@@ -245,7 +245,13 @@ usbotg_free_reset:
        return err;
 }
 
-static int __maybe_unused mx31_3ds_host2_init(struct platform_device *pdev)
+#if defined(CONFIG_USB_ULPI)
+static int mx31_3ds_otg_init(struct platform_device *pdev)
+{
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
+}
+
+static int mx31_3ds_host2_init(struct platform_device *pdev)
 {
        int err;
 
@@ -276,23 +282,24 @@ static int __maybe_unused mx31_3ds_host2_init(struct platform_device *pdev)
 
        mdelay(1);
        gpio_set_value(USBH2_RST_B, 1);
-       return 0;
+
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
 
 usbotg_free_reset:
        gpio_free(USBH2_RST_B);
        return err;
 }
 
-#if defined(CONFIG_USB_ULPI)
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
+       .init   = mx31_3ds_otg_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
        .init = mx31_3ds_host2_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 #endif
 
index 1c3f4913d1ea5c25e37a743ea2dc13909eda6bb3..be79a0d6301e7d08295b6f6958d3d2fe5d78718f 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/init.h>
 #include <linux/clk.h>
 #include <linux/gpio.h>
+#include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/smsc911x.h>
@@ -156,7 +157,9 @@ static int usbotg_init(struct platform_device *pdev)
        gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE2), "USBH1 CS");
        gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE2), 0);
 
-       return 0;
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
 }
 
 static int usbh1_init(struct platform_device *pdev)
@@ -183,7 +186,10 @@ static int usbh1_init(struct platform_device *pdev)
 
        mxc_iomux_set_gpr(MUX_PGP_USB_SUSPEND, true);
 
-       return 0;
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_INTERFACE_SINGLE_UNI);
 }
 
 static int usbh2_init(struct platform_device *pdev)
@@ -220,25 +226,24 @@ static int usbh2_init(struct platform_device *pdev)
        gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), "USBH2 CS");
        gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), 0);
 
-       return 0;
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
 }
 
 static struct mxc_usbh_platform_data usbotg_pdata = {
        .init   = usbotg_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 
 static const struct mxc_usbh_platform_data usbh1_pdata __initconst = {
        .init   = usbh1_init,
        .portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_SINGLE_UNI,
 };
 
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
        .init   = usbh2_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 
 static void lilly1131_usb_init(void)
index 01e24b5045e44a33c8983f38be9e7604c4ab52dd..e146f1a72daa6a024185401278c8d2ebc99bb498 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/usb/otg.h>
 #include <linux/usb/ulpi.h>
 #include <linux/mtd/physmap.h>
+#include <linux/delay.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -167,13 +168,14 @@ static int usbh2_init(struct platform_device *pdev)
        gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), "USBH2 CS");
        gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), 0);
 
-       return 0;
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
 }
 
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
        .init   = usbh2_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 #endif
 
index fd988a0d9a5ed5e45fcd92b69bbd7abd9e1a7739..ea880330e83943663c4da9ee054e8e784f650a5e 100644 (file)
@@ -401,10 +401,14 @@ static void usb_xcvr_reset(void)
 }
 
 #if defined(CONFIG_USB_ULPI)
+static int moboard_usbh2_init_hw(struct platform_device *pdev)
+{
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
+}
 
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
+       .init   = moboard_usbh2_init_hw,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 
 static int __init moboard_usbh2_init(void)
index c5115dc5c0c551f56dc8bed58e761a4a45c71d61..dac1896a5b21e8f2807a6b44b2d5d869a6a8a95c 100644 (file)
@@ -120,6 +120,11 @@ static iomux_v3_cfg_t mx35pdk_pads[] = {
        MX35_PAD_SD1_DATA3__ESDHC1_DAT3,
 };
 
+static int mx35_3ds_otg_init(struct platform_device *pdev)
+{
+       return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY);
+}
+
 /* OTG config */
 static const struct fsl_usb2_platform_data usb_otg_pdata __initconst = {
        .operating_mode = FSL_USB2_DR_DEVICE,
@@ -127,15 +132,20 @@ static const struct fsl_usb2_platform_data usb_otg_pdata __initconst = {
 };
 
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
+       .init   = mx35_3ds_otg_init,
        .portsc = MXC_EHCI_MODE_UTMI,
-       .flags  = MXC_EHCI_INTERNAL_PHY,
 };
 
+static int mx35_3ds_usbh_init(struct platform_device *pdev)
+{
+       return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
+                         MXC_EHCI_INTERNAL_PHY);
+}
+
 /* USB HOST config */
 static const struct mxc_usbh_platform_data usb_host_pdata __initconst = {
+       .init           = mx35_3ds_usbh_init,
        .portsc         = MXC_EHCI_MODE_SERIAL,
-       .flags          = MXC_EHCI_INTERFACE_SINGLE_UNI |
-                         MXC_EHCI_INTERNAL_PHY,
 };
 
 static int otg_mode_host;
index 7d444f714f30d15080cb10b8c0e617a66943ad23..55f95d42f71c230a883450bd2aa3a8634500e6d9 100644 (file)
@@ -534,14 +534,24 @@ static struct platform_device pcm970_sja1000 = {
 };
 
 #if defined(CONFIG_USB_ULPI)
+static int pcm037_otg_init(struct platform_device *pdev)
+{
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
+       .init   = pcm037_otg_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 
+static int pcm037_usbh2_init(struct platform_device *pdev)
+{
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
+       .init   = pcm037_usbh2_init,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 #endif
 
index b03e19d654871f5bbb843cc02380960c9a448d3a..4fa07142a9bb6a7738bd25b83a12efbc21dcf97b 100644 (file)
@@ -306,16 +306,26 @@ pcm037_nand_board_info __initconst = {
 };
 
 #if defined(CONFIG_USB_ULPI)
+static int pcm043_otg_init(struct platform_device *pdev)
+{
+       return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
+}
+
 static struct mxc_usbh_platform_data otg_pdata __initdata = {
+       .init   = pcm043_otg_init,
        .portsc = MXC_EHCI_MODE_UTMI,
-       .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 };
 #endif
 
+static int pcm043_usbh1_init(struct platform_device *pdev)
+{
+       return mx35_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
+                       MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN);
+}
+
 static const struct mxc_usbh_platform_data usbh1_pdata __initconst = {
+       .init   = pcm043_usbh1_init,
        .portsc = MXC_EHCI_MODE_SERIAL,
-       .flags  = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY |
-                 MXC_EHCI_IPPUE_DOWN,
 };
 
 static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
index 94a0b9e4b7f3047b41b7cbab2eb1cd30519cbdc7..6410b9c48a0268ebd267f94068840da2597626d7 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/gpio.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/types.h>
@@ -149,7 +150,10 @@ static int devboard_usbh1_hw_init(struct platform_device *pdev)
        mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, USB_PAD_CFG);
        mxc_iomux_set_pad(MX31_PIN_SFS6, USB_PAD_CFG);
 
-       return 0;
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_INTERFACE_SINGLE_UNI);
 }
 
 #define USBH1_VBUSEN_B IOMUX_TO_GPIO(MX31_PIN_NFRE_B)
@@ -187,7 +191,6 @@ static int devboard_isp1105_set_vbus(struct otg_transceiver *otg, bool on)
 static struct mxc_usbh_platform_data usbh1_pdata __initdata = {
        .init   = devboard_usbh1_hw_init,
        .portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_SINGLE_UNI,
 };
 
 static int __init devboard_usbh1_init(void)
index f449a97ae1a22293e3e5bc61881aa551a2b211eb..57f7b00cb7094b2bf320c1080f0376847f20aa81 100644 (file)
@@ -265,7 +265,10 @@ static int marxbot_usbh1_hw_init(struct platform_device *pdev)
        mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, USB_PAD_CFG);
        mxc_iomux_set_pad(MX31_PIN_SFS6, USB_PAD_CFG);
 
-       return 0;
+       mdelay(10);
+
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_INTERFACE_SINGLE_UNI);
 }
 
 #define USBH1_VBUSEN_B IOMUX_TO_GPIO(MX31_PIN_NFRE_B)
@@ -303,7 +306,6 @@ static int marxbot_isp1105_set_vbus(struct otg_transceiver *otg, bool on)
 static struct mxc_usbh_platform_data usbh1_pdata __initdata = {
        .init   = marxbot_usbh1_hw_init,
        .portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_SINGLE_UNI,
 };
 
 static int __init marxbot_usbh1_init(void)
index bbec3c82264ac727ce4a64e425c99b3018cc817c..87d556f40ecf2f9dda7b043d8336067ac72c8195 100644 (file)
@@ -123,9 +123,14 @@ static const struct fsl_usb2_platform_data usb_pdata __initconst = {
 
 #if defined(CONFIG_USB_ULPI)
 
+static int smartbot_otg_init(struct platform_device *pdev)
+{
+       return mx31_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
+}
+
 static struct mxc_usbh_platform_data otg_host_pdata __initdata = {
+       .init   = smartbot_otg_init,
        .portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
-       .flags  = MXC_EHCI_POWER_PINS_ENABLED,
 };
 
 static int __init smartbot_otg_host_init(void)
index 2d4199d379056778e21a7a1d63cc73a82c38ea7c..d0296a94c475dda0448ade48b192a790e6047c34 100644 (file)
@@ -184,7 +184,10 @@ static int initialize_otg_port(struct platform_device *pdev)
        v |= MX51_USB_PLL_DIV_19_2_MHZ;
        __raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(0, MXC_EHCI_INTERNAL_PHY);
 }
 
 static int initialize_usbh1_port(struct platform_device *pdev)
@@ -202,13 +205,16 @@ static int initialize_usbh1_port(struct platform_device *pdev)
        v = __raw_readl(usbother_base + MX51_USB_CTRL_1_OFFSET);
        __raw_writel(v | MX51_USB_CTRL_UH1_EXT_CLK_EN, usbother_base + MX51_USB_CTRL_1_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(1, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_ITC_NO_THRESHOLD);
 }
 
 static struct mxc_usbh_platform_data dr_utmi_config = {
        .init           = initialize_otg_port,
        .portsc = MXC_EHCI_UTMI_16BIT,
-       .flags  = MXC_EHCI_INTERNAL_PHY,
 };
 
 static struct fsl_usb2_platform_data usb_pdata = {
@@ -219,7 +225,6 @@ static struct fsl_usb2_platform_data usb_pdata = {
 static struct mxc_usbh_platform_data usbh1_config = {
        .init           = initialize_usbh1_port,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = (MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_ITC_NO_THRESHOLD),
 };
 
 static int otg_mode_host;
index 6c3b445e3951d2b63c5d54b3cee2634b084e49bb..f38b341ac405df262b4f203d808f8dcf219506ce 100644 (file)
@@ -167,7 +167,10 @@ static int initialize_otg_port(struct platform_device *pdev)
        v |= MX51_USB_PLL_DIV_19_2_MHZ;
        __raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(0, MXC_EHCI_INTERNAL_PHY);
 }
 
 static int initialize_usbh1_port(struct platform_device *pdev)
@@ -186,13 +189,16 @@ static int initialize_usbh1_port(struct platform_device *pdev)
        __raw_writel(v | MX51_USB_CTRL_UH1_EXT_CLK_EN,
                        usbother_base + MX51_USB_CTRL_1_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(1, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_ITC_NO_THRESHOLD);
 }
 
 static struct mxc_usbh_platform_data dr_utmi_config = {
        .init           = initialize_otg_port,
        .portsc = MXC_EHCI_UTMI_16BIT,
-       .flags  = MXC_EHCI_INTERNAL_PHY,
 };
 
 static struct fsl_usb2_platform_data usb_pdata = {
@@ -203,7 +209,6 @@ static struct fsl_usb2_platform_data usb_pdata = {
 static struct mxc_usbh_platform_data usbh1_config = {
        .init           = initialize_usbh1_port,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = (MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_ITC_NO_THRESHOLD),
 };
 
 static int otg_mode_host;
index 2bd9c9e4e6ba2a0c54cdbbbe17066c908a0602fc..7874bcd41db5ab3f067c5b68498ffe3a77a0e7c2 100644 (file)
@@ -259,7 +259,10 @@ static int initialize_otg_port(struct platform_device *pdev)
        v |= MX51_USB_PLL_DIV_19_2_MHZ;
        __raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(0, MXC_EHCI_INTERNAL_PHY);
 }
 
 static int initialize_usbh1_port(struct platform_device *pdev)
@@ -277,13 +280,16 @@ static int initialize_usbh1_port(struct platform_device *pdev)
        v = __raw_readl(usbother_base + MX51_USB_CTRL_1_OFFSET);
        __raw_writel(v | MX51_USB_CTRL_UH1_EXT_CLK_EN, usbother_base + MX51_USB_CTRL_1_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(1, MXC_EHCI_POWER_PINS_ENABLED |
+                       MXC_EHCI_ITC_NO_THRESHOLD);
 }
 
 static struct mxc_usbh_platform_data dr_utmi_config = {
        .init           = initialize_otg_port,
        .portsc = MXC_EHCI_UTMI_16BIT,
-       .flags  = MXC_EHCI_INTERNAL_PHY,
 };
 
 static struct fsl_usb2_platform_data usb_pdata = {
@@ -294,7 +300,6 @@ static struct fsl_usb2_platform_data usb_pdata = {
 static struct mxc_usbh_platform_data usbh1_config = {
        .init           = initialize_usbh1_port,
        .portsc = MXC_EHCI_MODE_ULPI,
-       .flags  = (MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_ITC_NO_THRESHOLD),
 };
 
 static int otg_mode_host;
index 2aac4c5b7b51cf4cfbd900a47b59a5ef829e69d6..b0fa55327c37e29adcebb733ce5fc8bcf113796d 100644 (file)
@@ -145,13 +145,15 @@ static int initialize_otg_port(struct platform_device *pdev)
        v |= MX51_USB_PLL_DIV_24_MHZ;
        __raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET);
        iounmap(usb_base);
-       return 0;
+
+       mdelay(10);
+
+       return mx51_initialize_usb_hw(0, MXC_EHCI_INTERNAL_PHY);
 }
 
 static struct mxc_usbh_platform_data dr_utmi_config = {
        .init   = initialize_otg_port,
        .portsc = MXC_EHCI_UTMI_16BIT,
-       .flags  = MXC_EHCI_INTERNAL_PHY,
 };
 
 /*   PCBID2  PCBID1 PCBID0  STATE
index 5fd20e96876c4d7acc20cdac5ed6de6448b6957b..a1387875a491942949416789816f9f308c259280 100644 (file)
@@ -13,7 +13,6 @@ obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o
 obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o
 obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o
 obj-$(CONFIG_MXC_PWM)  += pwm.o
-obj-$(CONFIG_USB_EHCI_MXC) += ehci.o
 obj-$(CONFIG_MXC_ULPI) += ulpi.o
 obj-$(CONFIG_MXC_USE_EPIT) += epit.o
 obj-$(CONFIG_ARCH_MXC_AUDMUX_V1) += audmux-v1.o
diff --git a/arch/arm/plat-mxc/ehci.c b/arch/arm/plat-mxc/ehci.c
deleted file mode 100644 (file)
index 06fb3a4..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
- * Copyright (C) 2010 Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * for more details.
- */
-
-#include <linux/platform_device.h>
-
-#include <mach/hardware.h>
-#include <mach/mxc_ehci.h>
-
-int mxc_initialize_usb_hw(int port, unsigned int flags)
-{
-#if defined(CONFIG_SOC_IMX25)
-       if (cpu_is_mx25())
-               return mx25_initialize_usb_hw(port, flags);
-#endif /* if defined(CONFIG_SOC_IMX25) */
-#if defined(CONFIG_ARCH_MX3)
-       if (cpu_is_mx31())
-               return mx31_initialize_usb_hw(port, flags);
-       if (cpu_is_mx35())
-               return mx35_initialize_usb_hw(port, flags);
-#endif /* CONFIG_ARCH_MX3 */
-#ifdef CONFIG_MACH_MX27
-       if (cpu_is_mx27())
-               return mx27_initialize_usb_hw(port, flags);
-#endif /* CONFIG_MACH_MX27 */
-#ifdef CONFIG_SOC_IMX51
-       if (cpu_is_mx51())
-               return mx51_initialize_usb_hw(port, flags);
-#endif
-       printk(KERN_WARNING
-               "%s() unable to setup USBCONTROL for this CPU\n", __func__);
-       return -EINVAL;
-}
-EXPORT_SYMBOL(mxc_initialize_usb_hw);
-
index 7e555a1f4a4a8420b7e3795efb79e611adab4f6e..2c159dc2398b52c50e5064927077cd718921a2f6 100644 (file)
@@ -44,12 +44,9 @@ struct mxc_usbh_platform_data {
        int (*exit)(struct platform_device *pdev);
 
        unsigned int             portsc;
-       unsigned int             flags;
        struct otg_transceiver  *otg;
 };
 
-int mxc_initialize_usb_hw(int port, unsigned int flags);
-
 int mx51_initialize_usb_hw(int port, unsigned int flags);
 int mx25_initialize_usb_hw(int port, unsigned int flags);
 int mx31_initialize_usb_hw(int port, unsigned int flags);
index c8e360d7d9759dbde4eff329781c252d5d27e806..25c8c10bb6891d1c020a711e2ae6396401680c2e 100644 (file)
@@ -203,11 +203,6 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
                mdelay(10);
        }
 
-       /* setup specific usb hw */
-       ret = mxc_initialize_usb_hw(pdev->id, pdata->flags);
-       if (ret < 0)
-               goto err_init;
-
        ehci = hcd_to_ehci(hcd);
 
        /* EHCI registers start at offset 0x100 */