pinctrl: st: Use second parameter to gpio specifier
authorPatrice Chotard <patrice.chotard@st.com>
Wed, 10 Aug 2016 13:12:58 +0000 (15:12 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 11 Aug 2016 14:05:45 +0000 (16:05 +0200)
This patch allows to use the second parameter of gpio
specifier, which is used to specify whether the gpio is
active high or low.

Simply remove specific of_xlate callback() and of_gpio_n_cells
and use default one set by of_gpiochip_add() which allows
to use second parameter gpio specifier.

Signed-off-by: Maxime Coquelin <maxime.coquelin@st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Documentation/devicetree/bindings/pinctrl/pinctrl-st.txt
drivers/pinctrl/pinctrl-st.c

index 26bcb18f4e609288d006eeae5bbf496730e2921f..e6cc5e8f6438d19d3edea4a2191205d19441b47e 100644 (file)
@@ -50,7 +50,11 @@ Optional properties:
 GPIO controller/bank node.
 Required properties:
 - gpio-controller : Indicates this device is a GPIO controller
-- #gpio-cells    : Should be one. The first cell is the pin number.
+- #gpio-cells    : Must be two.
+     - First cell: specifies the pin number inside the controller
+     - Second cell: specifies whether the pin is logically inverted.
+       - 0 = active high
+       - 1 = active low
 - st,bank-name   : Should be a name string for this bank as specified in
   datasheet.
 
@@ -88,7 +92,7 @@ Example:
 
                PIO0: gpio@fe610000 {
                        gpio-controller;
-                       #gpio-cells     = <1>;
+                       #gpio-cells     = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
                        reg             = <0 0x100>;
index 0de1c67dfb94cc70e03a56d393140790a0e44cd6..2e5c545f5040d8fd6613d7f461e0148c0e81ece6 100644 (file)
@@ -799,21 +799,6 @@ static int st_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
        return (direction == ST_GPIO_DIRECTION_IN);
 }
 
-static int st_gpio_xlate(struct gpio_chip *gc,
-                       const struct of_phandle_args *gpiospec, u32 *flags)
-{
-       if (WARN_ON(gc->of_gpio_n_cells < 1))
-               return -EINVAL;
-
-       if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells))
-               return -EINVAL;
-
-       if (gpiospec->args[0] > gc->ngpio)
-               return -EINVAL;
-
-       return gpiospec->args[0];
-}
-
 /* Pinctrl Groups */
 static int st_pctl_get_groups_count(struct pinctrl_dev *pctldev)
 {
@@ -1486,8 +1471,6 @@ static struct gpio_chip st_gpio_template = {
        .direction_output       = st_gpio_direction_output,
        .get_direction          = st_gpio_get_direction,
        .ngpio                  = ST_GPIO_PINS_PER_BANK,
-       .of_gpio_n_cells        = 1,
-       .of_xlate               = st_gpio_xlate,
 };
 
 static struct irq_chip st_gpio_irqchip = {