Skip to content

Commit b455d06

Browse files
Fabrice Gasnierjic23
authored andcommitted
iio: adc: stm32-dfsdm: fix device used to request dma
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 71723a9 ("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: eca9498 ("IIO: ADC: add stm32 DFSDM support for PDM microphone") Signed-off-by: Fabrice Gasnier <[email protected]> Cc: <[email protected]> Signed-off-by: Jonathan Cameron <[email protected]>
1 parent 52cd91c commit b455d06

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

drivers/iio/adc/stm32-dfsdm-adc.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ enum sd_converter_type {
6262

6363
struct stm32_dfsdm_dev_data {
6464
int type;
65-
int (*init)(struct iio_dev *indio_dev);
65+
int (*init)(struct device *dev, struct iio_dev *indio_dev);
6666
unsigned int num_channels;
6767
const struct regmap_config *regmap_cfg;
6868
};
@@ -1365,11 +1365,12 @@ static void stm32_dfsdm_dma_release(struct iio_dev *indio_dev)
13651365
}
13661366
}
13671367

1368-
static int stm32_dfsdm_dma_request(struct iio_dev *indio_dev)
1368+
static int stm32_dfsdm_dma_request(struct device *dev,
1369+
struct iio_dev *indio_dev)
13691370
{
13701371
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
13711372

1372-
adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
1373+
adc->dma_chan = dma_request_chan(dev, "rx");
13731374
if (IS_ERR(adc->dma_chan)) {
13741375
int ret = PTR_ERR(adc->dma_chan);
13751376

@@ -1425,7 +1426,7 @@ static int stm32_dfsdm_adc_chan_init_one(struct iio_dev *indio_dev,
14251426
&adc->dfsdm->ch_list[ch->channel]);
14261427
}
14271428

1428-
static int stm32_dfsdm_audio_init(struct iio_dev *indio_dev)
1429+
static int stm32_dfsdm_audio_init(struct device *dev, struct iio_dev *indio_dev)
14291430
{
14301431
struct iio_chan_spec *ch;
14311432
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
@@ -1452,10 +1453,10 @@ static int stm32_dfsdm_audio_init(struct iio_dev *indio_dev)
14521453
indio_dev->num_channels = 1;
14531454
indio_dev->channels = ch;
14541455

1455-
return stm32_dfsdm_dma_request(indio_dev);
1456+
return stm32_dfsdm_dma_request(dev, indio_dev);
14561457
}
14571458

1458-
static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
1459+
static int stm32_dfsdm_adc_init(struct device *dev, struct iio_dev *indio_dev)
14591460
{
14601461
struct iio_chan_spec *ch;
14611462
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
@@ -1499,17 +1500,17 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
14991500
init_completion(&adc->completion);
15001501

15011502
/* Optionally request DMA */
1502-
ret = stm32_dfsdm_dma_request(indio_dev);
1503+
ret = stm32_dfsdm_dma_request(dev, indio_dev);
15031504
if (ret) {
15041505
if (ret != -ENODEV) {
15051506
if (ret != -EPROBE_DEFER)
1506-
dev_err(&indio_dev->dev,
1507+
dev_err(dev,
15071508
"DMA channel request failed with %d\n",
15081509
ret);
15091510
return ret;
15101511
}
15111512

1512-
dev_dbg(&indio_dev->dev, "No DMA support\n");
1513+
dev_dbg(dev, "No DMA support\n");
15131514
return 0;
15141515
}
15151516

@@ -1622,7 +1623,7 @@ static int stm32_dfsdm_adc_probe(struct platform_device *pdev)
16221623
adc->dfsdm->fl_list[adc->fl_id].sync_mode = val;
16231624

16241625
adc->dev_data = dev_data;
1625-
ret = dev_data->init(iio);
1626+
ret = dev_data->init(dev, iio);
16261627
if (ret < 0)
16271628
return ret;
16281629

0 commit comments

Comments
 (0)