ARM: tegra: fix GPIO init table programming
authorStephen Warren <swarren@nvidia.com>
Wed, 23 Sep 2015 18:12:59 +0000 (12:12 -0600)
committerTom Warren <twarren@nvidia.com>
Fri, 2 Oct 2015 18:04:34 +0000 (11:04 -0700)
Tegra's gpio_config_table() currently uses common GPIO APIs. These used
to work without requesting the GPIO, but since commit 2fccd2d96bad "tegra:
Convert tegra GPIO driver to use driver model" no longer do so. This
prevents any of the GPIO initialization table from being applied to HW.
Fix gpio_config_table() to directly program the HW to solve this.

Fixes: 2fccd2d96bad ("tegra: Convert tegra GPIO driver to use driver model")
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Warren <twarren@nvidia.com>
drivers/gpio/tegra_gpio.c

index 4921f0f..c0ae771 100644 (file)
@@ -211,13 +211,15 @@ void gpio_config_table(const struct tegra_gpio_config *config, int len)
        for (i = 0; i < len; i++) {
                switch (config[i].init) {
                case TEGRA_GPIO_INIT_IN:
-                       gpio_direction_input(config[i].gpio);
+                       set_direction(config[i].gpio, 0);
                        break;
                case TEGRA_GPIO_INIT_OUT0:
-                       gpio_direction_output(config[i].gpio, 0);
+                       set_level(config[i].gpio, 0);
+                       set_direction(config[i].gpio, 1);
                        break;
                case TEGRA_GPIO_INIT_OUT1:
-                       gpio_direction_output(config[i].gpio, 1);
+                       set_level(config[i].gpio, 1);
+                       set_direction(config[i].gpio, 1);
                        break;
                }
                set_config(config[i].gpio, 1);