pinctrl/coh901: driver to request its pins
authorLinus Walleij <linus.walleij@linaro.org>
Wed, 16 Nov 2011 09:24:39 +0000 (10:24 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 3 Jan 2012 08:10:04 +0000 (09:10 +0100)
This makes the COH 901 driver request muxing of its GPIO pins
from the pinmux-u300 driver using the standard API calls.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/Kconfig
drivers/pinctrl/pinctrl-coh901.c

index e087f02..e963da4 100644 (file)
@@ -32,7 +32,7 @@ config PINMUX_U300
 
 config PINCTRL_COH901
        bool "ST-Ericsson U300 COH 901 335/571 GPIO"
-       depends on GPIOLIB && ARCH_U300
+       depends on GPIOLIB && ARCH_U300 && PINMUX_U300
        help
          Say yes here to support GPIO interface on ST-Ericsson U300.
          The names of the two IP block variants supported are
index 4035778..69fb707 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/gpio.h>
 #include <linux/list.h>
 #include <linux/slab.h>
+#include <linux/pinctrl/pinmux.h>
 #include <mach/gpio-u300.h>
 
 /*
@@ -351,6 +352,24 @@ static inline struct u300_gpio *to_u300_gpio(struct gpio_chip *chip)
        return container_of(chip, struct u300_gpio, chip);
 }
 
+static int u300_gpio_request(struct gpio_chip *chip, unsigned offset)
+{
+       /*
+        * Map back to global GPIO space and request muxing, the direction
+        * parameter does not matter for this controller.
+        */
+       int gpio = chip->base + offset;
+
+       return pinmux_request_gpio(gpio);
+}
+
+static void u300_gpio_free(struct gpio_chip *chip, unsigned offset)
+{
+       int gpio = chip->base + offset;
+
+       pinmux_free_gpio(gpio);
+}
+
 static int u300_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
        struct u300_gpio *gpio = to_u300_gpio(chip);
@@ -483,6 +502,8 @@ static int u300_gpio_config(struct gpio_chip *chip, unsigned offset,
 static struct gpio_chip u300_gpio_chip = {
        .label                  = "u300-gpio-chip",
        .owner                  = THIS_MODULE,
+       .request                = u300_gpio_request,
+       .free                   = u300_gpio_free,
        .get                    = u300_gpio_get,
        .set                    = u300_gpio_set,
        .direction_input        = u300_gpio_direction_input,