sh-pfc: Initialize pinmux_gpio flags statically
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Thu, 29 Nov 2012 01:23:26 +0000 (02:23 +0100)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Fri, 15 Mar 2013 12:33:37 +0000 (13:33 +0100)
All function GPIO entries are initialized with the GPIO_FN macro that
expands to the PINMUX_GPIO macro, used to initialize real GPIOs. Create
a PINMUX_GPIO_FN macro that duplicates PINMUX_GPIO and sets flags to
PINMUX_TYPE_FUNCTION and use it in GPIO_FN, and make PINMUX_GPIO set
flags to PINMUX_TYPE_GPIO.

This removes the need to initialize GPIO flags at runtime and thus
simplifies the code, preparing for the GPIO and functions split.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sh-pfc/pinctrl.c
drivers/pinctrl/sh-pfc/sh_pfc.h

index 908b5362b1cde21d1c50f73da4dc3237e6bd5161..682b3a62b080ba9defc3ccc7d80e1b09fe483678 100644 (file)
@@ -315,22 +315,6 @@ static const struct pinconf_ops sh_pfc_pinconf_ops = {
        .pin_config_dbg_show    = sh_pfc_pinconf_dbg_show,
 };
 
-static void sh_pfc_map_one_gpio(struct sh_pfc *pfc, struct sh_pfc_pinctrl *pmx,
-                               struct pinmux_gpio *gpio, unsigned offset)
-{
-       struct pinmux_data_reg *dummy;
-       int bit;
-
-       gpio->flags &= ~PINMUX_FLAG_TYPE;
-
-       if (sh_pfc_get_data_reg(pfc, offset, &dummy, &bit) == 0)
-               gpio->flags |= PINMUX_TYPE_GPIO;
-       else {
-               gpio->flags |= PINMUX_TYPE_FUNCTION;
-               pmx->nr_functions++;
-       }
-}
-
 /* pinmux ranges -> pinctrl pin descs */
 static int sh_pfc_map_gpios(struct sh_pfc *pfc, struct sh_pfc_pinctrl *pmx)
 {
@@ -356,7 +340,8 @@ static int sh_pfc_map_gpios(struct sh_pfc *pfc, struct sh_pfc_pinctrl *pmx)
                if (unlikely(!gpio->enum_id))
                        continue;
 
-               sh_pfc_map_one_gpio(pfc, pmx, gpio, i);
+               if ((gpio->flags & PINMUX_FLAG_TYPE) == PINMUX_TYPE_FUNCTION)
+                       pmx->nr_functions++;
        }
 
        return 0;
index 2627a89273ee5f7cdda777583ef400084738ce5e..e15039504a1ca8c83ef5db7a50f987d77f4a1f3e 100644 (file)
@@ -41,8 +41,18 @@ struct pinmux_gpio {
        const char *name;
 };
 
-#define PINMUX_GPIO(gpio, data_or_mark) \
-       [gpio] = { .name = __stringify(gpio), .enum_id = data_or_mark, .flags = PINMUX_TYPE_NONE }
+#define PINMUX_GPIO(gpio, data_or_mark)                        \
+       [gpio] = {                                      \
+               .name = __stringify(gpio),              \
+               .enum_id = data_or_mark,                \
+               .flags = PINMUX_TYPE_GPIO               \
+       }
+#define PINMUX_GPIO_FN(gpio, data_or_mark)             \
+       [gpio] = {                                      \
+               .name = __stringify(gpio),              \
+               .enum_id = data_or_mark,                \
+               .flags = PINMUX_TYPE_FUNCTION           \
+       }
 
 #define PINMUX_DATA(data_or_mark, ids...) data_or_mark, ids, 0
 
@@ -135,7 +145,7 @@ enum { GPIO_CFG_DRYRUN, GPIO_CFG_REQ, GPIO_CFG_FREE };
 #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA)
 #define PORT_ALL(str)  CPU_ALL_PORT(_PORT_ALL, PORT, str)
 #define GPIO_PORT_ALL()        CPU_ALL_PORT(_GPIO_PORT, , unused)
-#define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK)
+#define GPIO_FN(str) PINMUX_GPIO_FN(GPIO_FN_##str, str##_MARK)
 
 /* helper macro for pinmux_enum_t */
 #define PORT_DATA_I(nr)        \