summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtiste Hsu <chhsu@nvidia.com>2011-07-18 14:41:58 +0800
committerVarun Colbert <vcolbert@nvidia.com>2011-07-25 18:51:47 -0700
commitbcde529937a611b956a20b86c6b91608399eba85 (patch)
treeac179b43043c62ac26fd16977c585c7130921975
parent64f877bd9e15ef00c7441e7ad45bc6cedb40c528 (diff)
ARM: tegra: das: Add port check before set DAP tristate
If tagra_dap_port_info_table.dac_port is tegra_das_port_none, das_set_pin_state() should not control tri-state for the DAP pingroup. Bug 824362 Reviewed-on: http://git-master/r/41489 (cherry picked from commit Id48945c21c0e383f5b43cc62ccc610af3a0fd2ee) Change-Id: Ice963957753a2ee6e8be5db2c4d02b2f2e48c694 Reviewed-on: http://git-master/r/42293 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/tegra_das.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/arch/arm/mach-tegra/tegra_das.c b/arch/arm/mach-tegra/tegra_das.c
index dfc66e5126a4..6236594884b0 100644
--- a/arch/arm/mach-tegra/tegra_das.c
+++ b/arch/arm/mach-tegra/tegra_das.c
@@ -251,31 +251,41 @@ static int das_set_dap_ms_mode(u32 dap_port_idx, bool is_master_mode)
static int das_set_pin_state(bool normal)
{
+ const struct tegra_dap_property *dap_info =
+ &das_drv_data->pdata->tegra_dap_port_info_table[0];
mutex_lock(&das_drv_data->mlock);
if (normal) {
if (das_drv_data->tristate_count == 0) {
/* Enable the DAP outputs */
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP1,
- TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP2,
- TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP3,
- TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP4,
- TEGRA_TRI_NORMAL);
+ if (dap_info[0].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP1,
+ TEGRA_TRI_NORMAL);
+ if (dap_info[1].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP2,
+ TEGRA_TRI_NORMAL);
+ if (dap_info[2].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP3,
+ TEGRA_TRI_NORMAL);
+ if (dap_info[3].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP4,
+ TEGRA_TRI_NORMAL);
}
das_drv_data->tristate_count++;
} else {
das_drv_data->tristate_count--;
/* Tristate the DAP pinmux */
if (das_drv_data->tristate_count == 0) {
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP1,
+ if (dap_info[0].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP1,
TEGRA_TRI_TRISTATE);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP2,
+ if (dap_info[1].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP2,
TEGRA_TRI_TRISTATE);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP3,
+ if (dap_info[2].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP3,
TEGRA_TRI_TRISTATE);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP4,
+ if (dap_info[3].dap_port != tegra_das_port_none)
+ tegra_pinmux_set_tristate(TEGRA_PINGROUP_DAP4,
TEGRA_TRI_TRISTATE);
}
}