diff options
author | Artiste Hsu <chhsu@nvidia.com> | 2011-07-18 14:41:58 +0800 |
---|---|---|
committer | Manish Tuteja <mtuteja@nvidia.com> | 2011-07-20 03:45:19 -0700 |
commit | 2f0bf1bcfce76eb5ea460e32dd2eb826695718c8 (patch) | |
tree | 4a4d20ac6fdf601cbef92ed6fae5194b5f579070 /arch/arm/mach-tegra/tegra_das.c | |
parent | 835196496da8c426d1a7d6342faf525c900ea81f (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
Change-Id: Id48945c21c0e383f5b43cc62ccc610af3a0fd2ee
Signed-off-by: Artiste Hsu <chhsu@nvidia.com>
Change-Id: I13bc31f0935547a0446c4e300ed0089042822e26
Reviewed-on: http://git-master/r/41489
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Reviewed-by: Yu-Fong (Foster) Cho <ycho@nvidia.com>
Reviewed-by: Scott Peterson <speterson@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/tegra_das.c')
-rw-r--r-- | arch/arm/mach-tegra/tegra_das.c | 34 |
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 8e67705fbeeb..46deb244dea5 100644 --- a/arch/arm/mach-tegra/tegra_das.c +++ b/arch/arm/mach-tegra/tegra_das.c @@ -245,31 +245,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); } } |