to the <link linkend="control">User controls class</link>.
          </para>
         </listitem>
+        <listitem>
+         <para>Added the device_caps field to struct v4l2_capabilities and added the new
+         V4L2_CAP_DEVICE_CAPS capability.</para>
+        </listitem>
       </orderedlist>
     </section>
 
 
 (compat.xml), along with the possible impact on existing drivers and
 applications. -->
 
+      <revision>
+       <revnumber>3.3</revnumber>
+       <date>2012-01-11</date>
+       <authorinitials>hv</authorinitials>
+       <revremark>Added device_caps field to struct v4l2_capabilities.</revremark>
+      </revision>
+
       <revision>
        <revnumber>3.2</revnumber>
        <date>2011-08-26</date>
 </partinfo>
 
 <title>Video for Linux Two API Specification</title>
- <subtitle>Revision 3.2</subtitle>
+ <subtitle>Revision 3.3</subtitle>
 
   <chapter id="common">
     &sub-common;
 
          <row>
            <entry>__u32</entry>
            <entry><structfield>capabilities</structfield></entry>
-           <entry>Device capabilities, see <xref
-               linkend="device-capabilities" />.</entry>
+           <entry>Available capabilities of the physical device as a whole, see <xref
+               linkend="device-capabilities" />. The same physical device can export
+               multiple devices in /dev (e.g. /dev/videoX, /dev/vbiY and /dev/radioZ).
+               The <structfield>capabilities</structfield> field should contain a union
+               of all capabilities available around the several V4L2 devices exported
+               to userspace.
+               For all those devices the <structfield>capabilities</structfield> field
+               returns the same set of capabilities. This allows applications to open
+               just one of the devices (typically the video device) and discover whether
+               video, vbi and/or radio are also supported.
+           </entry>
          </row>
          <row>
            <entry>__u32</entry>
-           <entry><structfield>reserved</structfield>[4]</entry>
+           <entry><structfield>device_caps</structfield></entry>
+           <entry>Device capabilities of the opened device, see <xref
+               linkend="device-capabilities" />. Should contain the available capabilities
+               of that specific device node. So, for example, <structfield>device_caps</structfield>
+               of a radio device will only contain radio related capabilities and
+               no video or vbi capabilities. This field is only set if the <structfield>capabilities</structfield>
+               field contains the <constant>V4L2_CAP_DEVICE_CAPS</constant> capability.
+               Only the <structfield>capabilities</structfield> field can have the
+               <constant>V4L2_CAP_DEVICE_CAPS</constant> capability, <structfield>device_caps</structfield>
+               will never set <constant>V4L2_CAP_DEVICE_CAPS</constant>.
+           </entry>
+         </row>
+         <row>
+           <entry>__u32</entry>
+           <entry><structfield>reserved</structfield>[3]</entry>
            <entry>Reserved for future extensions. Drivers must set
 this array to zero.</entry>
          </row>
            <entry>The device supports the <link
 linkend="mmap">streaming</link> I/O method.</entry>
          </row>
+         <row>
+           <entry><constant>V4L2_CAP_DEVICE_CAPS</constant></entry>
+           <entry>0x80000000</entry>
+           <entry>The driver fills the <structfield>device_caps</structfield>
+           field. This capability can only appear in the <structfield>capabilities</structfield>
+           field and never in the <structfield>device_caps</structfield> field.</entry>
+         </row>
        </tbody>
       </tgroup>
     </table>
 
        .capabilities   = (V4L2_CAP_VIDEO_CAPTURE |
                           V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_RADIO |
                         V4L2_CAP_STREAMING | V4L2_CAP_READWRITE),
-       .reserved       = {0, 0, 0, 0}
 };
 static int vidioc_querycap(struct file *file, void  *priv,
                                struct v4l2_capability *cap)
 
        .capabilities   = (V4L2_CAP_VIDEO_CAPTURE |
                           V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_RADIO |
                           V4L2_CAP_READWRITE),
-       .reserved       = {0,0,0,0}
 };
 
 static struct v4l2_fmtdesc pvr_fmtdesc [] = {
 
                if (!ret)
                        dbgarg(cmd, "driver=%s, card=%s, bus=%s, "
                                        "version=0x%08x, "
-                                       "capabilities=0x%08x\n",
+                                       "capabilities=0x%08x, "
+                                       "device_caps=0x%08x\n",
                                        cap->driver, cap->card, cap->bus_info,
                                        cap->version,
-                                       cap->capabilities);
+                                       cap->capabilities,
+                                       cap->device_caps);
                break;
        }
 
 
        __u32   denominator;
 };
 
-/*
- *     D R I V E R   C A P A B I L I T I E S
- */
+/**
+  * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
+  *
+  * @driver:      name of the driver module (e.g. "bttv")
+  * @card:        name of the card (e.g. "Hauppauge WinTV")
+  * @bus_info:    name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
+  * @version:     KERNEL_VERSION
+  * @capabilities: capabilities of the physical device as a whole
+  * @device_caps:  capabilities accessed via this particular device (node)
+  * @reserved:    reserved fields for future extensions
+  */
 struct v4l2_capability {
-       __u8    driver[16];     /* i.e. "bttv" */
-       __u8    card[32];       /* i.e. "Hauppauge WinTV" */
-       __u8    bus_info[32];   /* "PCI:" + pci_name(pci_dev) */
-       __u32   version;        /* should use KERNEL_VERSION() */
-       __u32   capabilities;   /* Device capabilities */
-       __u32   reserved[4];
+       __u8    driver[16];
+       __u8    card[32];
+       __u8    bus_info[32];
+       __u32   version;
+       __u32   capabilities;
+       __u32   device_caps;
+       __u32   reserved[3];
 };
 
 /* Values for 'capabilities' field */
 #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
 #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
 
+#define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
+
 /*
  *     V I D E O   I M A G E   F O R M A T
  */