> > > For Realtek codecs, pm_runtime_forbid() is called in the probe > > function after the build_controls(). In a stress test, occasionally > > the 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 patch calls pm_runtime_forbid() early to fix the issue. > > 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> > > The behavior shouldn't be specific to that model, also not to codec vendors, but > it's rather a generic problem, so it's no right place to correct, I suppose. > > Can we simply call pm_runtime_forbid() at creating a codec object like below? We tried this change and its working as expected. I believe this will address similar issues across all codecs. Will send a patch with this fix. > > > thanks, > > Takashi > > --- 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: