--- mixer.c | 6 ++++++ mixer_maps.c | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/mixer.c b/mixer.c index 3ed3901..38d5d77 100644 --- a/mixer.c +++ b/mixer.c @@ -1192,6 +1192,12 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid, void /* disable non-functional volume control */ master_bits &= ~UAC_CONTROL_BIT(UAC_FU_VOLUME); break; + case USB_ID(0x08bb, 0x2704): + snd_printk(KERN_INFO + "usbmixer: master volume quirk for PCM2704 chip\n"); + /* disable non-functional volume control */ + master_bits &= ~UAC_CONTROL_BIT(UAC_FU_VOLUME); + break; } if (channels > 0) first_ch_bits = snd_usb_combine_bytes(bmaControls + csize, csize); diff --git a/mixer_maps.c b/mixer_maps.c index f1324c4..40edd9b 100644 --- a/mixer_maps.c +++ b/mixer_maps.c @@ -208,11 +208,23 @@ static struct usbmix_name_map live24ext_map[] = { /* LineX FM Transmitter entry - needed to bypass controls bug */ static struct usbmix_name_map linex_map[] = { /* 1: IT pcm */ - /* 2: OT Speaker */ + /* 2: OT Speaker */ { 3, "Master" }, /* FU: master volume - left / right / mute */ { 0 } /* terminator */ };
+/* This DAC (08bb:2704) has a single "Volume" control which isn't actually + * connected to anything. The 08bb:2702 device is based off the LineX map, so + * presumably the 2704 one is similar but more broken. + */ +static struct usbmix_name_map ti_broken_usb_dac_map[] = { + /* 1: IT pcm */ + /* 2: OT Speaker */ + { 3, NULL }, /* Master (not connected to anything) */ + { 0 } +}; + + static struct usbmix_name_map maya44_map[] = { /* 1: IT line */ { 2, "Line Playback" }, /* FU */ @@ -355,6 +367,11 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = { .ignore_ctl_error = 1, }, { + .id = USB_ID(0x08bb, 0x2704), + .map = ti_broken_usb_dac_map, + .ignore_ctl_error = 1, + }, + { .id = USB_ID(0x0a92, 0x0091), .map = maya44_map, },