pinctrl: renesas: Add generic support for pin group subsets
authorGeert Uytterhoeven <geert+renesas@glider.be>
Thu, 23 Dec 2021 14:41:15 +0000 (15:41 +0100)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 22 Feb 2022 08:55:56 +0000 (09:55 +0100)
It is fairly common for the pins in a pin group to be a subset of the
pins in another pin group.  Add a macro for defining a pin group that
refers to a subset of an array of pins.  This allows pin groups to share
pin data, and thus save memory.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/b56c4257aee1eab698bae2cf7a08aa05775c0a77.1640269757.git.geert+renesas@glider.be
drivers/pinctrl/renesas/sh_pfc.h

index d6292a7..6f7fe21 100644 (file)
@@ -58,6 +58,18 @@ struct sh_pfc_pin {
 }
 #define SH_PFC_PIN_GROUP(name) SH_PFC_PIN_GROUP_ALIAS(name, name)
 
+/*
+ * Define a pin group referring to a subset of an array of pins.
+ */
+#define SH_PFC_PIN_GROUP_SUBSET(_name, data, first, n) {               \
+       .name = #_name,                                                 \
+       .pins = data##_pins + first,                                    \
+       .mux = data##_mux + first,                                      \
+       .nr_pins = n +                                                  \
+       BUILD_BUG_ON_ZERO(first + n > ARRAY_SIZE(data##_pins)) +        \
+       BUILD_BUG_ON_ZERO(first + n > ARRAY_SIZE(data##_mux)),          \
+}
+
 struct sh_pfc_pin_group {
        const char *name;
        const unsigned int *pins;