Skip to content

Commit abb9290

Browse files
dlechnunojsa
authored andcommitted
iio: buffer: dmaengine: add devm_iio_dmaengine_buffer_setup_with_ops()
Add a new devm_iio_dmaengine_buffer_setup_with_ops() function. This is a function only used in the ADI tree. To minimize the diff from upstream, add a new function instead of modifying the signature of devm_iio_dmaengine_buffer_setup_ext(). This duplicates a small amount of code but reducing merge conflicts is worth it. Signed-off-by: David Lechner <dlechner@baylibre.com>
1 parent e9ab3aa commit abb9290

File tree

8 files changed

+78
-29
lines changed

8 files changed

+78
-29
lines changed

drivers/iio/buffer/industrialio-buffer-dmaengine.c

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -347,14 +347,12 @@ EXPORT_SYMBOL_NS_GPL(iio_dmaengine_buffer_free, IIO_DMAENGINE_BUFFER);
347347
struct iio_buffer *iio_dmaengine_buffer_setup_ext(struct device *dev,
348348
struct iio_dev *indio_dev,
349349
const char *channel,
350-
enum iio_buffer_direction dir,
351-
const struct iio_dma_buffer_ops *ops,
352-
void *data)
350+
enum iio_buffer_direction dir)
353351
{
354352
struct iio_buffer *buffer;
355353
int ret;
356354

357-
buffer = iio_dmaengine_buffer_alloc(dev, channel, ops, data);
355+
buffer = iio_dmaengine_buffer_alloc(dev, channel, NULL, NULL);
358356
if (IS_ERR(buffer))
359357
return ERR_CAST(buffer);
360358

@@ -372,6 +370,38 @@ struct iio_buffer *iio_dmaengine_buffer_setup_ext(struct device *dev,
372370
}
373371
EXPORT_SYMBOL_NS_GPL(iio_dmaengine_buffer_setup_ext, IIO_DMAENGINE_BUFFER);
374372

373+
/*
374+
* ADI tree extension of iio_dmaengine_buffer_setup_ext() to allow passing
375+
* a custom ops structure to the buffer.
376+
*/
377+
static struct iio_buffer
378+
*iio_dmaengine_buffer_setup_with_ops(struct device *dev,
379+
struct iio_dev *indio_dev,
380+
const char *channel,
381+
enum iio_buffer_direction dir,
382+
const struct iio_dma_buffer_ops *ops,
383+
void *data)
384+
{
385+
struct iio_buffer *buffer;
386+
int ret;
387+
388+
buffer = iio_dmaengine_buffer_alloc(dev, channel, ops, data);
389+
if (IS_ERR(buffer))
390+
return ERR_CAST(buffer);
391+
392+
indio_dev->modes |= INDIO_BUFFER_HARDWARE;
393+
394+
buffer->direction = dir;
395+
396+
ret = iio_device_attach_buffer(indio_dev, buffer);
397+
if (ret) {
398+
iio_dmaengine_buffer_free(buffer);
399+
return ERR_PTR(ret);
400+
}
401+
402+
return buffer;
403+
}
404+
375405
static void __devm_iio_dmaengine_buffer_free(void *buffer)
376406
{
377407
iio_dmaengine_buffer_free(buffer);
@@ -392,14 +422,11 @@ static void __devm_iio_dmaengine_buffer_free(void *buffer)
392422
int devm_iio_dmaengine_buffer_setup_ext(struct device *dev,
393423
struct iio_dev *indio_dev,
394424
const char *channel,
395-
enum iio_buffer_direction dir,
396-
const struct iio_dma_buffer_ops *ops,
397-
void *data)
425+
enum iio_buffer_direction dir)
398426
{
399427
struct iio_buffer *buffer;
400428

401-
buffer = iio_dmaengine_buffer_setup_ext(dev, indio_dev, channel, dir,
402-
ops, data);
429+
buffer = iio_dmaengine_buffer_setup_ext(dev, indio_dev, channel, dir);
403430
if (IS_ERR(buffer))
404431
return PTR_ERR(buffer);
405432

@@ -408,6 +435,29 @@ int devm_iio_dmaengine_buffer_setup_ext(struct device *dev,
408435
}
409436
EXPORT_SYMBOL_NS_GPL(devm_iio_dmaengine_buffer_setup_ext, IIO_DMAENGINE_BUFFER);
410437

438+
/*
439+
* ADI tree extension of devm_iio_dmaengine_buffer_setup_ext() to allow passing
440+
* a custom ops structure to the buffer.
441+
*/
442+
int devm_iio_dmaengine_buffer_setup_with_ops(struct device *dev,
443+
struct iio_dev *indio_dev,
444+
const char *channel,
445+
enum iio_buffer_direction dir,
446+
const struct iio_dma_buffer_ops *ops,
447+
void *data)
448+
{
449+
struct iio_buffer *buffer;
450+
451+
buffer = iio_dmaengine_buffer_setup_with_ops(dev, indio_dev, channel,
452+
dir, ops, data);
453+
if (IS_ERR(buffer))
454+
return PTR_ERR(buffer);
455+
456+
return devm_add_action_or_reset(dev, __devm_iio_dmaengine_buffer_free,
457+
buffer);
458+
}
459+
EXPORT_SYMBOL_NS_GPL(devm_iio_dmaengine_buffer_setup_with_ops, IIO_DMAENGINE_BUFFER);
460+
411461
MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
412462
MODULE_DESCRIPTION("DMA buffer for the IIO framework");
413463
MODULE_LICENSE("GPL");

drivers/iio/dac/ad5791.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,8 +523,7 @@ static int ad5791_offload_setup(struct iio_dev *indio_dev)
523523

524524
return devm_iio_dmaengine_buffer_setup_ext(&st->spi->dev,
525525
indio_dev, "tx",
526-
IIO_BUFFER_DIRECTION_OUT,
527-
NULL, NULL);
526+
IIO_BUFFER_DIRECTION_OUT);
528527
}
529528

530529
static const struct iio_info ad5791_info = {

drivers/iio/dac/ad8460.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -913,8 +913,7 @@ static int ad8460_probe(struct spi_device *spi)
913913
indio_dev->setup_ops = &ad8460_buffer_setup_ops;
914914

915915
ret = devm_iio_dmaengine_buffer_setup_ext(dev, indio_dev, "tx",
916-
IIO_BUFFER_DIRECTION_OUT,
917-
NULL, NULL);
916+
IIO_BUFFER_DIRECTION_OUT);
918917
if (ret)
919918
return dev_err_probe(dev, ret,
920919
"Failed to get DMA buffer\n");

drivers/iio/frequency/cf_axi_dds_buffer_stream.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ static const struct iio_dma_buffer_ops dds_buffer_dma_buffer_ops = {
9999

100100
int cf_axi_dds_configure_buffer(struct iio_dev *indio_dev)
101101
{
102-
return devm_iio_dmaengine_buffer_setup_ext(indio_dev->dev.parent,
102+
return devm_iio_dmaengine_buffer_setup_with_ops(indio_dev->dev.parent,
103103
indio_dev, "tx",
104104
IIO_BUFFER_DIRECTION_OUT,
105105
&dds_buffer_dma_buffer_ops, indio_dev);

drivers/iio/frequency/m2k-dac.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ static int m2k_dac_alloc_channel(struct platform_device *pdev,
722722

723723
ret = devm_iio_dmaengine_buffer_setup_ext(indio_dev->dev.parent, indio_dev,
724724
m2k_dac_ch_dma_names[num],
725-
IIO_BUFFER_DIRECTION_OUT, NULL, NULL);
725+
IIO_BUFFER_DIRECTION_OUT);
726726
if (ret)
727727
return ret;
728728

drivers/iio/logic/m2k-logic-analyzer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ static int m2k_la_probe(struct platform_device *pdev)
11201120
indio_dev_tx->setup_ops = &m2k_la_tx_setup_ops;
11211121

11221122
ret = devm_iio_dmaengine_buffer_setup_ext(&pdev->dev, indio_dev_tx, "tx",
1123-
IIO_BUFFER_DIRECTION_OUT, NULL, NULL);
1123+
IIO_BUFFER_DIRECTION_OUT);
11241124
if (ret)
11251125
return ret;
11261126

drivers/misc/mathworks/mw_stream_iio_channel.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ static int devm_mw_stream_configure_buffer(struct iio_dev *indio_dev, enum iio_b
288288
int ret;
289289

290290
ret = devm_iio_dmaengine_buffer_setup_ext(indio_dev->dev.parent, indio_dev,
291-
mwchan->dmaname, direction, NULL, NULL);
291+
mwchan->dmaname, direction);
292292
if (ret) {
293293
if (ret == -EPROBE_DEFER)
294294
dev_info(&indio_dev->dev, "Deferring probe for DMA engine driver load\n");

include/linux/iio/buffer-dmaengine.h

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,26 @@ void iio_dmaengine_buffer_free(struct iio_buffer *buffer);
2424
struct iio_buffer *iio_dmaengine_buffer_setup_ext(struct device *dev,
2525
struct iio_dev *indio_dev,
2626
const char *channel,
27-
enum iio_buffer_direction,
28-
const struct iio_dma_buffer_ops *ops,
29-
void *data);
27+
enum iio_buffer_direction dir);
3028

31-
#define iio_dmaengine_buffer_setup(dev, indio_dev, channel) \
32-
iio_dmaengine_buffer_setup_ext(dev, indio_dev, channel, \
33-
IIO_BUFFER_DIRECTION_IN, \
34-
NULL, NULL)
29+
#define iio_dmaengine_buffer_setup(dev, indio_dev, channel) \
30+
iio_dmaengine_buffer_setup_ext(dev, indio_dev, channel, \
31+
IIO_BUFFER_DIRECTION_IN)
3532

3633
int devm_iio_dmaengine_buffer_setup_ext(struct device *dev,
3734
struct iio_dev *indio_dev,
3835
const char *channel,
39-
enum iio_buffer_direction dir,
40-
const struct iio_dma_buffer_ops *ops,
41-
void *data);
36+
enum iio_buffer_direction dir);
4237

4338
#define devm_iio_dmaengine_buffer_setup(dev, indio_dev, channel) \
4439
devm_iio_dmaengine_buffer_setup_ext(dev, indio_dev, channel, \
45-
IIO_BUFFER_DIRECTION_IN, \
46-
NULL, NULL)
40+
IIO_BUFFER_DIRECTION_IN)
41+
42+
int devm_iio_dmaengine_buffer_setup_with_ops(struct device *dev,
43+
struct iio_dev *indio_dev,
44+
const char *channel,
45+
enum iio_buffer_direction dir,
46+
const struct iio_dma_buffer_ops *ops,
47+
void *data);
4748

4849
#endif

0 commit comments

Comments
 (0)