aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiebing Li <jiebing.li@intel.com>2015-03-10 11:24:00 +0800
committerAmit Pundir <amit.pundir@linaro.org>2017-05-01 15:19:51 +0530
commit09ebc323c3b203f96191a5d928dde07be3fc966a (patch)
tree55d2f0f7f9affd3bb173099e61d5a982637a34e9
parent53b4f1750fb2ab81bb2631c5f0843b44e429d752 (diff)
ANDROID: usb: gadget: fix MTP enumeration issue under super speed mode
MTP function doesn't show as a drive in Windows when the device is connected to PC's USB3 port, because device fails to respond ACK to BULK OUT transfer request. This patch modifies MTP OUT request length as multiple of MaxPacketSize per databook requirement in order to fix this issue. Patchset: mtp Change-Id: I090d7880ff00c499dc5ba7fd644b1fe7cd87fcb5 Signed-off-by: Jiebing Li <jiebing.li@intel.com> Signed-off-by: Wang, Yu <yu.y.wang@intel.com> Signed-off-by: Russ Weight <russell.h.weight@intel.com>
-rw-r--r--drivers/usb/gadget/function/f_mtp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/usb/gadget/function/f_mtp.c b/drivers/usb/gadget/function/f_mtp.c
index d8b69af6e335..b37cc8d87ca4 100644
--- a/drivers/usb/gadget/function/f_mtp.c
+++ b/drivers/usb/gadget/function/f_mtp.c
@@ -540,10 +540,12 @@ static ssize_t mtp_read(struct file *fp, char __user *buf,
ssize_t r = count;
unsigned xfer;
int ret = 0;
+ size_t len;
DBG(cdev, "mtp_read(%zu)\n", count);
- if (count > MTP_BULK_BUFFER_SIZE)
+ len = usb_ep_align_maybe(cdev->gadget, dev->ep_out, count);
+ if (len > MTP_BULK_BUFFER_SIZE)
return -EINVAL;
/* we will block until we're online */
@@ -567,7 +569,7 @@ static ssize_t mtp_read(struct file *fp, char __user *buf,
requeue_req:
/* queue a request */
req = dev->rx_req[0];
- req->length = count;
+ req->length = len;
dev->rx_done = 0;
ret = usb_ep_queue(dev->ep_out, req, GFP_KERNEL);
if (ret < 0) {