Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e42bd6a5 authored by Igor Kotrasinski's avatar Igor Kotrasinski Committed by Felipe Balbi
Browse files

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: default avatarIgor Kotrasinski <i.kotrasinsk@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 5dda5be9
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -1385,12 +1385,15 @@ static int transfer(struct dummy_hcd *dum_hcd, struct urb *urb,
			if (len == 0)
				break;

			/* use an extra pass for the final short packet */
			if (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);
				len -= len % ep->ep.maxpacket;
			} else {
				is_short = 1;
			}
			is_short = (len % ep->ep.maxpacket) != 0;

			len = dummy_perform_transfer(urb, req, len);