On Mon, Mar 28, 2011 at 05:06, Mike Frysinger wrote: > so in common code: > --- a/drivers/usb/musb/musb_host.c > +++ b/drivers/usb/musb/musb_host.c we also tweak musb_gadget.c in the same way for the same reason, so handling inside of channel_program() seems like the saner route. --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -380,7 +380,13 @@ static void txstate(struct musb *musb, struct musb_request *req) use_dma = use_dma && c->channel_program( musb_ep->dma, musb_ep->packet_sz, musb_ep->dma->desired_mode, - request->dma + request->actual, request_size); + request->dma + request->actual, + (musb_ep->dma->desired_mode == 0) + ? request_size + : (request_size - + (request_size % + musb_ep->packet_sz))); + if (use_dma) { if (musb_ep->dma->desired_mode == 0) { /* @@ -747,7 +753,11 @@ static void rxstate(struct musb *musb, struct musb_request *req) channel->desired_mode, request->dma + request->actual, - transfer_size); + (musb_ep->dma->desired_mode == 0) + ? transfer_size + : (transfer_size - + (transfer_size % + musb_ep->packet_sz))); } if (use_dma) -mike -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html