summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-11-29 14:56:42 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-11-29 14:56:42 +0100
commit2eecc3c4c63955c3d5860b44422dccd229ec7043 (patch)
treea3256780705eb959d17dd4c4a622a89f1001d90d /drivers/usb
parent9a315efc7e2646e75e8cc9d1d79e508589ad2202 (diff)
parentb271e8fa67a6d9c4600274a25636cfe00fdd1b68 (diff)
Merge tag 'tegra-l4t-r21.6' into toradex_tk1_l4t_r21.6
Merge NVIDIA's latest Linux for Tegra aka L4T R21.6 Linux kernel changes from git://nv-tegra.nvidia.com/linux-3.10.git commit: b271e8fa67a6d9c4600274a25636cfe00fdd1b68 Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Dominik Sliwa <dominik.sliwa@toradex.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/tegra_udc.c16
-rw-r--r--drivers/usb/gadget/tegra_udc.h4
2 files changed, 18 insertions, 2 deletions
diff --git a/drivers/usb/gadget/tegra_udc.c b/drivers/usb/gadget/tegra_udc.c
index 0fd68f7bfb4b..b4141f4c5d06 100644
--- a/drivers/usb/gadget/tegra_udc.c
+++ b/drivers/usb/gadget/tegra_udc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2012-2016, NVIDIA CORPORATION. All rights reserved.
*
* Description:
* High-speed USB device controller driver.
@@ -911,6 +911,20 @@ static struct ep_td_struct *tegra_build_dtd(struct tegra_req *req,
dtd->size_ioc_sts = cpu_to_le32(swap_temp);
+ /* The short packet happened with ISO multi-transaction */
+ if (req->ep->ep.mult && ((req->ep->desc->bmAttributes &
+ 0x3) == USB_ENDPOINT_XFER_ISOC)) {
+ if (*length <= req->ep->ep.maxpacket) {
+ swap_temp = cpu_to_le32(dtd->size_ioc_sts);
+ swap_temp |= DTD_MULTO_MULTIPLIER_1;
+ dtd->size_ioc_sts = cpu_to_le32(swap_temp);
+ } else if (*length <= (req->ep->ep.maxpacket *
+ req->ep->ep.mult)) {
+ swap_temp = cpu_to_le32(dtd->size_ioc_sts);
+ swap_temp |= DTD_MULTO_MULTIPLIER_2;
+ dtd->size_ioc_sts = cpu_to_le32(swap_temp);
+ }
+ }
mb();
VDBG("length = %d address= 0x%x", *length, (int)*dma);
diff --git a/drivers/usb/gadget/tegra_udc.h b/drivers/usb/gadget/tegra_udc.h
index a7fe163785ff..67484720bc31 100644
--- a/drivers/usb/gadget/tegra_udc.h
+++ b/drivers/usb/gadget/tegra_udc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2012-2016, NVIDIA CORPORATION. All rights reserved.
*
* Description:
* High-speed USB device controller driver.
@@ -321,6 +321,8 @@
/* Endpoint Transfer Descriptor bit Masks */
#define DTD_NEXT_TERMINATE 0x00000001
+#define DTD_MULTO_MULTIPLIER_1 0x00000400
+#define DTD_MULTO_MULTIPLIER_2 0x00000800
#define DTD_IOC 0x00008000
#define DTD_STATUS_ACTIVE 0x00000080
#define DTD_STATUS_HALTED 0x00000040