Blame view

Documentation/iio/iio_configfs.rst 2.93 KB
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
1
  ===============================
4c3e2a403   Daniel Baluta   iio: Documentatio...
2
  Industrial IIO configfs support
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
3
  ===============================
4c3e2a403   Daniel Baluta   iio: Documentatio...
4
5
  
  1. Overview
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
6
  ===========
4c3e2a403   Daniel Baluta   iio: Documentatio...
7
8
9
10
11
12
13
14
15
  
  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/configfs.txt for more information
  about how configfs works.
  
  2. Usage
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
16
  ========
4c3e2a403   Daniel Baluta   iio: Documentatio...
17
18
19
  
  In order to use configfs support in IIO we need to select it at compile
  time via CONFIG_IIO_CONFIGFS config option.
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
20
  Then, mount the configfs filesystem (usually under /config directory)::
4c3e2a403   Daniel Baluta   iio: Documentatio...
21

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
22
23
    $ mkdir /config
    $ mount -t configfs none /config
4c3e2a403   Daniel Baluta   iio: Documentatio...
24
25
26
27
28
29
  
  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
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
30
  ====================
4c3e2a403   Daniel Baluta   iio: Documentatio...
31
32
33
34
35
36
37
  
  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
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
38
  kernel module following the interface in include/linux/iio/sw_trigger.h::
4c3e2a403   Daniel Baluta   iio: Documentatio...
39

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
40
41
42
43
44
    /*
     * drivers/iio/trigger/iio-trig-sample.c
     * sample kernel module implementing a new trigger type
     */
    #include <linux/iio/sw_trigger.h>
4c3e2a403   Daniel Baluta   iio: Documentatio...
45

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
46
47
    static struct iio_sw_trigger *iio_trig_sample_probe(const char *name)
    {
4c3e2a403   Daniel Baluta   iio: Documentatio...
48
49
50
51
  	/*
  	 * This allocates and registers an IIO trigger plus other
  	 * trigger type specific initialization.
  	 */
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
52
    }
4c3e2a403   Daniel Baluta   iio: Documentatio...
53

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
54
55
    static int iio_trig_hrtimer_remove(struct iio_sw_trigger *swt)
    {
4c3e2a403   Daniel Baluta   iio: Documentatio...
56
57
58
  	/*
  	 * This undoes the actions in iio_trig_sample_probe
  	 */
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
59
    }
4c3e2a403   Daniel Baluta   iio: Documentatio...
60

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
61
    static const struct iio_sw_trigger_ops iio_trig_sample_ops = {
4c3e2a403   Daniel Baluta   iio: Documentatio...
62
63
  	.probe		= iio_trig_sample_probe,
  	.remove		= iio_trig_sample_remove,
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
64
    };
4c3e2a403   Daniel Baluta   iio: Documentatio...
65

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
66
    static struct iio_sw_trigger_type iio_trig_sample = {
4c3e2a403   Daniel Baluta   iio: Documentatio...
67
68
69
  	.name = "trig-sample",
  	.owner = THIS_MODULE,
  	.ops = &iio_trig_sample_ops,
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
70
    };
4c3e2a403   Daniel Baluta   iio: Documentatio...
71
72
73
74
75
76
77
78
  
  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):
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
79

4c3e2a403   Daniel Baluta   iio: Documentatio...
80
81
82
  	* hrtimer, uses high resolution timers as interrupt source
  
  3.1 Hrtimer triggers creation and destruction
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
83
  ---------------------------------------------
4c3e2a403   Daniel Baluta   iio: Documentatio...
84
85
86
  
  Loading iio-trig-hrtimer module will register hrtimer trigger types allowing
  users to create hrtimer triggers under /config/iio/triggers/hrtimer.
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
87
  e.g::
4c3e2a403   Daniel Baluta   iio: Documentatio...
88

1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
89
90
    $ mkdir /config/iio/triggers/hrtimer/instance1
    $ rmdir /config/iio/triggers/hrtimer/instance1
4c3e2a403   Daniel Baluta   iio: Documentatio...
91
92
93
94
  
  Each trigger can have one or more attributes specific to the trigger type.
  
  3.2 "hrtimer" trigger types attributes
1c349f4fd   Mauro Carvalho Chehab   docs: iio: conver...
95
  --------------------------------------
4c3e2a403   Daniel Baluta   iio: Documentatio...
96
97
98
  
  "hrtimer" trigger type doesn't have any configurable attribute from /config dir.
  It does introduce the sampling_frequency attribute to trigger directory.