diff options
Diffstat (limited to 'drivers/spi/spi-atmel.c')
| -rw-r--r-- | drivers/spi/spi-atmel.c | 29 | 
1 files changed, 11 insertions, 18 deletions
| diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c index 56f0ca361deb..013458cabe3c 100644 --- a/drivers/spi/spi-atmel.c +++ b/drivers/spi/spi-atmel.c @@ -514,26 +514,19 @@ static int atmel_spi_configure_dma(struct spi_master *master,  	master->dma_tx = dma_request_chan(dev, "tx");  	if (IS_ERR(master->dma_tx)) {  		err = PTR_ERR(master->dma_tx); -		if (err == -EPROBE_DEFER) { -			dev_warn(dev, "no DMA channel available at the moment\n"); -			goto error_clear; -		} -		dev_err(dev, -			"DMA TX channel not available, SPI unable to use DMA\n"); -		err = -EBUSY; +		if (err != -EPROBE_DEFER) +			dev_err(dev, "No TX DMA channel, DMA is disabled\n");  		goto error_clear;  	} -	/* -	 * No reason to check EPROBE_DEFER here since we have already requested -	 * tx channel. If it fails here, it's for another reason. -	 */ -	master->dma_rx = dma_request_slave_channel(dev, "rx"); - -	if (!master->dma_rx) { -		dev_err(dev, -			"DMA RX channel not available, SPI unable to use DMA\n"); -		err = -EBUSY; +	master->dma_rx = dma_request_chan(dev, "rx"); +	if (IS_ERR(master->dma_rx)) { +		err = PTR_ERR(master->dma_rx); +		/* +		 * No reason to check EPROBE_DEFER here since we have already +		 * requested tx channel. +		 */ +		dev_err(dev, "No RX DMA channel, DMA is disabled\n");  		goto error;  	} @@ -548,7 +541,7 @@ static int atmel_spi_configure_dma(struct spi_master *master,  	return 0;  error: -	if (master->dma_rx) +	if (!IS_ERR(master->dma_rx))  		dma_release_channel(master->dma_rx);  	if (!IS_ERR(master->dma_tx))  		dma_release_channel(master->dma_tx); | 
