Message ID | 20230902210621.1184693-8-cristian.ciocaltea@collabora.com |
---|---|
State | Superseded |
Headers | show |
Series | Improve CS35l41 ALSA SoC audio driver | expand |
On Sun, Sep 03, 2023 at 12:06:19AM +0300, Cristian Ciocaltea wrote: > The interrupt handler invokes pm_runtime_get_sync() without checking the > returned error code. > > Add a proper verification and switch to pm_runtime_resume_and_get(), to > avoid the need to call pm_runtime_put_noidle() for decrementing the PM > usage counter before returning from the error condition. > > Fixes: f517ba4924ad ("ASoC: cs35l41: Add support for hibernate memory retention mode") > Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> > --- Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Thanks, Charles
diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 6f2ad0d3a75c..66418547a4dd 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -386,10 +386,18 @@ static irqreturn_t cs35l41_irq(int irq, void *data) struct cs35l41_private *cs35l41 = data; unsigned int status[4] = { 0, 0, 0, 0 }; unsigned int masks[4] = { 0, 0, 0, 0 }; - int ret = IRQ_NONE; unsigned int i; + int ret; - pm_runtime_get_sync(cs35l41->dev); + ret = pm_runtime_resume_and_get(cs35l41->dev); + if (ret < 0) { + dev_err(cs35l41->dev, + "pm_runtime_resume_and_get failed in %s: %d\n", + __func__, ret); + return IRQ_NONE; + } + + ret = IRQ_NONE; for (i = 0; i < ARRAY_SIZE(status); i++) { regmap_read(cs35l41->regmap,
The interrupt handler invokes pm_runtime_get_sync() without checking the returned error code. Add a proper verification and switch to pm_runtime_resume_and_get(), to avoid the need to call pm_runtime_put_noidle() for decrementing the PM usage counter before returning from the error condition. Fixes: f517ba4924ad ("ASoC: cs35l41: Add support for hibernate memory retention mode") Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> --- sound/soc/codecs/cs35l41.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)