]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpio: remove legacy GPIO line value setter callbacks
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Fri, 25 Jul 2025 07:46:50 +0000 (09:46 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Thu, 7 Aug 2025 07:56:43 +0000 (09:56 +0200)
With no more users of the legacy GPIO line value setters - .set() and
.set_multiple() - we can now remove them from the kernel.

Link: https://lore.kernel.org/r/20250725074651.14002-1-brgl@bgdev.pl
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpiolib.c
include/linux/gpio/driver.h

index a93d2a9355e2204fdb32f2b0f93937494b945c28..9ac4c23d656a01efaebe073f2c45bdd098dc74ad 100644 (file)
@@ -1037,11 +1037,6 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
        int base = 0;
        int ret;
 
-       /* Only allow one set() and one set_multiple(). */
-       if ((gc->set && gc->set_rv) ||
-           (gc->set_multiple && gc->set_multiple_rv))
-               return -EINVAL;
-
        /*
         * First: allocate and populate the internal stat container, and
         * set up the struct device.
@@ -2891,19 +2886,14 @@ static int gpiochip_set(struct gpio_chip *gc, unsigned int offset, int value)
 
        lockdep_assert_held(&gc->gpiodev->srcu);
 
-       if (WARN_ON(unlikely(!gc->set && !gc->set_rv)))
+       if (WARN_ON(unlikely(!gc->set_rv)))
                return -EOPNOTSUPP;
 
-       if (gc->set_rv) {
-               ret = gc->set_rv(gc, offset, value);
-               if (ret > 0)
-                       ret = -EBADE;
-
-               return ret;
-       }
+       ret = gc->set_rv(gc, offset, value);
+       if (ret > 0)
+               ret = -EBADE;
 
-       gc->set(gc, offset, value);
-       return 0;
+       return ret;
 }
 
 static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
@@ -2919,7 +2909,7 @@ static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
         * output-only, but if there is then not even a .set() operation it
         * is pretty tricky to drive the output line.
         */
-       if (!guard.gc->set && !guard.gc->set_rv && !guard.gc->direction_output) {
+       if (!guard.gc->set_rv && !guard.gc->direction_output) {
                gpiod_warn(desc,
                           "%s: missing set() and direction_output() operations\n",
                           __func__);
@@ -3673,11 +3663,6 @@ static int gpiochip_set_multiple(struct gpio_chip *gc,
                return ret;
        }
 
-       if (gc->set_multiple) {
-               gc->set_multiple(gc, mask, bits);
-               return 0;
-       }
-
        /* set outputs if the corresponding mask bit is set */
        for_each_set_bit(i, mask, gc->ngpio) {
                ret = gpiochip_set(gc, i, test_bit(i, bits));
index 4b984e8f8fcdbba5c008fc67ff0557bda11df40b..90567dde7d8efe57fcbf390a8afd64905a4ec693 100644 (file)
@@ -347,8 +347,6 @@ struct gpio_irq_chip {
  * @get: returns value for signal "offset", 0=low, 1=high, or negative error
  * @get_multiple: reads values for multiple signals defined by "mask" and
  *     stores them in "bits", returns 0 on success or negative error
- * @set: **DEPRECATED** - please use set_rv() instead
- * @set_multiple: **DEPRECATED** - please use set_multiple_rv() instead
  * @set_rv: assigns output value for signal "offset", returns 0 on success or
  *          negative error value
  * @set_multiple_rv: assigns output values for multiple signals defined by
@@ -445,11 +443,6 @@ struct gpio_chip {
        int                     (*get_multiple)(struct gpio_chip *gc,
                                                unsigned long *mask,
                                                unsigned long *bits);
-       void                    (*set)(struct gpio_chip *gc,
-                                               unsigned int offset, int value);
-       void                    (*set_multiple)(struct gpio_chip *gc,
-                                               unsigned long *mask,
-                                               unsigned long *bits);
        int                     (*set_rv)(struct gpio_chip *gc,
                                          unsigned int offset,
                                          int value);