mfd: omap-usb-tll: Add OMAP5 revision and HSIC support
authorRoger Quadros <rogerq@ti.com>
Thu, 8 Nov 2012 14:10:41 +0000 (16:10 +0200)
committerRoger Quadros <rogerq@ti.com>
Wed, 13 Feb 2013 11:22:44 +0000 (13:22 +0200)
The TLL module on OMAP5 has 3 channels.
HSIC mode requires the TLL channel to be in Transparent UTMI mode.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
drivers/mfd/omap-usb-tll.c

index 55c85c7..0aef1a7 100644 (file)
 
 #define        OMAP_TLL_CHANNEL_CONF(num)                      (0x040 + 0x004 * num)
 #define OMAP_TLL_CHANNEL_CONF_FSLSMODE_SHIFT           24
+#define OMAP_TLL_CHANNEL_CONF_DRVVBUS                  (1 << 16)
+#define OMAP_TLL_CHANNEL_CONF_CHRGVBUS                 (1 << 15)
 #define        OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF            (1 << 11)
 #define        OMAP_TLL_CHANNEL_CONF_ULPI_ULPIAUTOIDLE         (1 << 10)
 #define        OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE              (1 << 9)
 #define        OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE               (1 << 8)
+#define OMAP_TLL_CHANNEL_CONF_MODE_TRANSPARENT_UTMI    (2 << 1)
 #define OMAP_TLL_CHANNEL_CONF_CHANMODE_FSLS            (1 << 1)
 #define        OMAP_TLL_CHANNEL_CONF_CHANEN                    (1 << 0)
 
@@ -92,6 +95,7 @@
 #define OMAP_USBTLL_REV1               0x00000015      /* OMAP3 */
 #define OMAP_USBTLL_REV2               0x00000018      /* OMAP 3630 */
 #define OMAP_USBTLL_REV3               0x00000004      /* OMAP4 */
+#define OMAP_USBTLL_REV4               0x00000006      /* OMAP5 */
 
 #define is_ehci_tll_mode(x)    (x == OMAP_EHCI_PORT_MODE_TLL)
 
@@ -245,6 +249,7 @@ static int usbtll_omap_probe(struct platform_device *pdev)
        ver =  usbtll_read(base, OMAP_USBTLL_REVISION);
        switch (ver) {
        case OMAP_USBTLL_REV1:
+       case OMAP_USBTLL_REV4:
                tll->nch = OMAP_TLL_CHANNEL_COUNT;
                break;
        case OMAP_USBTLL_REV2:
@@ -310,6 +315,15 @@ static int usbtll_omap_probe(struct platform_device *pdev)
                                reg &= ~(OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE
                                        | OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF
                                        | OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE);
+                       } else if (pdata->port_mode[i] ==
+                                       OMAP_EHCI_PORT_MODE_HSIC) {
+                               /*
+                                * HSIC Mode requires UTMI port configurations
+                                */
+                               reg |= OMAP_TLL_CHANNEL_CONF_DRVVBUS
+                                | OMAP_TLL_CHANNEL_CONF_CHRGVBUS
+                                | OMAP_TLL_CHANNEL_CONF_MODE_TRANSPARENT_UTMI
+                                | OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF;
                        } else {
                                continue;
                        }