Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47166281 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

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
parents 0b6306f6 b1a91469
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -139,6 +139,7 @@ ALC883/888
  acer		Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc)
  acer		Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc)
  acer-aspire	Acer Aspire 9810
  acer-aspire	Acer Aspire 9810
  acer-aspire-4930g Acer Aspire 4930G
  acer-aspire-4930g Acer Aspire 4930G
  acer-aspire-6530g Acer Aspire 6530G
  acer-aspire-8930g Acer Aspire 8930G
  acer-aspire-8930g Acer Aspire 8930G
  medion	Medion Laptops
  medion	Medion Laptops
  medion-md2	Medion MD2
  medion-md2	Medion MD2
+0 −2
Original line number Original line Diff line number Diff line
@@ -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,
			snd_hda_codec_read(codec, nid, 0,
					   AC_VERB_GET_SUBSYSTEM_ID, 0);
					   AC_VERB_GET_SUBSYSTEM_ID, 0);
	}
	}
	if (bus->modelname)
		codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);


	/* power-up all before initialization */
	/* power-up all before initialization */
	hda_set_power_state(codec,
	hda_set_power_state(codec,
+103 −31
Original line number Original line Diff line number Diff line
@@ -224,6 +224,7 @@ enum {
	ALC883_ACER,
	ALC883_ACER,
	ALC883_ACER_ASPIRE,
	ALC883_ACER_ASPIRE,
	ALC888_ACER_ASPIRE_4930G,
	ALC888_ACER_ASPIRE_4930G,
	ALC888_ACER_ASPIRE_6530G,
	ALC888_ACER_ASPIRE_8930G,
	ALC888_ACER_ASPIRE_8930G,
	ALC883_MEDION,
	ALC883_MEDION,
	ALC883_MEDION_MD2,
	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)
static void alc_mic_automute(struct hda_codec *codec)
{
{
	struct alc_spec *spec = codec->spec;
	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 */
	/* invalid SSID, check the special NID pin defcfg instead */
	/*
	/*
	 * 31~30	: port conetcivity
	 * 31~30	: port connectivity
	 * 29~21	: reserve
	 * 29~21	: reserve
	 * 20		: PCBEEP input
	 * 20		: PCBEEP input
	 * 19~16	: Check sum (15:1)
	 * 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
 * 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] = {
static struct hda_input_mux alc889_capture_sources[3] = {
	/* Digital mic only available on first "ADC" */
	/* 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
#define alc882_loopbacks	alc880_loopbacks
#endif
#endif
/* pcm configuration: identiacal with ALC880 */
/* pcm configuration: identical with ALC880 */
#define alc882_pcm_analog_playback	alc880_pcm_analog_playback
#define alc882_pcm_analog_playback	alc880_pcm_analog_playback
#define alc882_pcm_analog_capture	alc880_pcm_analog_capture
#define alc882_pcm_analog_capture	alc880_pcm_analog_capture
#define alc882_pcm_digital_playback	alc880_pcm_digital_playback
#define alc882_pcm_digital_playback	alc880_pcm_digital_playback
@@ -8068,7 +8107,7 @@ static struct snd_kcontrol_new alc883_fivestack_mixer[] = {
	{ } /* end */
	{ } /* 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_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
	HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
	HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
	HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 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 */
	{ } /* 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_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
	HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
	HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
	HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 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 */
	{ } /* 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[] = {
static struct snd_kcontrol_new alc888_lenovo_sky_mixer[] = {
	HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
	HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
	HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
	HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
@@ -8417,7 +8469,7 @@ static struct hda_verb alc883_2ch_fujitsu_pi2515_verbs[] = {
	{ } /* end */
	{ } /* 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(0)},
	{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
	{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 */
/* toggle speaker-output according to the hp-jack state */
#define alc883_tagra_init_hook		alc882_targa_init_hook
#define alc883_targa_init_hook		alc882_targa_init_hook
#define alc883_tagra_unsol_event	alc882_targa_unsol_event
#define alc883_targa_unsol_event	alc882_targa_unsol_event
static void alc883_clevo_m720_mic_automute(struct hda_codec *codec)
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
#define alc883_loopbacks	alc880_loopbacks
#endif
#endif
/* pcm configuration: identiacal with ALC880 */
/* pcm configuration: identical with ALC880 */
#define alc883_pcm_analog_playback	alc880_pcm_analog_playback
#define alc883_pcm_analog_playback	alc880_pcm_analog_playback
#define alc883_pcm_analog_capture	alc880_pcm_analog_capture
#define alc883_pcm_analog_capture	alc880_pcm_analog_capture
#define alc883_pcm_analog_alt_capture	alc880_pcm_analog_alt_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]		= "acer",
	[ALC883_ACER_ASPIRE]	= "acer-aspire",
	[ALC883_ACER_ASPIRE]	= "acer-aspire",
	[ALC888_ACER_ASPIRE_4930G]	= "acer-aspire-4930g",
	[ALC888_ACER_ASPIRE_4930G]	= "acer-aspire-4930g",
	[ALC888_ACER_ASPIRE_6530G]	= "acer-aspire-6530g",
	[ALC888_ACER_ASPIRE_8930G]	= "acer-aspire-8930g",
	[ALC888_ACER_ASPIRE_8930G]	= "acer-aspire-8930g",
	[ALC883_MEDION]		= "medion",
	[ALC883_MEDION]		= "medion",
	[ALC883_MEDION_MD2]	= "medion-md2",
	[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",
	SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
		ALC888_ACER_ASPIRE_4930G),
		ALC888_ACER_ASPIRE_4930G),
	SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
	SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
		ALC888_ACER_ASPIRE_4930G),
		ALC888_ACER_ASPIRE_6530G),
	/* default Acer -- disabled as it causes more problems.
	/* default Acer -- disabled as it causes more problems.
	 *    model=auto should work fine now
	 *    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, 0x7267, "MSI", ALC883_3ST_6ch_DIG),
	SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG),
	SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG),
	SND_PCI_QUIRK(0x1462, 0x7327, "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(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG),
	SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG),
	SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG),
	SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720),
	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,
		.input_mux = &alc883_capture_source,
	},
	},
	[ALC883_TARGA_DIG] = {
	[ALC883_TARGA_DIG] = {
		.mixers = { alc883_tagra_mixer, alc883_chmode_mixer },
		.mixers = { alc883_targa_mixer, alc883_chmode_mixer },
		.init_verbs = { alc883_init_verbs, alc883_tagra_verbs},
		.init_verbs = { alc883_init_verbs, alc883_targa_verbs},
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.dac_nids = alc883_dac_nids,
		.dac_nids = alc883_dac_nids,
		.dig_out_nid = ALC883_DIGOUT_NID,
		.dig_out_nid = ALC883_DIGOUT_NID,
@@ -9174,12 +9228,12 @@ static struct alc_config_preset alc883_presets[] = {
		.channel_mode = alc883_3ST_6ch_modes,
		.channel_mode = alc883_3ST_6ch_modes,
		.need_dac_fix = 1,
		.need_dac_fix = 1,
		.input_mux = &alc883_capture_source,
		.input_mux = &alc883_capture_source,
		.unsol_event = alc883_tagra_unsol_event,
		.unsol_event = alc883_targa_unsol_event,
		.init_hook = alc883_tagra_init_hook,
		.init_hook = alc883_targa_init_hook,
	},
	},
	[ALC883_TARGA_2ch_DIG] = {
	[ALC883_TARGA_2ch_DIG] = {
		.mixers = { alc883_tagra_2ch_mixer},
		.mixers = { alc883_targa_2ch_mixer},
		.init_verbs = { alc883_init_verbs, alc883_tagra_verbs},
		.init_verbs = { alc883_init_verbs, alc883_targa_verbs},
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.dac_nids = alc883_dac_nids,
		.dac_nids = alc883_dac_nids,
		.adc_nids = alc883_adc_nids_alt,
		.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),
		.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
		.channel_mode = alc883_3ST_2ch_modes,
		.channel_mode = alc883_3ST_2ch_modes,
		.input_mux = &alc883_capture_source,
		.input_mux = &alc883_capture_source,
		.unsol_event = alc883_tagra_unsol_event,
		.unsol_event = alc883_targa_unsol_event,
		.init_hook = alc883_tagra_init_hook,
		.init_hook = alc883_targa_init_hook,
	},
	},
	[ALC883_TARGA_8ch_DIG] = {
	[ALC883_TARGA_8ch_DIG] = {
		.mixers = { alc883_base_mixer, alc883_chmode_mixer },
		.mixers = { alc883_base_mixer, alc883_chmode_mixer },
		.init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs,
		.init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs,
				alc883_tagra_verbs },
				alc883_targa_verbs },
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.dac_nids = alc883_dac_nids,
		.dac_nids = alc883_dac_nids,
		.num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev),
		.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,
		.channel_mode = alc883_4ST_8ch_modes,
		.need_dac_fix = 1,
		.need_dac_fix = 1,
		.input_mux = &alc883_capture_source,
		.input_mux = &alc883_capture_source,
		.unsol_event = alc883_tagra_unsol_event,
		.unsol_event = alc883_targa_unsol_event,
		.init_hook = alc883_tagra_init_hook,
		.init_hook = alc883_targa_init_hook,
	},
	},
	[ALC883_ACER] = {
	[ALC883_ACER] = {
		.mixers = { alc883_base_mixer },
		.mixers = { alc883_base_mixer },
@@ -9255,6 +9309,24 @@ static struct alc_config_preset alc883_presets[] = {
		.unsol_event = alc_automute_amp_unsol_event,
		.unsol_event = alc_automute_amp_unsol_event,
		.init_hook = alc888_acer_aspire_4930g_init_hook,
		.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] = {
	[ALC888_ACER_ASPIRE_8930G] = {
		.mixers = { alc888_base_mixer,
		.mixers = { alc888_base_mixer,
				alc883_chmode_mixer },
				alc883_chmode_mixer },
@@ -9361,7 +9433,7 @@ static struct alc_config_preset alc883_presets[] = {
		.init_hook = alc888_lenovo_ms7195_front_automute,
		.init_hook = alc888_lenovo_ms7195_front_automute,
	},
	},
	[ALC883_HAIER_W66] = {
	[ALC883_HAIER_W66] = {
		.mixers = { alc883_tagra_2ch_mixer},
		.mixers = { alc883_targa_2ch_mixer},
		.init_verbs = { alc883_init_verbs, alc883_haier_w66_verbs},
		.init_verbs = { alc883_init_verbs, alc883_haier_w66_verbs},
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.num_dacs = ARRAY_SIZE(alc883_dac_nids),
		.dac_nids = 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
#define alc262_loopbacks	alc880_loopbacks
#endif
#endif
/* pcm configuration: identiacal with ALC880 */
/* pcm configuration: identical with ALC880 */
#define alc262_pcm_analog_playback	alc880_pcm_analog_playback
#define alc262_pcm_analog_playback	alc880_pcm_analog_playback
#define alc262_pcm_analog_capture	alc880_pcm_analog_capture
#define alc262_pcm_analog_capture	alc880_pcm_analog_capture
#define alc262_pcm_digital_playback	alc880_pcm_digital_playback
#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);
			    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_playback	alc880_pcm_analog_playback
#define alc268_pcm_analog_capture	alc880_pcm_analog_capture
#define alc268_pcm_analog_capture	alc880_pcm_analog_capture
#define alc268_pcm_analog_alt_capture	alc880_pcm_analog_alt_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
#define alc269_loopbacks	alc880_loopbacks
#endif
#endif
/* pcm configuration: identiacal with ALC880 */
/* pcm configuration: identical with ALC880 */
#define alc269_pcm_analog_playback	alc880_pcm_analog_playback
#define alc269_pcm_analog_playback	alc880_pcm_analog_playback
#define alc269_pcm_analog_capture	alc880_pcm_analog_capture
#define alc269_pcm_analog_capture	alc880_pcm_analog_capture
#define alc269_pcm_digital_playback	alc880_pcm_digital_playback
#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);
		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_playback	alc880_pcm_analog_playback
#define alc861_pcm_analog_capture	alc880_pcm_analog_capture
#define alc861_pcm_analog_capture	alc880_pcm_analog_capture
#define alc861_pcm_digital_playback	alc880_pcm_digital_playback
#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
/* dac_nids for ALC660vd are in a different order - according to
 * Realtek's driver.
 * 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
 * of ALC660vd codecs, but for now there is only 3stack mixer
 * - and it is the same as in 861vd.
 * - and it is the same as in 861vd.
 * adc_nids in ALC660vd are (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
#define alc861vd_loopbacks	alc880_loopbacks
#endif
#endif
/* pcm configuration: identiacal with ALC880 */
/* pcm configuration: identical with ALC880 */
#define alc861vd_pcm_analog_playback	alc880_pcm_analog_playback
#define alc861vd_pcm_analog_playback	alc880_pcm_analog_playback
#define alc861vd_pcm_analog_capture	alc880_pcm_analog_capture
#define alc861vd_pcm_analog_capture	alc880_pcm_analog_capture
#define alc861vd_pcm_digital_playback	alc880_pcm_digital_playback
#define alc861vd_pcm_digital_playback	alc880_pcm_digital_playback
@@ -16669,7 +16741,7 @@ static struct snd_kcontrol_new alc272_nc10_mixer[] = {
#endif
#endif
/* pcm configuration: identiacal with ALC880 */
/* pcm configuration: identical with ALC880 */
#define alc662_pcm_analog_playback	alc880_pcm_analog_playback
#define alc662_pcm_analog_playback	alc880_pcm_analog_playback
#define alc662_pcm_analog_capture	alc880_pcm_analog_capture
#define alc662_pcm_analog_capture	alc880_pcm_analog_capture
#define alc662_pcm_digital_playback	alc880_pcm_digital_playback
#define alc662_pcm_digital_playback	alc880_pcm_digital_playback