diff options
Diffstat (limited to 'sound/pci/hda/patch_sigmatel.c')
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 46 | 
1 files changed, 39 insertions, 7 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 3744ea4e843d..98cd1908c039 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c @@ -84,6 +84,7 @@ enum {  	STAC_DELL_EQ,  	STAC_ALIENWARE_M17X,  	STAC_92HD89XX_HP_FRONT_JACK, +	STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK,  	STAC_92HD73XX_MODELS  }; @@ -103,6 +104,7 @@ enum {  	STAC_92HD83XXX_HP,  	STAC_HP_ENVY_BASS,  	STAC_HP_BNB13_EQ, +	STAC_HP_ENVY_TS_BASS,  	STAC_92HD83XXX_MODELS  }; @@ -564,8 +566,8 @@ static void stac_init_power_map(struct hda_codec *codec)  		if (snd_hda_jack_tbl_get(codec, nid))  			continue;  		if (def_conf == AC_JACK_PORT_COMPLEX && -		    !(spec->vref_mute_led_nid == nid || -		      is_jack_detectable(codec, nid))) { +		    spec->vref_mute_led_nid != nid && +		    is_jack_detectable(codec, nid)) {  			snd_hda_jack_detect_enable_callback(codec, nid,  							    STAC_PWR_EVENT,  							    jack_update_power); @@ -1017,7 +1019,7 @@ static int stac_create_spdif_mux_ctls(struct hda_codec *codec)  	for (i = 0; i < num_cons; i++) {  		if (snd_BUG_ON(!labels[i]))  			return -EINVAL; -		snd_hda_add_imux_item(&spec->spdif_mux, labels[i], i, NULL); +		snd_hda_add_imux_item(codec, &spec->spdif_mux, labels[i], i, NULL);  	}  	kctl = snd_hda_gen_add_kctl(&spec->gen, NULL, &stac_smux_mixer); @@ -1809,6 +1811,11 @@ static const struct hda_pintbl stac92hd89xx_hp_front_jack_pin_configs[] = {  	{}  }; +static const struct hda_pintbl stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs[] = { +	{ 0x0e, 0x400000f0 }, +	{} +}; +  static void stac92hd73xx_fixup_ref(struct hda_codec *codec,  				   const struct hda_fixup *fix, int action)  { @@ -1931,6 +1938,10 @@ static const struct hda_fixup stac92hd73xx_fixups[] = {  	[STAC_92HD89XX_HP_FRONT_JACK] = {  		.type = HDA_FIXUP_PINS,  		.v.pins = stac92hd89xx_hp_front_jack_pin_configs, +	}, +	[STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK] = { +		.type = HDA_FIXUP_PINS, +		.v.pins = stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs,  	}  }; @@ -1991,6 +2002,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = {  		      "Alienware M17x", STAC_ALIENWARE_M17X),  	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490,  		      "Alienware M17x R3", STAC_DELL_EQ), +	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1927, +				"HP Z1 G2", STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK),  	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17,  				"unknown HP", STAC_92HD89XX_HP_FRONT_JACK),  	{} /* terminator */ @@ -2668,6 +2681,13 @@ static const struct hda_fixup stac92hd83xxx_fixups[] = {  		.chained = true,  		.chain_id = STAC_92HD83XXX_HP_MIC_LED,  	}, +	[STAC_HP_ENVY_TS_BASS] = { +		.type = HDA_FIXUP_PINS, +		.v.pins = (const struct hda_pintbl[]) { +			{ 0x10, 0x92170111 }, +			{} +		}, +	},  };  static const struct hda_model_fixup stac92hd83xxx_models[] = { @@ -2684,6 +2704,7 @@ static const struct hda_model_fixup stac92hd83xxx_models[] = {  	{ .id = STAC_92HD83XXX_HEADSET_JACK, .name = "headset-jack" },  	{ .id = STAC_HP_ENVY_BASS, .name = "hp-envy-bass" },  	{ .id = STAC_HP_BNB13_EQ, .name = "hp-bnb13-eq" }, +	{ .id = STAC_HP_ENVY_TS_BASS, .name = "hp-envy-ts-bass" },  	{}  }; @@ -2739,6 +2760,8 @@ static const struct snd_pci_quirk stac92hd83xxx_fixup_tbl[] = {  			  "HP bNB13", STAC_HP_BNB13_EQ),  	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x190A,  			  "HP bNB13", STAC_HP_BNB13_EQ), +	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x190e, +			  "HP ENVY TS", STAC_HP_ENVY_TS_BASS),  	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1940,  			  "HP bNB13", STAC_HP_BNB13_EQ),  	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1941, @@ -3438,9 +3461,11 @@ static void stac922x_fixup_intel_mac_auto(struct hda_codec *codec,  {  	if (action != HDA_FIXUP_ACT_PRE_PROBE)  		return; + +	codec->fixup_id = HDA_FIXUP_ID_NOT_SET;  	snd_hda_pick_fixup(codec, NULL, stac922x_intel_mac_fixup_tbl,  			   stac922x_fixups); -	if (codec->fixup_id != STAC_INTEL_MAC_AUTO) +	if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET)  		snd_hda_apply_fixup(codec, action);  } @@ -4251,11 +4276,18 @@ static int stac_parse_auto_config(struct hda_codec *codec)  			return err;  	} -	stac_init_power_map(codec); -  	return 0;  } +static int stac_build_controls(struct hda_codec *codec) +{ +	int err = snd_hda_gen_build_controls(codec); + +	if (err < 0) +		return err; +	stac_init_power_map(codec); +	return 0; +}  static int stac_init(struct hda_codec *codec)  { @@ -4367,7 +4399,7 @@ static int stac_suspend(struct hda_codec *codec)  #endif /* CONFIG_PM */  static const struct hda_codec_ops stac_patch_ops = { -	.build_controls = snd_hda_gen_build_controls, +	.build_controls = stac_build_controls,  	.build_pcms = snd_hda_gen_build_pcms,  	.init = stac_init,  	.free = stac_free,  |