Backport the patch queued upstream for 5.16. The patch differs slightly
from the upstream patch due to an upstream change that added a
convenience function.

Signed-off-by: Sander Vanheule <[email protected]>
---
 ...ealtek-otto-fix-gpio-line-irq-offset.patch | 21 +++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 
target/linux/realtek/patches-5.10/007-5.16-gpio-realtek-realtek-otto-fix-gpio-line-irq-offset.patch

diff --git 
a/target/linux/realtek/patches-5.10/007-5.16-gpio-realtek-realtek-otto-fix-gpio-line-irq-offset.patch
 
b/target/linux/realtek/patches-5.10/007-5.16-gpio-realtek-realtek-otto-fix-gpio-line-irq-offset.patch
new file mode 100644
index 0000000000..f1f739d470
--- /dev/null
+++ 
b/target/linux/realtek/patches-5.10/007-5.16-gpio-realtek-realtek-otto-fix-gpio-line-irq-offset.patch
@@ -0,0 +1,21 @@
+gpio: realtek-otto: fix GPIO line IRQ offset
+
+The irqchip uses one domain for all GPIO lines, so th 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")
+Signed-off-by: Sander Vanheule <[email protected]>
+Link: 
https://lore.kernel.org/linux-gpio/[email protected]/
+
+--- a/drivers/gpio/gpio-realtek-otto.c
++++ b/drivers/gpio/gpio-realtek-otto.c
+@@ -206,7 +206,7 @@ static void realtek_gpio_irq_handler(str
+               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) {
+-                      irq = irq_find_mapping(gc->irq.domain, offset);
++                      irq = irq_find_mapping(gc->irq.domain, offset + 
lines_done);
+                       generic_handle_irq(irq);
+               }
+       }
-- 
2.31.1


_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to