summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/nvddk
diff options
context:
space:
mode:
authorSteve Lin <stlin@nvidia.com>2010-03-05 17:28:14 -0800
committerGary King <gking@nvidia.com>2010-03-11 11:48:48 -0800
commitdf55060db23f1b246488c3007133f2bf35a7436f (patch)
tree77c3ef7bfe190598e8587f565f5f6d9f86dfba00 /arch/arm/mach-tegra/nvddk
parent62e64856d6a025c068e2bdc81319d62801d7f948 (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.c25
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));