ALSA: hda/realtek - Don't create extra controls with channel suffix
The multiple headphone or speaker pins are usually provided to output the same stream unlike line-out jacks (which are supposed to be multi-channel surrounds). Thus giving a mixer name like "Headphone Surround" is rather confusing. Instead, when multiple headphone volumes are available, use index with the same "Headphone" name. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									6c39d6aca1
								
							
						
					
					
						commit
						766ddee68b
					
				| @ -3173,7 +3173,8 @@ static int alc_auto_create_multi_out_ctls(struct hda_codec *codec, | ||||
| } | ||||
| 
 | ||||
| static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin, | ||||
| 				     hda_nid_t dac, const char *pfx) | ||||
| 				     hda_nid_t dac, const char *pfx, | ||||
| 				     int cidx) | ||||
| { | ||||
| 	struct alc_spec *spec = codec->spec; | ||||
| 	hda_nid_t sw, vol; | ||||
| @ -3189,15 +3190,15 @@ static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin, | ||||
| 		if (is_ctl_used(spec->sw_ctls, val)) | ||||
| 			return 0; /* already created */ | ||||
| 		mark_ctl_usage(spec->sw_ctls, val); | ||||
| 		return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, val); | ||||
| 		return __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, cidx, val); | ||||
| 	} | ||||
| 
 | ||||
| 	sw = alc_look_for_out_mute_nid(codec, pin, dac); | ||||
| 	vol = alc_look_for_out_vol_nid(codec, pin, dac); | ||||
| 	err = alc_auto_add_stereo_vol(codec, pfx, 0, vol); | ||||
| 	err = alc_auto_add_stereo_vol(codec, pfx, cidx, vol); | ||||
| 	if (err < 0) | ||||
| 		return err; | ||||
| 	err = alc_auto_add_stereo_sw(codec, pfx, 0, sw); | ||||
| 	err = alc_auto_add_stereo_sw(codec, pfx, cidx, sw); | ||||
| 	if (err < 0) | ||||
| 		return err; | ||||
| 	return 0; | ||||
| @ -3238,16 +3239,21 @@ static int alc_auto_create_extra_outs(struct hda_codec *codec, int num_pins, | ||||
| 		hda_nid_t dac = *dacs; | ||||
| 		if (!dac) | ||||
| 			dac = spec->multiout.dac_nids[0]; | ||||
| 		return alc_auto_create_extra_out(codec, *pins, dac, pfx); | ||||
| 		return alc_auto_create_extra_out(codec, *pins, dac, pfx, 0); | ||||
| 	} | ||||
| 
 | ||||
| 	if (dacs[num_pins - 1]) { | ||||
| 		/* OK, we have a multi-output system with individual volumes */ | ||||
| 		for (i = 0; i < num_pins; i++) { | ||||
| 			snprintf(name, sizeof(name), "%s %s", | ||||
| 				 pfx, channel_name[i]); | ||||
| 			err = alc_auto_create_extra_out(codec, pins[i], dacs[i], | ||||
| 							name); | ||||
| 			if (num_pins >= 3) { | ||||
| 				snprintf(name, sizeof(name), "%s %s", | ||||
| 					 pfx, channel_name[i]); | ||||
| 				err = alc_auto_create_extra_out(codec, pins[i], dacs[i], | ||||
| 								name, 0); | ||||
| 			} else { | ||||
| 				err = alc_auto_create_extra_out(codec, pins[i], dacs[i], | ||||
| 								pfx, i); | ||||
| 			} | ||||
| 			if (err < 0) | ||||
| 				return err; | ||||
| 		} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user