Skip to content

Commit

Permalink
ASoC: cs42l51: Fix some error handling paths in cs42l51_probe()
Browse files Browse the repository at this point in the history
[ Upstream commit d221b84 ]

If devm_gpiod_get_optional() fails, we need to disable previously enabled
regulators, as done in the other error handling path of the function.

Also, gpiod_set_value_cansleep(, 1) needs to be called to undo a
potential gpiod_set_value_cansleep(, 0).
If the "reset" gpio is not defined, this additional call is just a no-op.

This behavior is the same as the one already in the .remove() function.

Fixes: 11b9cd7 ("ASoC: cs42l51: add reset management")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/a5e5f4b9fb03f46abd2c93ed94b5c395972ce0d1.1729975570.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
tititiou36 authored and gregkh committed Nov 8, 2024
1 parent 45a6289 commit 465d3a8
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions sound/soc/codecs/cs42l51.c
Original file line number Diff line number Diff line change
Expand Up @@ -754,8 +754,10 @@ int cs42l51_probe(struct device *dev, struct regmap *regmap)

cs42l51->reset_gpio = devm_gpiod_get_optional(dev, "reset",
GPIOD_OUT_LOW);
if (IS_ERR(cs42l51->reset_gpio))
return PTR_ERR(cs42l51->reset_gpio);
if (IS_ERR(cs42l51->reset_gpio)) {
ret = PTR_ERR(cs42l51->reset_gpio);
goto error;
}

if (cs42l51->reset_gpio) {
dev_dbg(dev, "Release reset gpio\n");
Expand Down Expand Up @@ -787,6 +789,7 @@ int cs42l51_probe(struct device *dev, struct regmap *regmap)
return 0;

error:
gpiod_set_value_cansleep(cs42l51->reset_gpio, 1);
regulator_bulk_disable(ARRAY_SIZE(cs42l51->supplies),
cs42l51->supplies);
return ret;
Expand Down

0 comments on commit 465d3a8

Please sign in to comment.