[alsa-devel] [PATCH] New quirk for USB DAC 08bb:2704
Takashi Iwai
tiwai at suse.de
Mon Feb 14 18:10:32 CET 2011
At Sat, 12 Feb 2011 22:53:25 +0000,
Omari Stephens wrote:
>
> 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.
The patch looks good to me. Could you give your sign-off?
thanks,
Takashi
>
> Cheers,
> --xsdg
> [2 0001-Add-a-quirk-to-ignore-the-Master-volume-control-on-0.patch <text/x-patch (7bit)>]
> >From 3061b0fa281ea812f0767bc9df6bae7b8016d0d0 Mon Sep 17 00:00:00 2001
> From: Omari Stephens <xsdg at xsdg.org>
> 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(-)
>
> 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,
> },
> --
> 1.7.2.3
>
> [3 <text/plain; us-ascii (7bit)>]
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
More information about the Alsa-devel
mailing list