ALSA: intelhdmi - export monitor-presence and ELD-valid status
authorWu Fengguang <fengguang.wu@intel.com>
Wed, 18 Nov 2009 04:38:01 +0000 (12:38 +0800)
committerTakashi Iwai <tiwai@suse.de>
Wed, 18 Nov 2009 06:37:49 +0000 (07:37 +0100)
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_eld.c
sound/pci/hda/hda_local.h
sound/pci/hda/patch_intelhdmi.c

index 20fa6aee29c0e2caf282dee87c1aa30c83cfb229..de50cfcf644ed0958a59eceb8ba64b8224bb0b4d 100644 (file)
@@ -477,6 +477,8 @@ static void hdmi_print_eld_info(struct snd_info_entry *entry,
                [4 ... 7] = "reserved"
        };
 
+       snd_iprintf(buffer, "monitor_present\t\t%d\n", e->monitor_present);
+       snd_iprintf(buffer, "eld_valid\t\t%d\n", e->eld_valid);
        snd_iprintf(buffer, "monitor_name\t\t%s\n", e->monitor_name);
        snd_iprintf(buffer, "connection_type\t\t%s\n",
                                eld_connection_type_names[e->conn_type]);
@@ -518,7 +520,11 @@ static void hdmi_write_eld_info(struct snd_info_entry *entry,
                 *      monitor_name manufacture_id product_id
                 *      eld_version edid_version
                 */
-               if (!strcmp(name, "connection_type"))
+               if (!strcmp(name, "monitor_present"))
+                       e->monitor_present = val;
+               else if (!strcmp(name, "eld_valid"))
+                       e->eld_valid = val;
+               else if (!strcmp(name, "connection_type"))
                        e->conn_type = val;
                else if (!strcmp(name, "port_id"))
                        e->port_id = val;
index d4a3d0942c00879fc7a7b47c98fd177c3780f075..070b74384d436201faf3320a39652578eba3d392 100644 (file)
@@ -569,9 +569,11 @@ struct cea_sad {
  * ELD: EDID Like Data
  */
 struct hdmi_eld {
+       bool    monitor_present;
+       bool    eld_valid;
        int     eld_size;
        int     baseline_len;
-       int     eld_ver;        /* (eld_ver == 0) indicates invalid ELD */
+       int     eld_ver;
        int     cea_edid_ver;
        char    monitor_name[ELD_MAX_MNL + 1];
        int     manufacture_id;
index 82312c67f8dd1be83378a4bc048fb1369ba27caa..095c993f4b76834a48efaae853d8817111e73ef0 100644 (file)
@@ -62,8 +62,6 @@ struct intel_hdmi_spec {
        /*
         * HDMI sink attached to each pin
         */
-       bool            sink_present[INTEL_HDMI_PINS];
-       bool            sink_eldv[INTEL_HDMI_PINS];
        struct hdmi_eld sink_eld[INTEL_HDMI_PINS];
 
        /*
@@ -645,7 +643,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
        for (i = 0; i < spec->num_pins; i++) {
                if (spec->pin_cvt[i] != nid)
                        continue;
-               if (spec->sink_present[i] != true)
+               if (!spec->sink_eld[i].monitor_present)
                        continue;
 
                pin_nid = spec->pin[i];
@@ -675,8 +673,8 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res)
        if (index < 0)
                return;
 
-       spec->sink_present[index] = pind;
-       spec->sink_eldv[index] = eldv;
+       spec->sink_eld[index].monitor_present = pind;
+       spec->sink_eld[index].eld_valid = eldv;
 
        if (pind && eldv) {
                hdmi_parse_eld(codec, index);