usb: xhci: tegra: add uses_externl_pmic in board_data
Ajay Gupta [Mon, 24 Jun 2013 17:42:17 +0000 (10:42 -0700)]
Pluto uses external PMIC and so we don't use the VBUS_ENABLE
function provided by PADCTL

Bug 1301052

Change-Id: I6b6bc51f3e49657d4a69d31bbe50c54812c5b266
Signed-off-by: Ajay Gupta <ajayg@nvidia.com>
Reviewed-on: http://git-master/r/242045
Reviewed-by: Ashutosh Jha <ajha@nvidia.com>

arch/arm/mach-tegra/board-ardbeg.c
arch/arm/mach-tegra/board-dalmore.c
arch/arm/mach-tegra/board-pluto.c
arch/arm/mach-tegra/include/mach/xusb.h
drivers/usb/host/xhci-tegra.c

index 9a42e0d..ad6c889 100644 (file)
@@ -664,6 +664,7 @@ static struct tegra_xusb_board_data xusb_bdata = {
        /* ss_portmap[0:3] = SS0 map, ss_portmap[4:7] = SS1 map */
        .ss_portmap = (TEGRA_XUSB_SS_PORT_MAP_USB2_P0 << 0) |
                        (TEGRA_XUSB_SS_PORT_MAP_USB2_P1 << 4),
+       .uses_external_pmic = false,
 };
 
 static void ardbeg_xusb_init(void)
index 191fb2c..6cc2000 100644 (file)
@@ -505,6 +505,7 @@ static struct tegra_xusb_board_data xusb_bdata = {
        .portmap = TEGRA_XUSB_SS_P0 | TEGRA_XUSB_USB2_P1,
        /* ss_portmap[0:3] = SS0 map, ss_portmap[4:7] = SS1 map */
        .ss_portmap = (TEGRA_XUSB_SS_PORT_MAP_USB2_P1 << 0),
+       .uses_external_pmic = false,
 };
 
 static void dalmore_xusb_init(void)
index 3a933ed..bc4597b 100644 (file)
@@ -1136,6 +1136,7 @@ static struct tegra_xusb_board_data xusb_bdata = {
        .portmap = TEGRA_XUSB_SS_P0 | TEGRA_XUSB_USB2_P0,
        /* ss_portmap[0:3] = SS0 map, ss_portmap[4:7] = SS1 map */
        .ss_portmap = (TEGRA_XUSB_SS_PORT_MAP_USB2_P0 << 0),
+       .uses_external_pmic = true,
 };
 
 static void pluto_xusb_init(void)
index aec3bcf..4b3fc8f 100644 (file)
@@ -53,6 +53,7 @@ struct tegra_xusb_board_data {
        u8      ss_portmap;
        u8      ulpicap;
        u8      lane_owner;
+       bool uses_external_pmic;
 };
 
 struct tegra_xusb_platform_data {
index c647be5..f5e0a21 100644 (file)
@@ -1116,15 +1116,17 @@ static void tegra_xhci_program_utmip_pad(struct tegra_xhci_hcd *tegra,
         * Modify only the bits which belongs to the port
         * and enable respective VBUS_PAD for the port
         */
-       reg = readl(tegra->padctl_base + padregs->oc_det_0);
-       reg &= ~(port == 2 ? OC_DET_VBUS_ENABLE2_OC_MAP :
-               port ? OC_DET_VBUS_ENABLE1_OC_MAP : OC_DET_VBUS_ENABLE0_OC_MAP);
-
-       reg |= (port == 2) ? OC_DET_VBUS_EN2_OC_DETECTED_VBUS_PAD2 :
-               port ? OC_DET_VBUS_EN1_OC_DETECTED_VBUS_PAD1 :
-                       OC_DET_VBUS_EN0_OC_DETECTED_VBUS_PAD0;
-       writel(reg, tegra->padctl_base + padregs->oc_det_0);
+       if (tegra->bdata->uses_external_pmic == false) {
+               reg = readl(tegra->padctl_base + padregs->oc_det_0);
+               reg &= ~(port == 2 ? OC_DET_VBUS_ENABLE2_OC_MAP :
+                       port ? OC_DET_VBUS_ENABLE1_OC_MAP :
+                               OC_DET_VBUS_ENABLE0_OC_MAP);
 
+               reg |= (port == 2) ? OC_DET_VBUS_EN2_OC_DETECTED_VBUS_PAD2 :
+                       port ? OC_DET_VBUS_EN1_OC_DETECTED_VBUS_PAD1 :
+                               OC_DET_VBUS_EN0_OC_DETECTED_VBUS_PAD0;
+               writel(reg, tegra->padctl_base + padregs->oc_det_0);
+       }
        /*
         * enable respective VBUS_PAD if port is mapped to any SS port
         */