ASoC: cs35l35: Clear reset_gpio on the error path in probe
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Mon, 27 Mar 2017 15:54:27 +0000 (16:54 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 27 Mar 2017 16:26:53 +0000 (17:26 +0100)
The error path in probe attempts to put the device back into reset.
Should we fail to get the reset_gpio (such as a probe defer) we will
leave the error value in there, which the gpiod_set_value_cansleep on
the error path will attempt to deference.

Fix this issue by clearing reset_gpio before we head into the error
path.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Acked-by: Brian Austin <brian.austin@cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs35l35.c

index 1d9f332b2eec880977b046bda23a1b14c0524cbb..9688274f7c9060393b097a22355c3c49aaf086fd 100644 (file)
@@ -1412,10 +1412,10 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
                                                      GPIOD_OUT_LOW);
        if (IS_ERR(cs35l35->reset_gpio)) {
                ret = PTR_ERR(cs35l35->reset_gpio);
+               cs35l35->reset_gpio = NULL;
                if (ret == -EBUSY) {
                        dev_info(dev,
                                 "Reset line busy, assuming shared reset\n");
-                       cs35l35->reset_gpio = NULL;
                } else {
                        dev_err(dev, "Failed to get reset GPIO: %d\n", ret);
                        goto err;