diff options
author | Steve Lin <stlin@nvidia.com> | 2010-02-16 11:12:01 -0800 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-02-23 20:47:02 -0800 |
commit | 43d12dfa4f6c806f1eda2318e85546b90e10ec69 (patch) | |
tree | 4ede79b38743886f559b7c99281292b51a3e3dc8 /arch/arm/mach-tegra/nvddk | |
parent | e092a2114c3ca29182b85f6c17401021097fc58d (diff) |
tegra nvddk: fixing null phy host issue when connecting to an OTG device
When the null phy host connects to an OTG device, the ID pin must set to 1 which
indicates the AP is the host. Otherwise, the device may act as host and AP will
not able to recognize the device. Also configure the pinmux according to the odmdata.
Bug 625086: [AP20 \ Whistler \ Android] ULPI Null phy doesn't work with linux
ehci driver
Change-Id: I5f1c53cbcf91a8978eab8be63431794df6e57e3a
Diffstat (limited to 'arch/arm/mach-tegra/nvddk')
-rw-r--r-- | arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c b/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c index ae9ec213233a..83e807cd2324 100644 --- a/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c +++ b/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c @@ -590,7 +590,8 @@ Ap20UsbPhyUlpiNullModeConfigure( USB_IF_REG_WR(ULPIS2S_CTRL, USB_IF_DRF_DEF(ULPIS2S_CTRL, ULPIS2S_ENA, ENABLE) | USB_IF_DRF_DEF(ULPIS2S_CTRL, ULPIS2S_PLLU_MASTER_BLASTER60, ENABLE) | - USB_IF_DRF_NUM(ULPIS2S_CTRL, ULPIS2S_SPARE, 1)); + USB_IF_DRF_NUM(ULPIS2S_CTRL, ULPIS2S_SPARE, + (pUsbPhy->pProperty->UsbMode == NvOdmUsbModeType_Host)?3:1)); // Select ULPI_CORE_CLK_SEL to SHADOW_CLK ULPI_IF_REG_WR(TIMING_CTRL_0, @@ -1239,6 +1240,7 @@ Ap20UsbPhyPowerUp( { case NvOdmUsbInterfaceType_UlpiNullPhy: Ap20UsbPhyUlpiNullModeConfigure(pUsbPhy); + Ap20UsbPhyUlpiPowerControl(pUsbPhy, NV_TRUE); break; case NvOdmUsbInterfaceType_UlpiExternalPhy: pUsbPhy->hOdmUlpi = NvOdmUsbUlpiOpen(pUsbPhy->Instance); @@ -1259,6 +1261,10 @@ Ap20UsbPhyPowerUp( if (ErrVal == NvSuccess) { Ap20UsbPhySelectUsbMode(pUsbPhy); + + if (pUsbPhy->pProperty->UsbInterfaceType == + NvOdmUsbInterfaceType_UlpiNullPhy) + pUsbPhy->hOdmUlpi = NvOdmUsbUlpiOpen(pUsbPhy->Instance); } return ErrVal; |