Add a new function gpiochip_fwd_register(), which finalizes the
initialization of the forwarder and registers the corresponding gpiochip.

Reviewed-by: Andy Shevchenko <[email protected]>
Signed-off-by: Thomas Richard <[email protected]>
---
 drivers/gpio/gpio-aggregator.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c
index 78bb84ca8a05..0bf73584df2a 100644
--- a/drivers/gpio/gpio-aggregator.c
+++ b/drivers/gpio/gpio-aggregator.c
@@ -565,6 +565,18 @@ static int gpiochip_fwd_gpio_add(struct gpiochip_fwd *fwd,
        return 0;
 }
 
+static int gpiochip_fwd_register(struct gpiochip_fwd *fwd)
+{
+       struct gpio_chip *chip = &fwd->chip;
+
+       if (chip->can_sleep)
+               mutex_init(&fwd->mlock);
+       else
+               spin_lock_init(&fwd->slock);
+
+       return devm_gpiochip_add_data(chip->parent, chip, fwd);
+}
+
 /**
  * gpiochip_fwd_create() - Create a new GPIO forwarder
  * @dev: Parent device pointer
@@ -602,18 +614,13 @@ static struct gpiochip_fwd *gpiochip_fwd_create(struct 
device *dev,
                        return ERR_PTR(error);
        }
 
-       if (chip->can_sleep)
-               mutex_init(&fwd->mlock);
-       else
-               spin_lock_init(&fwd->slock);
-
        if (features & FWD_FEATURE_DELAY) {
                error = gpiochip_fwd_setup_delay_line(dev, chip, fwd);
                if (error)
                        return ERR_PTR(error);
        }
 
-       error = devm_gpiochip_add_data(dev, chip, fwd);
+       error = gpiochip_fwd_register(fwd);
        if (error)
                return ERR_PTR(error);
 

-- 
2.39.5


Reply via email to