diff options
author | David Henningsson <david.henningsson@canonical.com> | 2014-09-22 13:09:02 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2014-09-22 14:50:14 +0200 |
commit | bbac713b6331a833a084179ea2c5abd0ce7eb4c0 (patch) | |
tree | 125ed61e236f1bb4e71f6c3a894594ed53228006 | |
parent | 222206bcdb935be3a43c23fbfccd5db7e217ff44 (diff) | |
download | hda-emu-bbac713b6331a833a084179ea2c5abd0ce7eb4c0.tar.gz |
hda-spec: Add fixups for Haswell/Broadwell HDMI
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | hda-spec.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -271,6 +271,12 @@ static struct xhda_verb_table nvhdmi_8ch_7x_verbs[] = { { } /* terminator */ }; +static struct xhda_verb_table haswellhdmi_verbs[] = { + { 0x781, set_cached_verb, "intelhdmi_set_vendor_verb" }, + { 0xf81, get_cached_verb, "intelhdmi_get_vendor_verb" }, + { } /* terminator */ +}; + /* */ @@ -445,6 +451,10 @@ static struct verb_ext_list extensions[] = { { .id = 0x10de0006, .verbs = nvhdmi_8ch_7x_verbs }, { .id = 0x10de0007, .verbs = nvhdmi_8ch_7x_verbs }, + /* Haswell/Broadwell HDMI */ + { .id = 0x80862807, .verbs = haswellhdmi_verbs }, + { .id = 0x80862808, .verbs = haswellhdmi_verbs }, + { } }; @@ -565,6 +575,35 @@ static void fixup_alc268_beep(struct xhda_codec *codec) node->amp_in_caps.override = 1; } +static void fixup_haswellhdmi(struct xhda_codec *codec) +{ + struct xhda_node *node; + + /* Haswell can run in two modes: either with one cvt 0x2 and one pin 0x3, + or three cvts 0x2, 0x3, 0x4 and three pins 0x5, 0x6, 0x7. + But the connection can be broken in either case. */ + + if (find_node(codec, 0x05)) { + int nid; + for (nid = 0x05; nid <= 0x07; nid++) { + node = find_node(codec, nid); + if (node) { + node->num_nodes = 3; + node->node[0] = 0x2; + node->node[1] = 0x3; + node->node[2] = 0x4; + } + } + } + else { + node = find_node(codec, 0x03); + if (node) { + node->num_nodes = 1; + node->node[0] = 0x2; + } + } +} + struct fixup_list { unsigned int vendor_id; void (*func)(struct xhda_codec *); @@ -603,6 +642,9 @@ static struct fixup_list fixups[] = { { 0x11064761, fixup_vt3476 }, { 0x11064762, fixup_vt3476 }, + { 0x80862807, fixup_haswellhdmi }, + { 0x80862808, fixup_haswellhdmi }, + { } }; |