tegra2: Tidy UART selection
authorSimon Glass <sjg@chromium.org>
Sat, 5 Nov 2011 04:46:44 +0000 (04:46 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sat, 24 Dec 2011 09:23:30 +0000 (10:23 +0100)
UART selection is done with a lot of #ifdefs. This cleans things up
a little.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Warren <twarren@nvidia.com>
board/nvidia/common/board.c

index c806a6b..5313c76 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+enum {
+       /* UARTs which we can enable */
+       UARTA   = 1 << 0,
+       UARTD   = 1 << 3,
+};
+
 const struct tegra2_sysinfo sysinfo = {
        CONFIG_TEGRA2_BOARD_STRING
 };
@@ -64,36 +70,32 @@ static void enable_uart(enum periph_id pid)
 
 /*
  * Routine: clock_init_uart
- * Description: init the PLL and clock for the UART(s)
+ * Description: init clock for the UART(s)
  */
-static void clock_init_uart(void)
+static void clock_init_uart(int uart_ids)
 {
-#if defined(CONFIG_TEGRA2_ENABLE_UARTA)
-       enable_uart(PERIPH_ID_UART1);
-#endif /* CONFIG_TEGRA2_ENABLE_UARTA */
-#if defined(CONFIG_TEGRA2_ENABLE_UARTD)
-       enable_uart(PERIPH_ID_UART4);
-#endif /* CONFIG_TEGRA2_ENABLE_UARTD */
+       if (uart_ids & UARTA)
+               enable_uart(PERIPH_ID_UART1);
+       if (uart_ids & UARTD)
+               enable_uart(PERIPH_ID_UART4);
 }
 
 /*
  * Routine: pin_mux_uart
  * Description: setup the pin muxes/tristate values for the UART(s)
  */
-static void pin_mux_uart(void)
+static void pin_mux_uart(int uart_ids)
 {
-#if defined(CONFIG_TEGRA2_ENABLE_UARTA)
-       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);
-#endif /* CONFIG_TEGRA2_ENABLE_UARTA */
-#if defined(CONFIG_TEGRA2_ENABLE_UARTD)
-       pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);
-
-       pinmux_tristate_disable(PINGRP_GMC);
-#endif /* CONFIG_TEGRA2_ENABLE_UARTD */
+       if (uart_ids & UARTA) {
+               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 (uart_ids & UARTD) {
+               pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);
+               pinmux_tristate_disable(PINGRP_GMC);
+       }
 }
 
 /*
@@ -114,6 +116,15 @@ int board_init(void)
 #ifdef CONFIG_BOARD_EARLY_INIT_F
 int board_early_init_f(void)
 {
+       int uart_ids = 0;       /* bit mask of which UART ids to enable */
+
+#ifdef CONFIG_TEGRA2_ENABLE_UARTA
+       uart_ids |= UARTA;
+#endif
+#ifdef CONFIG_TEGRA2_ENABLE_UARTD
+       uart_ids |= UARTD;
+#endif
+
        /* We didn't do this init in start.S, so do it now */
        cpu_init_cp15();
 
@@ -121,10 +132,10 @@ int board_early_init_f(void)
        clock_early_init();
 
        /* Initialize UART clocks */
-       clock_init_uart();
+       clock_init_uart(uart_ids);
 
        /* Initialize periph pinmuxes */
-       pin_mux_uart();
+       pin_mux_uart(uart_ids);
 
        /* Initialize periph GPIOs */
        gpio_config_uart();