From: Bartosz Golaszewski <[email protected]>

GPIOLIB is now aware of shared GPIOs and - for platforms where access to
such pins is managed internally - we don't need to keep track of the
enable count.

Once all users in the kernel switch to using the new mechanism, we'll be
able to drop the internal counting of users from the regulator code.

Acked-by: Mark Brown <[email protected]>
Signed-off-by: Bartosz Golaszewski <[email protected]>
---
 drivers/regulator/core.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 
84bc38911dba308539a25dd3af30a5c24802b890..e13cf5e120466cebc4d3f8400b89be07d3303338
 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -2737,6 +2737,13 @@ static int regulator_ena_gpio_request(struct 
regulator_dev *rdev,
 
        mutex_lock(&regulator_list_mutex);
 
+       if (gpiod_is_shared(gpiod))
+               /*
+                * The sharing of this GPIO pin is managed internally by
+                * GPIOLIB. We don't need to keep track of its enable count.
+                */
+               goto skip_compare;
+
        list_for_each_entry(pin, &regulator_ena_gpio_list, list) {
                if (gpiod_is_equal(pin->gpiod, gpiod)) {
                        rdev_dbg(rdev, "GPIO is already used\n");
@@ -2749,6 +2756,7 @@ static int regulator_ena_gpio_request(struct 
regulator_dev *rdev,
                return -ENOMEM;
        }
 
+skip_compare:
        pin = new_pin;
        new_pin = NULL;
 

-- 
2.48.1


Reply via email to