diff options
Diffstat (limited to 'sound/pci/hda/patch_hdmi.c')
| -rw-r--r-- | sound/pci/hda/patch_hdmi.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 86067ee78632..2fc53961054e 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c | |||
| @@ -52,6 +52,10 @@ struct hdmi_spec { | |||
| 52 | */ | 52 | */ |
| 53 | struct hda_multi_out multiout; | 53 | struct hda_multi_out multiout; |
| 54 | unsigned int codec_type; | 54 | unsigned int codec_type; |
| 55 | |||
| 56 | /* misc flags */ | ||
| 57 | /* PD bit indicates only the update, not the current state */ | ||
| 58 | unsigned int old_pin_detect:1; | ||
| 55 | }; | 59 | }; |
| 56 | 60 | ||
| 57 | 61 | ||
| @@ -616,6 +620,9 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid, | |||
| 616 | * Unsolicited events | 620 | * Unsolicited events |
| 617 | */ | 621 | */ |
| 618 | 622 | ||
| 623 | static void hdmi_present_sense(struct hda_codec *codec, hda_nid_t pin_nid, | ||
| 624 | struct hdmi_eld *eld); | ||
| 625 | |||
| 619 | static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) | 626 | static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) |
| 620 | { | 627 | { |
| 621 | struct hdmi_spec *spec = codec->spec; | 628 | struct hdmi_spec *spec = codec->spec; |
| @@ -632,6 +639,12 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) | |||
| 632 | if (index < 0) | 639 | if (index < 0) |
| 633 | return; | 640 | return; |
| 634 | 641 | ||
| 642 | if (spec->old_pin_detect) { | ||
| 643 | if (pind) | ||
| 644 | hdmi_present_sense(codec, tag, &spec->sink_eld[index]); | ||
| 645 | pind = spec->sink_eld[index].monitor_present; | ||
| 646 | } | ||
| 647 | |||
| 635 | spec->sink_eld[index].monitor_present = pind; | 648 | spec->sink_eld[index].monitor_present = pind; |
| 636 | spec->sink_eld[index].eld_valid = eldv; | 649 | spec->sink_eld[index].eld_valid = eldv; |
| 637 | 650 | ||
