usb: gadget: dummy_hcd: fix rescan logic for transfer
transfer() schedules a rescan for transfers larger than maxpacket, which is wrong for transfers that are multiples of maxpacket. Rewrite to fix and clarify packet multiple / remainder transfer logic. Signed-off-by: Igor Kotrasinski <i.kotrasinsk@samsung.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
5dda5be9d5
commit
e42bd6a54b
|
@ -1385,12 +1385,15 @@ top:
|
|||
if (len == 0)
|
||||
break;
|
||||
|
||||
/* use an extra pass for the final short packet */
|
||||
if (len > ep->ep.maxpacket) {
|
||||
rescan = 1;
|
||||
len -= (len % ep->ep.maxpacket);
|
||||
/* send multiple of maxpacket first, then remainder */
|
||||
if (len >= ep->ep.maxpacket) {
|
||||
is_short = 0;
|
||||
if (len % ep->ep.maxpacket)
|
||||
rescan = 1;
|
||||
len -= len % ep->ep.maxpacket;
|
||||
} else {
|
||||
is_short = 1;
|
||||
}
|
||||
is_short = (len % ep->ep.maxpacket) != 0;
|
||||
|
||||
len = dummy_perform_transfer(urb, req, len);
|
||||
|
||||
|
|
Loading…
Reference in a new issue