123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- ========
- Triggers
- ========
- * struct iio_trigger — industrial I/O trigger device
- * :c:func:`devm_iio_trigger_alloc` — Resource-managed iio_trigger_alloc
- * :c:func:`devm_iio_trigger_register` — Resource-managed iio_trigger_register
- iio_trigger_unregister
- * :c:func:`iio_trigger_validate_own_device` — Check if a trigger and IIO
- device belong to the same device
- In many situations it is useful for a driver to be able to capture data based
- on some external event (trigger) as opposed to periodically polling for data.
- An IIO trigger can be provided by a device driver that also has an IIO device
- based on hardware generated events (e.g. data ready or threshold exceeded) or
- provided by a separate driver from an independent interrupt source (e.g. GPIO
- line connected to some external system, timer interrupt or user space writing
- a specific file in sysfs). A trigger may initiate data capture for a number of
- sensors and also it may be completely unrelated to the sensor itself.
- IIO trigger sysfs interface
- ===========================
- There are two locations in sysfs related to triggers:
- * :file:`/sys/bus/iio/devices/trigger{Y}/*`, this file is created once an
- IIO trigger is registered with the IIO core and corresponds to trigger
- with index Y.
- Because triggers can be very different depending on type there are few
- standard attributes that we can describe here:
- * :file:`name`, trigger name that can be later used for association with a
- device.
- * :file:`sampling_frequency`, some timer based triggers use this attribute to
- specify the frequency for trigger calls.
- * :file:`/sys/bus/iio/devices/iio:device{X}/trigger/*`, this directory is
- created once the device supports a triggered buffer. We can associate a
- trigger with our device by writing the trigger's name in the
- :file:`current_trigger` file.
- IIO trigger setup
- =================
- Let's see a simple example of how to setup a trigger to be used by a driver::
- struct iio_trigger_ops trigger_ops = {
- .set_trigger_state = sample_trigger_state,
- .validate_device = sample_validate_device,
- }
- struct iio_trigger *trig;
- /* first, allocate memory for our trigger */
- trig = iio_trigger_alloc(dev, "trig-%s-%d", name, idx);
- /* setup trigger operations field */
- trig->ops = &trigger_ops;
- /* now register the trigger with the IIO core */
- iio_trigger_register(trig);
- IIO trigger ops
- ===============
- * struct iio_trigger_ops — operations structure for an iio_trigger.
- Notice that a trigger has a set of operations attached:
- * :file:`set_trigger_state`, switch the trigger on/off on demand.
- * :file:`validate_device`, function to validate the device when the current
- trigger gets changed.
- More details
- ============
- .. kernel-doc:: include/linux/iio/trigger.h
- .. kernel-doc:: drivers/iio/industrialio-trigger.c
- :export:
|