serial: 8250_dma: power off device after TX is done
When any 8250 based driver sets up DMA and has UART_CAP_RPM capability enabled the device is left powered on after transfer is done. We need to schedule a device suspend operation when DMA completes the transfer. The patch is based on the work done by the reporter. Reported-by: Huiquan Zhong <huiquan.zhong@intel.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7d4e00c625
commit
5fe8667484
|
@ -72,10 +72,15 @@ int serial8250_tx_dma(struct uart_8250_port *p)
|
|||
struct dma_async_tx_descriptor *desc;
|
||||
int ret;
|
||||
|
||||
if (uart_tx_stopped(&p->port) || dma->tx_running ||
|
||||
uart_circ_empty(xmit))
|
||||
if (dma->tx_running)
|
||||
return 0;
|
||||
|
||||
if (uart_tx_stopped(&p->port) || uart_circ_empty(xmit)) {
|
||||
/* We have been called from __dma_tx_complete() */
|
||||
serial8250_rpm_put_tx(p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
dma->tx_size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
|
||||
|
||||
desc = dmaengine_prep_slave_single(dma->txchan,
|
||||
|
|
Loading…
Reference in New Issue