[PATCH] usb: gadget: f_hid: fix SuperSpeed descriptors

John Keeping posted 1 patch 1 month, 1 week ago
drivers/usb/gadget/function/f_hid.c | 4 ++++
1 file changed, 4 insertions(+)
[PATCH] usb: gadget: f_hid: fix SuperSpeed descriptors
Posted by John Keeping 1 month, 1 week ago
When adding dynamic configuration for bInterval, the value was removed
from the static SuperSpeed endpoint descriptors but was not set from the
configured value in hidg_bind().  Thus at SuperSpeed the interrupt
endpoints have bInterval as zero which is not valid per the USB
specification.

Add the missing setting for SuperSpeed endpoints.

Fixes: ea34925f5b2ee ("usb: gadget: hid: allow dynamic interval configuration via configfs")
Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
---
 drivers/usb/gadget/function/f_hid.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
index 8c855c00b8876..8812ebf33d14b 100644
--- a/drivers/usb/gadget/function/f_hid.c
+++ b/drivers/usb/gadget/function/f_hid.c
@@ -1207,9 +1207,11 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
 	if (!hidg->interval_user_set) {
 		hidg_fs_in_ep_desc.bInterval = 10;
 		hidg_hs_in_ep_desc.bInterval = 4;
+		hidg_ss_in_ep_desc.bInterval = 4;
 	} else {
 		hidg_fs_in_ep_desc.bInterval = hidg->interval;
 		hidg_hs_in_ep_desc.bInterval = hidg->interval;
+		hidg_ss_in_ep_desc.bInterval = hidg->interval;
 	}
 
 	hidg_ss_out_comp_desc.wBytesPerInterval =
@@ -1239,9 +1241,11 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
 		if (!hidg->interval_user_set) {
 			hidg_fs_out_ep_desc.bInterval = 10;
 			hidg_hs_out_ep_desc.bInterval = 4;
+			hidg_ss_out_ep_desc.bInterval = 4;
 		} else {
 			hidg_fs_out_ep_desc.bInterval = hidg->interval;
 			hidg_hs_out_ep_desc.bInterval = hidg->interval;
+			hidg_ss_out_ep_desc.bInterval = hidg->interval;
 		}
 		status = usb_assign_descriptors(f,
 			    hidg_fs_descriptors_intout,
-- 
2.53.0
Re: [PATCH] usb: gadget: f_hid: fix SuperSpeed descriptors
Posted by Peter Korsgaard 1 month, 1 week ago
>>>>> "John" == John Keeping <jkeeping@inmusicbrands.com> writes:

 > When adding dynamic configuration for bInterval, the value was removed
 > from the static SuperSpeed endpoint descriptors but was not set from the
 > configured value in hidg_bind().  Thus at SuperSpeed the interrupt
 > endpoints have bInterval as zero which is not valid per the USB
 > specification.

 > Add the missing setting for SuperSpeed endpoints.

 > Fixes: ea34925f5b2ee ("usb: gadget: hid: allow dynamic interval configuration via configfs")
 > Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>

Acked-by: Peter Korsgaard <peter@korsgaard.com>

-- 
Bye, Peter Korsgaard