On 6/30/22 08:00, Srinivas Kandagatla wrote: > Currently we do not check if SoundWire slave initialization timeout > expired before continuing to access its registers. > > Its possible that the registers are not accessible if timeout is > expired. Handle this by returning timeout in resume path. > > Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Fixes: 8dd552458361 ("ASoC: codecs: wsa881x: add runtime pm support") > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx> For the two patches Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > --- > sound/soc/codecs/wsa881x.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/sound/soc/codecs/wsa881x.c b/sound/soc/codecs/wsa881x.c > index dc954b85a988..6c8b1db649b8 100644 > --- a/sound/soc/codecs/wsa881x.c > +++ b/sound/soc/codecs/wsa881x.c > @@ -1173,11 +1173,17 @@ static int __maybe_unused wsa881x_runtime_resume(struct device *dev) > struct sdw_slave *slave = dev_to_sdw_dev(dev); > struct regmap *regmap = dev_get_regmap(dev, NULL); > struct wsa881x_priv *wsa881x = dev_get_drvdata(dev); > + unsigned long time; > > gpiod_direction_output(wsa881x->sd_n, 1); > > - wait_for_completion_timeout(&slave->initialization_complete, > - msecs_to_jiffies(WSA881X_PROBE_TIMEOUT)); > + time = wait_for_completion_timeout(&slave->initialization_complete, > + msecs_to_jiffies(WSA881X_PROBE_TIMEOUT)); > + if (!time) { > + dev_err(dev, "Initialization not complete, timed out\n"); > + gpiod_direction_output(wsa881x->sd_n, 0); > + return -ETIMEDOUT; > + } > > regcache_cache_only(regmap, false); > regcache_sync(regmap);