These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / Documentation / DocBook / device-drivers.tmpl
index faf09d4..42a2d85 100644 (file)
@@ -66,6 +66,7 @@
 !Ekernel/time/hrtimer.c
      </sect1>
      <sect1><title>Workqueues and Kevents</title>
+!Iinclude/linux/workqueue.h
 !Ekernel/workqueue.c
      </sect1>
      <sect1><title>Internal Functions</title>
@@ -216,6 +217,111 @@ X!Isound/sound_firmware.c
 -->
   </chapter>
 
+  <chapter id="mediadev">
+     <title>Media Devices</title>
+
+     <sect1><title>Video2Linux devices</title>
+!Iinclude/media/tuner.h
+!Iinclude/media/tuner-types.h
+!Iinclude/media/tveeprom.h
+!Iinclude/media/v4l2-async.h
+!Iinclude/media/v4l2-ctrls.h
+!Iinclude/media/v4l2-dv-timings.h
+!Iinclude/media/v4l2-event.h
+!Iinclude/media/v4l2-flash-led-class.h
+!Iinclude/media/v4l2-mediabus.h
+!Iinclude/media/v4l2-mem2mem.h
+!Iinclude/media/v4l2-of.h
+!Iinclude/media/v4l2-subdev.h
+!Iinclude/media/videobuf2-core.h
+!Iinclude/media/videobuf2-v4l2.h
+!Iinclude/media/videobuf2-memops.h
+     </sect1>
+     <sect1><title>Digital TV (DVB) devices</title>
+!Idrivers/media/dvb-core/dvb_ca_en50221.h
+!Idrivers/media/dvb-core/dvb_frontend.h
+!Idrivers/media/dvb-core/dvb_math.h
+!Idrivers/media/dvb-core/dvb_ringbuffer.h
+!Idrivers/media/dvb-core/dvbdev.h
+       <sect1><title>Digital TV Demux API</title>
+           <para>The kernel demux API defines a driver-internal interface for
+           registering low-level, hardware specific driver to a hardware
+           independent demux layer. It is only of interest for Digital TV
+           device driver writers. The header file for this API is named
+           <constant>demux.h</constant> and located in
+           <constant>drivers/media/dvb-core</constant>.</para>
+
+       <para>The demux API should be implemented for each demux in the
+       system. It is used to select the TS source of a demux and to manage
+       the demux resources. When the demux client allocates a resource via
+       the demux API, it receives a pointer to the API of that
+       resource.</para>
+       <para>Each demux receives its TS input from a DVB front-end or from
+       memory, as set via this demux API. In a system with more than one
+       front-end, the API can be used to select one of the DVB front-ends
+       as a TS source for a demux, unless this is fixed in the HW platform.
+       The demux API only controls front-ends regarding to their connections
+       with demuxes; the APIs used to set the other front-end parameters,
+       such as tuning, are not defined in this document.</para>
+       <para>The functions that implement the abstract interface demux should
+       be defined static or module private and registered to the Demux
+       core for external access. It is not necessary to implement every
+       function in the struct <constant>dmx_demux</constant>. For example,
+       a demux interface might support Section filtering, but not PES
+       filtering. The API client is expected to check the value of any
+       function pointer before calling the function: the value of NULL means
+       that the &#8220;function is not available&#8221;.</para>
+       <para>Whenever the functions of the demux API modify shared data,
+       the possibilities of lost update and race condition problems should
+       be addressed, e.g. by protecting parts of code with mutexes.</para>
+       <para>Note that functions called from a bottom half context must not
+       sleep. Even a simple memory allocation without using GFP_ATOMIC can
+       result in a kernel thread being put to sleep if swapping is needed.
+       For example, the Linux kernel calls the functions of a network device
+       interface from a bottom half context. Thus, if a demux API function
+       is called from network device code, the function must not sleep.
+       </para>
+    </sect1>
+
+    <section id="demux_callback_api">
+       <title>Demux Callback API</title>
+       <para>This kernel-space API comprises the callback functions that
+       deliver filtered data to the demux client. Unlike the other DVB
+       kABIs, these functions are provided by the client and called from
+       the demux code.</para>
+       <para>The function pointers of this abstract interface are not
+       packed into a structure as in the other demux APIs, because the
+       callback functions are registered and used independent of each
+       other. As an example, it is possible for the API client to provide
+       several callback functions for receiving TS packets and no
+       callbacks for PES packets or sections.</para>
+       <para>The functions that implement the callback API need not be
+       re-entrant: when a demux driver calls one of these functions,
+       the driver is not allowed to call the function again before
+       the original call returns. If a callback is triggered by a
+       hardware interrupt, it is recommended to use the Linux
+       &#8220;bottom half&#8221; mechanism or start a tasklet instead of
+       making the callback function call directly from a hardware
+       interrupt.</para>
+       <para>This mechanism is implemented by
+       <link linkend='API-dmx-ts-cb'>dmx_ts_cb()</link> and
+       <link linkend='API-dmx-section-cb'>dmx_section_cb()</link>.</para>
+    </section>
+
+!Idrivers/media/dvb-core/demux.h
+    </sect1>
+    <sect1><title>Remote Controller devices</title>
+!Iinclude/media/rc-core.h
+!Iinclude/media/lirc_dev.h
+    </sect1>
+    <sect1><title>Media Controller devices</title>
+!Iinclude/media/media-device.h
+!Iinclude/media/media-devnode.h
+!Iinclude/media/media-entity.h
+    </sect1>
+
+  </chapter>
+
   <chapter id="uart16x50">
      <title>16x50 UART Driver</title>
 !Edrivers/tty/serial/serial_core.c
@@ -455,4 +561,31 @@ X!Ilib/fonts/fonts.c
 !Edrivers/hsi/hsi.c
   </chapter>
 
+  <chapter id="pwm">
+    <title>Pulse-Width Modulation (PWM)</title>
+    <para>
+      Pulse-width modulation is a modulation technique primarily used to
+      control power supplied to electrical devices.
+    </para>
+    <para>
+      The PWM framework provides an abstraction for providers and consumers
+      of PWM signals. A controller that provides one or more PWM signals is
+      registered as <structname>struct pwm_chip</structname>. Providers are
+      expected to embed this structure in a driver-specific structure. This
+      structure contains fields that describe a particular chip.
+    </para>
+    <para>
+      A chip exposes one or more PWM signal sources, each of which exposed
+      as a <structname>struct pwm_device</structname>. Operations can be
+      performed on PWM devices to control the period, duty cycle, polarity
+      and active state of the signal.
+    </para>
+    <para>
+      Note that PWM devices are exclusive resources: they can always only be
+      used by one consumer at a time.
+    </para>
+!Iinclude/linux/pwm.h
+!Edrivers/pwm/core.c
+  </chapter>
+
 </book>