usb: gadget: defer setting maxpacket till ->setup()
maxpacket is set by the udc driver for ep0 very early. This value is copied by the function gadget used later for the USB_DT_DEVICE and USB_DT_DEVICE_QUALIFIER query. This seems to work fine so far. For USB3 we need set a different value here. In SS speed it is 2^x with x=9 and in HS we set something <= 64. If the UDC starts in SS and continues in HS after the cable has been plugged it will report a too small value. There setting of this value is defered and taken automaticly from the ep0 pointer where the UDC driver can update it according to the speed it detected _after_ a cable has been plugged. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
这个提交包含在:

提交者
Greg Kroah-Hartman

父节点
193ab2a607
当前提交
765f5b830e
@@ -695,6 +695,7 @@ static int gmidi_setup(struct usb_gadget *gadget,
|
||||
switch (w_value >> 8) {
|
||||
|
||||
case USB_DT_DEVICE:
|
||||
device_desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
|
||||
value = min(w_length, (u16) sizeof(device_desc));
|
||||
memcpy(req->buf, &device_desc, value);
|
||||
break;
|
||||
@@ -1249,8 +1250,6 @@ autoconf_fail:
|
||||
|
||||
dev->req->complete = gmidi_setup_complete;
|
||||
|
||||
device_desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
|
||||
|
||||
gadget->ep0->driver_data = dev;
|
||||
|
||||
INFO(dev, "%s, version: " DRIVER_VERSION "\n", longname);
|
||||
|
在新工单中引用
屏蔽一个用户