]> www.infradead.org Git - users/hch/configfs.git/commitdiff
ASoC: cs42l51: Fix some error handling paths in cs42l51_probe()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 26 Oct 2024 20:46:34 +0000 (22:46 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 28 Oct 2024 12:21:17 +0000 (12:21 +0000)
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: 11b9cd748e31 ("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>
sound/soc/codecs/cs42l51.c

index e4827b8c2bde45c8f9ca48f41174e5a0ae7aacca..6e51954bdb1ecc793962335a6e1b0af3d09e45af 100644 (file)
@@ -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;