ARM: shmobile: sh73a0: Support sparse GPIO numbers
The SH73A0 SoC has sparse GPIO numbers. Declare the pin numbers ranges
in the PFC SoC data and use the pin numbers in the GPIO API.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
diff --git a/drivers/pinctrl/sh-pfc/pfc-sh73a0.c b/drivers/pinctrl/sh-pfc/pfc-sh73a0.c
index 639b5e2..9cef0d8 100644
--- a/drivers/pinctrl/sh-pfc/pfc-sh73a0.c
+++ b/drivers/pinctrl/sh-pfc/pfc-sh73a0.c
@@ -1543,7 +1543,14 @@
GPIO_PORT_ALL(),
};
-#define PINMUX_FN_BASE ARRAY_SIZE(pinmux_pins)
+static struct pinmux_range pinmux_ranges[] = {
+ {.begin = 0, .end = 118,},
+ {.begin = 128, .end = 164,},
+ {.begin = 192, .end = 282,},
+ {.begin = 288, .end = 309,},
+};
+
+#define PINMUX_FN_BASE GPIO_FN_VBUS_0
static struct pinmux_func pinmux_func_gpios[] = {
/* Table 25-1 (Functions 0-7) */
@@ -2738,38 +2745,38 @@
#define EXT_IRQ16H(n) intcs_evt2irq(0x3200 + ((n - 16) << 5))
static struct pinmux_irq pinmux_irqs[] = {
- PINMUX_IRQ(EXT_IRQ16H(19), GPIO_PORT9),
- PINMUX_IRQ(EXT_IRQ16L(1), GPIO_PORT10),
- PINMUX_IRQ(EXT_IRQ16L(0), GPIO_PORT11),
- PINMUX_IRQ(EXT_IRQ16H(18), GPIO_PORT13),
- PINMUX_IRQ(EXT_IRQ16H(20), GPIO_PORT14),
- PINMUX_IRQ(EXT_IRQ16H(21), GPIO_PORT15),
- PINMUX_IRQ(EXT_IRQ16H(31), GPIO_PORT26),
- PINMUX_IRQ(EXT_IRQ16H(30), GPIO_PORT27),
- PINMUX_IRQ(EXT_IRQ16H(29), GPIO_PORT28),
- PINMUX_IRQ(EXT_IRQ16H(22), GPIO_PORT40),
- PINMUX_IRQ(EXT_IRQ16H(23), GPIO_PORT53),
- PINMUX_IRQ(EXT_IRQ16L(10), GPIO_PORT54),
- PINMUX_IRQ(EXT_IRQ16L(9), GPIO_PORT56),
- PINMUX_IRQ(EXT_IRQ16H(26), GPIO_PORT115),
- PINMUX_IRQ(EXT_IRQ16H(27), GPIO_PORT116),
- PINMUX_IRQ(EXT_IRQ16H(28), GPIO_PORT117),
- PINMUX_IRQ(EXT_IRQ16H(24), GPIO_PORT118),
- PINMUX_IRQ(EXT_IRQ16L(6), GPIO_PORT147),
- PINMUX_IRQ(EXT_IRQ16L(2), GPIO_PORT149),
- PINMUX_IRQ(EXT_IRQ16L(7), GPIO_PORT150),
- PINMUX_IRQ(EXT_IRQ16L(12), GPIO_PORT156),
- PINMUX_IRQ(EXT_IRQ16L(4), GPIO_PORT159),
- PINMUX_IRQ(EXT_IRQ16H(25), GPIO_PORT164),
- PINMUX_IRQ(EXT_IRQ16L(8), GPIO_PORT223),
- PINMUX_IRQ(EXT_IRQ16L(3), GPIO_PORT224),
- PINMUX_IRQ(EXT_IRQ16L(5), GPIO_PORT227),
- PINMUX_IRQ(EXT_IRQ16H(17), GPIO_PORT234),
- PINMUX_IRQ(EXT_IRQ16L(11), GPIO_PORT238),
- PINMUX_IRQ(EXT_IRQ16L(13), GPIO_PORT239),
- PINMUX_IRQ(EXT_IRQ16H(16), GPIO_PORT249),
- PINMUX_IRQ(EXT_IRQ16L(14), GPIO_PORT251),
- PINMUX_IRQ(EXT_IRQ16L(9), GPIO_PORT308),
+ PINMUX_IRQ(EXT_IRQ16H(19), 9),
+ PINMUX_IRQ(EXT_IRQ16L(1), 10),
+ PINMUX_IRQ(EXT_IRQ16L(0), 11),
+ PINMUX_IRQ(EXT_IRQ16H(18), 13),
+ PINMUX_IRQ(EXT_IRQ16H(20), 14),
+ PINMUX_IRQ(EXT_IRQ16H(21), 15),
+ PINMUX_IRQ(EXT_IRQ16H(31), 26),
+ PINMUX_IRQ(EXT_IRQ16H(30), 27),
+ PINMUX_IRQ(EXT_IRQ16H(29), 28),
+ PINMUX_IRQ(EXT_IRQ16H(22), 40),
+ PINMUX_IRQ(EXT_IRQ16H(23), 53),
+ PINMUX_IRQ(EXT_IRQ16L(10), 54),
+ PINMUX_IRQ(EXT_IRQ16L(9), 56),
+ PINMUX_IRQ(EXT_IRQ16H(26), 115),
+ PINMUX_IRQ(EXT_IRQ16H(27), 116),
+ PINMUX_IRQ(EXT_IRQ16H(28), 117),
+ PINMUX_IRQ(EXT_IRQ16H(24), 118),
+ PINMUX_IRQ(EXT_IRQ16L(6), 147),
+ PINMUX_IRQ(EXT_IRQ16L(2), 149),
+ PINMUX_IRQ(EXT_IRQ16L(7), 150),
+ PINMUX_IRQ(EXT_IRQ16L(12), 156),
+ PINMUX_IRQ(EXT_IRQ16L(4), 159),
+ PINMUX_IRQ(EXT_IRQ16H(25), 164),
+ PINMUX_IRQ(EXT_IRQ16L(8), 223),
+ PINMUX_IRQ(EXT_IRQ16L(3), 224),
+ PINMUX_IRQ(EXT_IRQ16L(5), 227),
+ PINMUX_IRQ(EXT_IRQ16H(17), 234),
+ PINMUX_IRQ(EXT_IRQ16L(11), 238),
+ PINMUX_IRQ(EXT_IRQ16L(13), 239),
+ PINMUX_IRQ(EXT_IRQ16H(16), 249),
+ PINMUX_IRQ(EXT_IRQ16L(14), 251),
+ PINMUX_IRQ(EXT_IRQ16L(9), 308),
};
struct sh_pfc_soc_info sh73a0_pinmux_info = {
@@ -2782,6 +2789,8 @@
.pins = pinmux_pins,
.nr_pins = ARRAY_SIZE(pinmux_pins),
+ .ranges = pinmux_ranges,
+ .nr_ranges = ARRAY_SIZE(pinmux_ranges),
.func_gpios = pinmux_func_gpios,
.nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios),