Documentation/driver-api/iio/triggered-buffers.rst
Now that we know what buffers and triggers are let's see how they work together.
iio_triggered_buffer_setup — Setup triggered buffer and pollfunciio_triggered_buffer_cleanup — Free resources allocated by
:c:func:iio_triggered_buffer_setupA typical triggered buffer setup looks like this::
const struct iio_buffer_setup_ops sensor_buffer_setup_ops = {
.preenable = sensor_buffer_preenable,
.postenable = sensor_buffer_postenable,
.postdisable = sensor_buffer_postdisable,
.predisable = sensor_buffer_predisable,
};
irqreturn_t sensor_iio_pollfunc(int irq, void *p)
{
pf->timestamp = iio_get_time_ns((struct indio_dev *)p);
return IRQ_WAKE_THREAD;
}
irqreturn_t sensor_trigger_handler(int irq, void *p)
{
IIO_DECLARE_BUFFER_WITH_TS(u16, buf, 3) = { };
int i = 0;
/* read data for each active channel */
iio_for_each_active_channel(indio_dev, bit)
buf[i++] = sensor_get_data(bit);
iio_push_to_buffers_with_ts(indio_dev, buf, sizeof(buf), timestamp);
iio_trigger_notify_done(trigger);
return IRQ_HANDLED;
}
/* setup triggered buffer, usually in probe function */
iio_triggered_buffer_setup(indio_dev, sensor_iio_pollfunc,
sensor_trigger_handler,
sensor_buffer_setup_ops);
The important things to notice here are:
iio_buffer_setup_ops, the buffer setup functions to be called at
predefined points in the buffer configuration sequence (e.g. before enable,
after disable). If not specified, the IIO core uses the default
iio_triggered_buffer_setup_ops.iio_pollfunc_store_time function... kernel-doc:: drivers/iio/buffer/industrialio-triggered-buffer.c