diff options
Diffstat (limited to 'drivers/tty/serial/msm_serial.c')
| -rw-r--r-- | drivers/tty/serial/msm_serial.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c index 489d19274f9a..23c94b927776 100644 --- a/drivers/tty/serial/msm_serial.c +++ b/drivers/tty/serial/msm_serial.c @@ -9,6 +9,7 @@  #include <linux/kernel.h>  #include <linux/atomic.h> +#include <linux/dma/qcom_adm.h>  #include <linux/dma-mapping.h>  #include <linux/dmaengine.h>  #include <linux/module.h> @@ -290,6 +291,7 @@ static void msm_request_tx_dma(struct msm_port *msm_port, resource_size_t base)  {  	struct device *dev = msm_port->uart.dev;  	struct dma_slave_config conf; +	struct qcom_adm_peripheral_config periph_conf = {};  	struct msm_dma *dma;  	u32 crci = 0;  	int ret; @@ -308,7 +310,11 @@ static void msm_request_tx_dma(struct msm_port *msm_port, resource_size_t base)  	conf.device_fc = true;  	conf.dst_addr = base + UARTDM_TF;  	conf.dst_maxburst = UARTDM_BURST_SIZE; -	conf.slave_id = crci; +	if (crci) { +		conf.peripheral_config = &periph_conf; +		conf.peripheral_size = sizeof(periph_conf); +		periph_conf.crci = crci; +	}  	ret = dmaengine_slave_config(dma->chan, &conf);  	if (ret) @@ -333,6 +339,7 @@ static void msm_request_rx_dma(struct msm_port *msm_port, resource_size_t base)  {  	struct device *dev = msm_port->uart.dev;  	struct dma_slave_config conf; +	struct qcom_adm_peripheral_config periph_conf = {};  	struct msm_dma *dma;  	u32 crci = 0;  	int ret; @@ -355,7 +362,11 @@ static void msm_request_rx_dma(struct msm_port *msm_port, resource_size_t base)  	conf.device_fc = true;  	conf.src_addr = base + UARTDM_RF;  	conf.src_maxburst = UARTDM_BURST_SIZE; -	conf.slave_id = crci; +	if (crci) { +		conf.peripheral_config = &periph_conf; +		conf.peripheral_size = sizeof(periph_conf); +		periph_conf.crci = crci; +	}  	ret = dmaengine_slave_config(dma->chan, &conf);  	if (ret)  |