[U-Boot] [PATCH v3 7/8] tegra2: spi: Support SPI / UART switch

Simon Glass sjg at chromium.org
Sat Nov 5 15:46:50 CET 2011


Add the SPI / UART switch logic into the Tegra2 SPI driver so that it
can co-exist with the NS16550 UART.

We need the ns16550.h header for NS16550_t for now.

Signed-off-by: Simon Glass <sjg at chromium.org>
---
Changes in v2:
- Add pinmux logic to SPI driver
- Rename uart/spi_enable() to pinmux_select_uart/spi()

 drivers/spi/tegra2_spi.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/drivers/spi/tegra2_spi.c b/drivers/spi/tegra2_spi.c
index 2db5a84..fe37218 100644
--- a/drivers/spi/tegra2_spi.c
+++ b/drivers/spi/tegra2_spi.c
@@ -28,9 +28,11 @@
 #include <spi.h>
 #include <asm/io.h>
 #include <asm/gpio.h>
+#include <ns16550.h>
 #include <asm/arch/clk_rst.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/pinmux.h>
+#include <asm/arch/uart-spi-switch.h>
 #include <asm/arch/tegra2_spi.h>
 
 struct tegra_spi_slave {
@@ -123,6 +125,16 @@ int spi_claim_bus(struct spi_slave *slave)
 	 */
 	pinmux_set_func(PINGRP_GMD, PMUX_FUNC_SFLASH);
 	pinmux_tristate_disable(PINGRP_LSPI);
+
+#ifndef CONFIG_SPI_UART_SWITCH
+	/*
+	 * NOTE:
+	 * Only set PinMux bits 3:2 to SPI here on boards that don't have the
+	 * SPI UART switch or subsequent UART data won't go out!  See
+	 * spi_uart_switch().
+	 */
+	/* TODO: pinmux_set_func(PINGRP_GMC, PMUX_FUNC_SFLASH); */
+#endif
 	return 0;
 }
 
@@ -140,6 +152,8 @@ void spi_cs_activate(struct spi_slave *slave)
 {
 	struct tegra_spi_slave *spi = to_tegra_spi(slave);
 
+	pinmux_select_spi();
+
 	/* CS is negated on Tegra, so drive a 1 to get a 0 */
 	setbits_le32(&spi->regs->command, SPI_CMD_CS_VAL);
 }
-- 
1.7.3.1



More information about the U-Boot mailing list