Message ID | 20200921094308.31921-1-shumingf@realtek.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 501ef013390b774e8e61000a78d1d640d6c3411d |
Headers | show |
Series | [1/2] ASoC: rt700: wait for the delayed work to finish when the system suspends | expand |
On 9/21/20 4:43 AM, shumingf@realtek.com wrote: > From: Shuming Fan <shumingf@realtek.com> > > To avoid the IO error, we need to cancel the delayed work and wait for it to finish. > > Signed-off-by: Shuming Fan <shumingf@realtek.com> Thanks Shuming. For more context we detected a timeout error during suspend-resume stress tests, the problem is similar to an earlier case with interrupt handling already fixed in the SoundWire tree: we want all workqueues to complete before suspending. BugLink: https://github.com/thesofproject/linux/issues/2443 Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > --- > sound/soc/codecs/rt711-sdw.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/sound/soc/codecs/rt711-sdw.c b/sound/soc/codecs/rt711-sdw.c > index 28d663673320..3a8ca600d1cf 100644 > --- a/sound/soc/codecs/rt711-sdw.c > +++ b/sound/soc/codecs/rt711-sdw.c > @@ -491,6 +491,10 @@ static int __maybe_unused rt711_dev_suspend(struct device *dev) > if (!rt711->hw_init) > return 0; > > + cancel_delayed_work_sync(&rt711->jack_detect_work); > + cancel_delayed_work_sync(&rt711->jack_btn_check_work); > + cancel_work_sync(&rt711->calibration_work); > + > regcache_cache_only(rt711->regmap, true); > > return 0; >
diff --git a/sound/soc/codecs/rt711-sdw.c b/sound/soc/codecs/rt711-sdw.c index 28d663673320..3a8ca600d1cf 100644 --- a/sound/soc/codecs/rt711-sdw.c +++ b/sound/soc/codecs/rt711-sdw.c @@ -491,6 +491,10 @@ static int __maybe_unused rt711_dev_suspend(struct device *dev) if (!rt711->hw_init) return 0; + cancel_delayed_work_sync(&rt711->jack_detect_work); + cancel_delayed_work_sync(&rt711->jack_btn_check_work); + cancel_work_sync(&rt711->calibration_work); + regcache_cache_only(rt711->regmap, true); return 0;