11c349f4fSMauro Carvalho Chehab=============================== 21c349f4fSMauro Carvalho ChehabIndustrial IIO configfs support 31c349f4fSMauro Carvalho Chehab=============================== 41c349f4fSMauro Carvalho Chehab 51c349f4fSMauro Carvalho Chehab1. Overview 61c349f4fSMauro Carvalho Chehab=========== 71c349f4fSMauro Carvalho Chehab 81c349f4fSMauro Carvalho ChehabConfigfs is a filesystem-based manager of kernel objects. IIO uses some 91c349f4fSMauro Carvalho Chehabobjects that could be easily configured using configfs (e.g.: devices, 101c349f4fSMauro Carvalho Chehabtriggers). 111c349f4fSMauro Carvalho Chehab 1298264991SMauro Carvalho ChehabSee Documentation/filesystems/configfs.rst for more information 131c349f4fSMauro Carvalho Chehababout how configfs works. 141c349f4fSMauro Carvalho Chehab 151c349f4fSMauro Carvalho Chehab2. Usage 161c349f4fSMauro Carvalho Chehab======== 171c349f4fSMauro Carvalho Chehab 181c349f4fSMauro Carvalho ChehabIn order to use configfs support in IIO we need to select it at compile 191c349f4fSMauro Carvalho Chehabtime via CONFIG_IIO_CONFIGFS config option. 201c349f4fSMauro Carvalho Chehab 211c349f4fSMauro Carvalho ChehabThen, mount the configfs filesystem (usually under /config directory):: 221c349f4fSMauro Carvalho Chehab 231c349f4fSMauro Carvalho Chehab $ mkdir /config 241c349f4fSMauro Carvalho Chehab $ mount -t configfs none /config 251c349f4fSMauro Carvalho Chehab 261c349f4fSMauro Carvalho ChehabAt this point, all default IIO groups will be created and can be accessed 271c349f4fSMauro Carvalho Chehabunder /config/iio. Next chapters will describe available IIO configuration 281c349f4fSMauro Carvalho Chehabobjects. 291c349f4fSMauro Carvalho Chehab 301c349f4fSMauro Carvalho Chehab3. Software triggers 311c349f4fSMauro Carvalho Chehab==================== 321c349f4fSMauro Carvalho Chehab 331c349f4fSMauro Carvalho ChehabOne of the IIO default configfs groups is the "triggers" group. It is 341c349f4fSMauro Carvalho Chehabautomagically accessible when the configfs is mounted and can be found 351c349f4fSMauro Carvalho Chehabunder /config/iio/triggers. 361c349f4fSMauro Carvalho Chehab 371c349f4fSMauro Carvalho ChehabIIO software triggers implementation offers support for creating multiple 381c349f4fSMauro Carvalho Chehabtrigger types. A new trigger type is usually implemented as a separate 391c349f4fSMauro Carvalho Chehabkernel module following the interface in include/linux/iio/sw_trigger.h:: 401c349f4fSMauro Carvalho Chehab 411c349f4fSMauro Carvalho Chehab /* 421c349f4fSMauro Carvalho Chehab * drivers/iio/trigger/iio-trig-sample.c 431c349f4fSMauro Carvalho Chehab * sample kernel module implementing a new trigger type 441c349f4fSMauro Carvalho Chehab */ 451c349f4fSMauro Carvalho Chehab #include <linux/iio/sw_trigger.h> 461c349f4fSMauro Carvalho Chehab 471c349f4fSMauro Carvalho Chehab 481c349f4fSMauro Carvalho Chehab static struct iio_sw_trigger *iio_trig_sample_probe(const char *name) 491c349f4fSMauro Carvalho Chehab { 501c349f4fSMauro Carvalho Chehab /* 511c349f4fSMauro Carvalho Chehab * This allocates and registers an IIO trigger plus other 521c349f4fSMauro Carvalho Chehab * trigger type specific initialization. 531c349f4fSMauro Carvalho Chehab */ 541c349f4fSMauro Carvalho Chehab } 551c349f4fSMauro Carvalho Chehab 562e915ea0SLars Poeschel static int iio_trig_sample_remove(struct iio_sw_trigger *swt) 571c349f4fSMauro Carvalho Chehab { 581c349f4fSMauro Carvalho Chehab /* 591c349f4fSMauro Carvalho Chehab * This undoes the actions in iio_trig_sample_probe 601c349f4fSMauro Carvalho Chehab */ 611c349f4fSMauro Carvalho Chehab } 621c349f4fSMauro Carvalho Chehab 631c349f4fSMauro Carvalho Chehab static const struct iio_sw_trigger_ops iio_trig_sample_ops = { 641c349f4fSMauro Carvalho Chehab .probe = iio_trig_sample_probe, 651c349f4fSMauro Carvalho Chehab .remove = iio_trig_sample_remove, 661c349f4fSMauro Carvalho Chehab }; 671c349f4fSMauro Carvalho Chehab 681c349f4fSMauro Carvalho Chehab static struct iio_sw_trigger_type iio_trig_sample = { 691c349f4fSMauro Carvalho Chehab .name = "trig-sample", 701c349f4fSMauro Carvalho Chehab .owner = THIS_MODULE, 711c349f4fSMauro Carvalho Chehab .ops = &iio_trig_sample_ops, 721c349f4fSMauro Carvalho Chehab }; 731c349f4fSMauro Carvalho Chehab 741c349f4fSMauro Carvalho Chehab module_iio_sw_trigger_driver(iio_trig_sample); 751c349f4fSMauro Carvalho Chehab 761c349f4fSMauro Carvalho ChehabEach trigger type has its own directory under /config/iio/triggers. Loading 771c349f4fSMauro Carvalho Chehabiio-trig-sample module will create 'trig-sample' trigger type directory 781c349f4fSMauro Carvalho Chehab/config/iio/triggers/trig-sample. 791c349f4fSMauro Carvalho Chehab 801c349f4fSMauro Carvalho ChehabWe support the following interrupt sources (trigger types): 811c349f4fSMauro Carvalho Chehab 821c349f4fSMauro Carvalho Chehab * hrtimer, uses high resolution timers as interrupt source 831c349f4fSMauro Carvalho Chehab 841c349f4fSMauro Carvalho Chehab3.1 Hrtimer triggers creation and destruction 851c349f4fSMauro Carvalho Chehab--------------------------------------------- 861c349f4fSMauro Carvalho Chehab 871c349f4fSMauro Carvalho ChehabLoading iio-trig-hrtimer module will register hrtimer trigger types allowing 881c349f4fSMauro Carvalho Chehabusers to create hrtimer triggers under /config/iio/triggers/hrtimer. 891c349f4fSMauro Carvalho Chehab 901c349f4fSMauro Carvalho Chehabe.g:: 911c349f4fSMauro Carvalho Chehab 921c349f4fSMauro Carvalho Chehab $ mkdir /config/iio/triggers/hrtimer/instance1 931c349f4fSMauro Carvalho Chehab $ rmdir /config/iio/triggers/hrtimer/instance1 941c349f4fSMauro Carvalho Chehab 951c349f4fSMauro Carvalho ChehabEach trigger can have one or more attributes specific to the trigger type. 961c349f4fSMauro Carvalho Chehab 971c349f4fSMauro Carvalho Chehab3.2 "hrtimer" trigger types attributes 981c349f4fSMauro Carvalho Chehab-------------------------------------- 991c349f4fSMauro Carvalho Chehab 1001c349f4fSMauro Carvalho Chehab"hrtimer" trigger type doesn't have any configurable attribute from /config dir. 1011c349f4fSMauro Carvalho ChehabIt does introduce the sampling_frequency attribute to trigger directory. 102*dafcf4edSGwendal GrignouThat attribute sets the polling frequency in Hz, with mHz precision. 103