patch "usb: gadget: f_uac2: Add missing companion descriptor for feedback EP" added to usb-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
usb: gadget: f_uac2: Add missing companion descriptor for feedback EP
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 595091a1426a3b2625dad322f69fe569dc9d8943 Mon Sep 17 00:00:00 2001
From: Jack Pham <[email protected]>
Date: Thu, 9 Sep 2021 10:48:10 -0700
Subject: 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 | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
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)) {
Signature · 1 line
2.33.0