On Sunday, August 29, 2021, Alejandro Tafalla atafalla@dnyon.com wrote:
Drive the reset gpio if defined in the DTS node.
Signed-off-by: Alejandro Tafalla atafalla@dnyon.com
sound/soc/codecs/max98927.c | 16 ++++++++++++++++ sound/soc/codecs/max98927.h | 1 + 2 files changed, 17 insertions(+)
diff --git a/sound/soc/codecs/max98927.c b/sound/soc/codecs/max98927.c index 8b206ee77709..dacf64c4cdf7 100644 --- a/sound/soc/codecs/max98927.c +++ b/sound/soc/codecs/max98927.c @@ -898,6 +898,22 @@ static int max98927_i2c_probe(struct i2c_client *i2c, return ret; }
max98927->reset_gpio
= devm_gpiod_get_optional(&i2c->dev, "reset",
GPIOD_OUT_HIGH);
if (IS_ERR(max98927->reset_gpio)) {
ret = PTR_ERR(max98927->reset_gpio);
dev_err(&i2c->dev,
"Failed to request GPIO reset pin, error %d\n",
ret);
return ret;
Spamming logs is not good. Use
return dev_err_probe(...);
}
if (max98927->reset_gpio) {
gpiod_set_value_cansleep(max98927->reset_gpio, 0);
You may request the pin in a proper state, also with current code you seems mishandle the conception of the logical pin level vs. physical one.
usleep_range(5, 10)
gpiod_set_value_cansleep(max98927->reset_gpio, 1);
usleep_range(1, 5)
}
/* Check Revision ID */ ret = regmap_read(max98927->regmap, MAX98927_R01FF_REV_ID, ®);
diff --git a/sound/soc/codecs/max98927.h b/sound/soc/codecs/max98927.h index 05f495db914d..5c04bf38e24a 100644 --- a/sound/soc/codecs/max98927.h +++ b/sound/soc/codecs/max98927.h @@ -255,6 +255,7 @@ struct max98927_priv { struct regmap *regmap; struct snd_soc_component *component; struct max98927_pdata *pdata;
struct gpio_desc *reset_gpio;
Why? Are you using it outside of ->probe()?
unsigned int spk_gain; unsigned int sysclk; unsigned int v_l_slot;
-- 2.32.0