hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
===============================
Industrial IIO configfs support
===============================
 
1. Overview
===========
 
Configfs is a filesystem-based manager of kernel objects. IIO uses some
objects that could be easily configured using configfs (e.g.: devices,
triggers).
 
See Documentation/filesystems/configfs.rst for more information
about how configfs works.
 
2. Usage
========
 
In order to use configfs support in IIO we need to select it at compile
time via CONFIG_IIO_CONFIGFS config option.
 
Then, mount the configfs filesystem (usually under /config directory)::
 
  $ mkdir /config
  $ mount -t configfs none /config
 
At this point, all default IIO groups will be created and can be accessed
under /config/iio. Next chapters will describe available IIO configuration
objects.
 
3. Software triggers
====================
 
One of the IIO default configfs groups is the "triggers" group. It is
automagically accessible when the configfs is mounted and can be found
under /config/iio/triggers.
 
IIO software triggers implementation offers support for creating multiple
trigger types. A new trigger type is usually implemented as a separate
kernel module following the interface in include/linux/iio/sw_trigger.h::
 
  /*
   * drivers/iio/trigger/iio-trig-sample.c
   * sample kernel module implementing a new trigger type
   */
  #include <linux/iio/sw_trigger.h>
 
 
  static struct iio_sw_trigger *iio_trig_sample_probe(const char *name)
  {
   /*
    * This allocates and registers an IIO trigger plus other
    * trigger type specific initialization.
    */
  }
 
  static int iio_trig_sample_remove(struct iio_sw_trigger *swt)
  {
   /*
    * This undoes the actions in iio_trig_sample_probe
    */
  }
 
  static const struct iio_sw_trigger_ops iio_trig_sample_ops = {
   .probe        = iio_trig_sample_probe,
   .remove        = iio_trig_sample_remove,
  };
 
  static struct iio_sw_trigger_type iio_trig_sample = {
   .name = "trig-sample",
   .owner = THIS_MODULE,
   .ops = &iio_trig_sample_ops,
  };
 
module_iio_sw_trigger_driver(iio_trig_sample);
 
Each trigger type has its own directory under /config/iio/triggers. Loading
iio-trig-sample module will create 'trig-sample' trigger type directory
/config/iio/triggers/trig-sample.
 
We support the following interrupt sources (trigger types):
 
   * hrtimer, uses high resolution timers as interrupt source
 
3.1 Hrtimer triggers creation and destruction
---------------------------------------------
 
Loading iio-trig-hrtimer module will register hrtimer trigger types allowing
users to create hrtimer triggers under /config/iio/triggers/hrtimer.
 
e.g::
 
  $ mkdir /config/iio/triggers/hrtimer/instance1
  $ rmdir /config/iio/triggers/hrtimer/instance1
 
Each trigger can have one or more attributes specific to the trigger type.
 
3.2 "hrtimer" trigger types attributes
--------------------------------------
 
"hrtimer" trigger type doesn't have any configurable attribute from /config dir.
It does introduce the sampling_frequency attribute to trigger directory.