From ab9ceb4334cd02e593c0eae77f54f6d75103846d Mon Sep 17 00:00:00 2001 From: Jack Pham Date: Wed, 1 Sep 2021 18:29:12 -0700 Subject: [PATCH] FROMLIST: 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. We can reuse the ss_epin_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(). Fixes: 24f779dac8f3 ("usb: gadget: f_uac2/u_audio: add feedback endpoint support") Signed-off-by: Jack Pham Bug: 199044440 Link: https://lore.kernel.org/linux-usb/20210902014317.16775-1-jackp@codeaurora.org/ Change-Id: I0e8d73d69675b649c6b13a48900b391fd5423129 Signed-off-by: Jack Pham --- drivers/usb/gadget/function/f_uac2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c index ae29ff2b2b68..c3f87fa6874a 100644 --- a/drivers/usb/gadget/function/f_uac2.c +++ b/drivers/usb/gadget/function/f_uac2.c @@ -527,6 +527,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_desc_comp, (struct usb_descriptor_header *)&std_as_in_if0_desc, (struct usb_descriptor_header *)&std_as_in_if1_desc, @@ -654,8 +655,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_desc_comp) + headers[i++] = USBDHDR(epin_desc_comp); + } } if (EPIN_EN(opts)) { headers[i++] = USBDHDR(&std_as_in_if0_desc);