mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.9 KiB
101 lines
2.9 KiB
=============================== |
|
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.
|
|
|