]> git.sur5r.net Git - u-boot/commitdiff
ARM: tegra: add GPIO initialization table function
authorStephen Warren <swarren@nvidia.com>
Tue, 22 Apr 2014 20:37:53 +0000 (14:37 -0600)
committerTom Warren <twarren@nvidia.com>
Tue, 13 May 2014 17:41:31 +0000 (10:41 -0700)
The HW-defined procedure for booting Tegra requires that some pins be
set up as GPIOs immediately at boot in order to avoid glitches on those
pins, when the pinmux is programmed. Add a feature to the GPIO driver
which executes a GPIO configuration table. Board files will use this to
implement the correct HW initialization procedure.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Tom Warren <twarren@nvidia.com>
arch/arm/include/asm/arch-tegra/gpio.h
drivers/gpio/tegra_gpio.c

index d97190dd7cf549af4681266926bdc4e33949f099..44cd455699e797f1f446bb4acdc5ea0b8b9fb52e 100644 (file)
 #define GPIO_FULLPORT(x)       ((x) >> 3)
 #define GPIO_BIT(x)            ((x) & 0x7)
 
+enum tegra_gpio_init {
+       TEGRA_GPIO_INIT_IN,
+       TEGRA_GPIO_INIT_OUT0,
+       TEGRA_GPIO_INIT_OUT1,
+};
+
+struct tegra_gpio_config {
+       u32 gpio:16;
+       u32 init:2;
+};
+
 /*
  * Tegra-specific GPIO API
  */
 
+/**
+ * Configure a list of GPIOs
+ *
+ * @param config       List of GPIO configurations
+ * @param len          Number of config items in list
+ */
+void gpio_config_table(const struct tegra_gpio_config *config, int len);
+
 void gpio_info(void);
 
 #define gpio_status()  gpio_info()
+
 #endif /* TEGRA_GPIO_H_ */
index 82b30d5ab682eb77ad93d5ee3b6caafbb214c7f3..fea9d17f8e628b1a98fdbd2c921396ba78f3d644 100644 (file)
@@ -221,6 +221,26 @@ int gpio_set_value(unsigned gpio, int value)
        return 0;
 }
 
+void gpio_config_table(const struct tegra_gpio_config *config, int len)
+{
+       int i;
+
+       for (i = 0; i < len; i++) {
+               switch (config[i].init) {
+               case TEGRA_GPIO_INIT_IN:
+                       gpio_direction_input(config[i].gpio);
+                       break;
+               case TEGRA_GPIO_INIT_OUT0:
+                       gpio_direction_output(config[i].gpio, 0);
+                       break;
+               case TEGRA_GPIO_INIT_OUT1:
+                       gpio_direction_output(config[i].gpio, 1);
+                       break;
+               }
+               set_config(config[i].gpio, 1);
+       }
+}
+
 /*
  * Display Tegra GPIO information
  */