diff options
Diffstat (limited to 'drivers/usb/musb/musb_host.c')
-rw-r--r-- | drivers/usb/musb/musb_host.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 8914dec49f01..9d3044bdebe5 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c | |||
@@ -1232,7 +1232,6 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
1232 | void __iomem *mbase = musb->mregs; | 1232 | void __iomem *mbase = musb->mregs; |
1233 | struct dma_channel *dma; | 1233 | struct dma_channel *dma; |
1234 | bool transfer_pending = false; | 1234 | bool transfer_pending = false; |
1235 | static bool use_sg; | ||
1236 | 1235 | ||
1237 | musb_ep_select(mbase, epnum); | 1236 | musb_ep_select(mbase, epnum); |
1238 | tx_csr = musb_readw(epio, MUSB_TXCSR); | 1237 | tx_csr = musb_readw(epio, MUSB_TXCSR); |
@@ -1463,9 +1462,9 @@ done: | |||
1463 | * NULL. | 1462 | * NULL. |
1464 | */ | 1463 | */ |
1465 | if (!urb->transfer_buffer) | 1464 | if (!urb->transfer_buffer) |
1466 | use_sg = true; | 1465 | qh->use_sg = true; |
1467 | 1466 | ||
1468 | if (use_sg) { | 1467 | if (qh->use_sg) { |
1469 | /* sg_miter_start is already done in musb_ep_program */ | 1468 | /* sg_miter_start is already done in musb_ep_program */ |
1470 | if (!sg_miter_next(&qh->sg_miter)) { | 1469 | if (!sg_miter_next(&qh->sg_miter)) { |
1471 | dev_err(musb->controller, "error: sg list empty\n"); | 1470 | dev_err(musb->controller, "error: sg list empty\n"); |
@@ -1484,9 +1483,9 @@ done: | |||
1484 | 1483 | ||
1485 | qh->segsize = length; | 1484 | qh->segsize = length; |
1486 | 1485 | ||
1487 | if (use_sg) { | 1486 | if (qh->use_sg) { |
1488 | if (offset + length >= urb->transfer_buffer_length) | 1487 | if (offset + length >= urb->transfer_buffer_length) |
1489 | use_sg = false; | 1488 | qh->use_sg = false; |
1490 | } | 1489 | } |
1491 | 1490 | ||
1492 | musb_ep_select(mbase, epnum); | 1491 | musb_ep_select(mbase, epnum); |
@@ -1552,7 +1551,6 @@ void musb_host_rx(struct musb *musb, u8 epnum) | |||
1552 | bool done = false; | 1551 | bool done = false; |
1553 | u32 status; | 1552 | u32 status; |
1554 | struct dma_channel *dma; | 1553 | struct dma_channel *dma; |
1555 | static bool use_sg; | ||
1556 | unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG; | 1554 | unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG; |
1557 | 1555 | ||
1558 | musb_ep_select(mbase, epnum); | 1556 | musb_ep_select(mbase, epnum); |
@@ -1878,12 +1876,12 @@ void musb_host_rx(struct musb *musb, u8 epnum) | |||
1878 | * NULL. | 1876 | * NULL. |
1879 | */ | 1877 | */ |
1880 | if (!urb->transfer_buffer) { | 1878 | if (!urb->transfer_buffer) { |
1881 | use_sg = true; | 1879 | qh->use_sg = true; |
1882 | sg_miter_start(&qh->sg_miter, urb->sg, 1, | 1880 | sg_miter_start(&qh->sg_miter, urb->sg, 1, |
1883 | sg_flags); | 1881 | sg_flags); |
1884 | } | 1882 | } |
1885 | 1883 | ||
1886 | if (use_sg) { | 1884 | if (qh->use_sg) { |
1887 | if (!sg_miter_next(&qh->sg_miter)) { | 1885 | if (!sg_miter_next(&qh->sg_miter)) { |
1888 | dev_err(musb->controller, "error: sg list empty\n"); | 1886 | dev_err(musb->controller, "error: sg list empty\n"); |
1889 | sg_miter_stop(&qh->sg_miter); | 1887 | sg_miter_stop(&qh->sg_miter); |
@@ -1913,8 +1911,8 @@ finish: | |||
1913 | urb->actual_length += xfer_len; | 1911 | urb->actual_length += xfer_len; |
1914 | qh->offset += xfer_len; | 1912 | qh->offset += xfer_len; |
1915 | if (done) { | 1913 | if (done) { |
1916 | if (use_sg) | 1914 | if (qh->use_sg) |
1917 | use_sg = false; | 1915 | qh->use_sg = false; |
1918 | 1916 | ||
1919 | if (urb->status == -EINPROGRESS) | 1917 | if (urb->status == -EINPROGRESS) |
1920 | urb->status = status; | 1918 | urb->status = status; |