ARM: tegra: pinmux: Support for setting pin io
Pradeep Goudagunta [Fri, 23 Dec 2011 08:53:02 +0000 (13:53 +0530)]
-Added support for setting a pin io state to INPUT/OUTPUT.
-Exported tegra_pinmux _get_pingroup/_set_io to make them
available to loadable kernel modules.

Bug 845065

Change-Id: I7d9500f590b804d1d222dfd7e42d1dbfc6686611
Signed-off-by: Pradeep Goudagunta <pgoudagunta@nvidia.com>
Reviewed-on: http://git-master/r/71975
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>

arch/arm/mach-tegra/include/mach/pinmux.h
arch/arm/mach-tegra/pinmux.c

index 5d50d79..f485d0b 100644 (file)
@@ -351,6 +351,8 @@ extern const int gpio_to_pingroup[];
 int tegra_pinmux_get_func(enum tegra_pingroup pg);
 int tegra_pinmux_set_tristate(enum tegra_pingroup pg,
        enum tegra_tristate tristate);
+int tegra_pinmux_set_io(enum tegra_pingroup pg,
+       enum tegra_pin_io input);
 int tegra_pinmux_get_pingroup(int gpio_nr);
 int tegra_pinmux_set_pullupdown(enum tegra_pingroup pg,
        enum tegra_pullupdown pupd);
index 5f4782b..bf8627f 100644 (file)
@@ -194,6 +194,7 @@ int tegra_pinmux_get_pingroup(int gpio_nr)
 {
        return gpio_to_pingroups_map[gpio_nr];
 }
+EXPORT_SYMBOL_GPL(tegra_pinmux_get_pingroup);
 
 static int tegra_pinmux_set_func(const struct tegra_pingroup_config *config)
 {
@@ -320,6 +321,26 @@ int tegra_pinmux_set_tristate(enum tegra_pingroup pg,
        return 0;
 }
 
+int tegra_pinmux_set_io(enum tegra_pingroup pg,
+       enum tegra_pin_io input)
+{
+#if defined(TEGRA_PINMUX_HAS_IO_DIRECTION)
+       unsigned long io;
+
+       if (pg < 0 || pg >=  TEGRA_MAX_PINGROUP)
+               return -ERANGE;
+
+       io = pg_readl(pingroups[pg].mux_reg);
+       if (input)
+               io |= 0x20;
+       else
+               io &= ~(1 << 5);
+       pg_writel(io, pingroups[pg].mux_reg);
+#endif
+       return 0;
+}
+EXPORT_SYMBOL_GPL(tegra_pinmux_set_io);
+
 #if !defined(CONFIG_ARCH_TEGRA_2x_SOC)
 static int tegra_pinmux_set_lock(enum tegra_pingroup pg,
        enum tegra_pin_lock lock)