forked from luck/tmp_suning_uos_patched
Merge branch 'fix/hda' into topic/hda
This commit is contained in:
commit
92ab7b8f38
|
@ -119,10 +119,18 @@ the codec slots 0 and 1 no matter what the hardware reports.
|
|||
|
||||
Interrupt Handling
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
In rare but some cases, the interrupt isn't properly handled as
|
||||
default. You would notice this by the DMA transfer error reported by
|
||||
ALSA PCM core, for example. Using MSI might help in such a case.
|
||||
Pass `enable_msi=1` option for enabling MSI.
|
||||
HD-audio driver uses MSI as default (if available) since 2.6.33
|
||||
kernel as MSI works better on some machines, and in general, it's
|
||||
better for performance. However, Nvidia controllers showed bad
|
||||
regressions with MSI (especially in a combination with AMD chipset),
|
||||
thus we disabled MSI for them.
|
||||
|
||||
There seem also still other devices that don't work with MSI. If you
|
||||
see a regression wrt the sound quality (stuttering, etc) or a lock-up
|
||||
in the recent kernel, try to pass `enable_msi=0` option to disable
|
||||
MSI. If it works, you can add the known bad device to the blacklist
|
||||
defined in hda_intel.c. In such a case, please report and give the
|
||||
patch back to the upstream developer.
|
||||
|
||||
|
||||
HD-AUDIO CODEC
|
||||
|
|
|
@ -2366,6 +2366,7 @@ static struct snd_pci_quirk msi_black_list[] __devinitdata = {
|
|||
SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
|
||||
SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
|
||||
SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
|
||||
SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
@ -1690,6 +1690,11 @@ static struct hda_verb alc888_acer_aspire_4930g_verbs[] = {
|
|||
*/
|
||||
|
||||
static struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
|
||||
/* Route to built-in subwoofer as well as speakers */
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
/* Bias voltage on for external mic port */
|
||||
{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80},
|
||||
/* Front Mic: set to PIN_IN (empty by default) */
|
||||
|
@ -1701,10 +1706,12 @@ static struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
|
|||
/* Enable speaker output */
|
||||
{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
|
||||
/* Enable headphone output */
|
||||
{0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP},
|
||||
{0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
|
||||
{0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -8550,9 +8557,7 @@ static struct snd_kcontrol_new alc883_acer_aspire_mixer[] = {
|
|||
|
||||
static struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("LFE Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("LFE Playback Switch", 0x0f, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
|
||||
|
@ -10193,13 +10198,12 @@ static void alc882_auto_set_output_and_unmute(struct hda_codec *codec,
|
|||
int idx;
|
||||
|
||||
alc_set_pin_output(codec, nid, pin_type);
|
||||
if (dac_idx >= spec->multiout.num_dacs)
|
||||
return;
|
||||
if (spec->multiout.dac_nids[dac_idx] == 0x25)
|
||||
idx = 4;
|
||||
else {
|
||||
if (spec->multiout.num_dacs >= dac_idx)
|
||||
return;
|
||||
else
|
||||
idx = spec->multiout.dac_nids[dac_idx] - 2;
|
||||
}
|
||||
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, idx);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user