From: Stephen Warren Date: Tue, 1 Jul 2014 17:41:14 +0000 (-0600) Subject: usb: ci_udc: don't assume QTDs are adjacent when transmitting ZLPs X-Git-Tag: v2014.07-rc4~7 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8d7c39d3e8ad43dab3158220f3347186e6f1aa66;p=oweals%2Fu-boot.git usb: ci_udc: don't assume QTDs are adjacent when transmitting ZLPs Fix ci_ep_submit_next_request()'s ZLP transmission code to explicitly call ci_get_qtd() to find the address of the other QTD to use. This will allow us to correctly align each QTD individually in the future, which may involve leaving a gap between the QTDs. Signed-off-by: Stephen Warren --- diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c index 8ba604841c..4115cd5dab 100644 --- a/drivers/usb/gadget/ci_udc.c +++ b/drivers/usb/gadget/ci_udc.c @@ -404,10 +404,11 @@ static void ci_ep_submit_next_request(struct ci_ep *ci_ep) * only 1 is used at a time since either an IN or an OUT but * not both is queued. For an IN transaction, item currently * points at the second of these items, so we know that we - * can use (item - 1) to transmit the extra zero-length packet + * can use the other to transmit the extra zero-length packet. */ - item->next = (unsigned)(item - 1); - item--; + struct ept_queue_item *other_item = ci_get_qtd(num, 0); + item->next = (unsigned)other_item; + item = other_item; item->info = INFO_ACTIVE; }