
Hello Stephen,
this patch looks reasonable. I also need to change the pingroup config for UARTA on the Colibri T20 board and came up with a similar approach, but I will rebase my work on top of this.
As I'm not in the position to give anything more official, I just wanted to give this patch a public +1 to show that I'm in favour of this change.
-- Lucas Am Montag, den 14.05.2012, 17:13 -0600 schrieb Stephen Warren:
From: Stephen Warren swarren@nvidia.com
(In at least some configurations) Whistler uses UART1 on pingroups UAA, UAB.
Signed-off-by: Stephen Warren swarren@nvidia.com
arch/arm/cpu/armv7/tegra2/board.c | 14 +++++++++++++- arch/arm/cpu/armv7/tegra2/funcmux.c | 13 ++++++++++++- arch/arm/include/asm/arch-tegra2/funcmux.h | 1 + 3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv7/tegra2/board.c b/arch/arm/cpu/armv7/tegra2/board.c index a50b1b9..629ad5d 100644 --- a/arch/arm/cpu/armv7/tegra2/board.c +++ b/arch/arm/cpu/armv7/tegra2/board.c @@ -101,6 +101,18 @@ int arch_cpu_init(void) } #endif
+static int uart_configs[] = { +#ifdef CONFIG_TEGRA2_UARTA_UAA_UAB
- FUNCMUX_UART1_UAA_UAB,
+#else
- FUNCMUX_UART1_IRRX_IRTX,
+#endif
- FUNCMUX_UART2_IRDA,
- -1,
- FUNCMUX_UART4_GMC,
- -1,
+};
/**
- Set up the specified uarts
@@ -120,7 +132,7 @@ static void setup_uarts(int uart_ids) if (uart_ids & (1 << i)) { enum periph_id id = id_for_uart[i];
funcmux_select(id, FUNCMUX_DEFAULT);
} }funcmux_select(id, uart_configs[i]); clock_ll_start_uart(id);
diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c index 0ef7753..e2d1273 100644 --- a/arch/arm/cpu/armv7/tegra2/funcmux.c +++ b/arch/arm/cpu/armv7/tegra2/funcmux.c @@ -31,11 +31,22 @@ int funcmux_select(enum periph_id id, int config)
switch (id) { case PERIPH_ID_UART1:
if (config == FUNCMUX_UART1_IRRX_IRTX) {
switch (config) {
case FUNCMUX_UART1_IRRX_IRTX: 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 FUNCMUX_UART1_UAA_UAB:
pinmux_set_func(PINGRP_UAA, PMUX_FUNC_UARTA);
pinmux_set_func(PINGRP_UAB, PMUX_FUNC_UARTA);
pinmux_tristate_disable(PINGRP_UAA);
pinmux_tristate_disable(PINGRP_UAB);
bad_config = 0;
break;
}
if (!bad_config) { /* * Tegra appears to boot with function UARTA pre- * selected on mux group SDB. If two mux groups are
diff --git a/arch/arm/include/asm/arch-tegra2/funcmux.h b/arch/arm/include/asm/arch-tegra2/funcmux.h index ae73c72..b455122 100644 --- a/arch/arm/include/asm/arch-tegra2/funcmux.h +++ b/arch/arm/include/asm/arch-tegra2/funcmux.h @@ -30,6 +30,7 @@ enum {
/* UART configs */ FUNCMUX_UART1_IRRX_IRTX = 0,
- FUNCMUX_UART1_UAA_UAB, FUNCMUX_UART2_IRDA = 0, FUNCMUX_UART4_GMC = 0,