2019-06-18 23:53:40 +03:00
===============================
2015-11-09 10:14:02 +03:00
Industrial IIO configfs support
2019-06-18 23:53:40 +03:00
===============================
2015-11-09 10:14:02 +03:00
1. Overview
2019-06-18 23:53:40 +03:00
===========
2015-11-09 10:14:02 +03:00
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
2019-06-18 23:53:40 +03:00
========
2015-11-09 10:14:02 +03:00
In order to use configfs support in IIO we need to select it at compile
time via CONFIG_IIO_CONFIGFS config option.
2019-06-18 23:53:40 +03:00
Then, mount the configfs filesystem (usually under /config directory)::
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
$ mkdir /config
$ mount -t configfs none /config
2015-11-09 10:14:02 +03:00
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
2019-06-18 23:53:40 +03:00
====================
2015-11-09 10:14:02 +03:00
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
2019-06-18 23:53:40 +03:00
kernel module following the interface in include/linux/iio/sw_trigger.h::
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
/*
* drivers/iio/trigger/iio-trig-sample.c
* sample kernel module implementing a new trigger type
*/
#include <linux/iio/sw_trigger.h>
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
static struct iio_sw_trigger *iio_trig_sample_probe(const char * name)
{
2015-11-09 10:14:02 +03:00
/*
* This allocates and registers an IIO trigger plus other
* trigger type specific initialization.
*/
2019-06-18 23:53:40 +03:00
}
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
static int iio_trig_hrtimer_remove(struct iio_sw_trigger *swt)
{
2015-11-09 10:14:02 +03:00
/*
* This undoes the actions in iio_trig_sample_probe
*/
2019-06-18 23:53:40 +03:00
}
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
static const struct iio_sw_trigger_ops iio_trig_sample_ops = {
2015-11-09 10:14:02 +03:00
.probe = iio_trig_sample_probe,
.remove = iio_trig_sample_remove,
2019-06-18 23:53:40 +03:00
};
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
static struct iio_sw_trigger_type iio_trig_sample = {
2015-11-09 10:14:02 +03:00
.name = "trig-sample",
.owner = THIS_MODULE,
.ops = &iio_trig_sample_ops,
2019-06-18 23:53:40 +03:00
};
2015-11-09 10:14:02 +03:00
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):
2019-06-18 23:53:40 +03:00
2015-11-09 10:14:02 +03:00
* hrtimer, uses high resolution timers as interrupt source
3.1 Hrtimer triggers creation and destruction
2019-06-18 23:53:40 +03:00
---------------------------------------------
2015-11-09 10:14:02 +03:00
Loading iio-trig-hrtimer module will register hrtimer trigger types allowing
users to create hrtimer triggers under /config/iio/triggers/hrtimer.
2019-06-18 23:53:40 +03:00
e.g::
2015-11-09 10:14:02 +03:00
2019-06-18 23:53:40 +03:00
$ mkdir /config/iio/triggers/hrtimer/instance1
$ rmdir /config/iio/triggers/hrtimer/instance1
2015-11-09 10:14:02 +03:00
Each trigger can have one or more attributes specific to the trigger type.
3.2 "hrtimer" trigger types attributes
2019-06-18 23:53:40 +03:00
--------------------------------------
2015-11-09 10:14:02 +03:00
"hrtimer" trigger type doesn't have any configurable attribute from /config dir.
It does introduce the sampling_frequency attribute to trigger directory.