diff options
author | David Henningsson <david.henningsson@canonical.com> | 2013-11-07 16:38:25 +0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-11-07 17:03:33 +0400 |
commit | 464837a7bc0a3495e3490e3bf85099bb2300efbd (patch) | |
tree | 0d4aba6b3260f50112cd58fb9534013e82775d84 /sound/pci | |
parent | 0f568959de1c90be3f9ec51c271a40d7583f5809 (diff) | |
download | linux-464837a7bc0a3495e3490e3bf85099bb2300efbd.tar.xz |
ALSA: hda - block HDMI jack reports while repolling
This fixes a race condition in case several monitors are being
repolled in parallel.
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index ce412d1a15d0..a96403a828af 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -1477,6 +1477,7 @@ static int hdmi_read_pin_conn(struct hda_codec *codec, int pin_idx) static bool hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll) { + struct hda_jack_tbl *jack; struct hda_codec *codec = per_pin->codec; struct hdmi_spec *spec = codec->spec; struct hdmi_eld *eld = &spec->temp_eld; @@ -1564,6 +1565,11 @@ static bool hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll) ret = true; /* AMD codecs create ELD by itself */ else ret = !repoll || !pin_eld->monitor_present || pin_eld->eld_valid; + + jack = snd_hda_jack_tbl_get(codec, pin_nid); + if (jack) + jack->block_report = !ret; + mutex_unlock(&per_pin->lock); return ret; } |