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 <abailon@baylibre.com>
Reviewed-by: Patrick Titiano <ptitiano@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
This commit is contained in:
Alexandre Bailon 2015-08-31 09:00:16 +02:00 committed by Johan Hovold
parent 98676ca836
commit 977e209ab4
2 changed files with 2 additions and 0 deletions

View File

@ -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) {

View File

@ -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) {