FAILED: patch "[PATCH] usb: gadget: f_uac2: Add missing companion descriptor for" failed to apply to 5.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 595091a1426a3b2625dad322f69fe569dc9d8943 Mon Sep 17 00:00:00 2001
From: Jack Pham <[email protected]>
Date: Thu, 9 Sep 2021 10:48:10 -0700
Subject: [PATCH] usb: gadget: f_uac2: Add missing companion descriptor for
feedback EP
The f_uac2 function fails to enumerate when connected in SuperSpeed due to the feedback endpoint missing the companion descriptor. Add a new ss_epin_fback_desc_comp descriptor and append it behind the ss_epin_fback_desc both in the static definition of the ss_audio_desc structure as well as its dynamic construction in setup_headers().
drivers/usb/gadget/function/f_uac2.c +15 -1
@@ -406,6 +406,14 @@ static struct usb_endpoint_descriptor ss_epin_fback_desc = { .bInterval = 4, }; +static struct usb_ss_ep_comp_descriptor ss_epin_fback_desc_comp = { + .bLength =sizeof (ss_epin_fback_desc_comp), + .bDescriptorType =USB_DT_SS_ENDPOINT_COMP , + .bMaxBurst =0 , + .bmAttributes =0 , + .wBytesPerInterval =cpu_to_le16 (4 ), +}; +/* Audio Streaming IN Interface - Alt0 */ static struct usb_interface_descriptor std_as_in_if0_desc = {
@@ -597,6 +605,7 @@ static struct usb_descriptor_header *ss_audio_desc[] = { (struct usb_descriptor_header *)&ss_epout_desc_comp, (struct usb_descriptor_header *)&as_iso_out_desc, (struct usb_descriptor_header *)&ss_epin_fback_desc, + (struct usb_descriptor_header *)&ss_epin_fback_desc_comp, (struct usb_descriptor_header *)&std_as_in_if0_desc, (struct usb_descriptor_header *)&std_as_in_if1_desc,
@@ -705,6 +714,7 @@ static void setup_headers(struct f_uac2_opts *opts, {struct usb_ss_ep_comp_descriptor *epout_desc_comp =NULL ;struct usb_ss_ep_comp_descriptor *epin_desc_comp =NULL ; +struct usb_ss_ep_comp_descriptor *epin_fback_desc_comp =NULL ;struct usb_endpoint_descriptor *epout_desc;struct usb_endpoint_descriptor *epin_desc;struct usb_endpoint_descriptor *epin_fback_desc;
@@ -730,6 +740,7 @@ static void setup_headers(struct f_uac2_opts *opts, epout_desc_comp = &ss_epout_desc_comp; epin_desc_comp = &ss_epin_desc_comp; epin_fback_desc = &ss_epin_fback_desc; + epin_fback_desc_comp = &ss_epin_fback_desc_comp; ep_int_desc = &ss_ep_int_desc; }
@@ -773,8 +784,11 @@ static void setup_headers(struct f_uac2_opts *opts, headers[i++] =USBDHDR (&as_iso_out_desc); -if (EPOUT_FBACK_IN_EN (opts)) +if (EPOUT_FBACK_IN_EN (opts)) { headers[i++] =USBDHDR (epin_fback_desc); +if (epin_fback_desc_comp) + headers[i++] =USBDHDR (epin_fback_desc_comp); + } }if (EPIN_EN (opts)) {