pinctrl: change the signature of pinctrl_ready_for_gpio_range()
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 10 Oct 2023 14:22:16 +0000 (16:22 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Sat, 4 Nov 2023 09:23:22 +0000 (10:23 +0100)
Modify pinctrl_ready_for_gpio_range() to be in line with public GPIO
helpers and take a pair of GPIO chip & offset as arguments

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/core.c

index 9bcaa1ec85c1c9f8129277427f0a5f195bcc19f8..1fa89be29b8f98b22895aed0c65f1fa68df9d7bb 100644 (file)
@@ -322,7 +322,8 @@ pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, struct gpio_chip *gc,
 /**
  * pinctrl_ready_for_gpio_range() - check if other GPIO pins of
  * the same GPIO chip are in range
- * @gpio: gpio pin to check taken from the global GPIO pin space
+ * @gc: GPIO chip structure from the GPIO subsystem
+ * @offset: hardware offset of the GPIO relative to the controller
  *
  * This function is complement of pinctrl_match_gpio_range(). If the return
  * value of pinctrl_match_gpio_range() is NULL, this function could be used
@@ -333,19 +334,11 @@ pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, struct gpio_chip *gc,
  * is false, it means that pinctrl device may not be ready.
  */
 #ifdef CONFIG_GPIOLIB
-static bool pinctrl_ready_for_gpio_range(unsigned gpio)
+static bool pinctrl_ready_for_gpio_range(struct gpio_chip *gc,
+                                        unsigned int offset)
 {
        struct pinctrl_dev *pctldev;
        struct pinctrl_gpio_range *range = NULL;
-       /*
-        * FIXME: "gpio" here is a number in the global GPIO numberspace.
-        * get rid of this from the ranges eventually and get the GPIO
-        * descriptor from the gpio_chip.
-        */
-       struct gpio_chip *chip = gpiod_to_chip(gpio_to_desc(gpio));
-
-       if (WARN(!chip, "no gpio_chip for gpio%i?", gpio))
-               return false;
 
        mutex_lock(&pinctrldev_list_mutex);
 
@@ -355,8 +348,8 @@ static bool pinctrl_ready_for_gpio_range(unsigned gpio)
                mutex_lock(&pctldev->mutex);
                list_for_each_entry(range, &pctldev->gpio_ranges, node) {
                        /* Check if any gpio range overlapped with gpio chip */
-                       if (range->base + range->npins - 1 < chip->base ||
-                           range->base > chip->base + chip->ngpio - 1)
+                       if (range->base + range->npins - 1 < gc->base ||
+                           range->base > gc->base + gc->ngpio - 1)
                                continue;
                        mutex_unlock(&pctldev->mutex);
                        mutex_unlock(&pinctrldev_list_mutex);
@@ -370,7 +363,11 @@ static bool pinctrl_ready_for_gpio_range(unsigned gpio)
        return false;
 }
 #else
-static bool pinctrl_ready_for_gpio_range(unsigned gpio) { return true; }
+static inline bool
+pinctrl_ready_for_gpio_range(struct gpio_chip *gc, unsigned int offset)
+{
+       return true;
+}
 #endif
 
 /**
@@ -805,7 +802,7 @@ int pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset)
 
        ret = pinctrl_get_device_gpio_range(gc, offset, &pctldev, &range);
        if (ret) {
-               if (pinctrl_ready_for_gpio_range(gc->base + offset))
+               if (pinctrl_ready_for_gpio_range(gc, offset))
                        ret = 0;
                return ret;
        }