aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-06-09 00:27:51 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-06-09 00:27:51 -0400
commit141dc40ee343ab532717b235dd645e2d25ae3092 (patch)
tree2289e5d1ec20df5e465b9b629e291877f4d70485 /drivers/usb/musb
parent1c83d94ff646001f9ee83f0330a3933b55660927 (diff)
parent317ddd256b9c24b0d78fa8018f80f1e495481a10 (diff)
Merge 3.10-rc5 into usb-next
We need the changes in this branch. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/musb')
-rw-r--r--drivers/usb/musb/musb_host.c18
-rw-r--r--drivers/usb/musb/musb_host.h1
2 files changed, 9 insertions, 10 deletions
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 85ed11e04f35..4211e5540945 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -1231,7 +1231,6 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1231 void __iomem *mbase = musb->mregs; 1231 void __iomem *mbase = musb->mregs;
1232 struct dma_channel *dma; 1232 struct dma_channel *dma;
1233 bool transfer_pending = false; 1233 bool transfer_pending = false;
1234 static bool use_sg;
1235 1234
1236 musb_ep_select(mbase, epnum); 1235 musb_ep_select(mbase, epnum);
1237 tx_csr = musb_readw(epio, MUSB_TXCSR); 1236 tx_csr = musb_readw(epio, MUSB_TXCSR);
@@ -1462,9 +1461,9 @@ done:
1462 * NULL. 1461 * NULL.
1463 */ 1462 */
1464 if (!urb->transfer_buffer) 1463 if (!urb->transfer_buffer)
1465 use_sg = true; 1464 qh->use_sg = true;
1466 1465
1467 if (use_sg) { 1466 if (qh->use_sg) {
1468 /* sg_miter_start is already done in musb_ep_program */ 1467 /* sg_miter_start is already done in musb_ep_program */
1469 if (!sg_miter_next(&qh->sg_miter)) { 1468 if (!sg_miter_next(&qh->sg_miter)) {
1470 dev_err(musb->controller, "error: sg list empty\n"); 1469 dev_err(musb->controller, "error: sg list empty\n");
@@ -1483,9 +1482,9 @@ done:
1483 1482
1484 qh->segsize = length; 1483 qh->segsize = length;
1485 1484
1486 if (use_sg) { 1485 if (qh->use_sg) {
1487 if (offset + length >= urb->transfer_buffer_length) 1486 if (offset + length >= urb->transfer_buffer_length)
1488 use_sg = false; 1487 qh->use_sg = false;
1489 } 1488 }
1490 1489
1491 musb_ep_select(mbase, epnum); 1490 musb_ep_select(mbase, epnum);
@@ -1551,7 +1550,6 @@ void musb_host_rx(struct musb *musb, u8 epnum)
1551 bool done = false; 1550 bool done = false;
1552 u32 status; 1551 u32 status;
1553 struct dma_channel *dma; 1552 struct dma_channel *dma;
1554 static bool use_sg;
1555 unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG; 1553 unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG;
1556 1554
1557 musb_ep_select(mbase, epnum); 1555 musb_ep_select(mbase, epnum);
@@ -1877,12 +1875,12 @@ void musb_host_rx(struct musb *musb, u8 epnum)
1877 * NULL. 1875 * NULL.
1878 */ 1876 */
1879 if (!urb->transfer_buffer) { 1877 if (!urb->transfer_buffer) {
1880 use_sg = true; 1878 qh->use_sg = true;
1881 sg_miter_start(&qh->sg_miter, urb->sg, 1, 1879 sg_miter_start(&qh->sg_miter, urb->sg, 1,
1882 sg_flags); 1880 sg_flags);
1883 } 1881 }
1884 1882
1885 if (use_sg) { 1883 if (qh->use_sg) {
1886 if (!sg_miter_next(&qh->sg_miter)) { 1884 if (!sg_miter_next(&qh->sg_miter)) {
1887 dev_err(musb->controller, "error: sg list empty\n"); 1885 dev_err(musb->controller, "error: sg list empty\n");
1888 sg_miter_stop(&qh->sg_miter); 1886 sg_miter_stop(&qh->sg_miter);
@@ -1912,8 +1910,8 @@ finish:
1912 urb->actual_length += xfer_len; 1910 urb->actual_length += xfer_len;
1913 qh->offset += xfer_len; 1911 qh->offset += xfer_len;
1914 if (done) { 1912 if (done) {
1915 if (use_sg) 1913 if (qh->use_sg)
1916 use_sg = false; 1914 qh->use_sg = false;
1917 1915
1918 if (urb->status == -EINPROGRESS) 1916 if (urb->status == -EINPROGRESS)
1919 urb->status = status; 1917 urb->status = status;
diff --git a/drivers/usb/musb/musb_host.h b/drivers/usb/musb/musb_host.h
index 5a9c8feec10c..738f7eb60df9 100644
--- a/drivers/usb/musb/musb_host.h
+++ b/drivers/usb/musb/musb_host.h
@@ -74,6 +74,7 @@ struct musb_qh {
74 u16 frame; /* for periodic schedule */ 74 u16 frame; /* for periodic schedule */
75 unsigned iso_idx; /* in urb->iso_frame_desc[] */ 75 unsigned iso_idx; /* in urb->iso_frame_desc[] */
76 struct sg_mapping_iter sg_miter; /* for highmem in PIO mode */ 76 struct sg_mapping_iter sg_miter; /* for highmem in PIO mode */
77 bool use_sg; /* to track urb using sglist */
77}; 78};
78 79
79/* map from control or bulk queue head to the first qh on that ring */ 80/* map from control or bulk queue head to the first qh on that ring */