iio: kfifo: add devm_iio_kfifo_buffer_setup() helper
This change adds the devm_iio_kfifo_buffer_setup() helper/short-hand, which groups the simple routine of allocating a kfifo buffers via devm_iio_kfifo_allocate() and calling iio_device_attach_buffer(). The mode_flags parameter is required, as the IIO kfifo supports 2 modes: INDIO_BUFFER_SOFTWARE & INDIO_BUFFER_TRIGGERED. The setup_ops parameter is optional. This function will be a bit more useful when needing to define multiple buffers per IIO device. The naming for this function has been inspired from iio_triggered_buffer_setup() since that one does a kfifo alloc + a pollfunc alloc. So, this should have a more familiar ring to what it is. Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Link: https://lore.kernel.org/r/20210215104043.91251-3-alexandru.ardelean@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
0bf49ffbfe
commit
e36db6a069
3 changed files with 47 additions and 0 deletions
|
@ -286,6 +286,7 @@ IIO
|
||||||
devm_iio_device_alloc()
|
devm_iio_device_alloc()
|
||||||
devm_iio_device_register()
|
devm_iio_device_register()
|
||||||
devm_iio_kfifo_allocate()
|
devm_iio_kfifo_allocate()
|
||||||
|
devm_iio_kfifo_buffer_setup()
|
||||||
devm_iio_triggered_buffer_setup()
|
devm_iio_triggered_buffer_setup()
|
||||||
devm_iio_trigger_alloc()
|
devm_iio_trigger_alloc()
|
||||||
devm_iio_trigger_register()
|
devm_iio_trigger_register()
|
||||||
|
|
|
@ -206,4 +206,43 @@ struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(devm_iio_kfifo_allocate);
|
EXPORT_SYMBOL(devm_iio_kfifo_allocate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* devm_iio_kfifo_buffer_setup - Allocate a kfifo buffer & attach it to an IIO device
|
||||||
|
* @dev: Device object to which to attach the life-time of this kfifo buffer
|
||||||
|
* @indio_dev: The device the buffer should be attached to
|
||||||
|
* @mode_flags: The mode flags for this buffer (INDIO_BUFFER_SOFTWARE and/or
|
||||||
|
* INDIO_BUFFER_TRIGGERED).
|
||||||
|
* @setup_ops: The setup_ops required to configure the HW part of the buffer (optional)
|
||||||
|
*
|
||||||
|
* This function allocates a kfifo buffer via devm_iio_kfifo_allocate() and
|
||||||
|
* attaches it to the IIO device via iio_device_attach_buffer().
|
||||||
|
* This is meant to be a bit of a short-hand/helper function as there are a few
|
||||||
|
* drivers that seem to do this.
|
||||||
|
*/
|
||||||
|
int devm_iio_kfifo_buffer_setup(struct device *dev,
|
||||||
|
struct iio_dev *indio_dev,
|
||||||
|
int mode_flags,
|
||||||
|
const struct iio_buffer_setup_ops *setup_ops)
|
||||||
|
{
|
||||||
|
struct iio_buffer *buffer;
|
||||||
|
|
||||||
|
if (mode_flags)
|
||||||
|
mode_flags &= kfifo_access_funcs.modes;
|
||||||
|
|
||||||
|
if (!mode_flags)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
buffer = devm_iio_kfifo_allocate(dev);
|
||||||
|
if (!buffer)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
iio_device_attach_buffer(indio_dev, buffer);
|
||||||
|
|
||||||
|
indio_dev->modes |= mode_flags;
|
||||||
|
indio_dev->setup_ops = setup_ops;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devm_iio_kfifo_buffer_setup);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#define __LINUX_IIO_KFIFO_BUF_H__
|
#define __LINUX_IIO_KFIFO_BUF_H__
|
||||||
|
|
||||||
struct iio_buffer;
|
struct iio_buffer;
|
||||||
|
struct iio_buffer_setup_ops;
|
||||||
|
struct iio_dev;
|
||||||
struct device;
|
struct device;
|
||||||
|
|
||||||
struct iio_buffer *iio_kfifo_allocate(void);
|
struct iio_buffer *iio_kfifo_allocate(void);
|
||||||
|
@ -10,4 +12,9 @@ void iio_kfifo_free(struct iio_buffer *r);
|
||||||
|
|
||||||
struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev);
|
struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev);
|
||||||
|
|
||||||
|
int devm_iio_kfifo_buffer_setup(struct device *dev,
|
||||||
|
struct iio_dev *indio_dev,
|
||||||
|
int mode_flags,
|
||||||
|
const struct iio_buffer_setup_ops *setup_ops);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue