~ [ 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 ] ~

Diff markup

Differences between /Documentation/driver-api/iio/triggered-buffers.rst (Version linux-6.12-rc7) and /Documentation/driver-api/iio/triggered-buffers.rst (Version linux-4.19.323)


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