On Wed, 25 Aug 2021 20:04:05 +0200, Vitaly Rodionov wrote: > Actually when codec is suspended and we do reboot from UI, then sometimes we > see suspend() calls in kernel log and no pops, but sometimes > > we still have no suspend() on reboot and we hear pops. But when we do reboot > from command line: > sudo reboot then we always have pops and no suspend() > called. > > Then we have added extra logging and we can see that on reboot codec somehow > getting resume() call and we run jack detect on resume that causing pops. Hm, it's interesting who triggers the runtime resume. > We were thinking about possible solution for that and we would propose some > changes in generic code hda_bind.c: > > static void hda_codec_driver_shutdown(struct device *dev) { + if (codec-> > patch_ops.suspend) + codec->patch_ops.suspend(codec); > snd_hda_codec_shutdown(dev_to_hda_codec(dev)); + hda_codec_driver_remove > (dev_to_hda_codec(dev)); } Sorry, it's no-no. The suspend can't be called unconditionally, and the driver unbind must not be called in the callback itself. Does the patch below work instead? thanks, Takashi --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -2356,8 +2356,11 @@ static void azx_shutdown(struct pci_dev *pci) if (!card) return; chip = card->private_data; - if (chip && chip->running) + if (chip && chip->running) { + chip->bus.shutdown = 1; + cancel_work_sync(&bus->unsol_work); azx_shutdown_chip(chip); + } } /* PCI IDs */