Commit 47c62e4b authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'media/v4.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media updates from Mauro Carvalho Chehab:
 "The part of patches for Kernel 4.5.  There's nothing really big here:

   - driver-specific headers for media devices were moved to separate
     directories, in order to make clear what headers belong to the core
     kABI and require documentation

   - Platform data for media drivers were moved from include/media to
     include/linux/platform_data/media

   - add a driver for cs3308 8-channel volume control, used on some
     high-end capture boards

   - lirc.h kAPI header were added at include/uapi/linux

   - Driver cleanups, new board additions and improvements"

* tag 'media/v4.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (204 commits)
  [media] rc: sunxi-cir: Initialize the spinlock properly
  [media] rtl2832: do not filter out slave TS null packets
  [media] rtl2832: print reg number on error case
  [media] rtl28xxu: return demod reg page from driver cache
  [media] coda: enable MPEG-2 ES decoding
  [media] coda: don't start streaming without queued buffers
  [media] coda: hook up vidioc_prepare_buf
  [media] coda: relax coda_jpeg_check_buffer for trailing bytes
  [media] coda: make to_coda_video_device static
  [media] s5p-mfc: remove volatile attribute from MFC register addresses
  [media] s5p-mfc: merge together s5p_mfc_hw_call and s5p_mfc_hw_call_void
  [media] s5p-mfc: use spinlock to protect MFC context
  [media] s5p-mfc: remove unnecessary callbacks
  [media] s5p-mfc: make queue cleanup code common
  [media] s5p-mfc: use one implementation of s5p_mfc_get_new_ctx
  [media] s5p-mfc: constify s5p_mfc_codec_ops structures
  [media] au8522: Avoid memory leak for device config data
  [media] ir-lirc-codec.c: don't leak lirc->drv-rbuf
  [media] uvcvideo: small cleanup in uvc_video_clock_update()
  [media] uvcvideo: Fix reading the current exposure value of UVC
  ...
parents 2c487121 c3152592
...@@ -238,78 +238,26 @@ X!Isound/sound_firmware.c ...@@ -238,78 +238,26 @@ X!Isound/sound_firmware.c
!Iinclude/media/videobuf2-memops.h !Iinclude/media/videobuf2-memops.h
</sect1> </sect1>
<sect1><title>Digital TV (DVB) devices</title> <sect1><title>Digital TV (DVB) devices</title>
!Idrivers/media/dvb-core/dvb_ca_en50221.h <sect1><title>Digital TV Common functions</title>
!Idrivers/media/dvb-core/dvb_frontend.h
!Idrivers/media/dvb-core/dvb_math.h !Idrivers/media/dvb-core/dvb_math.h
!Idrivers/media/dvb-core/dvb_ringbuffer.h !Idrivers/media/dvb-core/dvb_ringbuffer.h
!Idrivers/media/dvb-core/dvbdev.h !Idrivers/media/dvb-core/dvbdev.h
<sect1><title>Digital TV Demux API</title> </sect1>
<para>The kernel demux API defines a driver-internal interface for <sect1><title>Digital TV Frontend kABI</title>
registering low-level, hardware specific driver to a hardware !Pdrivers/media/dvb-core/dvb_frontend.h Digital TV Frontend
independent demux layer. It is only of interest for Digital TV !Idrivers/media/dvb-core/dvb_frontend.h
device driver writers. The header file for this API is named </sect1>
<constant>demux.h</constant> and located in <sect1><title>Digital TV Demux kABI</title>
<constant>drivers/media/dvb-core</constant>.</para> !Pdrivers/media/dvb-core/demux.h Digital TV Demux
<sect1><title>Demux Callback API</title>
<para>The demux API should be implemented for each demux in the !Pdrivers/media/dvb-core/demux.h Demux Callback
system. It is used to select the TS source of a demux and to manage </sect1>
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 !Idrivers/media/dvb-core/demux.h
</sect1> </sect1>
<sect1><title>Digital TV Conditional Access kABI</title>
!Idrivers/media/dvb-core/dvb_ca_en50221.h
</sect1>
</sect1>
<sect1><title>Remote Controller devices</title> <sect1><title>Remote Controller devices</title>
!Iinclude/media/rc-core.h !Iinclude/media/rc-core.h
!Iinclude/media/lirc_dev.h !Iinclude/media/lirc_dev.h
......
...@@ -199,8 +199,10 @@ DVB_DOCUMENTED = \ ...@@ -199,8 +199,10 @@ DVB_DOCUMENTED = \
# #
install_media_images = \ install_media_images = \
$(Q)-mkdir $(MEDIA_OBJ_DIR)/media_api; \ $(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \
cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api mkdir -p $(MEDIA_OBJ_DIR)/media_api; \
cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \
fi
$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
$(Q)base64 -d $< >$@ $(Q)base64 -d $< >$@
......
...@@ -76,7 +76,7 @@ int main(void) ...@@ -76,7 +76,7 @@ int main(void)
<para>NOTE: While it is possible to directly call the Kernel code like the <para>NOTE: While it is possible to directly call the Kernel code like the
above example, it is strongly recommended to use above example, it is strongly recommended to use
<ulink url="http://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>, <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>,
as it provides abstraction to work with the supported digital TV standards as it provides abstraction to work with the supported digital TV standards
and provides methods for usual operations like program scanning and to and provides methods for usual operations like program scanning and to
read/write channel descriptor files.</para> read/write channel descriptor files.</para>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
</para> </para>
<para>NOTE: This section is out of date, and the code below won't even <para>NOTE: This section is out of date, and the code below won't even
compile. Please refer to the compile. Please refer to the
<ulink url="http://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink> <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>
for updated/recommended examples. for updated/recommended examples.
</para> </para>
......
...@@ -32,7 +32,7 @@ and filtering several section and PES data streams at the same time. ...@@ -32,7 +32,7 @@ and filtering several section and PES data streams at the same time.
new standard Linux DVB API. As a commitment to the development of new standard Linux DVB API. As a commitment to the development of
terminals based on open standards, Nokia and Convergence made it terminals based on open standards, Nokia and Convergence made it
available to all Linux developers and published it on available to all Linux developers and published it on
<ulink url="http://www.linuxtv.org/" /> in September 2000. <ulink url="https://linuxtv.org" /> in September 2000.
Convergence is the maintainer of the Linux DVB API. Together with the Convergence is the maintainer of the Linux DVB API. Together with the
LinuxTV community (i.e. you, the reader of this document), the Linux DVB LinuxTV community (i.e. you, the reader of this document), the Linux DVB
API will be constantly reviewed and improved. With the Linux driver for API will be constantly reviewed and improved. With the Linux driver for
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* This program can be used and distributed without restrictions. * This program can be used and distributed without restrictions.
* *
* This program is provided with the V4L2 API * This program is provided with the V4L2 API
* see http://linuxtv.org/docs.php for more information * see https://linuxtv.org/docs.php for more information
*/ */
#include &lt;stdio.h&gt; #include &lt;stdio.h&gt;
......
...@@ -2666,7 +2666,7 @@ is useful to display images captured with V4L2 devices.</para> ...@@ -2666,7 +2666,7 @@ is useful to display images captured with V4L2 devices.</para>
<para>V4L2 does not support digital terrestrial, cable or <para>V4L2 does not support digital terrestrial, cable or
satellite broadcast. A separate project aiming at digital receivers satellite broadcast. A separate project aiming at digital receivers
exists. You can find its homepage at <ulink exists. You can find its homepage at <ulink
url="http://linuxtv.org">http://linuxtv.org</ulink>. The Linux DVB API url="https://linuxtv.org">https://linuxtv.org</ulink>. The Linux DVB API
has no connection to the V4L2 API except that drivers for hybrid has no connection to the V4L2 API except that drivers for hybrid
hardware may support both.</para> hardware may support both.</para>
</section> </section>
......
...@@ -699,7 +699,7 @@ linkend="v4l2-buf-type" /></entry> ...@@ -699,7 +699,7 @@ linkend="v4l2-buf-type" /></entry>
buffer. It depends on the negotiated data format and may change with buffer. It depends on the negotiated data format and may change with
each buffer for compressed variable size data like JPEG images. each buffer for compressed variable size data like JPEG images.
Drivers must set this field when <structfield>type</structfield> Drivers must set this field when <structfield>type</structfield>
refers to an input stream, applications when it refers to an output stream. refers to a capture stream, applications when it refers to an output stream.
If the application sets this to 0 for an output stream, then If the application sets this to 0 for an output stream, then
<structfield>bytesused</structfield> will be set to the size of the <structfield>bytesused</structfield> will be set to the size of the
buffer (see the <structfield>length</structfield> field of this struct) by buffer (see the <structfield>length</structfield> field of this struct) by
...@@ -720,14 +720,14 @@ linkend="buffer-flags" />.</entry> ...@@ -720,14 +720,14 @@ linkend="buffer-flags" />.</entry>
<entry>Indicates the field order of the image in the <entry>Indicates the field order of the image in the
buffer, see <xref linkend="v4l2-field" />. This field is not used when buffer, see <xref linkend="v4l2-field" />. This field is not used when
the buffer contains VBI data. Drivers must set it when the buffer contains VBI data. Drivers must set it when
<structfield>type</structfield> refers to an input stream, <structfield>type</structfield> refers to a capture stream,
applications when it refers to an output stream.</entry> applications when it refers to an output stream.</entry>
</row> </row>
<row> <row>
<entry>struct timeval</entry> <entry>struct timeval</entry>
<entry><structfield>timestamp</structfield></entry> <entry><structfield>timestamp</structfield></entry>
<entry></entry> <entry></entry>
<entry><para>For input streams this is time when the first data <entry><para>For capture streams this is time when the first data
byte was captured, as returned by the byte was captured, as returned by the
<function>clock_gettime()</function> function for the relevant <function>clock_gettime()</function> function for the relevant
clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in
...@@ -866,7 +866,7 @@ must set this to 0.</entry> ...@@ -866,7 +866,7 @@ must set this to 0.</entry>
<entry></entry> <entry></entry>
<entry>The number of bytes occupied by data in the plane <entry>The number of bytes occupied by data in the plane
(its payload). Drivers must set this field when <structfield>type</structfield> (its payload). Drivers must set this field when <structfield>type</structfield>
refers to an input stream, applications when it refers to an output stream. refers to a capture stream, applications when it refers to an output stream.
If the application sets this to 0 for an output stream, then If the application sets this to 0 for an output stream, then
<structfield>bytesused</structfield> will be set to the size of the <structfield>bytesused</structfield> will be set to the size of the
plane (see the <structfield>length</structfield> field of this struct) plane (see the <structfield>length</structfield> field of this struct)
...@@ -919,7 +919,7 @@ must set this to 0.</entry> ...@@ -919,7 +919,7 @@ must set this to 0.</entry>
<entry></entry> <entry></entry>
<entry>Offset in bytes to video data in the plane. <entry>Offset in bytes to video data in the plane.
Drivers must set this field when <structfield>type</structfield> Drivers must set this field when <structfield>type</structfield>
refers to an input stream, applications when it refers to an output stream. refers to a capture stream, applications when it refers to an output stream.
Note that data_offset is included in <structfield>bytesused</structfield>. Note that data_offset is included in <structfield>bytesused</structfield>.
So the size of the image in the plane is So the size of the image in the plane is
<structfield>bytesused</structfield>-<structfield>data_offset</structfield> at <structfield>bytesused</structfield>-<structfield>data_offset</structfield> at
......
...@@ -151,6 +151,16 @@ Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab, ...@@ -151,6 +151,16 @@ Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab,
structs, ioctls) must be noted in more detail in the history chapter structs, ioctls) must be noted in more detail in the history chapter
(compat.xml), along with the possible impact on existing drivers and (compat.xml), along with the possible impact on existing drivers and
applications. --> applications. -->
<revision>
<revnumber>4.5</revnumber>
<date>2015-10-29</date>
<authorinitials>rr</authorinitials>
<revremark>Extend vidioc-g-ext-ctrls;. Replace ctrl_class with a new
union with ctrl_class and which. Which is used to select the current value of
the control or the default value.
</revremark>
</revision>
<revision> <revision>
<revnumber>4.4</revnumber> <revnumber>4.4</revnumber>
<date>2015-05-26</date> <date>2015-05-26</date>
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<para>This ioctl is used to create buffers for <link linkend="mmap">memory <para>This ioctl is used to create buffers for <link linkend="mmap">memory
mapped</link> or <link linkend="userp">user pointer</link> or <link mapped</link> or <link linkend="userp">user pointer</link> or <link
linkend="dmabuf">DMA buffer</link> I/O. It can be used as an alternative or in linkend="dmabuf">DMA buffer</link> I/O. It can be used as an alternative or in
addition to the <constant>VIDIOC_REQBUFS</constant> ioctl, when a tighter addition to the &VIDIOC-REQBUFS; ioctl, when a tighter
control over buffers is required. This ioctl can be called multiple times to control over buffers is required. This ioctl can be called multiple times to
create buffers of different sizes.</para> create buffers of different sizes.</para>
...@@ -71,30 +71,28 @@ zeroed.</para> ...@@ -71,30 +71,28 @@ zeroed.</para>
<para>The <structfield>format</structfield> field specifies the image format <para>The <structfield>format</structfield> field specifies the image format
that the buffers must be able to handle. The application has to fill in this that the buffers must be able to handle. The application has to fill in this
&v4l2-format;. Usually this will be done using the &v4l2-format;. Usually this will be done using the &VIDIOC-TRY-FMT; or &VIDIOC-G-FMT; ioctls
<constant>VIDIOC_TRY_FMT</constant> or <constant>VIDIOC_G_FMT</constant> ioctl() to ensure that the requested format is supported by the driver.
to ensure that the requested format is supported by the driver. Unsupported Based on the format's <structfield>type</structfield> field the requested buffer
formats will result in an error.</para> size (for single-planar) or plane sizes (for multi-planar formats) will be
used for the allocated buffers. The driver may return an error if the size(s)
are not supported by the hardware (usually because they are too small).</para>
<para>The buffers created by this ioctl will have as minimum size the size <para>The buffers created by this ioctl will have as minimum size the size
defined by the <structfield>format.pix.sizeimage</structfield> field. If the defined by the <structfield>format.pix.sizeimage</structfield> field (or the
corresponding fields for other format types). Usually if the
<structfield>format.pix.sizeimage</structfield> field is less than the minimum <structfield>format.pix.sizeimage</structfield> field is less than the minimum
required for the given format, then <structfield>sizeimage</structfield> will be required for the given format, then an error will be returned since drivers will
increased by the driver to that minimum to allocate the buffers. If it is typically not allow this. If it is larger, then the value will be used as-is.
larger, then the value will be used as-is. The same applies to the In other words, the driver may reject the requested size, but if it is accepted
<structfield>sizeimage</structfield> field of the the driver will use it unchanged.</para>
<structname>v4l2_plane_pix_format</structname> structure in the case of
multiplanar formats.</para>
<para>When the ioctl is called with a pointer to this structure the driver <para>When the ioctl is called with a pointer to this structure the driver
will attempt to allocate up to the requested number of buffers and store the will attempt to allocate up to the requested number of buffers and store the
actual number allocated and the starting index in the actual number allocated and the starting index in the
<structfield>count</structfield> and the <structfield>index</structfield> fields <structfield>count</structfield> and the <structfield>index</structfield> fields
respectively. On return <structfield>count</structfield> can be smaller than respectively. On return <structfield>count</structfield> can be smaller than
the number requested. The driver may also increase buffer sizes if required, the number requested.</para>
however, it will not update <structfield>sizeimage</structfield> field values.
The user has to use <constant>VIDIOC_QUERYBUF</constant> to retrieve that
information.</para>
<table pgwide="1" frame="none" id="v4l2-create-buffers"> <table pgwide="1" frame="none" id="v4l2-create-buffers">
<title>struct <structname>v4l2_create_buffers</structname></title> <title>struct <structname>v4l2_create_buffers</structname></title>
......
...@@ -99,7 +99,7 @@ if the driver supports writing registers to the device.</para> ...@@ -99,7 +99,7 @@ if the driver supports writing registers to the device.</para>
<para>We recommended the <application>v4l2-dbg</application> <para>We recommended the <application>v4l2-dbg</application>
utility over calling this ioctl directly. It is available from the utility over calling this ioctl directly. It is available from the
LinuxTV v4l-dvb repository; see <ulink LinuxTV v4l-dvb repository; see <ulink
url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for url="https://linuxtv.org/repo/">https://linuxtv.org/repo/</ulink> for
access instructions.</para> access instructions.</para>
<!-- Note for convenience vidioc-dbg-g-register.sgml <!-- Note for convenience vidioc-dbg-g-register.sgml
......
...@@ -117,7 +117,7 @@ However when a driver supports these ioctls it must also support ...@@ -117,7 +117,7 @@ However when a driver supports these ioctls it must also support
<para>We recommended the <application>v4l2-dbg</application> <para>We recommended the <application>v4l2-dbg</application>
utility over calling these ioctls directly. It is available from the utility over calling these ioctls directly. It is available from the
LinuxTV v4l-dvb repository; see <ulink LinuxTV v4l-dvb repository; see <ulink
url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for url="https://linuxtv.org/repo/">https://linuxtv.org/repo/</ulink> for
access instructions.</para> access instructions.</para>
<!-- Note for convenience vidioc-dbg-g-chip-info.sgml <!-- Note for convenience vidioc-dbg-g-chip-info.sgml
......
...@@ -198,7 +198,7 @@ video4linux-list@redhat.com on 17 Oct 2002 ...@@ -198,7 +198,7 @@ video4linux-list@redhat.com on 17 Oct 2002
<constant>V4L2_STD_ATSC_16_VSB</constant> are U.S. terrestrial digital <constant>V4L2_STD_ATSC_16_VSB</constant> are U.S. terrestrial digital
TV standards. Presently the V4L2 API does not support digital TV. See TV standards. Presently the V4L2 API does not support digital TV. See
also the Linux DVB API at <ulink also the Linux DVB API at <ulink
url="http://linuxtv.org">http://linuxtv.org</ulink>.</para> url="https://linuxtv.org">https://linuxtv.org</ulink>.</para>
<para><programlisting> <para><programlisting>
#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\ #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
V4L2_STD_PAL_B1 |\ V4L2_STD_PAL_B1 |\
......
...@@ -61,7 +61,7 @@ must belong to the same control class.</para> ...@@ -61,7 +61,7 @@ must belong to the same control class.</para>
<para>Applications must always fill in the <para>Applications must always fill in the
<structfield>count</structfield>, <structfield>count</structfield>,
<structfield>ctrl_class</structfield>, <structfield>which</structfield>,
<structfield>controls</structfield> and <structfield>controls</structfield> and
<structfield>reserved</structfield> fields of &v4l2-ext-controls;, and <structfield>reserved</structfield> fields of &v4l2-ext-controls;, and
initialize the &v4l2-ext-control; array pointed to by the initialize the &v4l2-ext-control; array pointed to by the
...@@ -109,7 +109,7 @@ the driver whether wrong values are automatically adjusted to a valid ...@@ -109,7 +109,7 @@ the driver whether wrong values are automatically adjusted to a valid
value or if an error is returned.</para> value or if an error is returned.</para>
<para>When the <structfield>id</structfield> or <para>When the <structfield>id</structfield> or
<structfield>ctrl_class</structfield> is invalid drivers return an <structfield>which</structfield> is invalid drivers return an
&EINVAL;. When the value is out of bounds drivers can choose to take &EINVAL;. When the value is out of bounds drivers can choose to take
the closest valid value or return an &ERANGE;, whatever seems more the closest valid value or return an &ERANGE;, whatever seems more
appropriate. In the first case the new value is set in appropriate. In the first case the new value is set in
...@@ -223,7 +223,12 @@ Valid if <constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is set for this control ...@@ -223,7 +223,12 @@ Valid if <constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is set for this control
<tgroup cols="3"> <tgroup cols="3">
&cs-str; &cs-str;
<tbody valign="top"> <tbody valign="top">
<row>
<entry>union</entry>
<entry>(anonymous)</entry>
</row>
<row> <row>
<entry></entry>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>ctrl_class</structfield></entry> <entry><structfield>ctrl_class</structfield></entry>
<entry>The control class to which all controls belong, see <entry>The control class to which all controls belong, see
...@@ -233,6 +238,23 @@ belong to any control class. Whether drivers support this can be tested by setti ...@@ -233,6 +238,23 @@ belong to any control class. Whether drivers support this can be tested by setti
<structfield>ctrl_class</structfield> to 0 and calling <constant>VIDIOC_TRY_EXT_CTRLS</constant> <structfield>ctrl_class</structfield> to 0 and calling <constant>VIDIOC_TRY_EXT_CTRLS</constant>
with a <structfield>count</structfield> of 0. If that succeeds, then the driver with a <structfield>count</structfield> of 0. If that succeeds, then the driver
supports this feature.</entry> supports this feature.</entry>
</row>
<row>
<entry></entry>
<entry>__u32</entry>
<entry><structfield>which</structfield></entry>
<entry><para>Which value of the control to get/set/try. <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>
will return the current value of the control and <constant>V4L2_CTRL_WHICH_DEF_VAL</constant> will
return the default value of the control. Please note that you can only get the default value of the
control, you cannot set or try it.</para>
<para>For backwards compatibility you can also use a control class here (see
<xref linkend="ctrl-class" />). In that case all controls have to belong to that
control class. This usage is deprecated, instead just use <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.
There are some very old drivers that do not yet support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>
and that require a control class here. You can test for such drivers by setting ctrl_class to
<constant>V4L2_CTRL_WHICH_CUR_VAL</constant> and calling VIDIOC_TRY_EXT_CTRLS with a count of 0.
If that fails, then the driver does not support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.</para>
</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
...@@ -390,7 +412,7 @@ These controls are described in <xref linkend="rf-tuner-controls" />.</entry> ...@@ -390,7 +412,7 @@ These controls are described in <xref linkend="rf-tuner-controls" />.</entry>
<listitem> <listitem>
<para>The &v4l2-ext-control; <structfield>id</structfield> <para>The &v4l2-ext-control; <structfield>id</structfield>