Skip to content

Commit

Permalink
ALSA: usb-audio: Use Class Specific EP for UAC3 devices.
Browse files Browse the repository at this point in the history
bmAtributes offset doesn't exist in the UAC3 CS_EP descriptor.
Hence, checking for pitch control as if it was UAC2 doesn't make
any sense. Use the defined UAC3 offsets instead.

Fixes: 9a2fe9b ("ALSA: usb: initial USB Audio Device Class 3.0 support")
Signed-off-by: Jorge Sanjuan <[email protected]>
Reviewed-by: Ruslan Bilovol <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
Jorge Sanjuan authored and tiwai committed May 15, 2018
1 parent 2f0d520 commit c99f080
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion sound/usb/stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,

if (protocol == UAC_VERSION_1) {
attributes = csep->bmAttributes;
} else {
} else if (protocol == UAC_VERSION_2) {
struct uac2_iso_endpoint_descriptor *csep2 =
(struct uac2_iso_endpoint_descriptor *) csep;

Expand All @@ -585,6 +585,13 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
/* emulate the endpoint attributes of a v1 device */
if (csep2->bmControls & UAC2_CONTROL_PITCH)
attributes |= UAC_EP_CS_ATTR_PITCH_CONTROL;
} else { /* UAC_VERSION_3 */
struct uac3_iso_endpoint_descriptor *csep3 =
(struct uac3_iso_endpoint_descriptor *) csep;

/* emulate the endpoint attributes of a v1 device */
if (le32_to_cpu(csep3->bmControls) & UAC2_CONTROL_PITCH)
attributes |= UAC_EP_CS_ATTR_PITCH_CONTROL;
}

return attributes;
Expand Down

0 comments on commit c99f080

Please sign in to comment.