tegra: remove support for UART SPI switch
authorAllen Martin <amartin@nvidia.com>
Sat, 16 Mar 2013 18:58:02 +0000 (18:58 +0000)
committerTom Warren <twarren@nvidia.com>
Mon, 25 Mar 2013 16:56:05 +0000 (09:56 -0700)
This feature was only used for tegra20 seaboard that had a pinmux
conflict on the SPI pins.  These boards were never manufactured, so
remove this support to clean up SPI driver.

Signed-off-by: Allen Martin <amartin@nvidia.com>
Signed-off-by: Tom Warren <twarren@nvidia.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
arch/arm/include/asm/arch-tegra/board.h
arch/arm/include/asm/arch-tegra20/uart-spi-switch.h [deleted file]
board/nvidia/common/board.c
board/nvidia/common/common.mk
board/nvidia/common/uart-spi-switch.c [deleted file]
board/nvidia/seaboard/seaboard.c
drivers/spi/tegra_spi.c

index 3db0d93b89a31dd60ac0464f0fea6d7fd7fe67c6..1a6699096b1682e843c0dead3a393f379d51e261 100644 (file)
@@ -25,8 +25,7 @@
 #define _TEGRA_BOARD_H_
 
 /* Set up pinmux to make UART usable */
-void gpio_config_uart(void);      /* CONFIG_SPI_UART_SWITCH */
-void gpio_early_init_uart(void);  /*!CONFIG_SPI_UART_SWITCH */
+void gpio_early_init_uart(void);
 
 /* Set up early UART output */
 void board_init_uart_f(void);
diff --git a/arch/arm/include/asm/arch-tegra20/uart-spi-switch.h b/arch/arm/include/asm/arch-tegra20/uart-spi-switch.h
deleted file mode 100644 (file)
index 82ac180..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef _UART_SPI_SWITCH_H
-#define _UART_SPI_SWITCH_H
-
-#if defined(CONFIG_SPI_UART_SWITCH)
-/*
- * Signal that we are about to use the UART. This unfortunate hack is
- * required by Seaboard, which cannot use its console and SPI at the same
- * time! If the board file provides this, the board config will declare it.
- * Let this be a lesson for others.
- */
-void pinmux_select_uart(void);
-
-/*
- * Signal that we are about the use the SPI bus.
- */
-void pinmux_select_spi(void);
-
-#else /* not CONFIG_SPI_UART_SWITCH */
-
-static inline void pinmux_select_uart(void) {}
-static inline void pinmux_select_spi(void) {}
-
-#endif
-
-#endif
index 7d9f361a8abeb50ca870de9114048351ac7bf289..b6e6566685d4d687e4ffff6f9e8431160d4bc515 100644 (file)
@@ -132,9 +132,6 @@ int board_init(void)
        clock_init();
        clock_verify();
 
-#ifdef CONFIG_SPI_UART_SWITCH
-       gpio_config_uart();
-#endif
 #if defined(CONFIG_TEGRA_SPI) || defined(CONFIG_TEGRA_SLINK)
        pin_mux_spi();
        spi_init();
index bd6202c2999ba6b2ef986a97caab534fd2b8673f..d9bcb854011afe2196544eb9116e2eb466645408 100644 (file)
@@ -1,4 +1,3 @@
 # common options for all tegra boards
 COBJS-y        += ../../nvidia/common/board.o
-COBJS-$(CONFIG_SPI_UART_SWITCH) += ../../nvidia/common/uart-spi-switch.o
 COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += ../../nvidia/common/emc.o
diff --git a/board/nvidia/common/uart-spi-switch.c b/board/nvidia/common/uart-spi-switch.c
deleted file mode 100644 (file)
index e9d445d..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <asm/gpio.h>
-#include <asm/arch/pinmux.h>
-#include <asm/arch/uart-spi-switch.h>
-#include <asm/arch/tegra.h>
-#include <asm/arch-tegra/tegra_spi.h>
-#include <asm/arch-tegra/board.h>
-
-/* position of the UART/SPI select switch */
-enum spi_uart_switch {
-       SWITCH_UNKNOWN,
-       SWITCH_SPI,
-       SWITCH_UART,
-       SWITCH_BOTH
-};
-
-/* Information about the spi/uart switch */
-struct spi_uart {
-       int gpio;                       /* GPIO to control switch */
-       u32 port;                       /* Port number of UART affected */
-};
-
-static struct spi_uart local;
-static enum spi_uart_switch switch_pos; /* Current switch position */
-
-
-static void get_config(struct spi_uart *config)
-{
-#if defined CONFIG_SPI_CORRUPTS_UART
-       config->gpio = CONFIG_UART_DISABLE_GPIO;
-       config->port = CONFIG_SPI_CORRUPTS_UART_NR;
-#else
-       config->gpio = -1;
-#endif
-}
-
-/*
- * Init the UART / SPI switch. This can be called before relocation so we must
- * not access BSS.
- */
-void gpio_early_init_uart(void)
-{
-       struct spi_uart config;
-
-       get_config(&config);
-       if (config.gpio != -1) {
-               /* Cannot provide a label prior to relocation */
-               gpio_request(config.gpio, NULL);
-               gpio_direction_output(config.gpio, 0);
-       }
-}
-
-/*
- * Configure the UART / SPI switch.
- */
-void gpio_config_uart(void)
-{
-       get_config(&local);
-       if (local.gpio != -1) {
-               gpio_direction_output(local.gpio, 0);
-               switch_pos = SWITCH_UART;
-       } else {
-               /*
-                * If we're here we don't have a SPI switch; go ahead and
-                * enable the SPI now.  We didn't in spi_init() so we wouldn't
-                * kill the UART.
-                */
-               pinmux_set_func(PINGRP_GMC, PMUX_FUNC_SFLASH);
-               switch_pos = SWITCH_BOTH;
-       }
-}
-
-static void spi_uart_switch(struct spi_uart *config,
-                             enum spi_uart_switch new_pos)
-{
-       if (switch_pos == SWITCH_BOTH || new_pos == switch_pos)
-               return;
-
-       /* pre-delay, allow SPI/UART to settle, FIFO to empty, etc. */
-       udelay(CONFIG_SPI_CORRUPTS_UART_DLY);
-
-       /* We need to dynamically change the pinmux, shared w/UART RXD/CTS */
-       pinmux_set_func(PINGRP_GMC, new_pos == SWITCH_SPI ?
-                               PMUX_FUNC_SFLASH : PMUX_FUNC_UARTD);
-
-       /*
-        * On Seaboard, MOSI/MISO are shared w/UART.
-        * Use GPIO I3 (UART_DISABLE) to tristate UART during SPI activity.
-        * Enable UART later (cs_deactivate) so we can use it for U-Boot comms.
-        */
-       gpio_direction_output(config->gpio, new_pos == SWITCH_SPI);
-       switch_pos = new_pos;
-}
-
-void pinmux_select_uart(void)
-{
-               spi_uart_switch(&local, SWITCH_UART);
-}
-
-void pinmux_select_spi(void)
-{
-       spi_uart_switch(&local, SWITCH_SPI);
-}
index e581fddf4349c3ccae1a420edd0aed18f22e7900..498e5137a33d031b33e7c0e3dbcbc9d030f763aa 100644 (file)
@@ -31,7 +31,7 @@
 #include <asm/gpio.h>
 
 /* TODO: Remove this code when the SPI switch is working */
-#if !defined(CONFIG_SPI_UART_SWITCH) && (CONFIG_MACH_TYPE != MACH_TYPE_VENTANA)
+#if (CONFIG_MACH_TYPE != MACH_TYPE_VENTANA)
 void gpio_early_init_uart(void)
 {
        /* Enable UART via GPIO_PI3 (port 8, bit 3) so serial console works */
index ce19095af03d931f5db46094289a48d79f464ebf..2662923ff14873620f05fa88c9b3e11f500a9e34 100644 (file)
@@ -28,7 +28,6 @@
 #include <asm/gpio.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/pinmux.h>
-#include <asm/arch/uart-spi-switch.h>
 #include <asm/arch-tegra/clk_rst.h>
 #include <asm/arch-tegra/tegra_spi.h>
 #include <spi.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if defined(CONFIG_SPI_CORRUPTS_UART)
- #define corrupt_delay()       udelay(CONFIG_SPI_CORRUPTS_UART_DLY);
-#else
- #define corrupt_delay()
-#endif
-
 struct tegra_spi_slave {
        struct spi_slave slave;
        struct spi_tegra *regs;
@@ -175,16 +168,8 @@ int spi_claim_bus(struct spi_slave *slave)
         */
        pinmux_set_func(PINGRP_GMD, PMUX_FUNC_SFLASH);
        pinmux_tristate_disable(PINGRP_LSPI);
+       pinmux_set_func(PINGRP_GMC, PMUX_FUNC_SFLASH);
 
-#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;
 }
 
@@ -202,24 +187,16 @@ 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);
-
-       corrupt_delay();                /* Let UART settle */
 }
 
 void spi_cs_deactivate(struct spi_slave *slave)
 {
        struct tegra_spi_slave *spi = to_tegra_spi(slave);
 
-       pinmux_select_uart();
-
        /* CS is negated on Tegra, so drive a 0 to get a 1 */
        clrbits_le32(&spi->regs->command, SPI_CMD_CS_VAL);
-
-       corrupt_delay();                /* Let SPI settle */
 }
 
 int spi_xfer(struct spi_slave *slave, unsigned int bitlen,