]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
gpio-button-hotplug: fix signed issue 24174/head
authorRosen Penev <rosenp@gmail.com>
Fri, 10 Jul 2026 19:04:10 +0000 (12:04 -0700)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Fri, 10 Jul 2026 22:32:05 +0000 (00:32 +0200)
struct gpio_keys_button has an unsigned int for its irq field. A signed
one is needed for fwnode_irq_get. Handle it before passing it to the
button member.

Fixes: 79b9a36959ea ("gpio-button-hotplug: use device and fwnode")
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24174
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c

index 10c3c9a6791088c92536f5fe9c48fde94b39e47b..997721c2226daae1fc97b18a0a83be4bb13c4b9d 100644 (file)
@@ -378,6 +378,7 @@ gpio_keys_get_devtree_pdata(struct device *dev)
 
        device_for_each_child_node_scoped(dev, pp) {
                struct gpio_keys_button *button = &buttons[i++];
+               int irq;
 
                if (fwnode_property_read_u32(pp, "linux,code", &button->code)) {
                        dev_err(dev, "Button node '%s' without keycode\n",
@@ -397,11 +398,12 @@ gpio_keys_get_devtree_pdata(struct device *dev)
 
                button->wakeup = fwnode_property_present(pp, "gpio-key,wakeup");
                button->gpio = -ENOENT; /* mark this as device-tree */
-               button->irq = fwnode_irq_get(pp, 0);
-               if (button->irq == -EPROBE_DEFER)
-                       return ERR_PTR(button->irq);
-               if (button->irq < 0)
-                       button->irq = 0;
+
+               irq = fwnode_irq_get(pp, 0);
+               if (irq == -EPROBE_DEFER)
+                       return ERR_PTR(irq);
+
+               button->irq = max(0, irq);
        }
 
        pdata = devm_kzalloc(dev, sizeof(struct gpio_keys_platform_data), GFP_KERNEL);