79 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ========
 | |
| 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:
 |