]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Input: gpio_keys - fall back to platform_get_irq() for interrupt-only keys
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 15 Aug 2025 19:43:47 +0000 (12:43 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 1 Feb 2026 08:05:00 +0000 (00:05 -0800)
To allow transitioning away from gpio-keys platform data attempt to
retrieve IRQ for interrupt-only keys using platform_get_irq_optional()
if interrupt is not specified in platform data.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/gpio_keys.c

index 5e875771a066a5b48447b3d87e862a974a5b0ea1..e196174856796b391f14c31da9b2fee5ff742172 100644 (file)
@@ -616,12 +616,19 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
                        break;
                }
        } else {
-               if (!button->irq) {
-                       dev_err(dev, "Found button without gpio or irq\n");
-                       return -EINVAL;
-               }
+               if (button->irq) {
+                       bdata->irq = button->irq;
+               } else {
+                       irq = platform_get_irq_optional(pdev, idx);
+                       if (irq < 0) {
+                               error = irq;
+                               return dev_err_probe(dev, error,
+                                                    "Unable to determine IRQ# for button #%d",
+                                                    idx);
+                       }
 
-               bdata->irq = button->irq;
+                       bdata->irq = irq;
+               }
 
                if (button->type && button->type != EV_KEY) {
                        dev_err(dev, "Only EV_KEY allowed for IRQ buttons.\n");