iio: adc: stm32-adc: fix device used to request dma
authorFabrice Gasnier <fabrice.gasnier@st.com>
Thu, 30 Apr 2020 09:28:45 +0000 (11:28 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 3 May 2020 13:15:38 +0000 (14:15 +0100)
DMA channel request should use device struct from platform device struct.
Currently it's using iio device struct. But at this stage when probing,
device struct isn't yet registered (e.g. device_register is done in
iio_device_register). Since commit 71723a96b8b1 ("dmaengine: Create
symlinks between DMA channels and slaves"), a warning message is printed
as the links in sysfs can't be created, due to device isn't yet registered:
- Cannot create DMA slave symlink
- Cannot create DMA dma:rx symlink

Fix this by using device struct from platform device to request dma chan.

Fixes: 2763ea0585c99 ("iio: adc: stm32: add optional dma support")

Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/stm32-adc.c

index ae622ee..dfc3a30 100644 (file)
@@ -1812,18 +1812,18 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
        return 0;
 }
 
-static int stm32_adc_dma_request(struct iio_dev *indio_dev)
+static int stm32_adc_dma_request(struct device *dev, struct iio_dev *indio_dev)
 {
        struct stm32_adc *adc = iio_priv(indio_dev);
        struct dma_slave_config config;
        int ret;
 
-       adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
+       adc->dma_chan = dma_request_chan(dev, "rx");
        if (IS_ERR(adc->dma_chan)) {
                ret = PTR_ERR(adc->dma_chan);
                if (ret != -ENODEV) {
                        if (ret != -EPROBE_DEFER)
-                               dev_err(&indio_dev->dev,
+                               dev_err(dev,
                                        "DMA channel request failed with %d\n",
                                        ret);
                        return ret;
@@ -1930,7 +1930,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
        if (ret < 0)
                return ret;
 
-       ret = stm32_adc_dma_request(indio_dev);
+       ret = stm32_adc_dma_request(dev, indio_dev);
        if (ret < 0)
                return ret;