diff options
author | Artiste Hsu <chhsu@nvidia.com> | 2011-07-18 14:41:58 +0800 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-07-25 18:51:47 -0700 |
commit | bcde529937a611b956a20b86c6b91608399eba85 (patch) | |
tree | ac179b43043c62ac26fd16977c585c7130921975 /arch/arm/mach-tegra | |
parent | 64f877bd9e15ef00c7441e7ad45bc6cedb40c528 (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>
Diffstat (limited to 'arch/arm/mach-tegra')
-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 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); } } |