Commit b6e6aca6 authored by Ramona Gradinariu's avatar Ramona Gradinariu Committed by Jonathan Cameron

iio: imu: adis_buffer: Add buffer setup API with buffer attributes

Add new API called devm_adis_setup_buffer_and_trigger_with_attrs() which
also takes buffer attributes as a parameter.
Rewrite devm_adis_setup_buffer_and_trigger() implementation such that it
calls devm_adis_setup_buffer_and_trigger_with_attrs() with buffer
attributes parameter NULL
Reviewed-by: default avatarNuno Sa <nuno.sa@analog.com>
Signed-off-by: default avatarRamona Gradinariu <ramona.bolboaca13@gmail.com>
Link: https://lore.kernel.org/r/20240527142618.275897-4-ramona.bolboaca13@gmail.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 64c65fac
...@@ -175,31 +175,36 @@ static void adis_buffer_cleanup(void *arg) ...@@ -175,31 +175,36 @@ static void adis_buffer_cleanup(void *arg)
} }
/** /**
* devm_adis_setup_buffer_and_trigger() - Sets up buffer and trigger for * devm_adis_setup_buffer_and_trigger_with_attrs() - Sets up buffer and trigger
* the managed adis device * for the managed adis device with buffer attributes.
* @adis: The adis device * @adis: The adis device
* @indio_dev: The IIO device * @indio_dev: The IIO device
* @trigger_handler: Optional trigger handler, may be NULL. * @trigger_handler: Trigger handler: should handle the buffer readings.
* @ops: Optional buffer setup functions, may be NULL.
* @buffer_attrs: Extra buffer attributes.
* *
* Returns 0 on success, a negative error code otherwise. * Returns 0 on success, a negative error code otherwise.
* *
* This function sets up the buffer and trigger for a adis devices. If * This function sets up the buffer (with buffer setup functions and extra
* 'trigger_handler' is NULL the default trigger handler will be used. The * buffer attributes) and trigger for a adis devices with buffer attributes.
* default trigger handler will simply read the registers assigned to the
* currently active channels.
*/ */
int int
devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev, devm_adis_setup_buffer_and_trigger_with_attrs(struct adis *adis, struct iio_dev *indio_dev,
irq_handler_t trigger_handler) irq_handler_t trigger_handler,
const struct iio_buffer_setup_ops *ops,
const struct iio_dev_attr **buffer_attrs)
{ {
int ret; int ret;
if (!trigger_handler) if (!trigger_handler)
trigger_handler = adis_trigger_handler; trigger_handler = adis_trigger_handler;
ret = devm_iio_triggered_buffer_setup(&adis->spi->dev, indio_dev, ret = devm_iio_triggered_buffer_setup_ext(&adis->spi->dev, indio_dev,
&iio_pollfunc_store_time, &iio_pollfunc_store_time,
trigger_handler, NULL); trigger_handler,
IIO_BUFFER_DIRECTION_IN,
ops,
buffer_attrs);
if (ret) if (ret)
return ret; return ret;
...@@ -212,5 +217,4 @@ devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev, ...@@ -212,5 +217,4 @@ devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev,
return devm_add_action_or_reset(&adis->spi->dev, adis_buffer_cleanup, return devm_add_action_or_reset(&adis->spi->dev, adis_buffer_cleanup,
adis); adis);
} }
EXPORT_SYMBOL_NS_GPL(devm_adis_setup_buffer_and_trigger, IIO_ADISLIB); EXPORT_SYMBOL_NS_GPL(devm_adis_setup_buffer_and_trigger_with_attrs, IIO_ADISLIB);
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#define ADIS_REG_PAGE_ID 0x00 #define ADIS_REG_PAGE_ID 0x00
struct adis; struct adis;
struct iio_dev_attr;
/** /**
* struct adis_timeouts - ADIS chip variant timeouts * struct adis_timeouts - ADIS chip variant timeouts
...@@ -515,11 +516,19 @@ int adis_single_conversion(struct iio_dev *indio_dev, ...@@ -515,11 +516,19 @@ int adis_single_conversion(struct iio_dev *indio_dev,
#define ADIS_ROT_CHAN(mod, addr, si, info_sep, info_all, bits) \ #define ADIS_ROT_CHAN(mod, addr, si, info_sep, info_all, bits) \
ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, info_all, bits) ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, info_all, bits)
#define devm_adis_setup_buffer_and_trigger(adis, indio_dev, trigger_handler) \
devm_adis_setup_buffer_and_trigger_with_attrs((adis), (indio_dev), \
(trigger_handler), NULL, \
NULL)
#ifdef CONFIG_IIO_ADIS_LIB_BUFFER #ifdef CONFIG_IIO_ADIS_LIB_BUFFER
int int
devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev, devm_adis_setup_buffer_and_trigger_with_attrs(struct adis *adis,
irq_handler_t trigger_handler); struct iio_dev *indio_dev,
irq_handler_t trigger_handler,
const struct iio_buffer_setup_ops *ops,
const struct iio_dev_attr **buffer_attrs);
int devm_adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev); int devm_adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev);
...@@ -529,8 +538,11 @@ int adis_update_scan_mode(struct iio_dev *indio_dev, ...@@ -529,8 +538,11 @@ int adis_update_scan_mode(struct iio_dev *indio_dev,
#else /* CONFIG_IIO_BUFFER */ #else /* CONFIG_IIO_BUFFER */
static inline int static inline int
devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev, devm_adis_setup_buffer_and_trigger_with_attrs(struct adis *adis,
irq_handler_t trigger_handler) struct iio_dev *indio_dev,
irq_handler_t trigger_handler,
const struct iio_buffer_setup_ops *ops,
const struct iio_dev_attr **buffer_attrs)
{ {
return 0; return 0;
} }
......
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