Unverified Commit d221b844 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Mark Brown
Browse files

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: 11b9cd74 ("ASoC: cs42l51: add reset management")
Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/a5e5f4b9fb03f46abd2c93ed94b5c395972ce0d1.1729975570.git.christophe.jaillet@wanadoo.fr


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 6668610b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -747,8 +747,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");
@@ -780,6 +782,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;