Merge branch 'topic/hda' into for-linus
* topic/hda: ALSA: hda - Add model=6530g option ALSA: hda - Acer Inspire 6530G model for Realtek ALC888 ALSA: HDA - Correct trivial typos in comments. ALSA: HDA - Name-fixes in code (tagra/targa) ALSA: HDA - Add pci-quirk for MSI MS-7350 motherboard. ALSA: hda - Fix memory leak at codec creation
This commit is contained in:
commit
47166281d2
3 changed files with 104 additions and 33 deletions
|
@ -139,6 +139,7 @@ ALC883/888
|
|||
acer Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc)
|
||||
acer-aspire Acer Aspire 9810
|
||||
acer-aspire-4930g Acer Aspire 4930G
|
||||
acer-aspire-6530g Acer Aspire 6530G
|
||||
acer-aspire-8930g Acer Aspire 8930G
|
||||
medion Medion Laptops
|
||||
medion-md2 Medion MD2
|
||||
|
|
|
@ -972,8 +972,6 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr
|
|||
snd_hda_codec_read(codec, nid, 0,
|
||||
AC_VERB_GET_SUBSYSTEM_ID, 0);
|
||||
}
|
||||
if (bus->modelname)
|
||||
codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
|
||||
|
||||
/* power-up all before initialization */
|
||||
hda_set_power_state(codec,
|
||||
|
|
|
@ -224,6 +224,7 @@ enum {
|
|||
ALC883_ACER,
|
||||
ALC883_ACER_ASPIRE,
|
||||
ALC888_ACER_ASPIRE_4930G,
|
||||
ALC888_ACER_ASPIRE_6530G,
|
||||
ALC888_ACER_ASPIRE_8930G,
|
||||
ALC883_MEDION,
|
||||
ALC883_MEDION_MD2,
|
||||
|
@ -970,7 +971,7 @@ static void alc_automute_pin(struct hda_codec *codec)
|
|||
}
|
||||
}
|
||||
|
||||
#if 0 /* it's broken in some acses -- temporarily disabled */
|
||||
#if 0 /* it's broken in some cases -- temporarily disabled */
|
||||
static void alc_mic_automute(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
@ -1170,7 +1171,7 @@ static int alc_subsystem_id(struct hda_codec *codec,
|
|||
|
||||
/* invalid SSID, check the special NID pin defcfg instead */
|
||||
/*
|
||||
* 31~30 : port conetcivity
|
||||
* 31~30 : port connectivity
|
||||
* 29~21 : reserve
|
||||
* 20 : PCBEEP input
|
||||
* 19~16 : Check sum (15:1)
|
||||
|
@ -1470,6 +1471,25 @@ static struct hda_verb alc888_acer_aspire_4930g_verbs[] = {
|
|||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
* ALC888 Acer Aspire 6530G model
|
||||
*/
|
||||
|
||||
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},
|
||||
/* Enable unsolicited event for HP jack */
|
||||
{0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
|
||||
/* Enable speaker output */
|
||||
{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
/* 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},
|
||||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
* ALC889 Acer Aspire 8930G model
|
||||
*/
|
||||
|
@ -1544,6 +1564,25 @@ 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,
|
||||
.items = {
|
||||
{ "Ext Mic", 0x0 },
|
||||
{ "CD", 0x4 },
|
||||
{ "Int Mic", 0xb },
|
||||
},
|
||||
},
|
||||
{
|
||||
.num_items = 2,
|
||||
.items = {
|
||||
{ "Ext Mic", 0x0 },
|
||||
{ "CD", 0x4 },
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
static struct hda_input_mux alc889_capture_sources[3] = {
|
||||
/* Digital mic only available on first "ADC" */
|
||||
{
|
||||
|
@ -6347,7 +6386,7 @@ static struct hda_channel_mode alc882_sixstack_modes[2] = {
|
|||
};
|
||||
|
||||
/*
|
||||
* macbook pro ALC885 can switch LineIn to LineOut without loosing Mic
|
||||
* macbook pro ALC885 can switch LineIn to LineOut without losing Mic
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -7047,7 +7086,7 @@ static struct hda_verb alc882_auto_init_verbs[] = {
|
|||
#define alc882_loopbacks alc880_loopbacks
|
||||
#endif
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc882_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc882_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc882_pcm_digital_playback alc880_pcm_digital_playback
|
||||
|
@ -8068,7 +8107,7 @@ static struct snd_kcontrol_new alc883_fivestack_mixer[] = {
|
|||
{ } /* end */
|
||||
};
|
||||
|
||||
static struct snd_kcontrol_new alc883_tagra_mixer[] = {
|
||||
static struct snd_kcontrol_new alc883_targa_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||
|
@ -8088,7 +8127,7 @@ static struct snd_kcontrol_new alc883_tagra_mixer[] = {
|
|||
{ } /* end */
|
||||
};
|
||||
|
||||
static struct snd_kcontrol_new alc883_tagra_2ch_mixer[] = {
|
||||
static struct snd_kcontrol_new alc883_targa_2ch_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||
|
@ -8153,6 +8192,19 @@ static struct snd_kcontrol_new alc883_acer_aspire_mixer[] = {
|
|||
{ } /* end */
|
||||
};
|
||||
|
||||
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("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),
|
||||
HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
|
||||
{ } /* end */
|
||||
};
|
||||
|
||||
static struct snd_kcontrol_new alc888_lenovo_sky_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
||||
|
@ -8417,7 +8469,7 @@ static struct hda_verb alc883_2ch_fujitsu_pi2515_verbs[] = {
|
|||
{ } /* end */
|
||||
};
|
||||
|
||||
static struct hda_verb alc883_tagra_verbs[] = {
|
||||
static struct hda_verb alc883_targa_verbs[] = {
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
|
||||
|
@ -8626,8 +8678,8 @@ static void alc883_medion_md2_init_hook(struct hda_codec *codec)
|
|||
}
|
||||
|
||||
/* toggle speaker-output according to the hp-jack state */
|
||||
#define alc883_tagra_init_hook alc882_targa_init_hook
|
||||
#define alc883_tagra_unsol_event alc882_targa_unsol_event
|
||||
#define alc883_targa_init_hook alc882_targa_init_hook
|
||||
#define alc883_targa_unsol_event alc882_targa_unsol_event
|
||||
|
||||
static void alc883_clevo_m720_mic_automute(struct hda_codec *codec)
|
||||
{
|
||||
|
@ -8957,7 +9009,7 @@ static void alc889A_mb31_unsol_event(struct hda_codec *codec, unsigned int res)
|
|||
#define alc883_loopbacks alc880_loopbacks
|
||||
#endif
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc883_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc883_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc883_pcm_analog_alt_capture alc880_pcm_analog_alt_capture
|
||||
|
@ -8978,6 +9030,7 @@ static const char *alc883_models[ALC883_MODEL_LAST] = {
|
|||
[ALC883_ACER] = "acer",
|
||||
[ALC883_ACER_ASPIRE] = "acer-aspire",
|
||||
[ALC888_ACER_ASPIRE_4930G] = "acer-aspire-4930g",
|
||||
[ALC888_ACER_ASPIRE_6530G] = "acer-aspire-6530g",
|
||||
[ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g",
|
||||
[ALC883_MEDION] = "medion",
|
||||
[ALC883_MEDION_MD2] = "medion-md2",
|
||||
|
@ -9021,7 +9074,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
|
||||
ALC888_ACER_ASPIRE_4930G),
|
||||
SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
|
||||
ALC888_ACER_ASPIRE_4930G),
|
||||
ALC888_ACER_ASPIRE_6530G),
|
||||
/* default Acer -- disabled as it causes more problems.
|
||||
* model=auto should work fine now
|
||||
*/
|
||||
|
@ -9069,6 +9122,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1462, 0x7267, "MSI", ALC883_3ST_6ch_DIG),
|
||||
SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG),
|
||||
SND_PCI_QUIRK(0x1462, 0x7327, "MSI", ALC883_6ST_DIG),
|
||||
SND_PCI_QUIRK(0x1462, 0x7350, "MSI", ALC883_6ST_DIG),
|
||||
SND_PCI_QUIRK(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG),
|
||||
SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG),
|
||||
SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720),
|
||||
|
@ -9165,8 +9219,8 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
.input_mux = &alc883_capture_source,
|
||||
},
|
||||
[ALC883_TARGA_DIG] = {
|
||||
.mixers = { alc883_tagra_mixer, alc883_chmode_mixer },
|
||||
.init_verbs = { alc883_init_verbs, alc883_tagra_verbs},
|
||||
.mixers = { alc883_targa_mixer, alc883_chmode_mixer },
|
||||
.init_verbs = { alc883_init_verbs, alc883_targa_verbs},
|
||||
.num_dacs = ARRAY_SIZE(alc883_dac_nids),
|
||||
.dac_nids = alc883_dac_nids,
|
||||
.dig_out_nid = ALC883_DIGOUT_NID,
|
||||
|
@ -9174,12 +9228,12 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
.channel_mode = alc883_3ST_6ch_modes,
|
||||
.need_dac_fix = 1,
|
||||
.input_mux = &alc883_capture_source,
|
||||
.unsol_event = alc883_tagra_unsol_event,
|
||||
.init_hook = alc883_tagra_init_hook,
|
||||
.unsol_event = alc883_targa_unsol_event,
|
||||
.init_hook = alc883_targa_init_hook,
|
||||
},
|
||||
[ALC883_TARGA_2ch_DIG] = {
|
||||
.mixers = { alc883_tagra_2ch_mixer},
|
||||
.init_verbs = { alc883_init_verbs, alc883_tagra_verbs},
|
||||
.mixers = { alc883_targa_2ch_mixer},
|
||||
.init_verbs = { alc883_init_verbs, alc883_targa_verbs},
|
||||
.num_dacs = ARRAY_SIZE(alc883_dac_nids),
|
||||
.dac_nids = alc883_dac_nids,
|
||||
.adc_nids = alc883_adc_nids_alt,
|
||||
|
@ -9188,13 +9242,13 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
|
||||
.channel_mode = alc883_3ST_2ch_modes,
|
||||
.input_mux = &alc883_capture_source,
|
||||
.unsol_event = alc883_tagra_unsol_event,
|
||||
.init_hook = alc883_tagra_init_hook,
|
||||
.unsol_event = alc883_targa_unsol_event,
|
||||
.init_hook = alc883_targa_init_hook,
|
||||
},
|
||||
[ALC883_TARGA_8ch_DIG] = {
|
||||
.mixers = { alc883_base_mixer, alc883_chmode_mixer },
|
||||
.init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs,
|
||||
alc883_tagra_verbs },
|
||||
alc883_targa_verbs },
|
||||
.num_dacs = ARRAY_SIZE(alc883_dac_nids),
|
||||
.dac_nids = alc883_dac_nids,
|
||||
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev),
|
||||
|
@ -9206,8 +9260,8 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
.channel_mode = alc883_4ST_8ch_modes,
|
||||
.need_dac_fix = 1,
|
||||
.input_mux = &alc883_capture_source,
|
||||
.unsol_event = alc883_tagra_unsol_event,
|
||||
.init_hook = alc883_tagra_init_hook,
|
||||
.unsol_event = alc883_targa_unsol_event,
|
||||
.init_hook = alc883_targa_init_hook,
|
||||
},
|
||||
[ALC883_ACER] = {
|
||||
.mixers = { alc883_base_mixer },
|
||||
|
@ -9255,6 +9309,24 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
.unsol_event = alc_automute_amp_unsol_event,
|
||||
.init_hook = alc888_acer_aspire_4930g_init_hook,
|
||||
},
|
||||
[ALC888_ACER_ASPIRE_6530G] = {
|
||||
.mixers = { alc888_acer_aspire_6530_mixer },
|
||||
.init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs,
|
||||
alc888_acer_aspire_6530g_verbs },
|
||||
.num_dacs = ARRAY_SIZE(alc883_dac_nids),
|
||||
.dac_nids = alc883_dac_nids,
|
||||
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev),
|
||||
.adc_nids = alc883_adc_nids_rev,
|
||||
.capsrc_nids = alc883_capsrc_nids_rev,
|
||||
.dig_out_nid = ALC883_DIGOUT_NID,
|
||||
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
|
||||
.channel_mode = alc883_3ST_2ch_modes,
|
||||
.num_mux_defs =
|
||||
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,
|
||||
},
|
||||
[ALC888_ACER_ASPIRE_8930G] = {
|
||||
.mixers = { alc888_base_mixer,
|
||||
alc883_chmode_mixer },
|
||||
|
@ -9361,7 +9433,7 @@ static struct alc_config_preset alc883_presets[] = {
|
|||
.init_hook = alc888_lenovo_ms7195_front_automute,
|
||||
},
|
||||
[ALC883_HAIER_W66] = {
|
||||
.mixers = { alc883_tagra_2ch_mixer},
|
||||
.mixers = { alc883_targa_2ch_mixer},
|
||||
.init_verbs = { alc883_init_verbs, alc883_haier_w66_verbs},
|
||||
.num_dacs = ARRAY_SIZE(alc883_dac_nids),
|
||||
.dac_nids = alc883_dac_nids,
|
||||
|
@ -11131,7 +11203,7 @@ static struct hda_verb alc262_toshiba_rx1_unsol_verbs[] = {
|
|||
#define alc262_loopbacks alc880_loopbacks
|
||||
#endif
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc262_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc262_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc262_pcm_digital_playback alc880_pcm_digital_playback
|
||||
|
@ -12286,7 +12358,7 @@ static void alc268_auto_init_mono_speaker_out(struct hda_codec *codec)
|
|||
AC_VERB_SET_AMP_GAIN_MUTE, dac_vol2);
|
||||
}
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc268_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc268_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc268_pcm_analog_alt_capture alc880_pcm_analog_alt_capture
|
||||
|
@ -13197,7 +13269,7 @@ static int alc269_auto_create_analog_input_ctls(struct alc_spec *spec,
|
|||
#define alc269_loopbacks alc880_loopbacks
|
||||
#endif
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc269_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc269_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc269_pcm_digital_playback alc880_pcm_digital_playback
|
||||
|
@ -14059,7 +14131,7 @@ static void alc861_toshiba_unsol_event(struct hda_codec *codec,
|
|||
alc861_toshiba_automute(codec);
|
||||
}
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc861_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc861_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc861_pcm_digital_playback alc880_pcm_digital_playback
|
||||
|
@ -14582,7 +14654,7 @@ static hda_nid_t alc861vd_dac_nids[4] = {
|
|||
|
||||
/* dac_nids for ALC660vd are in a different order - according to
|
||||
* Realtek's driver.
|
||||
* This should probably tesult in a different mixer for 6stack models
|
||||
* This should probably result in a different mixer for 6stack models
|
||||
* of ALC660vd codecs, but for now there is only 3stack mixer
|
||||
* - and it is the same as in 861vd.
|
||||
* adc_nids in ALC660vd are (is) the same as in 861vd
|
||||
|
@ -15027,7 +15099,7 @@ static void alc861vd_dallas_init_hook(struct hda_codec *codec)
|
|||
#define alc861vd_loopbacks alc880_loopbacks
|
||||
#endif
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc861vd_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc861vd_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc861vd_pcm_digital_playback alc880_pcm_digital_playback
|
||||
|
@ -15206,7 +15278,7 @@ static void alc861vd_auto_init_hp_out(struct hda_codec *codec)
|
|||
hda_nid_t pin;
|
||||
|
||||
pin = spec->autocfg.hp_pins[0];
|
||||
if (pin) /* connect to front and use dac 0 */
|
||||
if (pin) /* connect to front and use dac 0 */
|
||||
alc861vd_auto_set_output_and_unmute(codec, pin, PIN_HP, 0);
|
||||
pin = spec->autocfg.speaker_pins[0];
|
||||
if (pin)
|
||||
|
@ -16669,7 +16741,7 @@ static struct snd_kcontrol_new alc272_nc10_mixer[] = {
|
|||
#endif
|
||||
|
||||
|
||||
/* pcm configuration: identiacal with ALC880 */
|
||||
/* pcm configuration: identical with ALC880 */
|
||||
#define alc662_pcm_analog_playback alc880_pcm_analog_playback
|
||||
#define alc662_pcm_analog_capture alc880_pcm_analog_capture
|
||||
#define alc662_pcm_digital_playback alc880_pcm_digital_playback
|
||||
|
|
Loading…
Reference in a new issue