[U-Boot] [PATCH v2 1/7] tegra: Adjust funcmux config test to permit expansion
Simon Glass
sjg at chromium.org
Wed Jan 11 23:42:22 CET 2012
We want to support config options other than zero, so move the test to the
end to allow intermediate code to OK such a config.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
arch/arm/cpu/armv7/tegra2/funcmux.c | 35 +++++++++++++++++----------
arch/arm/include/asm/arch-tegra2/funcmux.h | 3 ++
2 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c
index 0878f51..0f03b9f 100644
--- a/arch/arm/cpu/armv7/tegra2/funcmux.c
+++ b/arch/arm/cpu/armv7/tegra2/funcmux.c
@@ -26,27 +26,30 @@
int funcmux_select(enum periph_id id, int config)
{
- if (config != 0) {
- debug("%s: invalid config %d for periph_id %d", __func__,
- config, id);
- return -1;
- }
+ int bad_config = config != 0;
+
switch (id) {
case PERIPH_ID_UART1:
- pinmux_set_func(PINGRP_IRRX, PMUX_FUNC_UARTA);
- pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA);
- pinmux_tristate_disable(PINGRP_IRRX);
- pinmux_tristate_disable(PINGRP_IRTX);
+ if (config == 0) {
+ pinmux_set_func(PINGRP_IRRX, PMUX_FUNC_UARTA);
+ pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA);
+ pinmux_tristate_disable(PINGRP_IRRX);
+ pinmux_tristate_disable(PINGRP_IRTX);
+ }
break;
case PERIPH_ID_UART2:
- pinmux_set_func(PINGRP_UAD, PMUX_FUNC_IRDA);
- pinmux_tristate_disable(PINGRP_UAD);
+ if (config == 0) {
+ pinmux_set_func(PINGRP_UAD, PMUX_FUNC_IRDA);
+ pinmux_tristate_disable(PINGRP_UAD);
+ }
break;
case PERIPH_ID_UART4:
- pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);
- pinmux_tristate_disable(PINGRP_GMC);
+ if (config == 0) {
+ pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);
+ pinmux_tristate_disable(PINGRP_GMC);
+ }
break;
default:
@@ -54,5 +57,11 @@ int funcmux_select(enum periph_id id, int config)
return -1;
}
+ if (bad_config) {
+ debug("%s: invalid config %d for periph_id %d", __func__,
+ config, id);
+ return -1;
+ }
+
return 0;
}
diff --git a/arch/arm/include/asm/arch-tegra2/funcmux.h b/arch/arm/include/asm/arch-tegra2/funcmux.h
index 2d724a2..d4f9cfb 100644
--- a/arch/arm/include/asm/arch-tegra2/funcmux.h
+++ b/arch/arm/include/asm/arch-tegra2/funcmux.h
@@ -32,6 +32,9 @@
* The basic config is 0, and higher numbers indicate different
* pinmux settings to bring the peripheral out on other pins,
*
+ * This function also disables tristate for the function's pins,
+ * so that they operate in normal mode.
+ *
* @param id Peripheral id
* @param config Configuration to use (generally 0)
* @return 0 if ok, -1 on error (e.g. incorrect id or config)
--
1.7.3.1
More information about the U-Boot
mailing list