| From 27eaade6e15c69011353431b2a6ca0bbc996331f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 13 May 2020 14:55:21 +0200 |
| Subject: pinctrl: ocelot: Fix GPIO interrupt decoding on Jaguar2 |
| |
| From: Lars Povlsen <lars.povlsen@microchip.com> |
| |
| [ Upstream commit 0b47afc65453a70bc521e251138418056f65793f ] |
| |
| This fixes a problem with using the GPIO as an interrupt on Jaguar2 |
| (and similar), as the register layout of the platforms with 64 GPIO's |
| are pairwise, such that the original offset must be multiplied with |
| the platform stride. |
| |
| Fixes: da801ab56ad8 pinctrl: ocelot: add MSCC Jaguar2 support. |
| Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> |
| Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com> |
| Link: https://lore.kernel.org/r/20200513125532.24585-4-lars.povlsen@microchip.com |
| Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/pinctrl/pinctrl-ocelot.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/pinctrl/pinctrl-ocelot.c b/drivers/pinctrl/pinctrl-ocelot.c |
| index fb76fb2e9ea54..0a951a75c82b3 100644 |
| --- a/drivers/pinctrl/pinctrl-ocelot.c |
| +++ b/drivers/pinctrl/pinctrl-ocelot.c |
| @@ -711,11 +711,12 @@ static void ocelot_irq_handler(struct irq_desc *desc) |
| struct irq_chip *parent_chip = irq_desc_get_chip(desc); |
| struct gpio_chip *chip = irq_desc_get_handler_data(desc); |
| struct ocelot_pinctrl *info = gpiochip_get_data(chip); |
| + unsigned int id_reg = OCELOT_GPIO_INTR_IDENT * info->stride; |
| unsigned int reg = 0, irq, i; |
| unsigned long irqs; |
| |
| for (i = 0; i < info->stride; i++) { |
| - regmap_read(info->map, OCELOT_GPIO_INTR_IDENT + 4 * i, ®); |
| + regmap_read(info->map, id_reg + 4 * i, ®); |
| if (!reg) |
| continue; |
| |
| -- |
| 2.25.1 |
| |