Thread (4 messages) 4 messages, 3 authors, 2021-10-30

Re: [PATCH] gpio: realtek-otto: fix GPIO line IRQ offset

From: Sander Vanheule <sander@svanheule.net>
Date: 2021-10-28 11:53:02

On Thu, 2021-10-28 at 13:23 +0300, Andy Shevchenko wrote:
On Thu, Oct 28, 2021 at 11:52 AM Sander Vanheule [off-list ref] wrote:
quoted
The irqchip uses one domain for all GPIO lines, so the line offset
should be determined w.r.t. the first line of the first port, not the
first line of the triggered port.

Fixes: 0d82fb1127fb ("gpio: Add Realtek Otto GPIO support")
Not sure it fixes anything (it wasn't working from day 1), but in any
case the patch is good.
The original patch was tested using a GPIO line on port A, so the missing offset was
irrelevant there (as it was zero). After recently acquiring a new device, I was trying to
use a line on port C, which resulted in unhandled interrupts.
quoted
Signed-off-by: Sander Vanheule <sander@svanheule.net>
---
 drivers/gpio/gpio-realtek-otto.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-realtek-otto.c b/drivers/gpio/gpio-realtek-otto.c
index eeeb39bc171d..bd75401b549d 100644
--- a/drivers/gpio/gpio-realtek-otto.c
+++ b/drivers/gpio/gpio-realtek-otto.c
@@ -205,7 +205,7 @@ static void realtek_gpio_irq_handler(struct irq_desc *desc)
                status = realtek_gpio_read_isr(ctrl, lines_done / 8);
                port_pin_count = min(gc->ngpio - lines_done, 8U);
                for_each_set_bit(offset, &status, port_pin_count)
-                       generic_handle_domain_irq(gc->irq.domain, offset);
+                       generic_handle_domain_irq(gc->irq.domain, offset +
lines_done);
Looking into these '/ 8', '8U' sounds to me that it may be a good idea
to switch to for_each_set_clump8(). But it's out of scope here.
For the current code, I could indeed have used for_each_set_clump8, instead of the u8
read_isr() accessor.

However, I'm also preparing support for the RTL9302 device I have recently acquired. On
RTL930x and RTL931x the port order is reversed, requiring different port order handling.
My plan is to provide different port_read_isr() functions for the different port orders,
that return the requested u8. I'll try to get that patch set out today as well.

Best,
Sander
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help