On Tue, 12 Apr 2016 05:02:08 +0200, Kailang wrote:
Hi Takashi,
Attach is new patch witch follow your method. Many Thanks for you. ^^
OK, I applied it with a few modification / correction in the comments and the changelog. Also added Cc to stable.
thanks,
Takashi
BR, Kailang
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Thursday, April 07, 2016 6:18 PM To: Kailang Cc: (alsa-devel@alsa-project.org) Subject: Re: Dell USB audio driver workaround
On Thu, 07 Apr 2016 12:07:25 +0200, Kailang wrote:
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Thursday, April 07, 2016 5:27 PM To: Kailang Cc: (alsa-devel@alsa-project.org) Subject: Re: Dell USB audio driver workaround
On Thu, 07 Apr 2016 09:05:52 +0200, Kailang wrote:
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Wednesday, April 06, 2016 5:37 PM To: Kailang Cc: (alsa-devel@alsa-project.org) Subject: Re: Dell USB audio driver workaround
On Wed, 06 Apr 2016 11:22:43 +0200, Kailang wrote: > > > > > -----Original Message----- > > From: Takashi Iwai [mailto:tiwai@suse.de] > > Sent: Wednesday, April 06, 2016 4:57 PM > > To: Kailang > > Cc: (alsa-devel@alsa-project.org) > > Subject: Re: Dell USB audio driver workaround > > > > On Wed, 06 Apr 2016 08:29:12 +0200, Kailang wrote: > > > > > > Hi Takashi, > > > > > > Dell had USB dock. > > > Maybe firmware issue, the master volume always
keep at 0x57.
> > > Attach patch will fix it to keep at Max volume. > > > > > > Could you help us to update it? > > > > Well, I don't get how this patch works.. > > > > > diff --git a/sound/usb/mixer.c
b/sound/usb/mixer.c index
> > > 4f85757..84d9a4e 100644 > > > --- a/sound/usb/mixer.c > > > +++ b/sound/usb/mixer.c > > > @@ -846,6 +846,12 @@ static void
volume_control_quirks(struct
> > > usb_mixer_elem_info *cval, { > > > struct snd_usb_audio *chip =
cval->head.mixer->chip;
> > > switch (chip->usb_id) { > > > + case USB_ID(0x0bda, 0x4014): /* Dell
workaround */
> > > + if (strstr(kctl->id.name, "Playback Volume") != NULL) { > > > + cval->min = 0x0000; > > > + cval->max = 0x0000; > > > + } > > > + break; > > > > So, this means that this value has to be fixed to 0? > > If yes, can't we simply remove this volume instead? > > Yes, but it need to set Max volume to 0. This is test
on my site.
> Because it will rewrite 0x57 value to codec register when driver is loaded. > And keep 0x57 volume value all the time. So, Master volume will lower than windows machine. > This case which driver fail to build the alsa mixer(This is firmware cause it). So, no hardware volume control on this. > If the Max volume value is 0, system will not set default value 0x57 for first time loading driver.
Which values (min/max) does this FU take and which values
are buggy?
Max value.
Sorry, my question wasn't clear. "What" min and max are they? min=0 and max=0x57?
Oh! Sorry. It's my wrong. I forgot.
Unit: 16 Control: name="PCM Playback Volume", index=0 Info: id=16, control=2, cmask=0x3, channels=2, type="S16" Volume: min=-16256, max=0, dBmin=-6350, dBmax=0
0x0 (codec reg) = (-16256) (USB vloume level) 0x57(codec reg) = 0xEC00(USB vloume level) 0x7F(codec reg) = 0x0000 (USB vloume level)
And, your patch changes both min and max to be 0. That is, it accepts only 0. Does it mean that this FU isn't any
proper volume
control?
cval->max original is 0. cval->min => I set it to 0. It will be not rewrite 0x57
value to codec.
OK, now it's clear, thanks.
Though, I still don't like to set min = max. It basically makes this control useless, and then there is no reason to keep this exposed.
Can we just skip parsing this control, then? You can create an own usbmix_name_map[] to indicate the ID to skip building a control by passing NULL to its name. That is, a patch like below. (You need to fill the right ID number in the patch, of course.)
Takashi
diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c --- a/sound/usb/mixer_maps.c +++ b/sound/usb/mixer_maps.c @@ -349,6 +349,16 @@ static struct usbmix_name_map bose_companion5_map[] = { };
/*
- Dell XXX with ALC4020 codec had a firmware problem where it got
- screwed up when zero volume is passed; just skip it as a
workaround +*/ static const struct usbmix_name_map dell_alc4020_map[] = {
- { 10 /* XXX fill this right ID XXX */, NULL },
- { 0 }
+};
+/*
- Control map entries
*/
@@ -423,6 +433,10 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = { .map = maya44_map, }, {
.id = USB_ID(0x0bda, 0x4014),
.map = dell_alc4020_map,
- },
- { .id = USB_ID(0x0c45, 0x1158), .map = justlink_map, },
------Please consider the environment before printing this e-mail.
[2 0001-Dell-usb-dock-vloume-issue.patch <application/octet-stream (base64)>]