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