From: Daniel Mack <zonque@gmail.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: Pawel Moll <mail@pawelmoll.com>, Jaroslav Kysela <perex@perex.cz>,
Daniel Mack <daniel@caiaq.de>,
alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] ALSA: usb: Fix Processing Unit Descriptor parsers
Date: Thu, 21 Feb 2013 13:10:16 +0100 [thread overview]
Message-ID: <51260EA8.20402@gmail.com> (raw)
In-Reply-To: <s5hip5mhwd5.wl%tiwai@suse.de>
On 21.02.2013 10:03, Takashi Iwai wrote:
> At Thu, 21 Feb 2013 01:55:50 +0000,
> Pawel Moll wrote:
>>
>> Commit 99fc86450c439039d2ef88d06b222fd51a779176 "ALSA: usb-mixer:
>> parse descriptors with structs" introduced a set of useful parsers
>> for descriptors. Unfortunately the parses for the Processing Unit
>> Descriptor came with a very subtle bug...
>>
>> Functions uac_processing_unit_iProcessing() and
>> uac_processing_unit_specific() were indexing the baSourceID array
>> forgetting the fields before the iProcessing and process-specific
>> descriptors.
>>
>> The problem was observed with Sound Blaster Extigy mixer,
>> where nNrModes in Up/Down-mix Processing Unit Descriptor
>> was accessed at offset 10 of the descriptor (value 0)
>> instead of offset 15 (value 7). In result the resulting
>> control had interesting limit values:
>>
>> Simple mixer control 'Channel Routing Mode Select',0
>> Capabilities: volume volume-joined penum
>> Playback channels: Mono
>> Capture channels: Mono
>> Limits: 0 - -1
>> Mono: -1 [100%]
>>
>> Fixed by starting from the bmControls, which was calculated
>> correctly, instead of baSourceID.
>>
>> Now the mentioned control is fine:
>>
>> Simple mixer control 'Channel Routing Mode Select',0
>> Capabilities: volume volume-joined penum
>> Playback channels: Mono
>> Capture channels: Mono
>> Limits: 0 - 6
>> Mono: 0 [0%]
>>
>> Signed-off-by: Pawel Moll <mail@pawelmoll.com>
>> ---
>> include/uapi/linux/usb/audio.h | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/uapi/linux/usb/audio.h b/include/uapi/linux/usb/audio.h
>> index ac90037..d2314be 100644
>> --- a/include/uapi/linux/usb/audio.h
>> +++ b/include/uapi/linux/usb/audio.h
>> @@ -384,14 +384,16 @@ static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_de
>> int protocol)
>> {
>> __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
>> - return desc->baSourceID[desc->bNrInPins + control_size];
>> + return *(uac_processing_unit_bmControls(desc, protocol)
>> + + control_size);
>> }
>>
>> static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc,
>> int protocol)
>> {
>> __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
>> - return &desc->baSourceID[desc->bNrInPins + control_size + 1];
>> + return uac_processing_unit_bmControls(desc, protocol)
>> + + control_size + 1;
>> }
>
> Looks good to me.
>
> An alternative would be to change uac_processing_unit_bControlSize()
> to correct the header size, but I don't think it's good, as
> bControlSize fields in other units show the value including the header
> size.
>
> Daniel, what do you think?
Looks good to me too. and this should be marked for stable of course.
Thanks for fixing this, Pawell!
Daniel
next prev parent reply other threads:[~2013-02-21 12:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-21 1:55 [PATCH] ALSA: usb: Fix Processing Unit Descriptor parsers Pawel Moll
2013-02-21 9:03 ` Takashi Iwai
2013-02-21 12:10 ` Daniel Mack [this message]
2013-02-21 13:20 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51260EA8.20402@gmail.com \
--to=zonque@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=daniel@caiaq.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mail@pawelmoll.com \
--cc=perex@perex.cz \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.