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