Thread (22 messages) 22 messages, 4 authors, 2015-07-16

[PATCH 4/7] pinctrl: sh-pfc: Stop calling gpiochip_add_pin_range() on DT platforms

From: geert@linux-m68k.org (Geert Uytterhoeven)
Date: 2015-06-30 09:44:24
Also in: linux-gpio, linux-sh

Hi Laurent,

On Tue, Jun 30, 2015 at 11:30 AM, Laurent Pinchart
[off-list ref] wrote:
On Tuesday 30 June 2015 09:45:24 Geert Uytterhoeven wrote:
quoted
On platforms where the PFC/GPIO controller is instantiated from DT, the
mapping between GPIOs and pins is set up using the "gpio-ranges"
property in DT.

Hence stop setting up the mapping from C code on DT platforms.
This code is still used for SH or ARM-legacy platforms.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 drivers/pinctrl/sh-pfc/gpio.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/drivers/pinctrl/sh-pfc/gpio.c b/drivers/pinctrl/sh-pfc/gpio.c
index ba353735ecf2be9a..1be118e4865fd3f8 100644
--- a/drivers/pinctrl/sh-pfc/gpio.c
+++ b/drivers/pinctrl/sh-pfc/gpio.c
@@ -379,22 +379,26 @@ int sh_pfc_register_gpiochip(struct sh_pfc *pfc)

      pfc->gpio = chip;

-     /* Register the GPIO to pin mappings. As pins with GPIO ports must come
-      * first in the ranges, skip the pins without GPIO ports by stopping at
-      * the first range that contains such a pin.
-      */
-     for (i = 0; i < pfc->nr_ranges; ++i) {
-             const struct sh_pfc_pin_range *range = &pfc->ranges[i];
-
-             if (range->start >= pfc->nr_gpio_pins)
-                     break;
-
-             ret = gpiochip_add_pin_range(&chip->gpio_chip,
-                                          dev_name(pfc->dev),
-                                          range->start, range->start,
-                                          range->end - range->start + 1);
-             if (ret < 0)
-                     return ret;
+     if (IS_ENABLED(CONFIG_SUPERH) ||
+         IS_ENABLED(CONFIG_ARCH_SHMOBILE_LEGACY)) {
I'd prefer checking IS_ENABLED(CONFIG_OF) && pfc->dev->of_node as that doesn't
explicitly depend on the platform type.
Note that CONFIG_OF is also set for ARM-legacy (and soon for SH). But that's
a minor problem. But due to the runtime check on pfc->dev->of_node, the
unused code below won't be left out by the compiler, and I want to get rid
of that code.

The platform check make it clear when the code can be removed.
As the code after this if block also don't need to run on non-DT platforms,
how about just using

        if (IS_ENABLED(CONFIG_OF) && pfc->dev->of_node)
                return 0;

?
Early return is indeed an option, as we don't need the function GPIOs on
DT platforms.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help