diff options
| author | David S. Miller <davem@davemloft.net> | 2017-04-06 07:25:07 -0700 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2017-04-06 08:24:51 -0700 |
| commit | 6f14f443d3e773439fb9cc6f2685ba90d5d026c5 (patch) | |
| tree | d45c11bba3458a805c4ac766ac85ebcf3c00b1eb /drivers/usb/musb/musb_cppi41.c | |
| parent | faeeb317a5615076dff1ff44b51e862e6064dbd0 (diff) | |
| parent | ea6b1720ce25f92f7a17b2e0c2b653d20773d10a (diff) | |
| download | talos-op-linux-6f14f443d3e773439fb9cc6f2685ba90d5d026c5.tar.gz talos-op-linux-6f14f443d3e773439fb9cc6f2685ba90d5d026c5.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Mostly simple cases of overlapping changes (adding code nearby,
a function whose name changes, for example).
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/usb/musb/musb_cppi41.c')
| -rw-r--r-- | drivers/usb/musb/musb_cppi41.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c index 00e272bfee39..355655f8a3fb 100644 --- a/drivers/usb/musb/musb_cppi41.c +++ b/drivers/usb/musb/musb_cppi41.c @@ -238,8 +238,27 @@ static void cppi41_dma_callback(void *private_data, transferred < cppi41_channel->packet_sz) cppi41_channel->prog_len = 0; - if (cppi41_channel->is_tx) - empty = musb_is_tx_fifo_empty(hw_ep); + if (cppi41_channel->is_tx) { + u8 type; + + if (is_host_active(musb)) + type = hw_ep->out_qh->type; + else + type = hw_ep->ep_in.type; + + if (type == USB_ENDPOINT_XFER_ISOC) + /* + * Don't use the early-TX-interrupt workaround below + * for Isoch transfter. Since Isoch are periodic + * transfer, by the time the next transfer is + * scheduled, the current one should be done already. + * + * This avoids audio playback underrun issue. + */ + empty = true; + else + empty = musb_is_tx_fifo_empty(hw_ep); + } if (!cppi41_channel->is_tx || empty) { cppi41_trans_done(cppi41_channel); |

