~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/driver-api/iio/triggered-buffers.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 =================
  2 Triggered Buffers
  3 =================
  4 
  5 Now that we know what buffers and triggers are let's see how they work together.
  6 
  7 IIO triggered buffer setup
  8 ==========================
  9 
 10 * :c:func:`iio_triggered_buffer_setup` — Setup triggered buffer and pollfunc
 11 * :c:func:`iio_triggered_buffer_cleanup` — Free resources allocated by
 12   :c:func:`iio_triggered_buffer_setup`
 13 * struct iio_buffer_setup_ops — buffer setup related callbacks
 14 
 15 A typical triggered buffer setup looks like this::
 16 
 17     const struct iio_buffer_setup_ops sensor_buffer_setup_ops = {
 18       .preenable    = sensor_buffer_preenable,
 19       .postenable   = sensor_buffer_postenable,
 20       .postdisable  = sensor_buffer_postdisable,
 21       .predisable   = sensor_buffer_predisable,
 22     };
 23 
 24     irqreturn_t sensor_iio_pollfunc(int irq, void *p)
 25     {
 26         pf->timestamp = iio_get_time_ns((struct indio_dev *)p);
 27         return IRQ_WAKE_THREAD;
 28     }
 29 
 30     irqreturn_t sensor_trigger_handler(int irq, void *p)
 31     {
 32         u16 buf[8];
 33         int i = 0;
 34 
 35         /* read data for each active channel */
 36         for_each_set_bit(bit, active_scan_mask, masklength)
 37             buf[i++] = sensor_get_data(bit)
 38 
 39         iio_push_to_buffers_with_timestamp(indio_dev, buf, timestamp);
 40 
 41         iio_trigger_notify_done(trigger);
 42         return IRQ_HANDLED;
 43     }
 44 
 45     /* setup triggered buffer, usually in probe function */
 46     iio_triggered_buffer_setup(indio_dev, sensor_iio_polfunc,
 47                                sensor_trigger_handler,
 48                                sensor_buffer_setup_ops);
 49 
 50 The important things to notice here are:
 51 
 52 * :c:type:`iio_buffer_setup_ops`, the buffer setup functions to be called at
 53   predefined points in the buffer configuration sequence (e.g. before enable,
 54   after disable). If not specified, the IIO core uses the default
 55   iio_triggered_buffer_setup_ops.
 56 * **sensor_iio_pollfunc**, the function that will be used as top half of poll
 57   function. It should do as little processing as possible, because it runs in
 58   interrupt context. The most common operation is recording of the current
 59   timestamp and for this reason one can use the IIO core defined
 60   :c:func:`iio_pollfunc_store_time` function.
 61 * **sensor_trigger_handler**, the function that will be used as bottom half of
 62   the poll function. This runs in the context of a kernel thread and all the
 63   processing takes place here. It usually reads data from the device and
 64   stores it in the internal buffer together with the timestamp recorded in the
 65   top half.
 66 
 67 More details
 68 ============
 69 .. kernel-doc:: drivers/iio/buffer/industrialio-triggered-buffer.c

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php