Skip to content

Commit

Permalink
regulator: wm8994: Don't use devres for enable GPIOs
Browse files Browse the repository at this point in the history
The regulator core takes over managing the lifetime of the enable GPIO
once the regulator is registered. As such we shouldn't register the
enable GPIO using devm, or it will be freed twice.

Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Charles Keepax authored and Mark Brown committed Nov 21, 2018
1 parent 7b51a82 commit 466affa
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions drivers/regulator/wm8994-regulator.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,14 @@ static int wm8994_ldo_probe(struct platform_device *pdev)
config.regmap = wm8994->regmap;
config.init_data = &ldo->init_data;

/* Look up LDO enable GPIO from the parent device node */
gpiod = devm_gpiod_get_optional(pdev->dev.parent,
id ? "wlf,ldo2ena" : "wlf,ldo1ena",
GPIOD_OUT_LOW |
GPIOD_FLAGS_BIT_NONEXCLUSIVE);
/*
* Look up LDO enable GPIO from the parent device node, we don't
* use devm because the regulator core will free the GPIO
*/
gpiod = gpiod_get_optional(pdev->dev.parent,
id ? "wlf,ldo2ena" : "wlf,ldo1ena",
GPIOD_OUT_LOW |
GPIOD_FLAGS_BIT_NONEXCLUSIVE);
if (IS_ERR(gpiod))
return PTR_ERR(gpiod);
config.ena_gpiod = gpiod;
Expand Down Expand Up @@ -184,6 +187,7 @@ static int wm8994_ldo_probe(struct platform_device *pdev)
return 0;

err:
gpiod_put(gpiod);
return ret;
}

Expand Down

0 comments on commit 466affa

Please sign in to comment.