ALSA: hda/hdmi - Consider eld_valid when reporting jack event
authorHui Wang <hui.wang@canonical.com>
Mon, 6 May 2019 14:09:32 +0000 (22:09 +0800)
committerTakashi Iwai <tiwai@suse.de>
Mon, 6 May 2019 14:29:10 +0000 (16:29 +0200)
commit7f641e26a6df9269cb25dd7a4b0a91d6586ed441
tree7b6ede995ed82956d2f438bd488ad70528362fa2
parent8c2e6728c2bf95765b724e07d0278ae97cd1ee0d
ALSA: hda/hdmi - Consider eld_valid when reporting jack event

On the machines with AMD GPU or Nvidia GPU, we often meet this issue:
after s3, there are 4 HDMI/DP audio devices in the gnome-sound-setting
even there is no any monitors plugged.

When this problem happens, we check the /proc/asound/cardX/eld#N.M, we
will find the monitor_present=1, eld_valid=0.

The root cause is BIOS or GPU driver makes the PRESENCE valid even no
monitor plugged, and of course the driver will not get the valid
eld_data subsequently.

In this situation, we should not report the jack_plugged event, to do
so, let us change the function hdmi_present_sense_via_verbs(). In this
function, it reads the pin_sense via snd_hda_pin_sense(), after
calling this function, the jack_dirty is 0, and before exiting
via_verbs(), we change the shadow pin_sense according to both
monitor_present and eld_valid, then in the snd_hda_jack_report_sync(),
since the jack_dirty is still 0, it will report jack event according
to this modified shadow pin_sense.

After this change, the driver will not report Jack_is_plugged event
through hdmi_present_sense_via_verbs() if monitor_present is 1 and
eld_valid is 0.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_hdmi.c