forked from luck/tmp_suning_uos_patched
Merge branch 'fix/hda' into for-linus
* fix/hda: ALSA: hda - Add missing initializations for ALC268 and ALC269 ALSA: hda - Line In for Acer Inspire 6530G model ALSA: hda - Use model=acer-aspire-6530g for Acer Aspire 6930G ALSA: hda - Fix acer-aspire-6530g model quirk ALSA: hda - Add pin-sense trigger when needed for Realtek codecs
This commit is contained in:
commit
ae77b4ed4f
|
@ -945,12 +945,13 @@ static void alc_fix_pll_init(struct hda_codec *codec, hda_nid_t nid,
|
|||
static void alc_automute_pin(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
unsigned int present;
|
||||
unsigned int present, pincap;
|
||||
unsigned int nid = spec->autocfg.hp_pins[0];
|
||||
int i;
|
||||
|
||||
/* need to execute and sync at first */
|
||||
snd_hda_codec_read(codec, nid, 0, AC_VERB_SET_PIN_SENSE, 0);
|
||||
pincap = snd_hda_query_pin_caps(codec, nid);
|
||||
if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
|
||||
snd_hda_codec_read(codec, nid, 0, AC_VERB_SET_PIN_SENSE, 0);
|
||||
present = snd_hda_codec_read(codec, nid, 0,
|
||||
AC_VERB_GET_PIN_SENSE, 0);
|
||||
spec->jack_present = (present & AC_PINSENSE_PRESENCE) != 0;
|
||||
|
@ -1392,7 +1393,7 @@ static struct hda_verb alc888_fujitsu_xa3530_verbs[] = {
|
|||
static void alc_automute_amp(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
unsigned int val, mute;
|
||||
unsigned int val, mute, pincap;
|
||||
hda_nid_t nid;
|
||||
int i;
|
||||
|
||||
|
@ -1401,6 +1402,10 @@ static void alc_automute_amp(struct hda_codec *codec)
|
|||
nid = spec->autocfg.hp_pins[i];
|
||||
if (!nid)
|
||||
break;
|
||||
pincap = snd_hda_query_pin_caps(codec, nid);
|
||||
if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
|
||||
snd_hda_codec_read(codec, nid, 0,
|
||||
AC_VERB_SET_PIN_SENSE, 0);
|
||||
val = snd_hda_codec_read(codec, nid, 0,
|
||||
AC_VERB_GET_PIN_SENSE, 0);
|
||||
if (val & AC_PINSENSE_PRESENCE) {
|
||||
|
@ -1471,6 +1476,10 @@ static struct hda_verb alc888_acer_aspire_4930g_verbs[] = {
|
|||
static struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
|
||||
/* 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) */
|
||||
{0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
/* Unselect Front Mic by default in input mixer 3 */
|
||||
{0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)},
|
||||
/* Enable unsolicited event for HP jack */
|
||||
{0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
|
||||
/* Enable speaker output */
|
||||
|
@ -1560,18 +1569,22 @@ static struct hda_input_mux alc888_2_capture_sources[2] = {
|
|||
static struct hda_input_mux alc888_acer_aspire_6530_sources[2] = {
|
||||
/* Interal mic only available on one ADC */
|
||||
{
|
||||
.num_items = 3,
|
||||
.num_items = 5,
|
||||
.items = {
|
||||
{ "Ext Mic", 0x0 },
|
||||
{ "Line In", 0x2 },
|
||||
{ "CD", 0x4 },
|
||||
{ "Input Mix", 0xa },
|
||||
{ "Int Mic", 0xb },
|
||||
},
|
||||
},
|
||||
{
|
||||
.num_items = 2,
|
||||
.num_items = 4,
|
||||
.items = {
|
||||
{ "Ext Mic", 0x0 },
|
||||
{ "Line In", 0x2 },
|
||||
{ "CD", 0x4 },
|
||||
{ "Input Mix", 0xa },
|
||||
},
|
||||
}
|
||||
};
|
||||
|
@ -1639,6 +1652,17 @@ static void alc888_acer_aspire_4930g_init_hook(struct hda_codec *codec)
|
|||
alc_automute_amp(codec);
|
||||
}
|
||||
|
||||
static void alc888_acer_aspire_6530g_init_hook(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
||||
spec->autocfg.hp_pins[0] = 0x15;
|
||||
spec->autocfg.speaker_pins[0] = 0x14;
|
||||
spec->autocfg.speaker_pins[1] = 0x16;
|
||||
spec->autocfg.speaker_pins[2] = 0x17;
|
||||
alc_automute_amp(codec);
|
||||
}
|
||||
|
||||
static void alc889_acer_aspire_8930g_init_hook(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
@ -8189,6 +8213,8 @@ static struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = {
|
|||
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),
|
||||
HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
|
||||
|
@ -9064,7 +9090,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x0157, "Acer X3200", ALC883_AUTO),
|
||||
SND_PCI_QUIRK(0x1025, 0x0158, "Acer AX1700-U3700A", ALC883_AUTO),
|
||||
SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
|
||||
ALC888_ACER_ASPIRE_4930G),
|
||||
ALC888_ACER_ASPIRE_6530G),
|
||||
SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
|
||||
ALC888_ACER_ASPIRE_6530G),
|
||||
/* default Acer -- disabled as it causes more problems.
|
||||
|
@ -9317,7 +9343,7 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
ARRAY_SIZE(alc888_2_capture_sources),
|
||||
.input_mux = alc888_acer_aspire_6530_sources,
|
||||
.unsol_event = alc_automute_amp_unsol_event,
|
||||
.init_hook = alc888_acer_aspire_4930g_init_hook,
|
||||
.init_hook = alc888_acer_aspire_6530g_init_hook,
|
||||
},
|
||||
[ALC888_ACER_ASPIRE_8930G] = {
|
||||
.mixers = { alc888_base_mixer,
|
||||
|
@ -12437,6 +12463,8 @@ static int alc268_parse_auto_config(struct hda_codec *codec)
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -13345,6 +13373,8 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
|
|||
if (!spec->cap_mixer && !spec->no_analog)
|
||||
set_capture_mixer(spec);
|
||||
|
||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user