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:

committed by
Felipe Balbi

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_request *req;
|
||||||
struct usb_ep *ep;
|
struct usb_ep *ep;
|
||||||
u8 bEndpointAddress;
|
u8 bEndpointAddress;
|
||||||
|
u16 wMaxPacketSize;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We back up bEndpointAddress because autoconfig overwrites
|
* We back up bEndpointAddress because autoconfig overwrites
|
||||||
* it with physical endpoint address.
|
* it with physical endpoint address.
|
||||||
*/
|
*/
|
||||||
bEndpointAddress = ds->bEndpointAddress;
|
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");
|
pr_vdebug("autoconfig\n");
|
||||||
ep = usb_ep_autoconfig(func->gadget, ds);
|
ep = usb_ep_autoconfig(func->gadget, ds);
|
||||||
if (unlikely(!ep))
|
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)
|
if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
|
||||||
ds->bEndpointAddress = bEndpointAddress;
|
ds->bEndpointAddress = bEndpointAddress;
|
||||||
|
/*
|
||||||
|
* Restore wMaxPacketSize which was potentially
|
||||||
|
* overwritten by autoconfig.
|
||||||
|
*/
|
||||||
|
ds->wMaxPacketSize = wMaxPacketSize;
|
||||||
}
|
}
|
||||||
ffs_dump_mem(": Rewritten ep desc", ds, ds->bLength);
|
ffs_dump_mem(": Rewritten ep desc", ds, ds->bLength);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user