]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge tag 'v6.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux...
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 3 Mar 2025 08:32:11 +0000 (09:32 +0100)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 3 Mar 2025 08:32:11 +0000 (09:32 +0100)
Linux 6.14-rc5

1  2 
drivers/gpio/gpiolib.c

index d0108cf2ee0bf7ef990515d686bef633a517e69f,8741600af7efb0a258f67fcf4c495a663016a34a..212269f2d9a2e7598253a0c0e035687ec69441c3
@@@ -2804,14 -2737,15 +2804,14 @@@ int gpiod_direction_input_nonotify(stru
         * assume we are in input mode after this.
         */
        if (guard.gc->direction_input) {
 -              ret = guard.gc->direction_input(guard.gc,
 -                                              gpio_chip_hwgpio(desc));
 +              ret = gpiochip_direction_input(guard.gc,
 +                                             gpio_chip_hwgpio(desc));
        } else if (guard.gc->get_direction) {
-               ret = gpiochip_get_direction(guard.gc, gpio_chip_hwgpio(desc));
-               if (ret < 0)
-                       return ret;
 -              dir = guard.gc->get_direction(guard.gc,
 -                                            gpio_chip_hwgpio(desc));
++              dir = gpiochip_get_direction(guard.gc, gpio_chip_hwgpio(desc));
+               if (dir < 0)
+                       return dir;
  
-               if (ret != GPIO_LINE_DIRECTION_IN) {
+               if (dir != GPIO_LINE_DIRECTION_IN) {
                        gpiod_warn(desc,
                                   "%s: missing direction_input() operation and line is output\n",
                                    __func__);
        return ret;
  }
  
 +static int gpiochip_set(struct gpio_chip *gc, unsigned int offset, int value)
 +{
 +      int ret;
 +
 +      lockdep_assert_held(&gc->gpiodev->srcu);
 +
 +      if (WARN_ON(unlikely(!gc->set && !gc->set_rv)))
 +              return -EOPNOTSUPP;
 +
 +      if (gc->set_rv) {
 +              ret = gc->set_rv(gc, offset, value);
 +              if (ret > 0)
 +                      ret = -EBADE;
 +
 +              return ret;
 +      }
 +
 +      gc->set(gc, offset, value);
 +      return 0;
 +}
 +
  static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
  {
-       int val = !!value, ret = 0;
+       int val = !!value, ret = 0, dir;
  
        CLASS(gpio_chip_guard, guard)(desc);
        if (!guard.gc)
        } else {
                /* Check that we are in output mode if we can */
                if (guard.gc->get_direction) {
-                       ret = gpiochip_get_direction(guard.gc,
 -                      dir = guard.gc->get_direction(guard.gc,
 -                                                    gpio_chip_hwgpio(desc));
++                      dir = gpiochip_get_direction(guard.gc,
 +                                                   gpio_chip_hwgpio(desc));
-                       if (ret < 0)
-                               return ret;
+                       if (dir < 0)
+                               return dir;
  
-                       if (ret != GPIO_LINE_DIRECTION_OUT) {
+                       if (dir != GPIO_LINE_DIRECTION_OUT) {
                                gpiod_warn(desc,
                                           "%s: missing direction_output() operation\n",
                                           __func__);