Skip to content

Commit d221b84

Browse files
tititiou36broonie
authored andcommitted
ASoC: cs42l51: Fix some error handling paths in cs42l51_probe()
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>
1 parent 6668610 commit d221b84

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

sound/soc/codecs/cs42l51.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -747,8 +747,10 @@ int cs42l51_probe(struct device *dev, struct regmap *regmap)
747747

748748
cs42l51->reset_gpio = devm_gpiod_get_optional(dev, "reset",
749749
GPIOD_OUT_LOW);
750-
if (IS_ERR(cs42l51->reset_gpio))
751-
return PTR_ERR(cs42l51->reset_gpio);
750+
if (IS_ERR(cs42l51->reset_gpio)) {
751+
ret = PTR_ERR(cs42l51->reset_gpio);
752+
goto error;
753+
}
752754

753755
if (cs42l51->reset_gpio) {
754756
dev_dbg(dev, "Release reset gpio\n");
@@ -780,6 +782,7 @@ int cs42l51_probe(struct device *dev, struct regmap *regmap)
780782
return 0;
781783

782784
error:
785+
gpiod_set_value_cansleep(cs42l51->reset_gpio, 1);
783786
regulator_bulk_disable(ARRAY_SIZE(cs42l51->supplies),
784787
cs42l51->supplies);
785788
return ret;

0 commit comments

Comments
 (0)