|
@@ -1714,6 +1714,57 @@ static void intel_haswell_fixup_connect_list(struct hda_codec *codec)
|
|
|
snd_hda_override_conn_list(codec, 0x07, 3, list);
|
|
|
}
|
|
|
|
|
|
+#define INTEL_VENDOR_NID 0x08
|
|
|
+#define INTEL_GET_VENDOR_VERB 0xf81
|
|
|
+#define INTEL_SET_VENDOR_VERB 0x781
|
|
|
+#define INTEL_EN_DP12 0x02 /* enable DP 1.2 features */
|
|
|
+#define INTEL_EN_ALL_PIN_CVTS 0x01 /* enable 2nd & 3rd pins and convertors */
|
|
|
+
|
|
|
+static void intel_haswell_enable_all_pins(struct hda_codec *codec,
|
|
|
+ const struct hda_fixup *fix, int action)
|
|
|
+{
|
|
|
+ unsigned int vendor_param;
|
|
|
+
|
|
|
+ if (action != HDA_FIXUP_ACT_PRE_PROBE)
|
|
|
+ return;
|
|
|
+ vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
|
|
|
+ INTEL_GET_VENDOR_VERB, 0);
|
|
|
+ if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS)
|
|
|
+ return;
|
|
|
+
|
|
|
+ vendor_param |= INTEL_EN_ALL_PIN_CVTS;
|
|
|
+ vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
|
|
|
+ INTEL_SET_VENDOR_VERB, vendor_param);
|
|
|
+ if (vendor_param == -1)
|
|
|
+ return;
|
|
|
+
|
|
|
+ snd_hda_codec_update_widgets(codec);
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/* available models for fixup */
|
|
|
+enum {
|
|
|
+ INTEL_HASWELL,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct hda_model_fixup hdmi_models[] = {
|
|
|
+ {.id = INTEL_HASWELL, .name = "Haswell"},
|
|
|
+ {}
|
|
|
+};
|
|
|
+
|
|
|
+static const struct snd_pci_quirk hdmi_fixup_tbl[] = {
|
|
|
+ SND_PCI_QUIRK(0x8086, 0x2010, "Haswell", INTEL_HASWELL),
|
|
|
+ {} /* terminator */
|
|
|
+};
|
|
|
+
|
|
|
+static const struct hda_fixup hdmi_fixups[] = {
|
|
|
+ [INTEL_HASWELL] = {
|
|
|
+ .type = HDA_FIXUP_FUNC,
|
|
|
+ .v.func = intel_haswell_enable_all_pins,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
static int patch_generic_hdmi(struct hda_codec *codec)
|
|
|
{
|
|
@@ -1725,6 +1776,9 @@ static int patch_generic_hdmi(struct hda_codec *codec)
|
|
|
|
|
|
codec->spec = spec;
|
|
|
|
|
|
+ snd_hda_pick_fixup(codec, hdmi_models, hdmi_fixup_tbl, hdmi_fixups);
|
|
|
+ snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
|
|
+
|
|
|
if (codec->vendor_id == 0x80862807)
|
|
|
intel_haswell_fixup_connect_list(codec);
|
|
|
|