Commit a02c09e4 authored by Alexandru Ardelean's avatar Alexandru Ardelean Committed by Jonathan Cameron

iio: buffer-dma,adi-axi-adc: introduce devm_iio_dmaengine_buffer_setup()

This change does a conversion of the devm_iio_dmaengine_buffer_alloc() to
devm_iio_dmaengine_buffer_setup(). This will allocate an IIO DMA buffer and
attach it to the IIO device, similar to devm_iio_triggered_buffer_setup()
(though the underlying code is different, the final logic is the same).

Since the only user of the devm_iio_dmaengine_buffer_alloc() was the
adi-axi-adc driver, this change does the replacement in a single go in the
driver.
Signed-off-by: default avatarAlexandru Ardelean <alexandru.ardelean@analog.com>
Link: https://lore.kernel.org/r/20210215104043.91251-7-alexandru.ardelean@analog.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 99f6e821
...@@ -285,6 +285,7 @@ I2C ...@@ -285,6 +285,7 @@ I2C
IIO IIO
devm_iio_device_alloc() devm_iio_device_alloc()
devm_iio_device_register() devm_iio_device_register()
devm_iio_dmaengine_buffer_setup()
devm_iio_kfifo_buffer_setup() devm_iio_kfifo_buffer_setup()
devm_iio_triggered_buffer_setup() devm_iio_triggered_buffer_setup()
devm_iio_trigger_alloc() devm_iio_trigger_alloc()
......
...@@ -104,7 +104,6 @@ static unsigned int adi_axi_adc_read(struct adi_axi_adc_state *st, ...@@ -104,7 +104,6 @@ static unsigned int adi_axi_adc_read(struct adi_axi_adc_state *st,
static int adi_axi_adc_config_dma_buffer(struct device *dev, static int adi_axi_adc_config_dma_buffer(struct device *dev,
struct iio_dev *indio_dev) struct iio_dev *indio_dev)
{ {
struct iio_buffer *buffer;
const char *dma_name; const char *dma_name;
if (!device_property_present(dev, "dmas")) if (!device_property_present(dev, "dmas"))
...@@ -113,15 +112,8 @@ static int adi_axi_adc_config_dma_buffer(struct device *dev, ...@@ -113,15 +112,8 @@ static int adi_axi_adc_config_dma_buffer(struct device *dev,
if (device_property_read_string(dev, "dma-names", &dma_name)) if (device_property_read_string(dev, "dma-names", &dma_name))
dma_name = "rx"; dma_name = "rx";
buffer = devm_iio_dmaengine_buffer_alloc(indio_dev->dev.parent, return devm_iio_dmaengine_buffer_setup(indio_dev->dev.parent,
dma_name); indio_dev, dma_name);
if (IS_ERR(buffer))
return PTR_ERR(buffer);
indio_dev->modes |= INDIO_BUFFER_HARDWARE;
iio_device_attach_buffer(indio_dev, buffer);
return 0;
} }
static int adi_axi_adc_read_raw(struct iio_dev *indio_dev, static int adi_axi_adc_read_raw(struct iio_dev *indio_dev,
......
...@@ -244,7 +244,7 @@ static void __devm_iio_dmaengine_buffer_free(struct device *dev, void *res) ...@@ -244,7 +244,7 @@ static void __devm_iio_dmaengine_buffer_free(struct device *dev, void *res)
* *
* The buffer will be automatically de-allocated once the device gets destroyed. * The buffer will be automatically de-allocated once the device gets destroyed.
*/ */
struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev, static struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev,
const char *channel) const char *channel)
{ {
struct iio_buffer **bufferp, *buffer; struct iio_buffer **bufferp, *buffer;
...@@ -265,7 +265,36 @@ struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev, ...@@ -265,7 +265,36 @@ struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev,
return buffer; return buffer;
} }
EXPORT_SYMBOL_GPL(devm_iio_dmaengine_buffer_alloc);
/**
* devm_iio_dmaengine_buffer_setup() - Setup a DMA buffer for an IIO device
* @dev: Parent device for the buffer
* @indio_dev: IIO device to which to attach this buffer.
* @channel: DMA channel name, typically "rx".
*
* This allocates a new IIO buffer with devm_iio_dmaengine_buffer_alloc()
* and attaches it to an IIO device with iio_device_attach_buffer().
* It also appends the INDIO_BUFFER_HARDWARE mode to the supported modes of the
* IIO device.
*/
int devm_iio_dmaengine_buffer_setup(struct device *dev,
struct iio_dev *indio_dev,
const char *channel)
{
struct iio_buffer *buffer;
buffer = devm_iio_dmaengine_buffer_alloc(indio_dev->dev.parent,
channel);
if (IS_ERR(buffer))
return PTR_ERR(buffer);
indio_dev->modes |= INDIO_BUFFER_HARDWARE;
iio_device_attach_buffer(indio_dev, buffer);
return 0;
}
EXPORT_SYMBOL_GPL(devm_iio_dmaengine_buffer_setup);
MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
MODULE_DESCRIPTION("DMA buffer for the IIO framework"); MODULE_DESCRIPTION("DMA buffer for the IIO framework");
......
...@@ -7,10 +7,11 @@ ...@@ -7,10 +7,11 @@
#ifndef __IIO_DMAENGINE_H__ #ifndef __IIO_DMAENGINE_H__
#define __IIO_DMAENGINE_H__ #define __IIO_DMAENGINE_H__
struct iio_buffer; struct iio_dev;
struct device; struct device;
struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev, int devm_iio_dmaengine_buffer_setup(struct device *dev,
const char *channel); struct iio_dev *indio_dev,
const char *channel);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment