Commit 05471e4c authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'fix/hda' into topic/hda

parents 7fb56223 6a4f2ccb
...@@ -1591,6 +1591,21 @@ static int patch_cxt5047(struct hda_codec *codec) ...@@ -1591,6 +1591,21 @@ static int patch_cxt5047(struct hda_codec *codec)
#endif #endif
} }
spec->vmaster_nid = 0x13; spec->vmaster_nid = 0x13;
switch (codec->subsystem_id >> 16) {
case 0x103c:
/* HP laptops have really bad sound over 0 dB on NID 0x10.
* Fix max PCM level to 0 dB (originally it has 0x1e steps
* with 0 dB offset 0x17)
*/
snd_hda_override_amp_caps(codec, 0x10, HDA_INPUT,
(0x17 << AC_AMPCAP_OFFSET_SHIFT) |
(0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) |
(0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) |
(1 << AC_AMPCAP_MUTE_SHIFT));
break;
}
return 0; return 0;
} }
......
...@@ -538,8 +538,6 @@ static int patch_nvhdmi_2ch(struct hda_codec *codec) ...@@ -538,8 +538,6 @@ static int patch_nvhdmi_2ch(struct hda_codec *codec)
* patch entries * patch entries
*/ */
static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
{ .id = 0x10de0002, .name = "MCP77/78 HDMI", { .id = 0x10de0002, .name = "MCP77/78 HDMI",
.patch = patch_nvhdmi_8ch_7x }, .patch = patch_nvhdmi_8ch_7x },
{ .id = 0x10de0003, .name = "MCP77/78 HDMI", { .id = 0x10de0003, .name = "MCP77/78 HDMI",
...@@ -550,12 +548,16 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { ...@@ -550,12 +548,16 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
.patch = patch_nvhdmi_8ch_7x }, .patch = patch_nvhdmi_8ch_7x },
{ .id = 0x10de0007, .name = "MCP79/7A HDMI", { .id = 0x10de0007, .name = "MCP79/7A HDMI",
.patch = patch_nvhdmi_8ch_7x }, .patch = patch_nvhdmi_8ch_7x },
{ .id = 0x10de000c, .name = "MCP89 HDMI", { .id = 0x10de000a, .name = "GT220 HDMI",
.patch = patch_nvhdmi_8ch_89 }, .patch = patch_nvhdmi_8ch_89 },
{ .id = 0x10de000b, .name = "GT21x HDMI", { .id = 0x10de000b, .name = "GT21x HDMI",
.patch = patch_nvhdmi_8ch_89 }, .patch = patch_nvhdmi_8ch_89 },
{ .id = 0x10de000c, .name = "MCP89 HDMI",
.patch = patch_nvhdmi_8ch_89 },
{ .id = 0x10de000d, .name = "GT240 HDMI", { .id = 0x10de000d, .name = "GT240 HDMI",
.patch = patch_nvhdmi_8ch_89 }, .patch = patch_nvhdmi_8ch_89 },
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
{} /* terminator */ {} /* terminator */
}; };
...@@ -564,11 +566,12 @@ MODULE_ALIAS("snd-hda-codec-id:10de0003"); ...@@ -564,11 +566,12 @@ MODULE_ALIAS("snd-hda-codec-id:10de0003");
MODULE_ALIAS("snd-hda-codec-id:10de0005"); MODULE_ALIAS("snd-hda-codec-id:10de0005");
MODULE_ALIAS("snd-hda-codec-id:10de0006"); MODULE_ALIAS("snd-hda-codec-id:10de0006");
MODULE_ALIAS("snd-hda-codec-id:10de0007"); MODULE_ALIAS("snd-hda-codec-id:10de0007");
MODULE_ALIAS("snd-hda-codec-id:10de0067"); MODULE_ALIAS("snd-hda-codec-id:10de000a");
MODULE_ALIAS("snd-hda-codec-id:10de8001");
MODULE_ALIAS("snd-hda-codec-id:10de000c");
MODULE_ALIAS("snd-hda-codec-id:10de000b"); MODULE_ALIAS("snd-hda-codec-id:10de000b");
MODULE_ALIAS("snd-hda-codec-id:10de000c");
MODULE_ALIAS("snd-hda-codec-id:10de000d"); MODULE_ALIAS("snd-hda-codec-id:10de000d");
MODULE_ALIAS("snd-hda-codec-id:10de0067");
MODULE_ALIAS("snd-hda-codec-id:10de8001");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("NVIDIA HDMI HD-audio codec"); MODULE_DESCRIPTION("NVIDIA HDMI HD-audio codec");
......
...@@ -2601,8 +2601,6 @@ static int alc_build_controls(struct hda_codec *codec) ...@@ -2601,8 +2601,6 @@ static int alc_build_controls(struct hda_codec *codec)
return err; return err;
} }
alc_free_kctls(codec); /* no longer needed */
/* assign Capture Source enums to NID */ /* assign Capture Source enums to NID */
kctl = snd_hda_find_mixer_ctl(codec, "Capture Source"); kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
if (!kctl) if (!kctl)
...@@ -2671,6 +2669,9 @@ static int alc_build_controls(struct hda_codec *codec) ...@@ -2671,6 +2669,9 @@ static int alc_build_controls(struct hda_codec *codec)
} }
} }
} }
alc_free_kctls(codec); /* no longer needed */
return 0; return 0;
} }
...@@ -10122,8 +10123,11 @@ static void alc882_auto_set_output_and_unmute(struct hda_codec *codec, ...@@ -10122,8 +10123,11 @@ static void alc882_auto_set_output_and_unmute(struct hda_codec *codec,
alc_set_pin_output(codec, nid, pin_type); alc_set_pin_output(codec, nid, pin_type);
if (spec->multiout.dac_nids[dac_idx] == 0x25) if (spec->multiout.dac_nids[dac_idx] == 0x25)
idx = 4; idx = 4;
else else {
if (spec->multiout.num_dacs >= dac_idx)
return;
idx = spec->multiout.dac_nids[dac_idx] - 2; idx = spec->multiout.dac_nids[dac_idx] - 2;
}
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, idx); snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, idx);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment