]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
gpiolib: normalize the return value of gc->get() on behalf of buggy drivers
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Thu, 19 Feb 2026 09:51:33 +0000 (10:51 +0100)
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Mon, 23 Feb 2026 10:49:23 +0000 (11:49 +0100)
Commit 86ef402d805d ("gpiolib: sanitize the return value of
gpio_chip::get()") started checking the return value of the .get()
callback in struct gpio_chip. Now - almost a year later - it turns out
that there are quite a few drivers in tree that can break with this
change. Partially revert it: normalize the return value in GPIO core but
also emit a warning.

Cc: stable@vger.kernel.org
Fixes: 86ef402d805d ("gpiolib: sanitize the return value of gpio_chip::get()")
Reported-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Closes: https://lore.kernel.org/all/aZSkqGTqMp_57qC7@google.com/
Reviewed-by: Linus Walleij <linusw@kernel.org>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Link: https://patch.msgid.link/20260219-gpiolib-set-normalize-v2-1-f84630e45796@oss.qualcomm.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
drivers/gpio/gpiolib.c

index 86a171e96b0ebc9dd77acce8de11266dd870002d..ada572aaebd69d3098ab1b617b43431416ff4f82 100644 (file)
@@ -3267,8 +3267,12 @@ static int gpiochip_get(struct gpio_chip *gc, unsigned int offset)
 
        /* Make sure this is called after checking for gc->get(). */
        ret = gc->get(gc, offset);
-       if (ret > 1)
-               ret = -EBADE;
+       if (ret > 1) {
+               gpiochip_warn(gc,
+                       "invalid return value from gc->get(): %d, consider fixing the driver\n",
+                       ret);
+               ret = !!ret;
+       }
 
        return ret;
 }