ehci-mxc: Make i.MX25 EHCI configurable
authorBenoît Thébaudeau <benoit.thebaudeau@advansee.com>
Tue, 13 Nov 2012 09:57:48 +0000 (09:57 +0000)
committerStefano Babic <sbabic@denx.de>
Fri, 16 Nov 2012 08:16:45 +0000 (09:16 +0100)
Use EHCI MXC configuration options for i.MX25.

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Matthias Weisser <weisserm@arcor.de>
drivers/usb/host/ehci-mxc.c
include/configs/zmx25.h

index e21f2c54ac972b8c2548b9c734603e9e1701eabc..846aa3b7c9b540667fc4283b427c9e44136acc70 100644 (file)
 
 #define USBCTRL_OTGBASE_OFFSET 0x600
 
-#define MX25_USB_CTRL_IP_PUE_DOWN_BIT  (1<<6)
-#define MX25_USB_CTRL_HSTD_BIT         (1<<5)
-#define MX25_USB_CTRL_USBTE_BIT                (1<<4)
-#define MX25_USB_CTRL_OCPOL_OTG_BIT    (1<<3)
+#define MX25_OTG_SIC_SHIFT     29
+#define MX25_OTG_SIC_MASK      (0x3 << MX25_OTG_SIC_SHIFT)
+#define MX25_OTG_PM_BIT                (1 << 24)
+#define MX25_OTG_PP_BIT                (1 << 11)
+#define MX25_OTG_OCPOL_BIT     (1 << 3)
+
+#define MX25_H1_SIC_SHIFT      21
+#define MX25_H1_SIC_MASK       (0x3 << MX25_H1_SIC_SHIFT)
+#define MX25_H1_PP_BIT         (1 << 18)
+#define MX25_H1_PM_BIT         (1 << 8)
+#define MX25_H1_IPPUE_UP_BIT   (1 << 7)
+#define MX25_H1_IPPUE_DOWN_BIT (1 << 6)
+#define MX25_H1_TLL_BIT                (1 << 5)
+#define MX25_H1_USBTE_BIT      (1 << 4)
+#define MX25_H1_OCPOL_BIT      (1 << 2)
 
 #define MX31_OTG_SIC_SHIFT     29
 #define MX31_OTG_SIC_MASK      (0x3 << MX31_OTG_SIC_SHIFT)
@@ -51,12 +62,57 @@ static int mxc_set_usbcontrol(int port, unsigned int flags)
 {
        unsigned int v;
 
-#if defined(CONFIG_MX25)
-       v = MX25_USB_CTRL_IP_PUE_DOWN_BIT | MX25_USB_CTRL_HSTD_BIT |
-               MX25_USB_CTRL_USBTE_BIT | MX25_USB_CTRL_OCPOL_OTG_BIT;
-#elif defined(CONFIG_MX31)
        v = readl(IMX_USB_BASE + USBCTRL_OTGBASE_OFFSET);
+#if defined(CONFIG_MX25)
+       switch (port) {
+       case 0: /* OTG port */
+               v &= ~(MX25_OTG_SIC_MASK | MX25_OTG_PM_BIT | MX25_OTG_PP_BIT |
+                               MX25_OTG_OCPOL_BIT);
+               v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_OTG_SIC_SHIFT;
+
+               if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
+                       v |= MX25_OTG_PM_BIT;
+
+               if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH)
+                       v |= MX25_OTG_PP_BIT;
+
+               if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW))
+                       v |= MX25_OTG_OCPOL_BIT;
+
+               break;
+       case 1: /* H1 port */
+               v &= ~(MX25_H1_SIC_MASK | MX25_H1_PM_BIT | MX25_H1_PP_BIT |
+                               MX25_H1_OCPOL_BIT | MX25_H1_TLL_BIT |
+                               MX25_H1_USBTE_BIT | MX25_H1_IPPUE_DOWN_BIT |
+                               MX25_H1_IPPUE_UP_BIT);
+               v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_H1_SIC_SHIFT;
+
+               if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
+                       v |= MX25_H1_PM_BIT;
+
+               if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH)
+                       v |= MX25_H1_PP_BIT;
+
+               if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW))
+                       v |= MX25_H1_OCPOL_BIT;
+
+               if (!(flags & MXC_EHCI_TTL_ENABLED))
+                       v |= MX25_H1_TLL_BIT;
+
+               if (flags & MXC_EHCI_INTERNAL_PHY)
+                       v |= MX25_H1_USBTE_BIT;
+
+               if (flags & MXC_EHCI_IPPUE_DOWN)
+                       v |= MX25_H1_IPPUE_DOWN_BIT;
 
+               if (flags & MXC_EHCI_IPPUE_UP)
+                       v |= MX25_H1_IPPUE_UP_BIT;
+
+               break;
+       default:
+               return -EINVAL;
+       }
+#elif defined(CONFIG_MX31)
        switch (port) {
        case 0: /* OTG port */
                v &= ~(MX31_OTG_SIC_MASK | MX31_OTG_PM_BIT);
index 447683a490530db2c85677a7ad7fa8f264ab6c89..e9216d9b64b75c4197c5263ecf0e7e809f0fbb14 100644 (file)
 #define CONFIG_USB_EHCI                        /* Enable EHCI USB support */
 #define CONFIG_USB_EHCI_MXC
 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET
-#define CONFIG_MXC_USB_PORT    2
-#define CONFIG_MXC_USB_PORTSC  0xC0000000
-#define CONFIG_MXC_USB_FLAGS   0
+#define CONFIG_MXC_USB_PORT    1
+#define CONFIG_MXC_USB_PORTSC  MXC_EHCI_MODE_SERIAL
+#define CONFIG_MXC_USB_FLAGS   (MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN)
 #define CONFIG_EHCI_IS_TDI
 #define CONFIG_USB_STORAGE
 #define CONFIG_DOS_PARTITION