-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Tuesday, June 25, 2013 3:09 PM To: Wang, Xingchao Cc: alsa-devel@alsa-project.org; Wang Xingchao Subject: Re: [PATCH 1/2] ALSA: hdmi - poll eld at resume time
At Tue, 25 Jun 2013 09:06:32 +0200, Takashi Iwai wrote:
At Tue, 25 Jun 2013 06:34:49 +0000, Wang, Xingchao wrote:
Hi Takashi,
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Tuesday, June 25, 2013 2:07 PM To: Wang, Xingchao Cc: alsa-devel@alsa-project.org; Wang Xingchao Subject: Re: [PATCH 1/2] ALSA: hdmi - poll eld at resume time
At Tue, 25 Jun 2013 04:54:05 +0000, Wang, Xingchao wrote:
Hi Takashi,
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Monday, June 24, 2013 8:50 PM To: Wang, Xingchao Cc: alsa-devel@alsa-project.org; Wang Xingchao Subject: Re: [PATCH 1/2] ALSA: hdmi - poll eld at resume time
At Mon, 24 Jun 2013 12:19:42 +0000, Wang, Xingchao wrote: > > > > > -----Original Message----- > > From: Takashi Iwai [mailto:tiwai@suse.de] > > Sent: Monday, June 24, 2013 7:33 PM > > To: Wang Xingchao > > Cc: alsa-devel@alsa-project.org; Wang, Xingchao > > Subject: Re: [PATCH 1/2] ALSA: hdmi - poll eld at resume > > time > > > > At Mon, 24 Jun 2013 07:45:23 -0400, Wang Xingchao wrote: > > > > > > Hdmi driver may not receive intrinsic event from gfx > > > side when it's in runtime suspend mode. There's no ELD > > > info when exit from runtime suspend. This patch avoid missing
ELD info.
> > > > hda_call_codec_resume() sets the jack detection all dirty, > > thus each jack detection callback should be called at > > resume. Didn't it work as expected? > > I would double check that. In my test, it doesnot work as expected.
OK, I found the problem. patch_hdmi.c enables the jack detection stuff without the callback, so the resume code triggers the check of jack detection but only updates the kcontrols.
You patch did not resolve the issue. I added some debug log, the callback wasnot called at all.
Even if you unplugged while runtime suspend?
Yes, the controller/codec suspended in runtime already.
The callback is called only when the plug status (i.e. the jack detection state) change is detected at the resume time -- i.e. the state the driver holds differs from the state at the resume.
Do you assume jackpoll_interval be non-zero? If so the hda_jackpoll_work
will continue to run periodically.
IMO the callback just need be called only once at resume time.
Hmm, the problem is that the callback updater isn't called in the resume path as default. The oneliner below will fix it.
Forgot to attach...
Yes, it works if call snd_hda_jack_poll_all(codec) directly, but sometimes read pin sense value is 0xc000,0000 even unplug monitor, and eld# will keep valid all the time. Although sometimes it works(the ELD info refreshed correctly), you have to wake up controller/codec before check eld info(cat codec# or play a piece of audio).
Thanks --xingchao
Takashi
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 35090b3..86d4709 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -3942,6 +3942,7 @@ static void hda_call_codec_resume(struct hda_codec *codec) codec->patch_ops.init(codec); snd_hda_codec_resume_amp(codec); snd_hda_codec_resume_cache(codec);
snd_hda_jack_poll_all(codec);
}
if (codec->jackpoll_interval)