New quirk for USB DAC 08bb:2704
PATCH 1/1 New quirk for USB DAC 08bb:2704
Howdy, all
I have one of these:
http://www.chordelectronics.co.uk/products_detail.asp?id=63
It's got one of these USB DACs inside ID 08bb:2704 Texas Instruments Japan
The DAC has a single mixer control, Master, which allows you to adjust volume and mute/unmute. The fun thing is that the volume adjustment has no effect whatsoever. On machines running pulse, this means that output will be at 0dB pretty much all the time. (Of course, this is true of non-pulse machines also).
The attached patch disables the Master control, which causes pulse to control levels entirely in software, as it should for this device.
The main downside to this patch is that, while the volume part of the Master control is non-functional, the mute/unmute aspect does work as expected. I couldn't figure out how to change the Master control to just a mute/unmute control, but if someone has suggestions on what to do, that'd be appreciated. Judging by the comments in the code (and contrary to what I wrote in the map comment), I presume the mute/unmute control is the only reason why 08bb:2702 isn't doing this same thing.
Cheers,
--xsdg
Quoted 1 line
From
3061b0fa281ea812f0767bc9df6bae7b8016d0d0Mon Sep 17 00:00:00 2001
From: Omari Stephens <[email protected]>
Date: Sat, 12 Feb 2011 20:36:04 +0000
Subject: [PATCH] Add a quirk to ignore the Master volume control on 08bb:2704
--- mixer.c | 6 ++++++ mixer_maps.c | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletions(-)
mixer.c +6 -0
@@ -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);
mixer_maps.c +18 -1
@@ -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, },
Signature · 1 line
1.7.2.3
_______________________________________________
Alsa-devel mailing list [email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
At Sat, 12 Feb 2011 22:53:25 +0000,
Quoted 18 lines · Omari Stephens
Howdy, all
I have one of these:
http://www.chordelectronics.co.uk/products_detail.asp?id=63It's got one of these USB DACs inside
ID 08bb:2704 Texas Instruments JapanThe DAC has a single mixer control, Master, which allows you to adjust volume and mute/unmute. The fun thing is that the volume adjustment has no effect whatsoever. On machines running pulse, this means that output will be at 0dB pretty much all the time. (Of course, this is true of non-pulse machines also).
The attached patch disables the Master control, which causes pulse to control levels entirely in software, as it should for this device.
Quoted 7 lines
The main downside to this patch is that, while the volume part of the Master control is non-functional, the mute/unmute aspect does work as expected. I couldn't figure out how to change the Master control to just a mute/unmute control, but if someone has suggestions on what to do, that'd be appreciated. Judging by the comments in the code (and contrary to what I wrote in the map comment), I presume the mute/unmute control is the only reason why 08bb:2702 isn't doing this same thing.
The patch looks good to me. Could you give your sign-off?
thanks,
Takashi
Quoted 80 lines
Cheers,
--xsdg
[2 0001-Add-a-quirk-to-ignore-the-Master-volume-control-on-0.patch <text/x-patch (7bit)>]Quoted 1 line
From
3061b0fa281ea812f0767bc9df6bae7b8016d0d0Mon Sep 17 00:00:00 2001From: Omari Stephens <[email protected]>
Date: Sat, 12 Feb 2011 20:36:04 +0000
Subject: [PATCH] Add a quirk to ignore the Master volume control on 08bb:2704--- mixer.c | 6 ++++++ mixer_maps.c | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletions(-)mixer.c +6
-0@@ -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);mixer_maps.c +18
-1@@ -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, },Signature · 7 lines
1.7.2.3 [3 <text/plain; us-ascii (7bit)>] _______________________________________________ Alsa-devel mailing list [email protected] http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Quoted 28 lines · Takashi Iwai
At Sat, 12 Feb 2011 22:53:25 +0000,
Quoted 18 lines · Omari Stephens
Howdy, all
I have one of these:
http://www.chordelectronics.co.uk/products_detail.asp?id=63It's got one of these USB DACs inside
ID 08bb:2704 Texas Instruments JapanThe DAC has a single mixer control, Master, which allows you to adjust volume and mute/unmute. The fun thing is that the volume adjustment has no effect whatsoever. On machines running pulse, this means that output will be at 0dB pretty much all the time. (Of course, this is true of non-pulse machines also).
The attached patch disables the Master control, which causes pulse to control levels entirely in software, as it should for this device.
Quoted 7 lines
The main downside to this patch is that, while the volume part of the Master control is non-functional, the mute/unmute aspect does work as expected. I couldn't figure out how to change the Master control to just a mute/unmute control, but if someone has suggestions on what to do, that'd be appreciated. Judging by the comments in the code (and contrary to what I wrote in the map comment), I presume the mute/unmute control is the only reason why 08bb:2702 isn't doing this same thing.
Quoted 1 line
The patch looks good to me. Could you give your sign-off?
Oops; sorry (haven't submitted a kernel patch before). Will do.
That said, I have some friends with the same device, and at least one says that the volume control works fine for him, so I want to do a bit more investigation before this quirk gets added. Will send email when I get things figured out a little more.
--xsdg
At Mon, 14 Feb 2011 21:16:18 +0000,
Quoted 30 lines · Omari Stephens
Quoted 28 lines · Takashi Iwai
At Sat, 12 Feb 2011 22:53:25 +0000,
Quoted 25 lines · Omari Stephens
Howdy, all
I have one of these:
http://www.chordelectronics.co.uk/products_detail.asp?id=63It's got one of these USB DACs inside
ID 08bb:2704 Texas Instruments JapanThe DAC has a single mixer control, Master, which allows you to adjust volume and mute/unmute. The fun thing is that the volume adjustment has no effect whatsoever. On machines running pulse, this means that output will be at 0dB pretty much all the time. (Of course, this is true of non-pulse machines also).
The attached patch disables the Master control, which causes pulse to control levels entirely in software, as it should for this device.
The main downside to this patch is that, while the volume part of the Master control is non-functional, the mute/unmute aspect does work as expected. I couldn't figure out how to change the Master control to just a mute/unmute control, but if someone has suggestions on what to do, that'd be appreciated. Judging by the comments in the code (and contrary to what I wrote in the map comment), I presume the mute/unmute control is the only reason why 08bb:2702 isn't doing this same thing.
Quoted 7 lines
Quoted 1 line
The patch looks good to me. Could you give your sign-off?
Oops; sorry (haven't submitted a kernel patch before). Will do.
That said, I have some friends with the same device, and at least one says that the volume control works fine for him, so I want to do a bit more investigation before this quirk gets added. Will send email when I get things figured out a little more.
OK, let me know if it's ready.
thanks,
Takashi