[alsa-devel] [PATCH] ALSA: snd-usb: fix clock source validity index
uac_clock_source_is_valid() uses the control selector value to access the bmControls bitmap of the clock source unit. This is wrong, as control selector values start from 1, while the bitmap uses all available bits.
In other words, "Clock Validity Control" is stored in D3..2, not D5..4 of the clock selector unit's bmControls.
Signed-off-by: Daniel Mack zonque@gmail.com Reported-by: Andreas Koch andreas@akdesigninc.com Cc: stable@kernel.org --- sound/usb/clock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 379baad..5e634a2 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -111,7 +111,8 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip, int source_id) return 0;
/* If a clock source can't tell us whether it's valid, we assume it is */ - if (!uac2_control_is_readable(cs_desc->bmControls, UAC2_CS_CONTROL_CLOCK_VALID)) + if (!uac2_control_is_readable(cs_desc->bmControls, + UAC2_CS_CONTROL_CLOCK_VALID - 1)) return 1;
err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,
At Wed, 1 Aug 2012 10:16:53 +0200, Daniel Mack wrote:
uac_clock_source_is_valid() uses the control selector value to access the bmControls bitmap of the clock source unit. This is wrong, as control selector values start from 1, while the bitmap uses all available bits.
In other words, "Clock Validity Control" is stored in D3..2, not D5..4 of the clock selector unit's bmControls.
Signed-off-by: Daniel Mack zonque@gmail.com Reported-by: Andreas Koch andreas@akdesigninc.com Cc: stable@kernel.org
Applied now. Thanks.
Takashi
sound/usb/clock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 379baad..5e634a2 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -111,7 +111,8 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip, int source_id) return 0;
/* If a clock source can't tell us whether it's valid, we assume it is */
- if (!uac2_control_is_readable(cs_desc->bmControls, UAC2_CS_CONTROL_CLOCK_VALID))
if (!uac2_control_is_readable(cs_desc->bmControls,
UAC2_CS_CONTROL_CLOCK_VALID - 1))
return 1;
err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,
-- 1.7.11.2
participants (2)
-
Daniel Mack
-
Takashi Iwai