diff options
| -rw-r--r-- | sound/usb/mixer.c | 12 | ||||
| -rw-r--r-- | sound/usb/mixer_maps.c | 24 | ||||
| -rw-r--r-- | sound/usb/quirks-table.h | 14 | 
3 files changed, 44 insertions, 6 deletions
| diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index e7b9040a54e6..ecd5036a0b44 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -1776,8 +1776,10 @@ static void build_connector_control(struct usb_mixer_interface *mixer,  {  	struct snd_kcontrol *kctl;  	struct usb_mixer_elem_info *cval; +	const struct usbmix_name_map *map; -	if (check_ignored_ctl(find_map(imap, term->id, 0))) +	map = find_map(imap, term->id, 0); +	if (check_ignored_ctl(map))  		return;  	cval = kzalloc(sizeof(*cval), GFP_KERNEL); @@ -1809,8 +1811,12 @@ static void build_connector_control(struct usb_mixer_interface *mixer,  		usb_mixer_elem_info_free(cval);  		return;  	} -	get_connector_control_name(mixer, term, is_input, kctl->id.name, -				   sizeof(kctl->id.name)); + +	if (check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name))) +		strlcat(kctl->id.name, " Jack", sizeof(kctl->id.name)); +	else +		get_connector_control_name(mixer, term, is_input, kctl->id.name, +					   sizeof(kctl->id.name));  	kctl->private_free = snd_usb_mixer_elem_free;  	snd_usb_mixer_add_control(&cval->head, kctl);  } diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c index b4e77000f441..fb2c4a992951 100644 --- a/sound/usb/mixer_maps.c +++ b/sound/usb/mixer_maps.c @@ -369,6 +369,24 @@ static const struct usbmix_name_map asus_rog_map[] = {  	{}  }; +/* TRX40 mobos with Realtek ALC1220-VB */ +static const struct usbmix_name_map trx40_mobo_map[] = { +	{ 18, NULL }, /* OT, IEC958 - broken response, disabled */ +	{ 19, NULL, 12 }, /* FU, Input Gain Pad - broken response, disabled */ +	{ 16, "Speaker" },		/* OT */ +	{ 22, "Speaker Playback" },	/* FU */ +	{ 7, "Line" },			/* IT */ +	{ 19, "Line Capture" },		/* FU */ +	{ 17, "Front Headphone" },	/* OT */ +	{ 23, "Front Headphone Playback" },	/* FU */ +	{ 8, "Mic" },			/* IT */ +	{ 20, "Mic Capture" },		/* FU */ +	{ 9, "Front Mic" },		/* IT */ +	{ 21, "Front Mic Capture" },	/* FU */ +	{ 24, "IEC958 Playback" },	/* FU */ +	{} +}; +  /*   * Control map entries   */ @@ -500,7 +518,7 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {  	},  	{	/* Gigabyte TRX40 Aorus Pro WiFi */  		.id = USB_ID(0x0414, 0xa002), -		.map = asus_rog_map, +		.map = trx40_mobo_map,  	},  	{	/* ASUS ROG Zenith II */  		.id = USB_ID(0x0b05, 0x1916), @@ -512,11 +530,11 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {  	},  	{	/* MSI TRX40 Creator */  		.id = USB_ID(0x0db0, 0x0d64), -		.map = asus_rog_map, +		.map = trx40_mobo_map,  	},  	{	/* MSI TRX40 */  		.id = USB_ID(0x0db0, 0x543d), -		.map = asus_rog_map, +		.map = trx40_mobo_map,  	},  	{ 0 } /* terminator */  }; diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index e009d584e7d0..7598d6d6740c 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -3635,4 +3635,18 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),  	}  }, +#define ALC1220_VB_DESKTOP(vend, prod) { \ +	USB_DEVICE(vend, prod),	\ +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \ +		.vendor_name = "Realtek", \ +		.product_name = "ALC1220-VB-DT", \ +		.profile_name = "Realtek-ALC1220-VB-Desktop", \ +		.ifnum = QUIRK_NO_INTERFACE \ +	} \ +} +ALC1220_VB_DESKTOP(0x0414, 0xa002), /* Gigabyte TRX40 Aorus Pro WiFi */ +ALC1220_VB_DESKTOP(0x0db0, 0x0d64), /* MSI TRX40 Creator */ +ALC1220_VB_DESKTOP(0x0db0, 0x543d), /* MSI TRX40 */ +#undef ALC1220_VB_DESKTOP +  #undef USB_DEVICE_VENDOR_SPEC | 
