usb: gadget: qdss: Fix usage of usb_ep_autoconfig()
commit 59ff8848b2
("usb: gadget: qdss: Use usb_ep_autoconfig()
instead of ss() variant") modified f_qdss to use the simple
usb_ep_autoconfig() helper, however this function has a caveat
that the passed in descriptor's wMaxPacketSize field gets updated
to be a maximum to 64 bytes. Hence, this function should not be
called with descriptors intended for high- or Superspeed usage
since they can support up to 512 or 1024 bytes for bulk endpoints.
Instead, call usb_ep_autoconfig() by passing in the FS descriptors,
and use the resulting bEndpointAddress assignment to update the
corresponding HS and SS descriptors.
Change-Id: I0b177d5d1075bc3e996f09a2db4699952cf0886d
Signed-off-by: Jack Pham <jackp@codeaurora.org>
This commit is contained in:
parent
6b76771b63
commit
832e170a2d
@ -410,7 +410,7 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
|
||||
if (!strcmp(qdss->ch.name, USB_QDSS_CH_MDM))
|
||||
qdss_data_ep_comp_desc.bMaxBurst = 0;
|
||||
|
||||
ep = usb_ep_autoconfig(gadget, &qdss_ss_data_desc);
|
||||
ep = usb_ep_autoconfig(gadget, &qdss_fs_data_desc);
|
||||
if (!ep) {
|
||||
pr_err("%s: ep_autoconfig error\n", __func__);
|
||||
goto clear_ep;
|
||||
@ -422,7 +422,7 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
|
||||
msm_ep_set_endless(qdss->port.data, true);
|
||||
|
||||
if (qdss->debug_inface_enabled) {
|
||||
ep = usb_ep_autoconfig(gadget, &qdss_ss_ctrl_in_desc);
|
||||
ep = usb_ep_autoconfig(gadget, &qdss_fs_ctrl_in_desc);
|
||||
if (!ep) {
|
||||
pr_err("%s: ep_autoconfig error\n", __func__);
|
||||
goto clear_ep;
|
||||
@ -431,7 +431,7 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
|
||||
qdss->port.ctrl_in = ep;
|
||||
ep->driver_data = qdss;
|
||||
|
||||
ep = usb_ep_autoconfig(gadget, &qdss_ss_ctrl_out_desc);
|
||||
ep = usb_ep_autoconfig(gadget, &qdss_fs_ctrl_out_desc);
|
||||
if (!ep) {
|
||||
pr_err("%s: ep_autoconfig error\n", __func__);
|
||||
goto clear_ep;
|
||||
@ -449,24 +449,17 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
|
||||
}
|
||||
}
|
||||
|
||||
/*update fs descriptors*/
|
||||
qdss_fs_data_desc.bEndpointAddress =
|
||||
qdss_ss_data_desc.bEndpointAddress;
|
||||
if (qdss->debug_inface_enabled) {
|
||||
qdss_fs_ctrl_in_desc.bEndpointAddress =
|
||||
qdss_ss_ctrl_in_desc.bEndpointAddress;
|
||||
qdss_fs_ctrl_out_desc.bEndpointAddress =
|
||||
qdss_ss_ctrl_out_desc.bEndpointAddress;
|
||||
}
|
||||
|
||||
/*update descriptors*/
|
||||
/* update hs/ss descriptors */
|
||||
qdss_hs_data_desc.bEndpointAddress =
|
||||
qdss_ss_data_desc.bEndpointAddress;
|
||||
qdss_ss_data_desc.bEndpointAddress =
|
||||
qdss_fs_data_desc.bEndpointAddress;
|
||||
if (qdss->debug_inface_enabled) {
|
||||
qdss_hs_ctrl_in_desc.bEndpointAddress =
|
||||
qdss_ss_ctrl_in_desc.bEndpointAddress;
|
||||
qdss_ss_ctrl_in_desc.bEndpointAddress =
|
||||
qdss_fs_ctrl_in_desc.bEndpointAddress;
|
||||
qdss_hs_ctrl_out_desc.bEndpointAddress =
|
||||
qdss_ss_ctrl_out_desc.bEndpointAddress;
|
||||
qdss_ss_ctrl_out_desc.bEndpointAddress =
|
||||
qdss_fs_ctrl_out_desc.bEndpointAddress;
|
||||
}
|
||||
|
||||
if (qdss->debug_inface_enabled)
|
||||
|
Loading…
Reference in New Issue
Block a user