From: Alexandre Bailon Date: Mon, 31 Aug 2015 07:00:16 +0000 (+0200) Subject: greybus: es1/es2: set transfer flag to send a zero-length packet X-Git-Tag: v4.9-rc1~119^2~378^2~21^2~1254 X-Git-Url: http://git.cascardo.info/?a=commitdiff_plain;h=977e209ab41073def3cf0e1034c429a832ba54df;p=cascardo%2Flinux.git greybus: es1/es2: set transfer flag to send a zero-length packet Greybus messages with a multiple size of 512B generate timeouts (any other message size doesn't). 512B is exactly the packet size of a bulk out endpoint. Hence USB device is expecting a short (< 512B) or zero-length packet to finish the transfer, which is never generated and causes the timeout. Set the transfer flag to send a zero-length packet in this situation. Signed-off-by: Alexandre Bailon Reviewed-by: Patrick Titiano Reviewed-by: Johan Hovold Signed-off-by: Johan Hovold --- diff --git a/drivers/staging/greybus/es1.c b/drivers/staging/greybus/es1.c index 2aa271751ac1..ddc26dec3150 100644 --- a/drivers/staging/greybus/es1.c +++ b/drivers/staging/greybus/es1.c @@ -216,6 +216,7 @@ static int message_send(struct greybus_host_device *hd, u16 cport_id, usb_sndbulkpipe(udev, es1->cport_out_endpoint), message->buffer, buffer_size, cport_out_callback, message); + urb->transfer_flags |= URB_ZERO_PACKET; gb_connection_push_timestamp(message->operation->connection); retval = usb_submit_urb(urb, gfp_mask); if (retval) { diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c index 008685b2b15b..295cc6839551 100644 --- a/drivers/staging/greybus/es2.c +++ b/drivers/staging/greybus/es2.c @@ -312,6 +312,7 @@ static int message_send(struct greybus_host_device *hd, u16 cport_id, es1->cport_out[bulk_ep_set].endpoint), message->buffer, buffer_size, cport_out_callback, message); + urb->transfer_flags |= URB_ZERO_PACKET; gb_connection_push_timestamp(message->operation->connection); retval = usb_submit_urb(urb, gfp_mask); if (retval) {