diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2018-12-06 13:43:47 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-12-11 01:04:31 +0000 |
commit | 48bd226f0ab3b91a837213cbfa15319f377effad (patch) | |
tree | fac32f25e96fa61dcaec1f1a74178323e682f392 /drivers/regulator/max8973-regulator.c | |
parent | 891ddbc79a61eb5b919cf56202ecaf7259878cb2 (diff) | |
download | linux-48bd226f0ab3b91a837213cbfa15319f377effad.tar.gz linux-48bd226f0ab3b91a837213cbfa15319f377effad.tar.bz2 linux-48bd226f0ab3b91a837213cbfa15319f377effad.zip |
regulator: max8973: Let core handle GPIO descriptor
The probe path of this driver is a bit complex: sometimes the
GPIO descriptor is passed to the regulator core, sometimes
it is not.
To handle it in a simple way: stick with the devm_* resource
management and unhinge the GPIO descriptor devres handling
right before passing it to the regulator core, if we pass it
to the regulator core.
Fixes: e7d2be696faa ("regulator: max8973: Pass descriptor instead of GPIO number")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator/max8973-regulator.c')
-rw-r--r-- | drivers/regulator/max8973-regulator.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/regulator/max8973-regulator.c b/drivers/regulator/max8973-regulator.c index e7a58b509032..9aee1444181d 100644 --- a/drivers/regulator/max8973-regulator.c +++ b/drivers/regulator/max8973-regulator.c @@ -808,7 +808,13 @@ static int max8973_probe(struct i2c_client *client, config.of_node = client->dev.of_node; config.regmap = max->regmap; - /* Register the regulators */ + /* + * Register the regulators + * Turn the GPIO descriptor over to the regulator core for + * lifecycle management if we pass an ena_gpiod. + */ + if (config.ena_gpiod) + devm_gpiod_unhinge(&client->dev, config.ena_gpiod); rdev = devm_regulator_register(&client->dev, &max->desc, &config); if (IS_ERR(rdev)) { ret = PTR_ERR(rdev); |