Thread (8 messages) 8 messages, 4 authors, 2020-01-11

Re: [Linux-stm32] [PATCH v2] iio: adc: stm32-dfsdm: Use dma_request_chan() instead dma_request_slave_channel()

flat view

From: Olivier MOYSAN <hidden>
Date: 2020-01-08 10:12:46
Also in: linux-iio, lkml

Acked-by: Olivier Moysan <redacted>

On 1/7/20 12:45 PM, Peter Ujfalusi wrote:
quoted hunk ↗ jump to hunk
dma_request_slave_channel() is a wrapper on top of dma_request_chan()
eating up the error code.

By using dma_request_chan() directly the driver can support deferred
probing against DMA.

Signed-off-by: Peter Ujfalusi <redacted>
---
Hi,

Changes since v1:
- Fall back to IRQ mode for ADC only in case of ENODEV

Regards,
Peter

  drivers/iio/adc/stm32-dfsdm-adc.c | 21 +++++++++++++++++----
  1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
index e493242c266e..74a2211bdff4 100644
--- a/drivers/iio/adc/stm32-dfsdm-adc.c
+++ b/drivers/iio/adc/stm32-dfsdm-adc.c
@@ -1383,9 +1383,13 @@ static int stm32_dfsdm_dma_request(struct iio_dev *indio_dev)
  {
  	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
  
-	adc->dma_chan = dma_request_slave_channel(&indio_dev->dev, "rx");
-	if (!adc->dma_chan)
-		return -EINVAL;
+	adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
+	if (IS_ERR(adc->dma_chan)) {
+		int ret = PTR_ERR(adc->dma_chan);
+
+		adc->dma_chan = NULL;
+		return ret;
+	}
  
  	adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
  					 DFSDM_DMA_BUFFER_SIZE,
@@ -1509,7 +1513,16 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
  	init_completion(&adc->completion);
  
  	/* Optionally request DMA */
-	if (stm32_dfsdm_dma_request(indio_dev)) {
+	ret = stm32_dfsdm_dma_request(indio_dev);
+	if (ret) {
+		if (ret != -ENODEV) {
+			if (ret != -EPROBE_DEFER)
+				dev_err(&indio_dev->dev,
+					"DMA channel request failed with %d\n",
+					ret);
+			return ret;
+		}
+
  		dev_dbg(&indio_dev->dev, "No DMA support\n");
  		return 0;
  	}
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help