|
@@ -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;
|
|
|
|
|
@@ -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;
|