diff options
| author | Dave Airlie <airlied@redhat.com> | 2020-07-24 08:28:09 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2020-07-24 08:48:05 +1000 | 
| commit | 41206a073ceebc517245677a19f52ba6379b33a9 (patch) | |
| tree | 2fc35aac6abe32b99058ad55b0fc6e4d449d1056 /drivers/spi/spi-fsl-dspi.c | |
| parent | 206739119508d5ab4b42ab480ff61a7e6cd72d7c (diff) | |
| parent | ba47d845d715a010f7b51f6f89bae32845e6acb7 (diff) | |
Merge v5.8-rc6 into drm-next
I've got a silent conflict + two trees based on fixes to merge.
Fixes a silent merge with amdgpu
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/spi/spi-fsl-dspi.c')
| -rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 47 | 
1 files changed, 26 insertions, 21 deletions
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index a35faced0456..91c6affe139c 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -588,14 +588,14 @@ static void dspi_release_dma(struct fsl_dspi *dspi)  		return;  	if (dma->chan_tx) { -		dma_unmap_single(dma->chan_tx->device->dev, dma->tx_dma_phys, -				 dma_bufsize, DMA_TO_DEVICE); +		dma_free_coherent(dma->chan_tx->device->dev, dma_bufsize, +				  dma->tx_dma_buf, dma->tx_dma_phys);  		dma_release_channel(dma->chan_tx);  	}  	if (dma->chan_rx) { -		dma_unmap_single(dma->chan_rx->device->dev, dma->rx_dma_phys, -				 dma_bufsize, DMA_FROM_DEVICE); +		dma_free_coherent(dma->chan_rx->device->dev, dma_bufsize, +				  dma->rx_dma_buf, dma->rx_dma_phys);  		dma_release_channel(dma->chan_rx);  	}  } @@ -1109,6 +1109,8 @@ static int dspi_suspend(struct device *dev)  	struct spi_controller *ctlr = dev_get_drvdata(dev);  	struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); +	if (dspi->irq) +		disable_irq(dspi->irq);  	spi_controller_suspend(ctlr);  	clk_disable_unprepare(dspi->clk); @@ -1129,6 +1131,8 @@ static int dspi_resume(struct device *dev)  	if (ret)  		return ret;  	spi_controller_resume(ctlr); +	if (dspi->irq) +		enable_irq(dspi->irq);  	return 0;  } @@ -1385,22 +1389,22 @@ static int dspi_probe(struct platform_device *pdev)  		goto poll_mode;  	} -	ret = devm_request_irq(&pdev->dev, dspi->irq, dspi_interrupt, -			       IRQF_SHARED, pdev->name, dspi); +	init_completion(&dspi->xfer_done); + +	ret = request_threaded_irq(dspi->irq, dspi_interrupt, NULL, +				   IRQF_SHARED, pdev->name, dspi);  	if (ret < 0) {  		dev_err(&pdev->dev, "Unable to attach DSPI interrupt\n");  		goto out_clk_put;  	} -	init_completion(&dspi->xfer_done); -  poll_mode:  	if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) {  		ret = dspi_request_dma(dspi, res->start);  		if (ret < 0) {  			dev_err(&pdev->dev, "can't get dma channels\n"); -			goto out_clk_put; +			goto out_free_irq;  		}  	} @@ -1415,11 +1419,14 @@ poll_mode:  	ret = spi_register_controller(ctlr);  	if (ret != 0) {  		dev_err(&pdev->dev, "Problem registering DSPI ctlr\n"); -		goto out_clk_put; +		goto out_free_irq;  	}  	return ret; +out_free_irq: +	if (dspi->irq) +		free_irq(dspi->irq, dspi);  out_clk_put:  	clk_disable_unprepare(dspi->clk);  out_ctlr_put: @@ -1434,18 +1441,8 @@ static int dspi_remove(struct platform_device *pdev)  	struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);  	/* Disconnect from the SPI framework */ -	dspi_release_dma(dspi); -	clk_disable_unprepare(dspi->clk);  	spi_unregister_controller(dspi->ctlr); -	return 0; -} - -static void dspi_shutdown(struct platform_device *pdev) -{ -	struct spi_controller *ctlr = platform_get_drvdata(pdev); -	struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); -  	/* Disable RX and TX */  	regmap_update_bits(dspi->regmap, SPI_MCR,  			   SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF, @@ -1455,8 +1452,16 @@ static void dspi_shutdown(struct platform_device *pdev)  	regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT);  	dspi_release_dma(dspi); +	if (dspi->irq) +		free_irq(dspi->irq, dspi);  	clk_disable_unprepare(dspi->clk); -	spi_unregister_controller(dspi->ctlr); + +	return 0; +} + +static void dspi_shutdown(struct platform_device *pdev) +{ +	dspi_remove(pdev);  }  static struct platform_driver fsl_dspi_driver = {  | 
