On Fri, 28 Aug 2020 01:05:36 +0200, Harsha Priya wrote: > > For certain codecs (like Realtek), pm_runtime_forbid() is invoked > in the probe function after build_controls(). In a stress test, > its observed occasionally that runtime PM calls are invoked > before controls are built. This causes the codec to be > runtime suspended before probe completes. Because of this, not all > controls are enumerated correctly, and audio does not work until > system is rebooted. > > This issue being common across all codecs, pm_runtime_forbid() is > called when the codec object is created to fix this issue. > A codec enables or disables runtime pm in its own probe function. > > Multiple stress tests of 2000+ cycles has been done to test the fix. > > Signed-off-by: Harsha Priya <harshapriya.n@xxxxxxxxx> > Signed-off-by: Emmanuel Jillela <emmanuel.jillela@xxxxxxxxx> > Reviewed-by: Kailang Yang <kailang@xxxxxxxxxxx> Thanks. The only concern is about the influence on the relevant ASoC code, especially hdac_hda.c. Kai, could you check whether this still works? Takashi > --- > sound/pci/hda/hda_codec.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c > index e96a87f1b611..a356c21edb90 100644 > --- a/sound/pci/hda/hda_codec.c > +++ b/sound/pci/hda/hda_codec.c > @@ -1000,6 +1000,9 @@ int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card, > if (err < 0) > goto error; > > + /* PM runtime needs to be enabled later after binding codec */ > + pm_runtime_forbid(&codec->core.dev); > + > return 0; > > error: > -- > 2.17.1 >