diff options
author | Steve Lin <stlin@nvidia.com> | 2010-03-05 17:28:14 -0800 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-03-11 11:48:48 -0800 |
commit | df55060db23f1b246488c3007133f2bf35a7436f (patch) | |
tree | 77c3ef7bfe190598e8587f565f5f6d9f86dfba00 /arch/arm/mach-tegra/nvddk | |
parent | 62e64856d6a025c068e2bdc81319d62801d7f948 (diff) |
tegra ODM: Moving the board specific USB trimmer values to odm_query.
The usb ddk will use these trimmer values if they are specified in the
NvOdmUsbProperty. Otherwise, it will use the default values specified inside
NvDDK.
Bug 657479: USB trimmer values should not be hardcoded in the DDK
Change-Id: Idd819dc6faba63831ba5164c6c2ebd1a99567a1c
Reviewed-on: http://git-master/r/786
Tested-by: Szming Lin <stlin@nvidia.com>
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Reviewed-by: Udaykumar Rameshchan Raval <uraval@nvidia.com>
Reviewed-by: Gary King <gking@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/nvddk')
-rw-r--r-- | arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c b/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c index 83e807cd2324..57a72b625d6a 100644 --- a/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c +++ b/arch/arm/mach-tegra/nvddk/nvddk_usbphy_ap20.c @@ -45,7 +45,7 @@ #include "ap20/arapb_misc.h" #include "nvrm_hardware_access.h" #include "nvddk_usbphy_priv.h" - +#include "nvodm_query.h" /* Defines for USB register read and writes */ #define USB_REG_RD(reg)\ @@ -553,6 +553,17 @@ static void Ap20UsbPhyUlpiNullModeConfigure( NvDdkUsbPhy *pUsbPhy) { + // default trimmer values for ap20 + NvOdmUsbTrimmerCtrl trimmerCtrl = {0, 0, 4, 4}; + + if (pUsbPhy->pProperty->TrimmerCtrl.UlpiShadowClkDelay || + pUsbPhy->pProperty->TrimmerCtrl.UlpiClockOutDelay || + pUsbPhy->pProperty->TrimmerCtrl.UlpiDataTrimmerSel || + pUsbPhy->pProperty->TrimmerCtrl.UlpiStpDirNxtTrimmerSel) + { + // update the trimmer values if they are specified in nvodm_query + NvOsMemcpy(&trimmerCtrl, &pUsbPhy->pProperty->TrimmerCtrl, sizeof(NvOdmUsbTrimmerCtrl)); + } // Put the UHSIC in the reset USB_IF_REG_UPDATE_DEF(SUSP_CTRL, UHSIC_RESET, ENABLE); @@ -574,8 +585,8 @@ Ap20UsbPhyUlpiNullModeConfigure( ULPI_IF_DRF_DEF(TIMING_CTRL_0, ULPI_OUTPUT_PINMUX_BYP, ENABLE) | ULPI_IF_DRF_DEF(TIMING_CTRL_0, ULPI_CLKOUT_PINMUX_BYP, ENABLE) | ULPI_IF_DRF_DEF(TIMING_CTRL_0, ULPI_LBK_PAD_EN, OUTPUT) | - ULPI_IF_DRF_NUM(TIMING_CTRL_0, ULPI_SHADOW_CLK_DELAY, 0) | - ULPI_IF_DRF_NUM(TIMING_CTRL_0, ULPI_CLOCK_OUT_DELAY, 0) | + ULPI_IF_DRF_NUM(TIMING_CTRL_0, ULPI_SHADOW_CLK_DELAY, trimmerCtrl.UlpiShadowClkDelay) | + ULPI_IF_DRF_NUM(TIMING_CTRL_0, ULPI_CLOCK_OUT_DELAY, trimmerCtrl.UlpiClockOutDelay) | ULPI_IF_DRF_NUM(TIMING_CTRL_0, ULPI_LBK_PAD_E_INPUT_OR, 0)); // Set all the trimmers to 0 at the start @@ -613,9 +624,9 @@ Ap20UsbPhyUlpiNullModeConfigure( // Set the trimmer values ULPI_IF_REG_WR(TIMING_CTRL_1, ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DATA_TRIMMER_LOAD, 0) | - ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DATA_TRIMMER_SEL, 4) | + ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DATA_TRIMMER_SEL, trimmerCtrl.UlpiDataTrimmerSel) | ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_STPDIRNXT_TRIMMER_LOAD, 0) | - ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_STPDIRNXT_TRIMMER_SEL, 4) | + ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_STPDIRNXT_TRIMMER_SEL, trimmerCtrl.UlpiStpDirNxtTrimmerSel) | ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DIR_TRIMMER_LOAD, 0) | ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DIR_TRIMMER_SEL, 4)); @@ -625,9 +636,9 @@ Ap20UsbPhyUlpiNullModeConfigure( //Load the trimmers by toggling the load bits ULPI_IF_REG_WR(TIMING_CTRL_1, ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DATA_TRIMMER_LOAD, 1) | - ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DATA_TRIMMER_SEL, 4) | + ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DATA_TRIMMER_SEL, trimmerCtrl.UlpiDataTrimmerSel) | ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_STPDIRNXT_TRIMMER_LOAD, 1) | - ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_STPDIRNXT_TRIMMER_SEL, 4) | + ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_STPDIRNXT_TRIMMER_SEL, trimmerCtrl.UlpiStpDirNxtTrimmerSel) | ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DIR_TRIMMER_LOAD, 1) | ULPI_IF_DRF_NUM(TIMING_CTRL_1, ULPI_DIR_TRIMMER_SEL, 4)); |