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