[alsa-devel] [PATCH 1/2] ALSA: hda - Enable i915 binding for gen3/4 HDMI/DP

Takashi Iwai tiwai at suse.de
Wed Mar 30 17:46:01 CEST 2016


This patch fills the holes and now all i915 HDMI/DP codecs are managed
over the audio ELD notifier, finally.  The old gen3/gen4 chips have
usually only a single pin/converter pair, and the digital port mapping
is fixed.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
 sound/hda/hdac_i915.c      | 11 +++++++++++
 sound/pci/hda/patch_hdmi.c | 21 +++++++++++++++------
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index d0da2508823e..c62a9f830b84 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -128,6 +128,9 @@ EXPORT_SYMBOL_GPL(snd_hdac_get_display_clk);
  * Pin Widget 4 - PORT B (port = 1 in i915 driver)
  * Pin Widget 5 - PORT C (port = 2 in i915 driver)
  * Pin Widget 6 - PORT D (port = 3 in i915 driver)
+ *
+ * on earlier models:
+ * Pin Widget 3 - PORT B
  */
 static int pin2port(struct hdac_device *codec, hda_nid_t pin_nid)
 {
@@ -139,6 +142,14 @@ static int pin2port(struct hdac_device *codec, hda_nid_t pin_nid)
 	case 0x80862882: /* VLV */
 		base_nid = 3;
 		break;
+	case 0x80862801: /* Bearlake */
+	case 0x80862802: /* Cantiga */
+	case 0x80862803: /* Eaglelake */
+	case 0x80862880: /* CedarTrail */
+	case 0x808629fb: /* Crestline HDMI */
+		if (WARN_ON(pin_nid != 0x03))
+			return -1;
+		return 1; /* only port B */
 	default:
 		base_nid = 4;
 		break;
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 4833c7bdd1e8..2a3bf1584f3b 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -2286,6 +2286,15 @@ static void intel_pin_eld_notify(void *audio_ptr, int port)
 	case 0x80862882: /* VLV */
 		pin_nid = port + 0x03;
 		break;
+	case 0x80862801: /* Bearlake */
+	case 0x80862802: /* Cantiga */
+	case 0x80862803: /* Eaglelake */
+	case 0x80862880: /* CedarTrail */
+	case 0x808629fb: /* Crestline HDMI */
+		if (WARN_ON(port != 1)) /* assume only port B */
+			return;
+		pin_nid = 0x03;
+		break;
 	default:
 		pin_nid = port + 0x04;
 		break;
@@ -2424,7 +2433,7 @@ static int patch_i915_byt_hdmi(struct hda_codec *codec)
 	return 0;
 }
 
-/* Intel IronLake, SandyBridge and IvyBridge; with eld notifier */
+/* Intel Gen3/Gen4, IronLake, SandyBridge and IvyBridge; with eld notifier */
 static int patch_i915_cpt_hdmi(struct hda_codec *codec)
 {
 	struct hdmi_spec *spec;
@@ -3627,9 +3636,9 @@ HDA_CODEC_ENTRY(0x11069f81, "VX900 HDMI/DP",	patch_via_hdmi),
 HDA_CODEC_ENTRY(0x11069f84, "VX11 HDMI/DP",	patch_generic_hdmi),
 HDA_CODEC_ENTRY(0x11069f85, "VX11 HDMI/DP",	patch_generic_hdmi),
 HDA_CODEC_ENTRY(0x80860054, "IbexPeak HDMI",	patch_i915_cpt_hdmi),
-HDA_CODEC_ENTRY(0x80862801, "Bearlake HDMI",	patch_generic_hdmi),
-HDA_CODEC_ENTRY(0x80862802, "Cantiga HDMI",	patch_generic_hdmi),
-HDA_CODEC_ENTRY(0x80862803, "Eaglelake HDMI",	patch_generic_hdmi),
+HDA_CODEC_ENTRY(0x80862801, "Bearlake HDMI",	patch_i915_cpt_hdmi),
+HDA_CODEC_ENTRY(0x80862802, "Cantiga HDMI",	patch_i915_cpt_hdmi),
+HDA_CODEC_ENTRY(0x80862803, "Eaglelake HDMI",	patch_i915_cpt_hdmi),
 HDA_CODEC_ENTRY(0x80862804, "IbexPeak HDMI",	patch_i915_cpt_hdmi),
 HDA_CODEC_ENTRY(0x80862805, "CougarPoint HDMI",	patch_i915_cpt_hdmi),
 HDA_CODEC_ENTRY(0x80862806, "PantherPoint HDMI", patch_i915_cpt_hdmi),
@@ -3638,10 +3647,10 @@ HDA_CODEC_ENTRY(0x80862808, "Broadwell HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x80862809, "Skylake HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x8086280a, "Broxton HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x8086280b, "Kabylake HDMI",	patch_i915_hsw_hdmi),
-HDA_CODEC_ENTRY(0x80862880, "CedarTrail HDMI",	patch_generic_hdmi),
+HDA_CODEC_ENTRY(0x80862880, "CedarTrail HDMI",	patch_i915_cpt_hdmi),
 HDA_CODEC_ENTRY(0x80862882, "Valleyview2 HDMI",	patch_i915_byt_hdmi),
 HDA_CODEC_ENTRY(0x80862883, "Braswell HDMI",	patch_i915_byt_hdmi),
-HDA_CODEC_ENTRY(0x808629fb, "Crestline HDMI",	patch_generic_hdmi),
+HDA_CODEC_ENTRY(0x808629fb, "Crestline HDMI",	patch_i915_cpt_hdmi),
 /* special ID for generic HDMI */
 HDA_CODEC_ENTRY(HDA_CODEC_ID_GENERIC_HDMI, "Generic HDMI", patch_generic_hdmi),
 {} /* terminator */
-- 
2.7.4



More information about the Alsa-devel mailing list