mirror of https://gitee.com/openkylin/linux.git
usb: gadget: f_fs: preserve wMaxPacketSize across usb_ep_autoconfig() call
usb_ep_autoconfig() treats the passed descriptor as if it were an fs descriptor. In particular, for bulk endpoints, it clips wMaxPacketSize to 64. This patch preserves the original value. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
dffe2d7fc4
commit
bdcc03cef0
|
@ -2843,12 +2843,18 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep,
|
|||
struct usb_request *req;
|
||||
struct usb_ep *ep;
|
||||
u8 bEndpointAddress;
|
||||
u16 wMaxPacketSize;
|
||||
|
||||
/*
|
||||
* We back up bEndpointAddress because autoconfig overwrites
|
||||
* it with physical endpoint address.
|
||||
*/
|
||||
bEndpointAddress = ds->bEndpointAddress;
|
||||
/*
|
||||
* We back up wMaxPacketSize because autoconfig treats
|
||||
* endpoint descriptors as if they were full speed.
|
||||
*/
|
||||
wMaxPacketSize = ds->wMaxPacketSize;
|
||||
pr_vdebug("autoconfig\n");
|
||||
ep = usb_ep_autoconfig(func->gadget, ds);
|
||||
if (unlikely(!ep))
|
||||
|
@ -2869,6 +2875,11 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep,
|
|||
*/
|
||||
if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
|
||||
ds->bEndpointAddress = bEndpointAddress;
|
||||
/*
|
||||
* Restore wMaxPacketSize which was potentially
|
||||
* overwritten by autoconfig.
|
||||
*/
|
||||
ds->wMaxPacketSize = wMaxPacketSize;
|
||||
}
|
||||
ffs_dump_mem(": Rewritten ep desc", ds, ds->bLength);
|
||||
|
||||
|
|
Loading…
Reference in New Issue