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: Alexandru Ardelean <alexandru.ardelean@analog.com> Link: https://lore.kernel.org/r/20210215104043.91251-7-alexandru.ardelean@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
99f6e8215b
commit
a02c09e42b
|
@ -285,6 +285,7 @@ I2C
|
|||
IIO
|
||||
devm_iio_device_alloc()
|
||||
devm_iio_device_register()
|
||||
devm_iio_dmaengine_buffer_setup()
|
||||
devm_iio_kfifo_buffer_setup()
|
||||
devm_iio_triggered_buffer_setup()
|
||||
devm_iio_trigger_alloc()
|
||||
|
|
|
@ -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,
|
||||
struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_buffer *buffer;
|
||||
const char *dma_name;
|
||||
|
||||
if (!device_property_present(dev, "dmas"))
|
||||
|
@ -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))
|
||||
dma_name = "rx";
|
||||
|
||||
buffer = devm_iio_dmaengine_buffer_alloc(indio_dev->dev.parent,
|
||||
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;
|
||||
return devm_iio_dmaengine_buffer_setup(indio_dev->dev.parent,
|
||||
indio_dev, dma_name);
|
||||
}
|
||||
|
||||
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)
|
|||
*
|
||||
* 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)
|
||||
{
|
||||
struct iio_buffer **bufferp, *buffer;
|
||||
|
@ -265,7 +265,36 @@ struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev,
|
|||
|
||||
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_DESCRIPTION("DMA buffer for the IIO framework");
|
||||
|
|
|
@ -7,10 +7,11 @@
|
|||
#ifndef __IIO_DMAENGINE_H__
|
||||
#define __IIO_DMAENGINE_H__
|
||||
|
||||
struct iio_buffer;
|
||||
struct iio_dev;
|
||||
struct device;
|
||||
|
||||
struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev,
|
||||
const char *channel);
|
||||
int devm_iio_dmaengine_buffer_setup(struct device *dev,
|
||||
struct iio_dev *indio_dev,
|
||||
const char *channel);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue