Merge tag 'v3.8-rc1' into staging/for_v3.9
authorMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 27 Dec 2012 14:44:11 +0000 (12:44 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 27 Dec 2012 14:44:11 +0000 (12:44 -0200)
Linux 3.8-rc1

* tag 'v3.8-rc1': (10696 commits)
  Linux 3.8-rc1
  Revert "nfsd: warn on odd reply state in nfsd_vfs_read"
  ARM: dts: fix duplicated build target and alphabetical sort out for exynos
  dm stripe: add WRITE SAME support
  dm: remove map_info
  dm snapshot: do not use map_context
  dm thin: dont use map_context
  dm raid1: dont use map_context
  dm flakey: dont use map_context
  dm raid1: rename read_record to bio_record
  dm: move target request nr to dm_target_io
  dm snapshot: use per_bio_data
  dm verity: use per_bio_data
  dm raid1: use per_bio_data
  dm: introduce per_bio_data
  dm kcopyd: add WRITE SAME support to dm_kcopyd_zero
  dm linear: add WRITE SAME support
  dm: add WRITE SAME support
  dm: prepare to support WRITE SAME
  dm ioctl: use kmalloc if possible
  ...

Conflicts:
MAINTAINERS

217 files changed:
Documentation/DocBook/media/v4l/compat.xml
Documentation/DocBook/media/v4l/io.xml
Documentation/DocBook/media/v4l/pixfmt-nv12m.xml
Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml [new file with mode: 0644]
Documentation/DocBook/media/v4l/pixfmt-uv8.xml [new file with mode: 0644]
Documentation/DocBook/media/v4l/pixfmt.xml
Documentation/DocBook/media/v4l/subdev-formats.xml
Documentation/DocBook/media/v4l/v4l2.xml
Documentation/DocBook/media_api.tmpl
Documentation/video4linux/et61x251.txt [deleted file]
Documentation/video4linux/ibmcam.txt [deleted file]
Documentation/video4linux/m5602.txt [deleted file]
Documentation/video4linux/ov511.txt [deleted file]
Documentation/video4linux/se401.txt [deleted file]
Documentation/video4linux/soc-camera.txt
Documentation/video4linux/stv680.txt [deleted file]
Documentation/video4linux/v4l2-framework.txt
Documentation/video4linux/w9968cf.txt [deleted file]
Documentation/video4linux/zc0301.txt [deleted file]
MAINTAINERS
arch/arm/mach-davinci/board-dm644x-evm.c
arch/arm/mach-davinci/dm644x.c
drivers/media/common/saa7146/saa7146_fops.c
drivers/media/dvb-frontends/ix2505v.c
drivers/media/dvb-frontends/or51211.c
drivers/media/dvb-frontends/tda10071.c
drivers/media/dvb-frontends/tda10071.h
drivers/media/dvb-frontends/tda8261_cfg.h
drivers/media/i2c/ov7670.c
drivers/media/pci/bt8xx/bttv-driver.c
drivers/media/pci/cx23885/Kconfig
drivers/media/pci/cx23885/cx23885-cards.c
drivers/media/pci/cx23885/cx23885-core.c
drivers/media/pci/cx23885/cx23885-dvb.c
drivers/media/pci/cx23885/cx23885-input.c
drivers/media/pci/cx23885/cx23885-video.c
drivers/media/pci/cx23885/cx23885.h
drivers/media/pci/cx25821/cx25821-video.c
drivers/media/pci/cx88/cx88-core.c
drivers/media/pci/ivtv/ivtv-driver.c
drivers/media/pci/meye/meye.c
drivers/media/pci/saa7134/saa7134-core.c
drivers/media/pci/saa7134/saa7134-dvb.c
drivers/media/pci/sta2x11/sta2x11_vip.c
drivers/media/pci/zoran/zoran_device.c
drivers/media/pci/zoran/zoran_driver.c
drivers/media/platform/Kconfig
drivers/media/platform/Makefile
drivers/media/platform/blackfin/Kconfig
drivers/media/platform/blackfin/Makefile
drivers/media/platform/blackfin/bfin_capture.c
drivers/media/platform/blackfin/ppi.c
drivers/media/platform/coda.c
drivers/media/platform/davinci/Kconfig
drivers/media/platform/davinci/Makefile
drivers/media/platform/davinci/vpbe.c
drivers/media/platform/davinci/vpbe_display.c
drivers/media/platform/davinci/vpbe_osd.c
drivers/media/platform/davinci/vpbe_venc.c
drivers/media/platform/davinci/vpfe_capture.c
drivers/media/platform/davinci/vpif_capture.c
drivers/media/platform/davinci/vpif_display.c
drivers/media/platform/davinci/vpss.c
drivers/media/platform/exynos-gsc/gsc-core.c
drivers/media/platform/exynos-gsc/gsc-core.h
drivers/media/platform/exynos-gsc/gsc-m2m.c
drivers/media/platform/exynos-gsc/gsc-regs.c
drivers/media/platform/fsl-viu.c
drivers/media/platform/m2m-deinterlace.c
drivers/media/platform/omap/omap_vout.c
drivers/media/platform/omap24xxcam.c
drivers/media/platform/omap3isp/ispqueue.c
drivers/media/platform/s5p-fimc/fimc-capture.c
drivers/media/platform/s5p-fimc/fimc-core.c
drivers/media/platform/s5p-fimc/fimc-core.h
drivers/media/platform/s5p-fimc/fimc-lite-reg.c
drivers/media/platform/s5p-fimc/fimc-lite.c
drivers/media/platform/s5p-fimc/fimc-lite.h
drivers/media/platform/s5p-fimc/fimc-m2m.c
drivers/media/platform/s5p-fimc/fimc-mdevice.c
drivers/media/platform/s5p-fimc/fimc-mdevice.h
drivers/media/platform/s5p-fimc/fimc-reg.c
drivers/media/platform/s5p-fimc/fimc-reg.h
drivers/media/platform/s5p-fimc/mipi-csis.c
drivers/media/platform/s5p-tv/sii9234_drv.c
drivers/media/platform/sh_veu.c [new file with mode: 0644]
drivers/media/platform/sh_vou.c
drivers/media/platform/soc_camera/atmel-isi.c
drivers/media/platform/soc_camera/mx1_camera.c
drivers/media/platform/soc_camera/mx2_camera.c
drivers/media/platform/soc_camera/mx3_camera.c
drivers/media/platform/soc_camera/omap1_camera.c
drivers/media/platform/soc_camera/pxa_camera.c
drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c
drivers/media/platform/soc_camera/sh_mobile_csi2.c
drivers/media/platform/soc_camera/soc_camera.c
drivers/media/platform/soc_camera/soc_mediabus.c
drivers/media/platform/timblogiw.c
drivers/media/platform/vino.c
drivers/media/platform/vivi.c
drivers/media/rc/ati_remote.c
drivers/media/rc/ene_ir.c
drivers/media/rc/fintek-cir.c
drivers/media/rc/gpio-ir-recv.c
drivers/media/rc/ite-cir.c
drivers/media/rc/keymaps/Makefile
drivers/media/rc/keymaps/rc-total-media-in-hand-02.c [new file with mode: 0644]
drivers/media/rc/nuvoton-cir.c
drivers/media/rc/rc-main.c
drivers/media/rc/winbond-cir.c
drivers/media/tuners/tda18212.c
drivers/media/tuners/tda18218.c
drivers/media/tuners/tda18271-fe.c
drivers/media/usb/Kconfig
drivers/media/usb/au0828/Kconfig
drivers/media/usb/au0828/Makefile
drivers/media/usb/au0828/au0828-cards.c
drivers/media/usb/au0828/au0828-core.c
drivers/media/usb/au0828/au0828-i2c.c
drivers/media/usb/au0828/au0828-video.c
drivers/media/usb/au0828/au0828.h
drivers/media/usb/cpia2/cpia2_usb.c
drivers/media/usb/cpia2/cpia2_v4l.c
drivers/media/usb/cx231xx/cx231xx-417.c
drivers/media/usb/cx231xx/cx231xx-vbi.c
drivers/media/usb/cx231xx/cx231xx-video.c
drivers/media/usb/dvb-usb-v2/it913x.c
drivers/media/usb/dvb-usb/dw2102.c
drivers/media/usb/em28xx/Kconfig
drivers/media/usb/em28xx/em28xx-cards.c
drivers/media/usb/em28xx/em28xx-core.c
drivers/media/usb/em28xx/em28xx-dvb.c
drivers/media/usb/em28xx/em28xx-i2c.c
drivers/media/usb/em28xx/em28xx-input.c
drivers/media/usb/em28xx/em28xx-reg.h
drivers/media/usb/em28xx/em28xx-vbi.c
drivers/media/usb/em28xx/em28xx-video.c
drivers/media/usb/em28xx/em28xx.h
drivers/media/usb/gspca/jl2005bcd.c
drivers/media/usb/gspca/kinect.c
drivers/media/usb/gspca/pac207.c
drivers/media/usb/gspca/sonixb.c
drivers/media/usb/gspca/sonixj.c
drivers/media/usb/gspca/stv06xx/stv06xx_vv6410.c
drivers/media/usb/gspca/t613.c
drivers/media/usb/pwc/pwc-if.c
drivers/media/usb/s2255/s2255drv.c
drivers/media/usb/sn9c102/sn9c102_core.c
drivers/media/usb/stk1160/stk1160-video.c
drivers/media/usb/stkwebcam/stk-webcam.c
drivers/media/usb/tlg2300/pd-video.c
drivers/media/usb/tm6000/tm6000-dvb.c
drivers/media/usb/tm6000/tm6000-video.c
drivers/media/usb/tm6000/tm6000.h
drivers/media/usb/usbvision/usbvision-core.c
drivers/media/usb/usbvision/usbvision-video.c
drivers/media/usb/zr364xx/zr364xx.c
drivers/media/v4l2-core/v4l2-common.c
drivers/media/v4l2-core/v4l2-mem2mem.c
drivers/media/v4l2-core/videobuf-core.c
drivers/media/v4l2-core/videobuf2-core.c
drivers/staging/media/Kconfig
drivers/staging/media/Makefile
drivers/staging/media/as102/as10x_cmd_cfg.c
drivers/staging/media/cxd2099/cxd2099.c
drivers/staging/media/cxd2099/cxd2099.h
drivers/staging/media/davinci_vpfe/Kconfig [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/Makefile [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/TODO [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/davinci-vpfe-mc.txt [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/davinci_vpfe_user.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipe.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipe.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipe_hw.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipe_hw.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipeif.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipeif.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_ipipeif_user.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_isif.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_isif.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_isif_regs.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_resizer.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/dm365_resizer.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/vpfe.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/vpfe_mc_capture.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/vpfe_mc_capture.h [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/vpfe_video.c [new file with mode: 0644]
drivers/staging/media/davinci_vpfe/vpfe_video.h [new file with mode: 0644]
drivers/staging/media/dt3155v4l/dt3155v4l.c
drivers/staging/media/go7007/go7007-driver.c
drivers/staging/media/go7007/go7007-i2c.c
drivers/staging/media/go7007/go7007-v4l2.c
drivers/staging/media/go7007/s2250-board.c
drivers/staging/media/go7007/s2250-loader.c
drivers/staging/media/go7007/wis-sony-tuner.c
drivers/staging/media/go7007/wis-tw2804.c
drivers/staging/media/go7007/wis-tw9903.c
drivers/staging/media/go7007/wis-uda1342.c
drivers/staging/media/lirc/lirc_bt829.c
drivers/staging/media/lirc/lirc_igorplugusb.c
drivers/staging/media/lirc/lirc_imon.c
drivers/staging/media/lirc/lirc_parallel.c
drivers/staging/media/lirc/lirc_sasem.c
drivers/staging/media/lirc/lirc_serial.c
drivers/staging/media/lirc/lirc_sir.c
drivers/staging/media/solo6x10/p2m.c
drivers/staging/media/solo6x10/v4l2-enc.c
include/media/blackfin/bfin_capture.h
include/media/blackfin/ppi.h
include/media/davinci/vpbe_osd.h
include/media/davinci/vpbe_venc.h
include/media/davinci/vpss.h
include/media/rc-map.h
include/media/v4l2-common.h
include/media/v4l2-mem2mem.h
include/uapi/linux/v4l2-mediabus.h
include/uapi/linux/videodev2.h

index 3dd9e78815d1bca89576c2817bb050471419cf04..ebd2bfd1ee8eb3a380ab52cde6883473727cfb8f 100644 (file)
@@ -2477,6 +2477,18 @@ that used it. It was originally scheduled for removal in 2.6.35.
       </orderedlist>
     </section>
 
+    <section>
+      <title>V4L2 in Linux 3.9</title>
+      <orderedlist>
+        <listitem>
+         <para>Added timestamp types to
+         <structfield>flags</structfield> field in
+         <structname>v4l2_buffer</structname>. See <xref
+         linkend="buffer-flags" />.</para>
+        </listitem>
+      </orderedlist>
+    </section>
+
     <section id="other">
       <title>Relation of V4L2 to other Linux multimedia APIs</title>
 
index 388a3403265380f14128feb10b50543f69bd994c..2c4646d504c2b6af4b80358dad6d6de9c2e06151 100644 (file)
@@ -741,17 +741,19 @@ applications when an output stream.</entry>
            <entry>struct timeval</entry>
            <entry><structfield>timestamp</structfield></entry>
            <entry></entry>
-           <entry><para>For input streams this is the
-system time (as returned by the <function>gettimeofday()</function>
-function) when the first data byte was captured. For output streams
-the data will not be displayed before this time, secondary to the
-nominal frame rate determined by the current video standard in
-enqueued order. Applications can for example zero this field to
-display frames as soon as possible. The driver stores the time at
-which the first data byte was actually sent out in the
-<structfield>timestamp</structfield> field. This permits
-applications to monitor the drift between the video and system
-clock.</para></entry>
+           <entry><para>For input streams this is time when the first data
+           byte was captured, as returned by the
+           <function>clock_gettime()</function> function for the relevant
+           clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in
+           <xref linkend="buffer-flags" />. For output streams the data
+           will not be displayed before this time, secondary to the nominal
+           frame rate determined by the current video standard in enqueued
+           order. Applications can for example zero this field to display
+           frames as soon as possible. The driver stores the time at which
+           the first data byte was actually sent out in the
+           <structfield>timestamp</structfield> field. This permits
+           applications to monitor the drift between the video and system
+           clock.</para></entry>
          </row>
          <row>
            <entry>&v4l2-timecode;</entry>
@@ -903,7 +905,7 @@ should set this to 0.</entry>
          </row>
          <row>
            <entry></entry>
-           <entry>__unsigned long</entry>
+           <entry>unsigned long</entry>
            <entry><structfield>userptr</structfield></entry>
            <entry>When the memory type in the containing &v4l2-buffer; is
              <constant>V4L2_MEMORY_USERPTR</constant>, this is a userspace
@@ -1114,6 +1116,35 @@ Typically applications shall use this flag for output buffers if the data
 in this buffer has not been created by the CPU but by some DMA-capable unit,
 in which case caches have not been used.</entry>
          </row>
+         <row>
+           <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant></entry>
+           <entry>0xe000</entry>
+           <entry>Mask for timestamp types below. To test the
+           timestamp type, mask out bits not belonging to timestamp
+           type by performing a logical and operation with buffer
+           flags and timestamp mask.</entry>
+         </row>
+         <row>
+           <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN</constant></entry>
+           <entry>0x0000</entry>
+           <entry>Unknown timestamp type. This type is used by
+           drivers before Linux 3.9 and may be either monotonic (see
+           below) or realtime (wall clock). Monotonic clock has been
+           favoured in embedded systems whereas most of the drivers
+           use the realtime clock. Either kinds of timestamps are
+           available in user space via
+           <function>clock_gettime(2)</function> using clock IDs
+           <constant>CLOCK_MONOTONIC</constant> and
+           <constant>CLOCK_REALTIME</constant>, respectively.</entry>
+         </row>
+         <row>
+           <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC</constant></entry>
+           <entry>0x2000</entry>
+           <entry>The buffer timestamp has been taken from the
+           <constant>CLOCK_MONOTONIC</constant> clock. To access the
+           same clock outside V4L2, use
+           <function>clock_gettime(2)</function> .</entry>
+         </row>
        </tbody>
       </tgroup>
     </table>
index a990b34d911a123f775f20001f9e9629947276b2..f3a3d459fcdf58bede0e69437fd3d44ec0f133e7 100644 (file)
@@ -6,7 +6,7 @@
       <refnamediv>
        <refname id="V4L2-PIX-FMT-NV12M"><constant>V4L2_PIX_FMT_NV12M</constant></refname>
        <refname id="V4L2-PIX-FMT-NV21M"><constant>V4L2_PIX_FMT_NV21M</constant></refname>
-       <refname id="V4L2-PIX-FMT-NV12MT_16X16"><constant>V4L2_PIX_FMT_NV12MT_16X16</constant></refname>
+       <refname id="V4L2-PIX-FMT-NV12MT-16X16"><constant>V4L2_PIX_FMT_NV12MT_16X16</constant></refname>
        <refpurpose>Variation of <constant>V4L2_PIX_FMT_NV12</constant> and <constant>V4L2_PIX_FMT_NV21</constant> with planes
          non contiguous in memory. </refpurpose>
       </refnamediv>
diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml
new file mode 100644 (file)
index 0000000..c934192
--- /dev/null
@@ -0,0 +1,34 @@
+       <refentry>
+         <refmeta>
+           <refentrytitle>
+             V4L2_PIX_FMT_SBGGR10ALAW8 ('aBA8'),
+             V4L2_PIX_FMT_SGBRG10ALAW8 ('aGA8'),
+             V4L2_PIX_FMT_SGRBG10ALAW8 ('agA8'),
+             V4L2_PIX_FMT_SRGGB10ALAW8 ('aRA8'),
+           </refentrytitle>
+           &manvol;
+         </refmeta>
+         <refnamediv>
+           <refname id="V4L2-PIX-FMT-SBGGR10ALAW8">
+             <constant>V4L2_PIX_FMT_SBGGR10ALAW8</constant>
+           </refname>
+           <refname id="V4L2-PIX-FMT-SGBRG10ALAW8">
+             <constant>V4L2_PIX_FMT_SGBRG10ALAW8</constant>
+           </refname>
+           <refname id="V4L2-PIX-FMT-SGRBG10ALAW8">
+             <constant>V4L2_PIX_FMT_SGRBG10ALAW8</constant>
+           </refname>
+           <refname id="V4L2-PIX-FMT-SRGGB10ALAW8">
+             <constant>V4L2_PIX_FMT_SRGGB10ALAW8</constant>
+           </refname>
+           <refpurpose>10-bit Bayer formats compressed to 8 bits</refpurpose>
+         </refnamediv>
+         <refsect1>
+           <title>Description</title>
+           <para>The following four pixel formats are raw sRGB / Bayer
+           formats with 10 bits per color compressed to 8 bits each,
+           using the A-LAW algorithm. Each color component consumes 8
+           bits of memory. In other respects this format is similar to
+           <xref linkend="V4L2-PIX-FMT-SRGGB8">.</xref></para>
+         </refsect1>
+       </refentry>
diff --git a/Documentation/DocBook/media/v4l/pixfmt-uv8.xml b/Documentation/DocBook/media/v4l/pixfmt-uv8.xml
new file mode 100644 (file)
index 0000000..c507c1f
--- /dev/null
@@ -0,0 +1,62 @@
+       <refentry id="V4L2-PIX-FMT-UV8">
+         <refmeta>
+           <refentrytitle>V4L2_PIX_FMT_UV8  ('UV8')</refentrytitle>
+           &manvol;
+         </refmeta>
+         <refnamediv>
+           <refname><constant>V4L2_PIX_FMT_UV8</constant></refname>
+           <refpurpose>UV plane interleaved</refpurpose>
+         </refnamediv>
+         <refsect1>
+           <title>Description</title>
+           <para>In this format there is no Y plane, Only CbCr plane. ie
+           (UV interleaved)</para>
+           <example>
+           <title>
+             <constant>V4L2_PIX_FMT_UV8</constant>
+              pixel image
+           </title>
+
+           <formalpara>
+             <title>Byte Order.</title>
+             <para>Each cell is one byte.
+               <informaltable frame="none">
+               <tgroup cols="5" align="center">
+                 <colspec align="left" colwidth="2*" />
+                 <tbody valign="top">
+                   <row>
+                     <entry>start&nbsp;+&nbsp;0:</entry>
+                     <entry>Cb<subscript>00</subscript></entry>
+                     <entry>Cr<subscript>00</subscript></entry>
+                     <entry>Cb<subscript>01</subscript></entry>
+                     <entry>Cr<subscript>01</subscript></entry>
+                   </row>
+                   <row>
+                     <entry>start&nbsp;+&nbsp;4:</entry>
+                     <entry>Cb<subscript>10</subscript></entry>
+                     <entry>Cr<subscript>10</subscript></entry>
+                     <entry>Cb<subscript>11</subscript></entry>
+                     <entry>Cr<subscript>11</subscript></entry>
+                   </row>
+                   <row>
+                     <entry>start&nbsp;+&nbsp;8:</entry>
+                     <entry>Cb<subscript>20</subscript></entry>
+                     <entry>Cr<subscript>20</subscript></entry>
+                     <entry>Cb<subscript>21</subscript></entry>
+                     <entry>Cr<subscript>21</subscript></entry>
+                   </row>
+                   <row>
+                     <entry>start&nbsp;+&nbsp;12:</entry>
+                     <entry>Cb<subscript>30</subscript></entry>
+                     <entry>Cr<subscript>30</subscript></entry>
+                     <entry>Cb<subscript>31</subscript></entry>
+                     <entry>Cr<subscript>31</subscript></entry>
+                   </row>
+                 </tbody>
+               </tgroup>
+               </informaltable>
+             </para>
+             </formalpara>
+           </example>
+         </refsect1>
+       </refentry>
index bf94f417592cac290670f4e65ace3a54fc1eb173..99b8d2ad6e4ff1613db6a789c0228afde61318b5 100644 (file)
@@ -673,6 +673,7 @@ access the palette, this must be done with ioctls of the Linux framebuffer API.<
     &sub-srggb8;
     &sub-sbggr16;
     &sub-srggb10;
+    &sub-srggb10alaw8;
     &sub-srggb10dpcm8;
     &sub-srggb12;
   </section>
@@ -701,6 +702,7 @@ information.</para>
     &sub-y12;
     &sub-y10b;
     &sub-y16;
+    &sub-uv8;
     &sub-yuyv;
     &sub-uyvy;
     &sub-yvyu;
index a0a936455faef1c68d59f5997b8697b7ad1e2d65..cc51372ed5e0c07fd277f8f67a303e5a3324599e 100644 (file)
        <listitem><para>The number of bits per pixel component. All components are
        transferred on the same number of bits. Common values are 8, 10 and 12.</para>
        </listitem>
-       <listitem><para>If the pixel components are DPCM-compressed, a mention of the
-       DPCM compression and the number of bits per compressed pixel component.</para>
-       </listitem>
+       <listitem><para>The compression (optional). If the pixel components are
+       ALAW- or DPCM-compressed, a mention of the compression scheme and the
+       number of bits per compressed pixel component.</para></listitem>
        <listitem><para>The number of bus samples per pixel. Pixels that are wider than
        the bus width must be transferred in multiple samples. Common values are
        1 and 2.</para></listitem>
              <entry>r<subscript>1</subscript></entry>
              <entry>r<subscript>0</subscript></entry>
            </row>
+           <row id="V4L2-MBUS-FMT-SBGGR10-ALAW8-1X8">
+             <entry>V4L2_MBUS_FMT_SBGGR10_ALAW8_1X8</entry>
+             <entry>0x3015</entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>b<subscript>7</subscript></entry>
+             <entry>b<subscript>6</subscript></entry>
+             <entry>b<subscript>5</subscript></entry>
+             <entry>b<subscript>4</subscript></entry>
+             <entry>b<subscript>3</subscript></entry>
+             <entry>b<subscript>2</subscript></entry>
+             <entry>b<subscript>1</subscript></entry>
+             <entry>b<subscript>0</subscript></entry>
+           </row>
+           <row id="V4L2-MBUS-FMT-SGBRG10-ALAW8-1X8">
+             <entry>V4L2_MBUS_FMT_SGBRG10_ALAW8_1X8</entry>
+             <entry>0x3016</entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>g<subscript>7</subscript></entry>
+             <entry>g<subscript>6</subscript></entry>
+             <entry>g<subscript>5</subscript></entry>
+             <entry>g<subscript>4</subscript></entry>
+             <entry>g<subscript>3</subscript></entry>
+             <entry>g<subscript>2</subscript></entry>
+             <entry>g<subscript>1</subscript></entry>
+             <entry>g<subscript>0</subscript></entry>
+           </row>
+           <row id="V4L2-MBUS-FMT-SGRBG10-ALAW8-1X8">
+             <entry>V4L2_MBUS_FMT_SGRBG10_ALAW8_1X8</entry>
+             <entry>0x3017</entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>g<subscript>7</subscript></entry>
+             <entry>g<subscript>6</subscript></entry>
+             <entry>g<subscript>5</subscript></entry>
+             <entry>g<subscript>4</subscript></entry>
+             <entry>g<subscript>3</subscript></entry>
+             <entry>g<subscript>2</subscript></entry>
+             <entry>g<subscript>1</subscript></entry>
+             <entry>g<subscript>0</subscript></entry>
+           </row>
+           <row id="V4L2-MBUS-FMT-SRGGB10-ALAW8-1X8">
+             <entry>V4L2_MBUS_FMT_SRGGB10_ALAW8_1X8</entry>
+             <entry>0x3018</entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>r<subscript>7</subscript></entry>
+             <entry>r<subscript>6</subscript></entry>
+             <entry>r<subscript>5</subscript></entry>
+             <entry>r<subscript>4</subscript></entry>
+             <entry>r<subscript>3</subscript></entry>
+             <entry>r<subscript>2</subscript></entry>
+             <entry>r<subscript>1</subscript></entry>
+             <entry>r<subscript>0</subscript></entry>
+           </row>
            <row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8">
              <entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry>
              <entry>0x300b</entry>
       <title>Packed YUV Formats</title>
 
       <para>Those data formats transfer pixel data as (possibly downsampled) Y, U
-      and V components. The format code is made of the following information.
+      and V components. Some formats include dummy bits in some of their samples
+      and are collectively referred to as "YDYC" (Y-Dummy-Y-Chroma) formats.
+      One cannot rely on the values of these dummy bits as those are undefined.
+      </para>
+      <para>The format code is made of the following information.
       <itemizedlist>
        <listitem><para>The Y, U and V components order code, as transferred on the
-       bus. Possible values are YUYV, UYVY, YVYU and VYUY.</para></listitem>
+       bus. Possible values are YUYV, UYVY, YVYU and VYUY for formats with no
+       dummy bit, and YDYUYDYV, YDYVYDYU, YUYDYVYD and YVYDYUYD for YDYC formats.
+       </para></listitem>
        <listitem><para>The number of bits per pixel component. All components are
        transferred on the same number of bits. Common values are 8, 10 and 12.</para>
        </listitem>
       U, Y, V, Y order will be named <constant>V4L2_MBUS_FMT_UYVY8_2X8</constant>.
       </para>
 
-      <para>The following table lisst existing packet YUV formats.</para>
+       <para><xref linkend="v4l2-mbus-pixelcode-yuv8"/> list existing packet YUV
+       formats and describes the organization of each pixel data in each sample.
+       When a format pattern is split across multiple samples each of the samples
+       in the pattern is described.</para>
+
+       <para>The role of each bit transferred over the bus is identified by one
+       of the following codes.</para>
+
+       <itemizedlist>
+          <listitem><para>y<subscript>x</subscript> for luma component bit number x</para></listitem>
+          <listitem><para>u<subscript>x</subscript> for blue chroma component bit number x</para></listitem>
+          <listitem><para>v<subscript>x</subscript> for red chroma component bit number x</para></listitem>
+          <listitem><para>- for non-available bits (for positions higher than the bus width)</para></listitem>
+          <listitem><para>d for dummy bits</para></listitem>
+       </itemizedlist>
 
       <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-yuv8">
        <title>YUV Formats</title>
          <colspec colname="id" align="left" />
          <colspec colname="code" align="center"/>
          <colspec colname="bit" />
-         <colspec colnum="4" colname="b19" align="center" />
-         <colspec colnum="5" colname="b18" align="center" />
-         <colspec colnum="6" colname="b17" align="center" />
-         <colspec colnum="7" colname="b16" align="center" />
-         <colspec colnum="8" colname="b15" align="center" />
-         <colspec colnum="9" colname="b14" align="center" />
-         <colspec colnum="10" colname="b13" align="center" />
-         <colspec colnum="11" colname="b12" align="center" />
-         <colspec colnum="12" colname="b11" align="center" />
-         <colspec colnum="13" colname="b10" align="center" />
-         <colspec colnum="14" colname="b09" align="center" />
-         <colspec colnum="15" colname="b08" align="center" />
-         <colspec colnum="16" colname="b07" align="center" />
-         <colspec colnum="17" colname="b06" align="center" />
-         <colspec colnum="18" colname="b05" align="center" />
-         <colspec colnum="19" colname="b04" align="center" />
-         <colspec colnum="20" colname="b03" align="center" />
-         <colspec colnum="21" colname="b02" align="center" />
-         <colspec colnum="22" colname="b01" align="center" />
-         <colspec colnum="23" colname="b00" align="center" />
-         <spanspec namest="b19" nameend="b00" spanname="b0" />
+         <colspec colnum="4" colname="b29" align="center" />
+         <colspec colnum="5" colname="b28" align="center" />
+         <colspec colnum="6" colname="b27" align="center" />
+         <colspec colnum="7" colname="b26" align="center" />
+         <colspec colnum="8" colname="b25" align="center" />
+         <colspec colnum="9" colname="b24" align="center" />
+         <colspec colnum="10" colname="b23" align="center" />
+         <colspec colnum="11" colname="b22" align="center" />
+         <colspec colnum="12" colname="b21" align="center" />
+         <colspec colnum="13" colname="b20" align="center" />
+         <colspec colnum="14" colname="b19" align="center" />
+         <colspec colnum="15" colname="b18" align="center" />
+         <colspec colnum="16" colname="b17" align="center" />
+         <colspec colnum="17" colname="b16" align="center" />
+         <colspec colnum="18" colname="b15" align="center" />
+         <colspec colnum="19" colname="b14" align="center" />
+         <colspec colnum="20" colname="b13" align="center" />
+         <colspec colnum="21" colname="b12" align="center" />
+         <colspec colnum="22" colname="b11" align="center" />
+         <colspec colnum="23" colname="b10" align="center" />
+         <colspec colnum="24" colname="b09" align="center" />
+         <colspec colnum="25" colname="b08" align="center" />
+         <colspec colnum="26" colname="b07" align="center" />
+         <colspec colnum="27" colname="b06" align="center" />
+         <colspec colnum="28" colname="b05" align="center" />
+         <colspec colnum="29" colname="b04" align="center" />
+         <colspec colnum="30" colname="b03" align="center" />
+         <colspec colnum="31" colname="b02" align="center" />
+         <colspec colnum="32" colname="b01" align="center" />
+         <colspec colnum="33" colname="b00" align="center" />
+         <spanspec namest="b29" nameend="b00" spanname="b0" />
          <thead>
            <row>
              <entry>Identifier</entry>
              <entry></entry>
              <entry></entry>
              <entry>Bit</entry>
+             <entry>29</entry>
+             <entry>28</entry>
+             <entry>27</entry>
+             <entry>26</entry>
+             <entry>25</entry>
+             <entry>24</entry>
+             <entry>23</entry>
+             <entry>22</entry>
+             <entry>21</entry>
+             <entry>10</entry>
              <entry>19</entry>
              <entry>18</entry>
              <entry>17</entry>
              <entry>V4L2_MBUS_FMT_Y8_1X8</entry>
              <entry>0x2001</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>y<subscript>1</subscript></entry>
              <entry>y<subscript>0</subscript></entry>
            </row>
-           <row id="V4L2-MBUS-FMT-UYVY8-1_5X8">
-             <entry>V4L2_MBUS_FMT_UYVY8_1_5X8</entry>
-             <entry>0x2002</entry>
+           <row id="V4L2-MBUS-FMT-UV8-1X8">
+             <entry>V4L2_MBUS_FMT_UV8_1X8</entry>
+             <entry>0x2015</entry>
              <entry></entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
+             <entry>v<subscript>7</subscript></entry>
+             <entry>v<subscript>6</subscript></entry>
+             <entry>v<subscript>5</subscript></entry>
+             <entry>v<subscript>4</subscript></entry>
+             <entry>v<subscript>3</subscript></entry>
+             <entry>v<subscript>2</subscript></entry>
+             <entry>v<subscript>1</subscript></entry>
+             <entry>v<subscript>0</subscript></entry>
+           </row>
+           <row id="V4L2-MBUS-FMT-UYVY8-1_5X8">
+             <entry>V4L2_MBUS_FMT_UYVY8_1_5X8</entry>
+             <entry>0x2002</entry>
+             <entry></entry>
+             &dash-ent-10;
+             &dash-ent-10;
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>u<subscript>7</subscript></entry>
+             <entry>u<subscript>6</subscript></entry>
+             <entry>u<subscript>5</subscript></entry>
+             <entry>u<subscript>4</subscript></entry>
+             <entry>u<subscript>3</subscript></entry>
+             <entry>u<subscript>2</subscript></entry>
+             <entry>u<subscript>1</subscript></entry>
+             <entry>u<subscript>0</subscript></entry>
+           </row>
+           <row>
+             <entry></entry>
+             <entry></entry>
+             <entry></entry>
+             &dash-ent-10;
+             &dash-ent-10;
+             <entry>-</entry>
+             <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>y<subscript>6</subscript></entry>
              <entry>y<subscript>5</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_VYUY8_1_5X8</entry>
              <entry>0x2003</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YUYV8_1_5X8</entry>
              <entry>0x2004</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YVYU8_1_5X8</entry>
              <entry>0x2005</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_UYVY8_2X8</entry>
              <entry>0x2006</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_VYUY8_2X8</entry>
              <entry>0x2007</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YUYV8_2X8</entry>
              <entry>0x2008</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YVYU8_2X8</entry>
              <entry>0x2009</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>u<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_Y10_1X10</entry>
              <entry>0x200a</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YUYV10_2X10</entry>
              <entry>0x200b</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>u<subscript>9</subscript></entry>
              <entry>u<subscript>8</subscript></entry>
              <entry>u<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>v<subscript>9</subscript></entry>
              <entry>v<subscript>8</subscript></entry>
              <entry>v<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YVYU10_2X10</entry>
              <entry>0x200c</entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>v<subscript>9</subscript></entry>
              <entry>v<subscript>8</subscript></entry>
              <entry>v<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
-             <entry>-</entry>
+             &dash-ent-10;
+             &dash-ent-10;
              <entry>u<subscript>9</subscript></entry>
              <entry>u<subscript>8</subscript></entry>
              <entry>u<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_Y12_1X12</entry>
              <entry>0x2013</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>V4L2_MBUS_FMT_UYVY8_1X16</entry>
              <entry>0x200f</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>V4L2_MBUS_FMT_VYUY8_1X16</entry>
              <entry>0x2010</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>V4L2_MBUS_FMT_YUYV8_1X16</entry>
              <entry>0x2011</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>V4L2_MBUS_FMT_YVYU8_1X16</entry>
              <entry>0x2012</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>-</entry>
              <entry>-</entry>
              <entry>-</entry>
              <entry>v<subscript>1</subscript></entry>
              <entry>v<subscript>0</subscript></entry>
            </row>
+           <row>
+             <entry></entry>
+             <entry></entry>
+             <entry></entry>
+             &dash-ent-10;
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>y<subscript>7</subscript></entry>
+             <entry>y<subscript>6</subscript></entry>
+             <entry>y<subscript>5</subscript></entry>
+             <entry>y<subscript>4</subscript></entry>
+             <entry>y<subscript>3</subscript></entry>
+             <entry>y<subscript>2</subscript></entry>
+             <entry>y<subscript>1</subscript></entry>
+             <entry>y<subscript>0</subscript></entry>
+             <entry>u<subscript>7</subscript></entry>
+             <entry>u<subscript>6</subscript></entry>
+             <entry>u<subscript>5</subscript></entry>
+             <entry>u<subscript>4</subscript></entry>
+             <entry>u<subscript>3</subscript></entry>
+             <entry>u<subscript>2</subscript></entry>
+             <entry>u<subscript>1</subscript></entry>
+             <entry>u<subscript>0</subscript></entry>
+           </row>
+           <row id="V4L2-MBUS-FMT-YDYUYDYV8-1X16">
+             <entry>V4L2_MBUS_FMT_YDYUYDYV8_1X16</entry>
+             <entry>0x2014</entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>y<subscript>7</subscript></entry>
+             <entry>y<subscript>6</subscript></entry>
+             <entry>y<subscript>5</subscript></entry>
+             <entry>y<subscript>4</subscript></entry>
+             <entry>y<subscript>3</subscript></entry>
+             <entry>y<subscript>2</subscript></entry>
+             <entry>y<subscript>1</subscript></entry>
+             <entry>y<subscript>0</subscript></entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+           </row>
            <row>
              <entry></entry>
              <entry></entry>
              <entry>u<subscript>1</subscript></entry>
              <entry>u<subscript>0</subscript></entry>
            </row>
+           <row>
+             <entry></entry>
+             <entry></entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>y<subscript>7</subscript></entry>
+             <entry>y<subscript>6</subscript></entry>
+             <entry>y<subscript>5</subscript></entry>
+             <entry>y<subscript>4</subscript></entry>
+             <entry>y<subscript>3</subscript></entry>
+             <entry>y<subscript>2</subscript></entry>
+             <entry>y<subscript>1</subscript></entry>
+             <entry>y<subscript>0</subscript></entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+             <entry>d</entry>
+           </row>
+           <row>
+             <entry></entry>
+             <entry></entry>
+             <entry></entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>-</entry>
+             <entry>y<subscript>7</subscript></entry>
+             <entry>y<subscript>6</subscript></entry>
+             <entry>y<subscript>5</subscript></entry>
+             <entry>y<subscript>4</subscript></entry>
+             <entry>y<subscript>3</subscript></entry>
+             <entry>y<subscript>2</subscript></entry>
+             <entry>y<subscript>1</subscript></entry>
+             <entry>y<subscript>0</subscript></entry>
+             <entry>v<subscript>7</subscript></entry>
+             <entry>v<subscript>6</subscript></entry>
+             <entry>v<subscript>5</subscript></entry>
+             <entry>v<subscript>4</subscript></entry>
+             <entry>v<subscript>3</subscript></entry>
+             <entry>v<subscript>2</subscript></entry>
+             <entry>v<subscript>1</subscript></entry>
+             <entry>v<subscript>0</subscript></entry>
+           </row>
            <row id="V4L2-MBUS-FMT-YUYV10-1X20">
              <entry>V4L2_MBUS_FMT_YUYV10_1X20</entry>
              <entry>0x200d</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>V4L2_MBUS_FMT_YVYU10_1X20</entry>
              <entry>0x200e</entry>
              <entry></entry>
+             &dash-ent-10;
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry></entry>
              <entry></entry>
              <entry></entry>
+             &dash-ent-10;
+             <entry>y<subscript>9</subscript></entry>
+             <entry>y<subscript>8</subscript></entry>
+             <entry>y<subscript>7</subscript></entry>
+             <entry>y<subscript>6</subscript></entry>
+             <entry>y<subscript>5</subscript></entry>
+             <entry>y<subscript>4</subscript></entry>
+             <entry>y<subscript>3</subscript></entry>
+             <entry>y<subscript>2</subscript></entry>
+             <entry>y<subscript>1</subscript></entry>
+             <entry>y<subscript>0</subscript></entry>
+             <entry>u<subscript>9</subscript></entry>
+             <entry>u<subscript>8</subscript></entry>
+             <entry>u<subscript>7</subscript></entry>
+             <entry>u<subscript>6</subscript></entry>
+             <entry>u<subscript>5</subscript></entry>
+             <entry>u<subscript>4</subscript></entry>
+             <entry>u<subscript>3</subscript></entry>
+             <entry>u<subscript>2</subscript></entry>
+             <entry>u<subscript>1</subscript></entry>
+             <entry>u<subscript>0</subscript></entry>
+           </row>
+           <row id="V4L2-MBUS-FMT-YUV10-1X30">
+             <entry>V4L2_MBUS_FMT_YUV10_1X30</entry>
+             <entry>0x2014</entry>
+             <entry></entry>
              <entry>y<subscript>9</subscript></entry>
              <entry>y<subscript>8</subscript></entry>
              <entry>y<subscript>7</subscript></entry>
              <entry>u<subscript>2</subscript></entry>
              <entry>u<subscript>1</subscript></entry>
              <entry>u<subscript>0</subscript></entry>
+             <entry>v<subscript>9</subscript></entry>
+             <entry>v<subscript>8</subscript></entry>
+             <entry>v<subscript>7</subscript></entry>
+             <entry>v<subscript>6</subscript></entry>
+             <entry>v<subscript>5</subscript></entry>
+             <entry>v<subscript>4</subscript></entry>
+             <entry>v<subscript>3</subscript></entry>
+             <entry>v<subscript>2</subscript></entry>
+             <entry>v<subscript>1</subscript></entry>
+             <entry>v<subscript>0</subscript></entry>
            </row>
          </tbody>
        </tgroup>
index 4d110b1ad3e93c6559b094ac5bd832f2e4bf3be0..8fe29427c8e4a75bec736348055f1930c238b69e 100644 (file)
@@ -139,6 +139,16 @@ structs, ioctls) must be noted in more detail in the history chapter
 (compat.xml), along with the possible impact on existing drivers and
 applications. -->
 
+      <revision>
+       <revnumber>3.9</revnumber>
+       <date>2012-12-03</date>
+       <authorinitials>sa</authorinitials>
+       <revremark>Added timestamp types to
+       <structname>v4l2_buffer</structname>, see <xref
+       linkend="buffer-flags" />.
+       </revremark>
+      </revision>
+
       <revision>
        <revnumber>3.6</revnumber>
        <date>2012-07-02</date>
@@ -472,7 +482,7 @@ and discussions on the V4L mailing list.</revremark>
 </partinfo>
 
 <title>Video for Linux Two API Specification</title>
- <subtitle>Revision 3.6</subtitle>
+ <subtitle>Revision 3.9</subtitle>
 
   <chapter id="common">
     &sub-common;
index f2413acfe24105b00b529feca5a0490d6a9b126d..1f6593deb9955ad494edef4b182bd16bf01b8ce4 100644 (file)
@@ -22,6 +22,7 @@
 
 <!-- LinuxTV v4l-dvb repository. -->
 <!ENTITY v4l-dvb               "<ulink url='http://linuxtv.org/repo/'>http://linuxtv.org/repo/</ulink>">
+<!ENTITY dash-ent-10            "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
 ]>
 
 <book id="media_api">
diff --git a/Documentation/video4linux/et61x251.txt b/Documentation/video4linux/et61x251.txt
deleted file mode 100644 (file)
index e0cdae4..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-
-                      ET61X[12]51 PC Camera Controllers
-                               Driver for Linux
-                      =================================
-
-                              - Documentation -
-
-
-Index
-=====
-1.  Copyright
-2.  Disclaimer
-3.  License
-4.  Overview and features
-5.  Module dependencies
-6.  Module loading
-7.  Module parameters
-8.  Optional device control through "sysfs"
-9.  Supported devices
-10. Notes for V4L2 application developers
-11. Contact information
-
-
-1. Copyright
-============
-Copyright (C) 2006-2007 by Luca Risolia <luca.risolia@studio.unibo.it>
-
-
-2. Disclaimer
-=============
-Etoms is a trademark of Etoms Electronics Corp.
-This software is not developed or sponsored by Etoms Electronics.
-
-
-3. License
-==========
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-4. Overview and features
-========================
-This driver supports the video interface of the devices mounting the ET61X151
-or ET61X251 PC Camera Controllers.
-
-It's worth to note that Etoms Electronics has never collaborated with the
-author during the development of this project; despite several requests,
-Etoms Electronics also refused to release enough detailed specifications of
-the video compression engine.
-
-The driver relies on the Video4Linux2 and USB core modules. It has been
-designed to run properly on SMP systems as well.
-
-The latest version of the ET61X[12]51 driver can be found at the following URL:
-http://www.linux-projects.org/
-
-Some of the features of the driver are:
-
-- full compliance with the Video4Linux2 API (see also "Notes for V4L2
-  application developers" paragraph);
-- available mmap or read/poll methods for video streaming through isochronous
-  data transfers;
-- automatic detection of image sensor;
-- support for any window resolutions and optional panning within the maximum
-  pixel area of image sensor;
-- image downscaling with arbitrary scaling factors from 1 and 2 in both
-  directions (see "Notes for V4L2 application developers" paragraph);
-- two different video formats for uncompressed or compressed data in low or
-  high compression quality (see also "Notes for V4L2 application developers"
-  paragraph);
-- full support for the capabilities of every possible image sensors that can
-  be connected to the ET61X[12]51 bridges, including, for instance, red, green,
-  blue and global gain adjustments and exposure control (see "Supported
-  devices" paragraph for details);
-- use of default color settings for sunlight conditions;
-- dynamic I/O interface for both ET61X[12]51 and image sensor control (see
-  "Optional device control through 'sysfs'" paragraph);
-- dynamic driver control thanks to various module parameters (see "Module
-  parameters" paragraph);
-- up to 64 cameras can be handled at the same time; they can be connected and
-  disconnected from the host many times without turning off the computer, if
-  the system supports hotplugging;
-- no known bugs.
-
-
-5. Module dependencies
-======================
-For it to work properly, the driver needs kernel support for Video4Linux and
-USB.
-
-The following options of the kernel configuration file must be enabled and
-corresponding modules must be compiled:
-
-       # Multimedia devices
-       #
-       CONFIG_VIDEO_DEV=m
-
-To enable advanced debugging functionality on the device through /sysfs:
-
-       # Multimedia devices
-       #
-       CONFIG_VIDEO_ADV_DEBUG=y
-
-       # USB support
-       #
-       CONFIG_USB=m
-
-In addition, depending on the hardware being used, the modules below are
-necessary:
-
-       # USB Host Controller Drivers
-       #
-       CONFIG_USB_EHCI_HCD=m
-       CONFIG_USB_UHCI_HCD=m
-       CONFIG_USB_OHCI_HCD=m
-
-And finally:
-
-       # USB Multimedia devices
-       #
-       CONFIG_USB_ET61X251=m
-
-
-6. Module loading
-=================
-To use the driver, it is necessary to load the "et61x251" module into memory
-after every other module required: "videodev", "v4l2_common", "compat_ioctl32",
-"usbcore" and, depending on the USB host controller you have, "ehci-hcd",
-"uhci-hcd" or "ohci-hcd".
-
-Loading can be done as shown below:
-
-       [root@localhost home]# modprobe et61x251
-
-At this point the devices should be recognized. You can invoke "dmesg" to
-analyze kernel messages and verify that the loading process has gone well:
-
-       [user@localhost home]$ dmesg
-
-
-7. Module parameters
-====================
-Module parameters are listed below:
--------------------------------------------------------------------------------
-Name:           video_nr
-Type:           short array (min = 0, max = 64)
-Syntax:         <-1|n[,...]>
-Description:    Specify V4L2 minor mode number:
-               -1 = use next available
-                n = use minor number n
-               You can specify up to 64 cameras this way.
-               For example:
-               video_nr=-1,2,-1 would assign minor number 2 to the second
-               registered camera and use auto for the first one and for every
-               other camera.
-Default:        -1
--------------------------------------------------------------------------------
-Name:           force_munmap
-Type:           bool array (min = 0, max = 64)
-Syntax:         <0|1[,...]>
-Description:    Force the application to unmap previously mapped buffer memory
-               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-               all the applications support this feature. This parameter is
-               specific for each detected camera.
-               0 = do not force memory unmapping
-               1 = force memory unmapping (save memory)
-Default:        0
--------------------------------------------------------------------------------
-Name:           frame_timeout
-Type:           uint array (min = 0, max = 64)
-Syntax:         <n[,...]>
-Description:    Timeout for a video frame in seconds. This parameter is
-               specific for each detected camera. This parameter can be
-               changed at runtime thanks to the /sys filesystem interface.
-Default:        2
--------------------------------------------------------------------------------
-Name:           debug
-Type:           ushort
-Syntax:         <n>
-Description:    Debugging information level, from 0 to 3:
-               0 = none (use carefully)
-               1 = critical errors
-               2 = significant information
-               3 = more verbose messages
-               Level 3 is useful for testing only, when only one device
-               is used at the same time. It also shows some more information
-               about the hardware being detected. This module parameter can be
-               changed at runtime thanks to the /sys filesystem interface.
-Default:        2
--------------------------------------------------------------------------------
-
-
-8. Optional device control through "sysfs"
-==========================================
-If the kernel has been compiled with the CONFIG_VIDEO_ADV_DEBUG option enabled,
-it is possible to read and write both the ET61X[12]51 and the image sensor
-registers by using the "sysfs" filesystem interface.
-
-There are four files in the /sys/class/video4linux/videoX directory for each
-registered camera: "reg", "val", "i2c_reg" and "i2c_val". The first two files
-control the ET61X[12]51 bridge, while the other two control the sensor chip.
-"reg" and "i2c_reg" hold the values of the current register index where the
-following reading/writing operations are addressed at through "val" and
-"i2c_val". Their use is not intended for end-users, unless you know what you
-are doing. Remember that you must be logged in as root before writing to them.
-
-As an example, suppose we were to want to read the value contained in the
-register number 1 of the sensor register table - which is usually the product
-identifier - of the camera registered as "/dev/video0":
-
-       [root@localhost #] cd /sys/class/video4linux/video0
-       [root@localhost #] echo 1 > i2c_reg
-       [root@localhost #] cat i2c_val
-
-Note that if the sensor registers cannot be read, "cat" will fail.
-To avoid race conditions, all the I/O accesses to the files are serialized.
-
-
-9. Supported devices
-====================
-None of the names of the companies as well as their products will be mentioned
-here. They have never collaborated with the author, so no advertising.
-
-From the point of view of a driver, what unambiguously identify a device are
-its vendor and product USB identifiers. Below is a list of known identifiers of
-devices mounting the ET61X[12]51 PC camera controllers:
-
-Vendor ID  Product ID
----------  ----------
-0x102c     0x6151
-0x102c     0x6251
-0x102c     0x6253
-0x102c     0x6254
-0x102c     0x6255
-0x102c     0x6256
-0x102c     0x6257
-0x102c     0x6258
-0x102c     0x6259
-0x102c     0x625a
-0x102c     0x625b
-0x102c     0x625c
-0x102c     0x625d
-0x102c     0x625e
-0x102c     0x625f
-0x102c     0x6260
-0x102c     0x6261
-0x102c     0x6262
-0x102c     0x6263
-0x102c     0x6264
-0x102c     0x6265
-0x102c     0x6266
-0x102c     0x6267
-0x102c     0x6268
-0x102c     0x6269
-
-The following image sensors are supported:
-
-Model       Manufacturer
------       ------------
-TAS5130D1B  Taiwan Advanced Sensor Corporation
-
-All the available control settings of each image sensor are supported through
-the V4L2 interface.
-
-
-10. Notes for V4L2 application developers
-=========================================
-This driver follows the V4L2 API specifications. In particular, it enforces two
-rules:
-
-- exactly one I/O method, either "mmap" or "read", is associated with each
-file descriptor. Once it is selected, the application must close and reopen the
-device to switch to the other I/O method;
-
-- although it is not mandatory, previously mapped buffer memory should always
-be unmapped before calling any "VIDIOC_S_CROP" or "VIDIOC_S_FMT" ioctl's.
-The same number of buffers as before will be allocated again to match the size
-of the new video frames, so you have to map the buffers again before any I/O
-attempts on them.
-
-Consistently with the hardware limits, this driver also supports image
-downscaling with arbitrary scaling factors from 1 and 2 in both directions.
-However, the V4L2 API specifications don't correctly define how the scaling
-factor can be chosen arbitrarily by the "negotiation" of the "source" and
-"target" rectangles. To work around this flaw, we have added the convention
-that, during the negotiation, whenever the "VIDIOC_S_CROP" ioctl is issued, the
-scaling factor is restored to 1.
-
-This driver supports two different video formats: the first one is the "8-bit
-Sequential Bayer" format and can be used to obtain uncompressed video data
-from the device through the current I/O method, while the second one provides
-"raw" compressed video data (without frame headers not related to the
-compressed data). The current compression quality may vary from 0 to 1 and can
-be selected or queried thanks to the VIDIOC_S_JPEGCOMP and VIDIOC_G_JPEGCOMP
-V4L2 ioctl's.
-
-
-11. Contact information
-=======================
-The author may be contacted by e-mail at <luca.risolia@studio.unibo.it>.
-
-GPG/PGP encrypted e-mail's are accepted. The GPG key ID of the author is
-'FCE635A4'; the public 1024-bit key should be available at any keyserver;
-the fingerprint is: '88E8 F32F 7244 68BA 3958  5D40 99DA 5D2A FCE6 35A4'.
diff --git a/Documentation/video4linux/ibmcam.txt b/Documentation/video4linux/ibmcam.txt
deleted file mode 100644 (file)
index a510552..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-README for Linux device driver for the IBM "C-It" USB video camera
-
-INTRODUCTION:
-
-This driver does not use all features known to exist in
-the IBM camera. However most of needed features work well.
-
-This driver was developed using logs of observed USB traffic
-which was produced by standard Windows driver (c-it98.sys).
-I did not have data sheets from Xirlink.
-
-Video formats:
-      128x96  [model 1]
-      176x144
-      320x240 [model 2]
-      352x240 [model 2]
-      352x288
-Frame rate: 3 - 30 frames per second (FPS)
-External interface: USB
-Internal interface: Video For Linux (V4L)
-Supported controls:
-- by V4L: Contrast,  Brightness, Color, Hue
-- by driver options: frame rate, lighting conditions, video format,
-                    default picture settings, sharpness.
-
-SUPPORTED CAMERAS:
-
-Xirlink "C-It" camera, also known as "IBM PC Camera".
-The device uses proprietary ASIC (and compression method);
-it is manufactured by Xirlink. See http://xirlinkwebcam.sourceforge.net, 
-http://www.ibmpccamera.com, or http://www.c-itnow.com/ for details and pictures.
-
-This very chipset ("X Chip", as marked at the factory)
-is used in several other cameras, and they are supported
-as well:
-
-- IBM NetCamera
-- Veo Stingray
-
-The Linux driver was developed with camera with following
-model number (or FCC ID): KSX-XVP510. This camera has three
-interfaces, each with one endpoint (control, iso, iso). This
-type of cameras is referred to as "model 1". These cameras are
-no longer manufactured.
-
-Xirlink now manufactures new cameras which are somewhat different.
-In particular, following models [FCC ID] belong to that category:
-
-XVP300 [KSX-X9903]
-XVP600 [KSX-X9902]
-XVP610 [KSX-X9902]
-
-(see http://www.xirlink.com/ibmpccamera/ for updates, they refer
-to these new cameras by Windows driver dated 12-27-99, v3005 BETA)
-These cameras have two interfaces, one endpoint in each (iso, bulk).
-Such type of cameras is referred to as "model 2". They are supported
-(with exception of 352x288 native mode).
-
-Some IBM NetCameras (Model 4) are made to generate only compressed
-video streams. This is great for performance, but unfortunately
-nobody knows how to decompress the stream :-( Therefore, these
-cameras are *unsupported* and if you try to use one of those, all
-you get is random colored horizontal streaks, not the image!
-If you have one of those cameras, you probably should return it
-to the store and get something that is supported.
-
-Tell me more about all that "model" business
---------------------------------------------
-
-I just invented model numbers to uniquely identify flavors of the
-hardware/firmware that were sold. It was very confusing to use
-brand names or some other internal numbering schemes. So I found
-by experimentation that all Xirlink chipsets fall into four big
-classes, and I called them "models". Each model is programmed in
-its own way, and each model sends back the video in its own way.
-
-Quirks of Model 2 cameras:
--------------------------
-
-Model 2 does not have hardware contrast control. Corresponding V4L
-control is implemented in software, which is not very nice to your
-CPU, but at least it works.
-
-This driver provides 352x288 mode by switching the camera into
-quasi-352x288 RGB mode (800 Kbits per frame) essentially limiting
-this mode to 10 frames per second or less, in ideal conditions on
-the bus (USB is shared, after all). The frame rate
-has to be programmed very conservatively. Additional concern is that
-frame rate depends on brightness setting; therefore the picture can
-be good at one brightness and broken at another! I did not want to fix
-the frame rate at slowest setting, but I had to move it pretty much down
-the scale (so that framerate option barely matters). I also noticed that
-camera after first powering up produces frames slightly faster than during
-consecutive uses. All this means that if you use 352x288 (which is
-default), be warned - you may encounter broken picture on first connect;
-try to adjust brightness - brighter image is slower, so USB will be able
-to send all data. However if you regularly use Model 2 cameras you may
-prefer 176x144 which makes perfectly good I420, with no scaling and
-lesser demands on USB (300 Kbits per second, or 26 frames per second).
-
-Another strange effect of 352x288 mode is the fine vertical grid visible
-on some colored surfaces. I am sure it is caused by me not understanding
-what the camera is trying to say. Blame trade secrets for that.
-
-The camera that I had also has a hardware quirk: if disconnected,
-it needs few minutes to "relax" before it can be plugged in again
-(poorly designed USB processor reset circuit?)
-
-[Veo Stingray with Product ID 0x800C is also Model 2, but I haven't
-observed this particular flaw in it.]
-
-Model 2 camera can be programmed for very high sensitivity (even starlight
-may be enough), this makes it convenient for tinkering with. The driver
-code has enough comments to help a programmer to tweak the camera
-as s/he feels necessary.
-
-WHAT YOU NEED:
-
-- A supported IBM PC (C-it) camera (model 1 or 2)
-
-- A Linux box with USB support (2.3/2.4; 2.2 w/backport may work)
-
-- A Video4Linux compatible frame grabber program such as xawtv.
-
-HOW TO COMPILE THE DRIVER:
-
-You need to compile the driver only if you are a developer
-or if you want to make changes to the code. Most distributions
-precompile all modules, so you can go directly to the next
-section "HOW TO USE THE DRIVER".
-
-The ibmcam driver uses usbvideo helper library (module),
-so if you are studying the ibmcam code you will be led there.
-
-The driver itself consists of only one file in usb/ directory:
-ibmcam.c. This file is included into the Linux kernel build
-process if you configure the kernel for CONFIG_USB_IBMCAM.
-Run "make xconfig" and in USB section you will find the IBM
-camera driver. Select it, save the configuration and recompile.
-
-HOW TO USE THE DRIVER:
-
-I recommend to compile driver as a module. This gives you an
-easier access to its configuration. The camera has many more
-settings than V4L can operate, so some settings are done using
-module options.
-
-To begin with, on most modern Linux distributions the driver
-will be automatically loaded whenever you plug the supported
-camera in. Therefore, you don't need to do anything. However
-if you want to experiment with some module parameters then
-you can load and unload the driver manually, with camera
-plugged in or unplugged.
-
-Typically module is installed with command 'modprobe', like this:
-
-# modprobe ibmcam framerate=1
-
-Alternatively you can use 'insmod' in similar fashion:
-
-# insmod /lib/modules/2.x.y/usb/ibmcam.o framerate=1
-
-Module can be inserted with camera connected or disconnected.
-
-The driver can have options, though some defaults are provided.
-
-Driver options: (* indicates that option is model-dependent)
-
-Name            Type            Range [default] Example
---------------  --------------  --------------  ------------------
-debug           Integer         0-9 [0]         debug=1
-flags           Integer         0-0xFF [0]      flags=0x0d
-framerate       Integer         0-6 [2]         framerate=1
-hue_correction  Integer         0-255 [128]     hue_correction=115
-init_brightness Integer         0-255 [128]     init_brightness=100
-init_contrast   Integer         0-255 [192]     init_contrast=200
-init_color      Integer         0-255 [128]     init_color=130
-init_hue        Integer         0-255 [128]     init_hue=115
-lighting        Integer         0-2* [1]        lighting=2
-sharpness       Integer         0-6* [4]        sharpness=3
-size            Integer         0-2* [2]        size=1
-
-Options for Model 2 only:
-
-Name            Type            Range [default] Example
---------------  --------------  --------------  ------------------
-init_model2_rg  Integer         0..255 [0x70]   init_model2_rg=128
-init_model2_rg2 Integer         0..255 [0x2f]   init_model2_rg2=50
-init_model2_sat Integer         0..255 [0x34]   init_model2_sat=65
-init_model2_yb  Integer         0..255 [0xa0]   init_model2_yb=200
-
-debug           You don't need this option unless you are a developer.
-               If you are a developer then you will see in the code
-               what values do what. 0=off.
-
-flags           This is a bit mask, and you can combine any number of
-               bits to produce what you want. Usually you don't want
-               any of extra features this option provides:
-
-               FLAGS_RETRY_VIDIOCSYNC  1  This bit allows to retry failed
-                                          VIDIOCSYNC ioctls without failing.
-                                          Will work with xawtv, will not
-                                          with xrealproducer. Default is
-                                          not set.
-               FLAGS_MONOCHROME        2  Activates monochrome (b/w) mode.
-               FLAGS_DISPLAY_HINTS     4  Shows colored pixels which have
-                                          magic meaning to developers.
-               FLAGS_OVERLAY_STATS     8  Shows tiny numbers on screen,
-                                          useful only for debugging.
-               FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
-               FLAGS_SEPARATE_FRAMES   32 Shows each frame separately, as
-                                          it was received from the camera.
-                                          Default (not set) is to mix the
-                                          preceding frame in to compensate
-                                          for occasional loss of Isoc data
-                                          on high frame rates.
-               FLAGS_CLEAN_FRAMES      64 Forces "cleanup" of each frame
-                                          prior to use; relevant only if
-                                          FLAGS_SEPARATE_FRAMES is set.
-                                          Default is not to clean frames,
-                                          this is a little faster but may
-                                          produce flicker if frame rate is
-                                          too high and Isoc data gets lost.
-               FLAGS_NO_DECODING      128 This flag turns the video stream
-                                          decoder off, and dumps the raw
-                                          Isoc data from the camera into
-                                          the reading process. Useful to
-                                          developers, but not to users.
-
-framerate       This setting controls frame rate of the camera. This is
-               an approximate setting (in terms of "worst" ... "best")
-               because camera changes frame rate depending on amount
-               of light available. Setting 0 is slowest, 6 is fastest.
-               Beware - fast settings are very demanding and may not
-               work well with all video sizes. Be conservative.
-
-hue_correction  This highly optional setting allows to adjust the
-               hue of the image in a way slightly different from
-               what usual "hue" control does. Both controls affect
-               YUV colorspace: regular "hue" control adjusts only
-               U component, and this "hue_correction" option similarly
-               adjusts only V component. However usually it is enough
-               to tweak only U or V to compensate for colored light or
-               color temperature; this option simply allows more
-               complicated correction when and if it is necessary.
-
-init_brightness These settings specify _initial_ values which will be
-init_contrast   used to set up the camera. If your V4L application has
-init_color      its own controls to adjust the picture then these
-init_hue        controls will be used too. These options allow you to
-               preconfigure the camera when it gets connected, before
-               any V4L application connects to it. Good for webcams.
-
-init_model2_rg  These initial settings alter color balance of the
-init_model2_rg2 camera on hardware level. All four settings may be used
-init_model2_sat to tune the camera to specific lighting conditions. These
-init_model2_yb  settings only apply to Model 2 cameras.
-
-lighting        This option selects one of three hardware-defined
-               photosensitivity settings of the camera. 0=bright light,
-               1=Medium (default), 2=Low light. This setting affects
-               frame rate: the dimmer the lighting the lower the frame
-               rate (because longer exposition time is needed). The
-               Model 2 cameras allow values more than 2 for this option,
-               thus enabling extremely high sensitivity at cost of frame
-               rate, color saturation and imaging sensor noise.
-
-sharpness       This option controls smoothing (noise reduction)
-               made by camera. Setting 0 is most smooth, setting 6
-               is most sharp. Be aware that CMOS sensor used in the
-               camera is pretty noisy, so if you choose 6 you will
-               be greeted with "snowy" image. Default is 4. Model 2
-               cameras do not support this feature.
-
-size            This setting chooses one of several image sizes that are
-               supported by this driver. Cameras may support more, but
-               it's difficult to reverse-engineer all formats.
-               Following video sizes are supported:
-
-               size=0     128x96  (Model 1 only)
-               size=1     160x120
-               size=2     176x144
-               size=3     320x240 (Model 2 only)
-               size=4     352x240 (Model 2 only)
-               size=5     352x288
-               size=6     640x480 (Model 3 only)
-
-               The 352x288 is the native size of the Model 1 sensor
-               array, so it's the best resolution the camera can
-               yield. The best resolution of Model 2 is 176x144, and
-               larger images are produced by stretching the bitmap.
-               Model 3 has sensor with 640x480 grid, and it works too,
-               but the frame rate will be exceptionally low (1-2 FPS);
-               it may be still OK for some applications, like security.
-               Choose the image size you need. The smaller image can
-               support faster frame rate. Default is 352x288.
-
-For more information and the Troubleshooting FAQ visit this URL:
-
-               http://www.linux-usb.org/ibmcam/
-
-WHAT NEEDS TO BE DONE:
-
-- The button on the camera is not used. I don't know how to get to it.
-  I know now how to read button on Model 2, but what to do with it?
-
-- Camera reports its status back to the driver; however I don't know
-  what returned data means. If camera fails at some initialization
-  stage then something should be done, and I don't do that because
-  I don't even know that some command failed. This is mostly Model 1
-  concern because Model 2 uses different commands which do not return
-  status (and seem to complete successfully every time).
-
-- Some flavors of Model 4 NetCameras produce only compressed video
-  streams, and I don't know how to decode them.
-
-CREDITS:
-
-The code is based in no small part on the CPiA driver by Johannes Erdfelt,
-Randy Dunlap, and others. Big thanks to them for their pioneering work on that
-and the USB stack.
-
-I also thank John Lightsey for his donation of the Veo Stingray camera.
diff --git a/Documentation/video4linux/m5602.txt b/Documentation/video4linux/m5602.txt
deleted file mode 100644 (file)
index 4450ab1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This document describes the ALi m5602 bridge connected
-to the following supported sensors:
-OmniVision OV9650,
-Samsung s5k83a,
-Samsung s5k4aa,
-Micron mt9m111,
-Pixel plus PO1030
-
-This driver mimics the windows drivers, which have a braindead implementation sending bayer-encoded frames at VGA resolution.
-In a perfect world we should be able to reprogram the m5602 and the connected sensor in hardware instead, supporting a range of resolutions and pixelformats
-
-Anyway, have fun and please report any bugs to m560x-driver-devel@lists.sourceforge.net
diff --git a/Documentation/video4linux/ov511.txt b/Documentation/video4linux/ov511.txt
deleted file mode 100644 (file)
index b3326b1..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
--------------------------------------------------------------------------------
-Readme for Linux device driver for the OmniVision OV511 USB to camera bridge IC
--------------------------------------------------------------------------------
-
-Author: Mark McClelland
-Homepage: http://alpha.dyndns.org/ov511
-
-INTRODUCTION:
-
-This is a driver for the OV511, a USB-only chip used in many "webcam" devices.
-Any camera using the OV511/OV511+ and the OV6620/OV7610/20/20AE should work.
-Video capture devices that use the Philips SAA7111A decoder also work. It
-supports streaming and capture of color or monochrome video via the Video4Linux
-API. Most V4L apps are compatible with it. Most resolutions with a width and
-height that are a multiple of 8 are supported.
-
-If you need more information, please visit the OV511 homepage at the above URL.
-
-WHAT YOU NEED:
-
-- If you want to help with the development, get the chip's specification docs at
-  http://www.ovt.com/omniusbp.html
-
-- A Video4Linux compatible frame grabber program (I recommend vidcat and xawtv)
-    vidcat is part of the w3cam package:  http://mpx.freeshell.net/
-    xawtv is available at:  http://linux.bytesex.org/xawtv/
-
-HOW TO USE IT:
-
-Note: These are simplified instructions. For complete instructions see:
-       http://alpha.dyndns.org/ov511/install.html
-
-You must have first compiled USB support, support for your specific USB host
-controller (UHCI or OHCI), and Video4Linux support for your kernel (I recommend
-making them modules.) Make sure "Enforce bandwidth allocation" is NOT enabled.
-
-Next, (as root):
-
-       modprobe usbcore
-       modprobe usb-uhci  <OR>  modprobe usb-ohci
-       modprobe videodev
-       modprobe ov511
-
-If it is not already there (it usually is), create the video device:
-
-       mknod /dev/video0 c 81 0
-
-Optionally, symlink /dev/video to /dev/video0
-
-You will have to set permissions on this device to allow you to read/write
-from it:
-
-       chmod 666 /dev/video
-       chmod 666 /dev/video0 (if necessary)
-
-Now you are ready to run a video app! Both vidcat and xawtv work well for me
-at 640x480.
-
-[Using vidcat:]
-
-       vidcat -s 640x480 -p c > test.jpg
-       xview test.jpg
-
-[Using xawtv:]
-
-From the main xawtv directory:
-
-       make clean
-       ./configure
-       make
-       make install
-
-Now you should be able to run xawtv. Right click for the options dialog.
-
-MODULE PARAMETERS:
-
-  You can set these with:  insmod ov511 NAME=VALUE
-  There is currently no way to set these on a per-camera basis.
-
-  NAME: autobright
-  TYPE: integer (Boolean)
-  DEFAULT: 1
-  DESC: Brightness is normally under automatic control and can't be set
-       manually by the video app. Set to 0 for manual control.
-
-  NAME: autogain
-  TYPE: integer (Boolean)
-  DEFAULT: 1
-  DESC: Auto Gain Control enable. This feature is not yet implemented.
-
-  NAME: autoexp
-  TYPE: integer (Boolean)
-  DEFAULT: 1
-  DESC: Auto Exposure Control enable. This feature is not yet implemented.
-
-  NAME: debug
-  TYPE: integer (0-6)
-  DEFAULT: 3
-  DESC: Sets the threshold for printing debug messages. The higher the value,
-       the more is printed. The levels are cumulative, and are as follows:
-         0=no debug messages
-         1=init/detection/unload and other significant messages
-         2=some warning messages
-         3=config/control function calls
-         4=most function calls and data parsing messages
-         5=highly repetitive mesgs
-
-  NAME: snapshot
-  TYPE: integer (Boolean)
-  DEFAULT: 0
-  DESC: Set to 1 to enable snapshot mode. read()/VIDIOCSYNC will block until
-       the snapshot button is pressed. Note: enabling this mode disables
-       /proc/video/ov511/<minor#>/button
-
-  NAME: cams
-  TYPE: integer (1-4 for OV511, 1-31 for OV511+)
-  DEFAULT: 1
-  DESC: Number of cameras allowed to stream simultaneously on a single bus.
-       Values higher than 1 reduce the data rate of each camera, allowing two
-       or more to be used at once. If you have a complicated setup involving
-       both OV511 and OV511+ cameras, trial-and-error may be necessary for
-       finding the optimum setting.
-
-  NAME: compress
-  TYPE: integer (Boolean)
-  DEFAULT: 0
-  DESC: Set this to 1 to turn on the camera's compression engine. This can
-       potentially increase the frame rate at the expense of quality, if you
-       have a fast CPU. You must load the proper compression module for your
-       camera before starting your application (ov511_decomp or ov518_decomp).
-
-  NAME: testpat
-  TYPE: integer (Boolean)
-  DEFAULT: 0
-  DESC: This configures the camera's sensor to transmit a colored test-pattern
-       instead of an image. This does not work correctly yet.
-
-  NAME: dumppix
-  TYPE: integer (0-2)
-  DEFAULT: 0
-  DESC: Dumps raw pixel data and skips post-processing and format conversion.
-       It is for debugging purposes only. Options are:
-               0: Disable (default)
-               1: Dump raw data from camera, excluding headers and trailers
-               2: Dumps data exactly as received from camera
-
-  NAME: led
-  TYPE: integer (0-2)
-  DEFAULT: 1 (Always on)
-  DESC: Controls whether the LED (the little light) on the front of the camera
-       is always off (0), always on (1), or only on when driver is open (2).
-       This is not supported with the OV511, and might only work with certain
-       cameras (ones that actually have the LED wired to the control pin, and
-       not just hard-wired to be on all the time).
-
-  NAME: dump_bridge
-  TYPE: integer (Boolean)
-  DEFAULT: 0
-  DESC: Dumps the bridge (OV511[+] or OV518[+]) register values to the system
-       log. Only useful for serious debugging/development purposes.
-
-  NAME: dump_sensor
-  TYPE: integer (Boolean)
-  DEFAULT: 0
-  DESC: Dumps the sensor register values to the system log. Only useful for
-       serious debugging/development purposes.
-
-  NAME: printph
-  TYPE: integer (Boolean)
-  DEFAULT: 0
-  DESC: Setting this to 1 will dump the first 12 bytes of each isoc frame. This
-       is only useful if you are trying to debug problems with the isoc data
-       stream (i.e.: camera initializes, but vidcat hangs until Ctrl-C). Be
-       warned that this dumps a large number of messages to your kernel log.
-
-  NAME: phy, phuv, pvy, pvuv, qhy, qhuv, qvy, qvuv
-  TYPE: integer (0-63 for phy and phuv, 0-255 for rest)
-  DEFAULT: OV511 default values
-  DESC: These are registers 70h - 77h of the OV511, which control the
-       prediction ranges and quantization thresholds of the compressor, for
-       the Y and UV channels in the horizontal and vertical directions. See
-       the OV511 or OV511+ data sheet for more detailed descriptions. These
-       normally do not need to be changed.
-
-  NAME: lightfreq
-  TYPE: integer (0, 50, or 60)
-  DEFAULT: 0 (use sensor default)
-  DESC: Sets the sensor to match your lighting frequency. This can reduce the
-       appearance of "banding", i.e. horizontal lines or waves of light and
-       dark that are often caused by artificial lighting. Valid values are:
-               0 - Use default (depends on sensor, most likely 60 Hz)
-               50 - For European and Asian 50 Hz power
-               60 - For American 60 Hz power
-
-  NAME: bandingfilter
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (off)
-  DESC: Enables the sensorĀ“s banding filter exposure algorithm. This reduces
-       or stabilizes the "banding" caused by some artificial light sources
-       (especially fluorescent). You might have to set lightfreq correctly for
-       this to work right. As an added bonus, this sometimes makes it
-       possible to capture your monitorĀ“s output.
-
-  NAME: fastset
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (off)
-  DESC: Allows picture settings (brightness, contrast, color, and hue) to take
-       effect immediately, even in the middle of a frame. This reduces the
-       time to change settings, but can ruin frames during the change. Only
-       affects OmniVision sensors.
-
-  NAME: force_palette
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (off)
-  DESC: Forces the palette (color format) to a specific value. If an
-       application requests a different palette, it will be rejected, thereby
-       forcing it to try others until it succeeds. This is useful for forcing
-       greyscale mode with a color camera, for example. Supported modes are:
-               0                           (Allows all the following formats)
-               1   VIDEO_PALETTE_GREY      (Linear greyscale)
-               10  VIDEO_PALETTE_YUV420    (YUV 4:2:0 Planar)
-               15  VIDEO_PALETTE_YUV420P   (YUV 4:2:0 Planar, same as 10)
-
-  NAME: backlight
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (off)
-  DESC: Setting this flag changes the exposure algorithm for OmniVision sensors
-       such that objects in the camera's view (i.e. your head) can be clearly
-       seen when they are illuminated from behind. It reduces or eliminates
-       the sensor's auto-exposure function, so it should only be used when
-       needed. Additionally, it is only supported with the OV6620 and OV7620.
-
-  NAME: unit_video
-  TYPE: Up to 16 comma-separated integers
-  DEFAULT: 0,0,0... (automatically assign the next available minor(s))
-  DESC: You can specify up to 16 minor numbers to be assigned to ov511 devices.
-       For example, "unit_video=1,3" will make the driver use /dev/video1 and
-       /dev/video3 for the first two devices it detects. Additional devices
-       will be assigned automatically starting at the first available device
-       node (/dev/video0 in this case). Note that you cannot specify 0 as a
-       minor number. This feature requires kernel version 2.4.5 or higher.
-
-  NAME: remove_zeros
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (do not skip any incoming data)
-  DESC: Setting this to 1 will remove zero-padding from incoming data. This
-       will compensate for the blocks of corruption that can appear when the
-       camera cannot keep up with the speed of the USB bus (eg. at low frame
-       resolutions). This feature is always enabled when compression is on.
-
-  NAME: mirror
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (off)
-  DESC: Setting this to 1 will reverse ("mirror") the image horizontally. This
-       might be necessary if your camera has a custom lens assembly. This has
-       no effect with video capture devices.
-
-  NAME: ov518_color
-  TYPE: integer (Boolean)
-  DEFAULT: 0 (off)
-  DESC: Enable OV518 color support. This is off by default since it doesn't
-       work most of the time. If you want to try it, you must also load
-       ov518_decomp with the "nouv=0" parameter. If you get improper colors or
-       diagonal lines through the image, restart your video app and try again.
-       Repeat as necessary.
-
-WORKING FEATURES:
- o Color streaming/capture at most widths and heights that are multiples of 8.
- o Monochrome (use force_palette=1 to enable)
- o Setting/getting of saturation, contrast, brightness, and hue (only some of
-   them work the OV7620 and OV7620AE)
- o /proc status reporting
- o SAA7111A video capture support at 320x240 and 640x480
- o Compression support
- o SMP compatibility
-
-HOW TO CONTACT ME:
-
-You can email me at mark@alpha.dyndns.org . Please prefix the subject line
-with "OV511: " so that I am certain to notice your message.
-
-CREDITS:
-
-The code is based in no small part on the CPiA driver by Johannes Erdfelt,
-Randy Dunlap, and others. Big thanks to them for their pioneering work on that
-and the USB stack. Thanks to Bret Wallach for getting camera reg IO, ISOC, and
-image capture working. Thanks to Orion Sky Lawlor, Kevin Moore, and Claudio
-Matsuoka for their work as well.
diff --git a/Documentation/video4linux/se401.txt b/Documentation/video4linux/se401.txt
deleted file mode 100644 (file)
index bd6526e..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-Linux driver for SE401 based USB cameras
-
-Copyright, 2001, Jeroen Vreeken
-
-
-INTRODUCTION:
-
-The SE401 chip is the used in low-cost usb webcams.
-It is produced by Endpoints Inc. (www.endpoints.com).
-It interfaces directly to a cmos image sensor and USB. The only other major
-part in a se401 based camera is a dram chip.
-
-The following cameras are known to work with this driver:
-
-Aox se401 (non-branded) cameras
-Philips PVCV665 USB VGA webcam 'Vesta Fun'
-Kensington VideoCAM PC Camera Model 67014
-Kensington VideoCAM PC Camera Model 67015
-Kensington VideoCAM PC Camera Model 67016
-Kensington VideoCAM PC Camera Model 67017
-
-
-WHAT YOU NEED:
-
--      USB support
--      VIDEO4LINUX support
-
-More information about USB support for linux can be found at:
-http://www.linux-usb.org
-
-
-MODULE OPTIONS:
-
-When the driver is compiled as a module you can also use the 'flickerless'
-option. With it exposure is limited to values that do not interfere with the
-net frequency. Valid options for this option are 0, 50 and 60. (0=disable,
-50=50hz, 60=60hz)
-
-
-KNOWN PROBLEMS:
-
-The driver works fine with the usb-ohci and uhci host controller drivers,
-the default settings also work with usb-uhci. But sending more than one bulk
-transfer at a time with usb-uhci doesn't work yet.
-Users of usb-ohci and uhci can safely enlarge SE401_NUMSBUF in se401.h in
-order to increase the throughput (and thus framerate).
-
-
-HELP:
-
-The latest info on this driver can be found at:
-http://members.chello.nl/~j.vreeken/se401/
-And questions to me can be send to:
-pe1rxq@amsat.org
index 3f87c7da4ca2e303629b6b878e5e4e329db4aab1..f62fcdbc8b9ffdeb3a92b3131c487df8fc7f08e8 100644 (file)
@@ -9,32 +9,36 @@ The following terms are used in this document:
    of connecting to a variety of systems and interfaces, typically uses i2c for
    control and configuration, and a parallel or a serial bus for data.
  - camera host - an interface, to which a camera is connected. Typically a
-   specialised interface, present on many SoCs, e.g., PXA27x and PXA3xx, SuperH,
+   specialised interface, present on many SoCs, e.g. PXA27x and PXA3xx, SuperH,
    AVR32, i.MX27, i.MX31.
  - camera host bus - a connection between a camera host and a camera. Can be
-   parallel or serial, consists of data and control lines, e.g., clock, vertical
+   parallel or serial, consists of data and control lines, e.g. clock, vertical
    and horizontal synchronization signals.
 
 Purpose of the soc-camera subsystem
 -----------------------------------
 
-The soc-camera subsystem provides a unified API between camera host drivers and
-camera sensor drivers. It implements a V4L2 interface to the user, currently
-only the mmap method is supported.
+The soc-camera subsystem initially provided a unified API between camera host
+drivers and camera sensor drivers. Later the soc-camera sensor API has been
+replaced with the V4L2 standard subdev API. This also made camera driver re-use
+with non-soc-camera hosts possible. The camera host API to the soc-camera core
+has been preserved.
 
-This subsystem has been written to connect drivers for System-on-Chip (SoC)
-video capture interfaces with drivers for CMOS camera sensor chips to enable
-the reuse of sensor drivers with various hosts. The subsystem has been designed
-to support multiple camera host interfaces and multiple cameras per interface,
-although most applications have only one camera sensor.
+Soc-camera implements a V4L2 interface to the user, currently only the "mmap"
+method is supported by host drivers. However, the soc-camera core also provides
+support for the "read" method.
+
+The subsystem has been designed to support multiple camera host interfaces and
+multiple cameras per interface, although most applications have only one camera
+sensor.
 
 Existing drivers
 ----------------
 
-As of 2.6.27-rc4 there are two host drivers in the mainline: pxa_camera.c for
-PXA27x SoCs and sh_mobile_ceu_camera.c for SuperH SoCs, and four sensor drivers:
-mt9m001.c, mt9m111.c, mt9v022.c and a generic soc_camera_platform.c driver. This
-list is not supposed to be updated, look for more examples in your tree.
+As of 3.7 there are seven host drivers in the mainline: atmel-isi.c,
+mx1_camera.c (broken, scheduled for removal), mx2_camera.c, mx3_camera.c,
+omap1_camera.c, pxa_camera.c, sh_mobile_ceu_camera.c, and multiple sensor
+drivers under drivers/media/i2c/soc_camera/.
 
 Camera host API
 ---------------
@@ -45,38 +49,37 @@ soc_camera_host_register(struct soc_camera_host *);
 
 function. The host object can be initialized as follows:
 
-static struct soc_camera_host pxa_soc_camera_host = {
-       .drv_name       = PXA_CAM_DRV_NAME,
-       .ops            = &pxa_soc_camera_host_ops,
-};
+       struct soc_camera_host  *ici;
+       ici->drv_name           = DRV_NAME;
+       ici->ops                = &camera_host_ops;
+       ici->priv               = pcdev;
+       ici->v4l2_dev.dev       = &pdev->dev;
+       ici->nr                 = pdev->id;
 
 All camera host methods are passed in a struct soc_camera_host_ops:
 
-static struct soc_camera_host_ops pxa_soc_camera_host_ops = {
+static struct soc_camera_host_ops camera_host_ops = {
        .owner          = THIS_MODULE,
-       .add            = pxa_camera_add_device,
-       .remove         = pxa_camera_remove_device,
-       .suspend        = pxa_camera_suspend,
-       .resume         = pxa_camera_resume,
-       .set_fmt_cap    = pxa_camera_set_fmt_cap,
-       .try_fmt_cap    = pxa_camera_try_fmt_cap,
-       .init_videobuf  = pxa_camera_init_videobuf,
-       .reqbufs        = pxa_camera_reqbufs,
-       .poll           = pxa_camera_poll,
-       .querycap       = pxa_camera_querycap,
-       .try_bus_param  = pxa_camera_try_bus_param,
-       .set_bus_param  = pxa_camera_set_bus_param,
+       .add            = camera_add_device,
+       .remove         = camera_remove_device,
+       .set_fmt        = camera_set_fmt_cap,
+       .try_fmt        = camera_try_fmt_cap,
+       .init_videobuf2 = camera_init_videobuf2,
+       .poll           = camera_poll,
+       .querycap       = camera_querycap,
+       .set_bus_param  = camera_set_bus_param,
+       /* The rest of host operations are optional */
 };
 
 .add and .remove methods are called when a sensor is attached to or detached
-from the host, apart from performing host-internal tasks they shall also call
-sensor driver's .init and .release methods respectively. .suspend and .resume
-methods implement host's power-management functionality and its their
-responsibility to call respective sensor's methods. .try_bus_param and
-.set_bus_param are used to negotiate physical connection parameters between the
-host and the sensor. .init_videobuf is called by soc-camera core when a
-video-device is opened, further video-buffer management is implemented completely
-by the specific camera host driver. The rest of the methods are called from
+from the host. .set_bus_param is used to configure physical connection
+parameters between the host and the sensor. .init_videobuf2 is called by
+soc-camera core when a video-device is opened, the host driver would typically
+call vb2_queue_init() in this method. Further video-buffer management is
+implemented completely by the specific camera host driver. If the host driver
+supports non-standard pixel format conversion, it should implement a
+.get_formats and, possibly, a .put_formats operations. See below for more
+details about format conversion. The rest of the methods are called from
 respective V4L2 operations.
 
 Camera API
@@ -84,37 +87,21 @@ Camera API
 
 Sensor drivers can use struct soc_camera_link, typically provided by the
 platform, and used to specify to which camera host bus the sensor is connected,
-and arbitrarily provide platform .power and .reset methods for the camera.
-soc_camera_device_register() and soc_camera_device_unregister() functions are
-used to add a sensor driver to or remove one from the system. The registration
-function takes a pointer to struct soc_camera_device as the only parameter.
-This struct can be initialized as follows:
-
-       /* link to driver operations */
-       icd->ops        = &mt9m001_ops;
-       /* link to the underlying physical (e.g., i2c) device */
-       icd->control    = &client->dev;
-       /* window geometry */
-       icd->x_min      = 20;
-       icd->y_min      = 12;
-       icd->x_current  = 20;
-       icd->y_current  = 12;
-       icd->width_min  = 48;
-       icd->width_max  = 1280;
-       icd->height_min = 32;
-       icd->height_max = 1024;
-       icd->y_skip_top = 1;
-       /* camera bus ID, typically obtained from platform data */
-       icd->iface      = icl->bus_id;
-
-struct soc_camera_ops provides .probe and .remove methods, which are called by
-the soc-camera core, when a camera is matched against or removed from a camera
-host bus, .init, .release, .suspend, and .resume are called from the camera host
-driver as discussed above. Other members of this struct provide respective V4L2
-functionality.
-
-struct soc_camera_device also links to an array of struct soc_camera_data_format,
-listing pixel formats, supported by the camera.
+and optionally provide platform .power and .reset methods for the camera. This
+struct is provided to the camera driver via the I2C client device platform data
+and can be obtained, using the soc_camera_i2c_to_link() macro. Care should be
+taken, when using soc_camera_vdev_to_subdev() and when accessing struct
+soc_camera_device, using v4l2_get_subdev_hostdata(): both only work, when
+running on an soc-camera host. The actual camera driver operation is implemented
+using the V4L2 subdev API. Additionally soc-camera camera drivers can use
+auxiliary soc-camera helper functions like soc_camera_power_on() and
+soc_camera_power_off(), which switch regulators, provided by the platform and call
+board-specific power switching methods. soc_camera_apply_board_flags() takes
+camera bus configuration capability flags and applies any board transformations,
+e.g. signal polarity inversion. soc_mbus_get_fmtdesc() can be used to obtain a
+pixel format descriptor, corresponding to a certain media-bus pixel format code.
+soc_camera_limit_side() can be used to restrict beginning and length of a frame
+side, based on camera capabilities.
 
 VIDIOC_S_CROP and VIDIOC_S_FMT behaviour
 ----------------------------------------
@@ -153,8 +140,25 @@ implemented.
 User window geometry is kept in .user_width and .user_height fields in struct
 soc_camera_device and used by the soc-camera core and host drivers. The core
 updates these fields upon successful completion of a .s_fmt() call, but if these
-fields change elsewhere, e.g., during .s_crop() processing, the host driver is
+fields change elsewhere, e.g. during .s_crop() processing, the host driver is
 responsible for updating them.
 
+Format conversion
+-----------------
+
+V4L2 distinguishes between pixel formats, as they are stored in memory, and as
+they are transferred over a media bus. Soc-camera provides support to
+conveniently manage these formats. A table of standard transformations is
+maintained by soc-camera core, which describes, what FOURCC pixel format will
+be obtained, if a media-bus pixel format is stored in memory according to
+certain rules. E.g. if V4L2_MBUS_FMT_YUYV8_2X8 data is sampled with 8 bits per
+sample and stored in memory in the little-endian order with no gaps between
+bytes, data in memory will represent the V4L2_PIX_FMT_YUYV FOURCC format. These
+standard transformations will be used by soc-camera or by camera host drivers to
+configure camera drivers to produce the FOURCC format, requested by the user,
+using the VIDIOC_S_FMT ioctl(). Apart from those standard format conversions,
+host drivers can also provide their own conversion rules by implementing a
+.get_formats and, if required, a .put_formats methods.
+
 --
 Author: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
diff --git a/Documentation/video4linux/stv680.txt b/Documentation/video4linux/stv680.txt
deleted file mode 100644 (file)
index e3de336..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Linux driver for STV0680 based USB cameras
-
-Copyright, 2001, Kevin Sisson
-
-
-INTRODUCTION:
-
-STMicroelectronics produces the STV0680B chip, which comes in two
-types, -001 and -003. The -003 version allows the recording and downloading
-of sound clips from the camera, and allows a flash attachment. Otherwise,
-it uses the same commands as the -001 version. Both versions support a
-variety of SDRAM sizes and sensors, allowing for a maximum of 26 VGA or 20
-CIF pictures. The STV0680 supports either a serial or a usb interface, and
-video is possible through the usb interface.
-
-The following cameras are known to work with this driver, although any
-camera with Vendor/Product codes of 0553/0202 should work:
-
-Aiptek Pencam (various models)
-Nisis QuickPix 2
-Radio Shack 'Kid's digital camera' (#60-1207)
-At least one Trust Spycam model
-Several other European brand models
-
-WHAT YOU NEED:
-
--      USB support
--      VIDEO4LINUX support
-
-More information about USB support for linux can be found at:
-http://www.linux-usb.org
-
-
-MODULE OPTIONS:
-
-When the driver is compiled as a module, you can set a "swapRGB=1"
-option, if necessary, for those applications that require it
-(such as xawtv). However, the driver should detect and set this
-automatically, so this option should not normally be used.
-
-
-KNOWN PROBLEMS:
-
-The driver seems to work better with the usb-ohci than the usb-uhci host
-controller driver.
-
-HELP:
-
-The latest info on this driver can be found at:
-http://personal.clt.bellsouth.net/~kjsisson or at
-http://stv0680-usb.sourceforge.net
-
-Any questions to me can be send to:  kjsisson@bellsouth.net
index 32bfe926e8d77717e67a9e485ca89b398f5c26a8..0a1ef671c9d42eb456c0f60738519ad1c98f6479 100644 (file)
@@ -68,8 +68,7 @@ Structure of the framework
 The framework closely resembles the driver structure: it has a v4l2_device
 struct for the device instance data, a v4l2_subdev struct to refer to
 sub-device instances, the video_device struct stores V4L2 device node data
-and in the future a v4l2_fh struct will keep track of filehandle instances
-(this is not yet implemented).
+and the v4l2_fh struct keeps track of filehandle instances.
 
 The V4L2 framework also optionally integrates with the media framework. If a
 driver sets the struct v4l2_device mdev field, sub-devices and video nodes
diff --git a/Documentation/video4linux/w9968cf.txt b/Documentation/video4linux/w9968cf.txt
deleted file mode 100644 (file)
index 9649450..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-
-                  W996[87]CF JPEG USB Dual Mode Camera Chip
-                    Driver for Linux 2.6 (basic version)
-                  =========================================
-
-                              - Documentation -
-
-
-Index
-=====
-1.  Copyright
-2.  Disclaimer
-3.  License
-4.  Overview
-5.  Supported devices
-6.  Module dependencies
-7.  Module loading
-8.  Module parameters
-9.  Contact information
-10. Credits
-
-
-1. Copyright
-============
-Copyright (C) 2002-2004 by Luca Risolia <luca.risolia@studio.unibo.it>
-
-
-2. Disclaimer
-=============
-Winbond is a trademark of Winbond Electronics Corporation.
-This software is not sponsored or developed by Winbond.
-
-
-3. License
-==========
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-4. Overview
-===========
-This driver supports the video streaming capabilities of the devices mounting
-Winbond W9967CF and Winbond W9968CF JPEG USB Dual Mode Camera Chips. OV681
-based cameras should be supported as well.
-
-The driver is divided into two modules: the basic one, "w9968cf", is needed for
-the supported devices to work; the second one, "w9968cf-vpp", is an optional
-module, which provides some useful video post-processing functions like video
-decoding, up-scaling and colour conversions.
-
-Note that the official kernels do neither include nor support the second
-module for performance purposes. Therefore, it is always recommended to
-download and install the latest and complete release of the driver,
-replacing the existing one, if present.
-
-The latest and full-featured version of the W996[87]CF driver can be found at:
-http://www.linux-projects.org. Please refer to the documentation included in
-that package, if you are going to use it.
-
-Up to 32 cameras can be handled at the same time. They can be connected and
-disconnected from the host many times without turning off the computer, if
-your system supports the hotplug facility.
-
-To change the default settings for each camera, many parameters can be passed
-through command line when the module is loaded into memory.
-
-The driver relies on the Video4Linux, USB and I2C core modules. It has been
-designed to run properly on SMP systems as well. An additional module,
-"ovcamchip", is mandatory; it provides support for some OmniVision image
-sensors connected to the W996[87]CF chips; if found in the system, the module
-will be automatically loaded by default (provided that the kernel has been
-compiled with the automatic module loading option).
-
-
-5. Supported devices
-====================
-At the moment, known W996[87]CF and OV681 based devices are:
-- Aroma Digi Pen VGA Dual Mode ADG-5000 (unknown image sensor)
-- AVerMedia AVerTV USB (SAA7111A, Philips FI1216Mk2 tuner, PT2313L audio chip)
-- Creative Labs Video Blaster WebCam Go (OmniVision OV7610 sensor)
-- Creative Labs Video Blaster WebCam Go Plus (OmniVision OV7620 sensor)
-- Lebon LDC-035A (unknown image sensor)
-- Ezonics EZ-802 EZMega Cam (OmniVision OV8610C sensor)
-- OmniVision OV8610-EDE (OmniVision OV8610 sensor)
-- OPCOM Digi Pen VGA Dual Mode Pen Camera (unknown image sensor)
-- Pretec Digi Pen-II (OmniVision OV7620 sensor)
-- Pretec DigiPen-480 (OmniVision OV8610 sensor)
-
-If you know any other W996[87]CF or OV681 based cameras, please contact me.
-
-The list above does not imply that all those devices work with this driver: up
-until now only webcams that have an image sensor supported by the "ovcamchip"
-module work. Kernel messages will always tell you whether this is case.
-
-Possible external microcontrollers of those webcams are not supported: this
-means that still images cannot be downloaded from the device memory.
-
-Furthermore, it's worth to note that I was only able to run tests on my
-"Creative Labs Video Blaster WebCam Go". Donations of other models, for
-additional testing and full support, would be much appreciated.
-
-
-6. Module dependencies
-======================
-For it to work properly, the driver needs kernel support for Video4Linux, USB
-and I2C, and the "ovcamchip" module for the image sensor. Make sure you are not
-actually using any external "ovcamchip" module, given that the W996[87]CF
-driver depends on the version of the module present in the official kernels.
-
-The following options of the kernel configuration file must be enabled and
-corresponding modules must be compiled:
-
-       # Multimedia devices
-       #
-       CONFIG_VIDEO_DEV=m
-
-       # I2C support
-       #
-       CONFIG_I2C=m
-
-The I2C core module can be compiled statically in the kernel as well.
-
-       # OmniVision Camera Chip support
-       #
-       CONFIG_VIDEO_OVCAMCHIP=m
-
-       # USB support
-       #
-       CONFIG_USB=m
-
-In addition, depending on the hardware being used, only one of the modules
-below is necessary:
-
-       # USB Host Controller Drivers
-       #
-       CONFIG_USB_EHCI_HCD=m
-       CONFIG_USB_UHCI_HCD=m
-       CONFIG_USB_OHCI_HCD=m
-
-And finally:
-
-       # USB Multimedia devices
-       #
-       CONFIG_USB_W9968CF=m
-
-
-7. Module loading
-=================
-To use the driver, it is necessary to load the "w9968cf" module into memory
-after every other module required.
-
-Loading can be done this way, from root:
-
-       [root@localhost home]# modprobe usbcore
-       [root@localhost home]# modprobe i2c-core
-       [root@localhost home]# modprobe videodev
-       [root@localhost home]# modprobe w9968cf
-
-At this point the pertinent devices should be recognized: "dmesg" can be used
-to analyze kernel messages:
-
-       [user@localhost home]$ dmesg
-
-There are a lot of parameters the module can use to change the default
-settings for each device. To list every possible parameter with a brief
-explanation about them and which syntax to use, it is recommended to run the
-"modinfo" command:
-
-       [root@locahost home]# modinfo w9968cf
-
-
-8. Module parameters
-====================
-Module parameters are listed below:
--------------------------------------------------------------------------------
-Name:            ovmod_load
-Type:            bool
-Syntax:          <0|1>
-Description:     Automatic 'ovcamchip' module loading: 0 disabled, 1 enabled.
-                If enabled, 'insmod' searches for the required 'ovcamchip'
-                module in the system, according to its configuration, and
-                loads that module automatically. This action is performed as
-                once soon as the 'w9968cf' module is loaded into memory.
-Default:         1
--------------------------------------------------------------------------------
-Name:           simcams
-Type:           int
-Syntax:         <n>
-Description:    Number of cameras allowed to stream simultaneously.
-               n may vary from 0 to 32.
-Default:        32
--------------------------------------------------------------------------------
-Name:           video_nr
-Type:           int array (min = 0, max = 32)
-Syntax:         <-1|n[,...]>
-Description:    Specify V4L minor mode number.
-               -1 = use next available
-                n = use minor number n
-               You can specify up to 32 cameras this way.
-               For example:
-               video_nr=-1,2,-1 would assign minor number 2 to the second
-               recognized camera and use auto for the first one and for every
-               other camera.
-Default:        -1
--------------------------------------------------------------------------------
-Name:           packet_size
-Type:           int array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    Specify the maximum data payload size in bytes for alternate
-               settings, for each device. n is scaled between 63 and 1023.
-Default:        1023
--------------------------------------------------------------------------------
-Name:           max_buffers
-Type:           int array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    For advanced users.
-               Specify the maximum number of video frame buffers to allocate
-               for each device, from 2 to 32.
-Default:        2
--------------------------------------------------------------------------------
-Name:           double_buffer
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Hardware double buffering: 0 disabled, 1 enabled.
-               It should be enabled if you want smooth video output: if you
-               obtain out of sync. video, disable it, or try to
-               decrease the 'clockdiv' module parameter value.
-Default:        1 for every device.
--------------------------------------------------------------------------------
-Name:           clamping
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Video data clamping: 0 disabled, 1 enabled.
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           filter_type
-Type:           int array (min = 0, max = 32)
-Syntax:         <0|1|2[,...]>
-Description:    Video filter type.
-               0 none, 1 (1-2-1) 3-tap filter, 2 (2-3-6-3-2) 5-tap filter.
-               The filter is used to reduce noise and aliasing artifacts
-               produced by the CCD or CMOS image sensor.
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           largeview
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Large view: 0 disabled, 1 enabled.
-Default:        1 for every device.
--------------------------------------------------------------------------------
-Name:           upscaling
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Software scaling (for non-compressed video only):
-               0 disabled, 1 enabled.
-               Disable it if you have a slow CPU or you don't have enough
-               memory.
-Default:        0 for every device.
-Note:           If 'w9968cf-vpp' is not present, this parameter is set to 0.
--------------------------------------------------------------------------------
-Name:           decompression
-Type:           int array (min = 0, max = 32)
-Syntax:         <0|1|2[,...]>
-Description:    Software video decompression:
-               0 = disables decompression
-                   (doesn't allow formats needing decompression).
-               1 = forces decompression
-                   (allows formats needing decompression only).
-               2 = allows any permitted formats.
-               Formats supporting (de)compressed video are YUV422P and
-               YUV420P/YUV420 in any resolutions where width and height are
-               multiples of 16.
-Default:        2 for every device.
-Note:           If 'w9968cf-vpp' is not present, forcing decompression is not
-               allowed; in this case this parameter is set to 2.
--------------------------------------------------------------------------------
-Name:           force_palette
-Type:           int array (min = 0, max = 32)
-Syntax:         <0|9|10|13|15|8|7|1|6|3|4|5[,...]>
-Description:    Force picture palette.
-               In order:
-                0 = Off - allows any of the following formats:
-                9 = UYVY    16 bpp - Original video, compression disabled
-               10 = YUV420  12 bpp - Original video, compression enabled
-               13 = YUV422P 16 bpp - Original video, compression enabled
-               15 = YUV420P 12 bpp - Original video, compression enabled
-                8 = YUVY    16 bpp - Software conversion from UYVY
-                7 = YUV422  16 bpp - Software conversion from UYVY
-                1 = GREY     8 bpp - Software conversion from UYVY
-                6 = RGB555  16 bpp - Software conversion from UYVY
-                3 = RGB565  16 bpp - Software conversion from UYVY
-                4 = RGB24   24 bpp - Software conversion from UYVY
-                5 = RGB32   32 bpp - Software conversion from UYVY
-               When not 0, this parameter will override 'decompression'.
-Default:        0 for every device. Initial palette is 9 (UYVY).
-Note:           If 'w9968cf-vpp' is not present, this parameter is set to 9.
--------------------------------------------------------------------------------
-Name:           force_rgb
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Read RGB video data instead of BGR:
-               1 = use RGB component ordering.
-               0 = use BGR component ordering.
-               This parameter has effect when using RGBX palettes only.
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           autobright
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Image sensor automatically changes brightness:
-               0 = no, 1 = yes
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           autoexp
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Image sensor automatically changes exposure:
-               0 = no, 1 = yes
-Default:        1 for every device.
--------------------------------------------------------------------------------
-Name:           lightfreq
-Type:           int array (min = 0, max = 32)
-Syntax:         <50|60[,...]>
-Description:    Light frequency in Hz:
-               50 for European and Asian lighting, 60 for American lighting.
-Default:        50 for every device.
--------------------------------------------------------------------------------
-Name:           bandingfilter
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Banding filter to reduce effects of fluorescent
-               lighting:
-               0 disabled, 1 enabled.
-               This filter tries to reduce the pattern of horizontal
-               light/dark bands caused by some (usually fluorescent) lighting.
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           clockdiv
-Type:           int array (min = 0, max = 32)
-Syntax:         <-1|n[,...]>
-Description:    Force pixel clock divisor to a specific value (for experts):
-               n may vary from 0 to 127.
-               -1 for automatic value.
-               See also the 'double_buffer' module parameter.
-Default:        -1 for every device.
--------------------------------------------------------------------------------
-Name:           backlight
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Objects are lit from behind:
-               0 = no, 1 = yes
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           mirror
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    Reverse image horizontally:
-               0 = no, 1 = yes
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           monochrome
-Type:           bool array (min = 0, max = 32)
-Syntax:         <0|1[,...]>
-Description:    The image sensor is monochrome:
-               0 = no, 1 = yes
-Default:        0 for every device.
--------------------------------------------------------------------------------
-Name:           brightness
-Type:           long array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    Set picture brightness (0-65535).
-               This parameter has no effect if 'autobright' is enabled.
-Default:        31000 for every device.
--------------------------------------------------------------------------------
-Name:           hue
-Type:           long array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    Set picture hue (0-65535).
-Default:        32768 for every device.
--------------------------------------------------------------------------------
-Name:           colour
-Type:           long array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    Set picture saturation (0-65535).
-Default:        32768 for every device.
--------------------------------------------------------------------------------
-Name:           contrast
-Type:           long array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    Set picture contrast (0-65535).
-Default:        50000 for every device.
--------------------------------------------------------------------------------
-Name:           whiteness
-Type:           long array (min = 0, max = 32)
-Syntax:         <n[,...]>
-Description:    Set picture whiteness (0-65535).
-Default:        32768 for every device.
--------------------------------------------------------------------------------
-Name:           debug
-Type:           int
-Syntax:         <n>
-Description:    Debugging information level, from 0 to 6:
-               0 = none (use carefully)
-               1 = critical errors
-               2 = significant information
-               3 = configuration or general messages
-               4 = warnings
-               5 = called functions
-               6 = function internals
-               Level 5 and 6 are useful for testing only, when only one
-               device is used.
-Default:        2
--------------------------------------------------------------------------------
-Name:           specific_debug
-Type:           bool
-Syntax:         <0|1>
-Description:    Enable or disable specific debugging messages:
-               0 = print messages concerning every level <= 'debug' level.
-               1 = print messages concerning the level indicated by 'debug'.
-Default:        0
--------------------------------------------------------------------------------
-
-
-9. Contact information
-======================
-I may be contacted by e-mail at <luca.risolia@studio.unibo.it>.
-
-I can accept GPG/PGP encrypted e-mail. My GPG key ID is 'FCE635A4'.
-My public 1024-bit key should be available at your keyserver; the fingerprint
-is: '88E8 F32F 7244 68BA 3958  5D40 99DA 5D2A FCE6 35A4'.
-
-
-10. Credits
-==========
-The development would not have proceed much further without having looked at
-the source code of other drivers and without the help of several persons; in
-particular:
-
-- the I2C interface to kernel and high-level image sensor control routines have
-  been taken from the OV511 driver by Mark McClelland;
-
-- memory management code has been copied from the bttv driver by Ralph Metzler,
-  Marcus Metzler and Gerd Knorr;
-
-- the low-level I2C read function has been written by Frederic Jouault;
-
-- the low-level I2C fast write function has been written by Piotr Czerczak.
diff --git a/Documentation/video4linux/zc0301.txt b/Documentation/video4linux/zc0301.txt
deleted file mode 100644 (file)
index b41c83c..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-
-             ZC0301 and ZC0301P Image Processor and Control Chip
-                               Driver for Linux
-             ===================================================
-
-                              - Documentation -
-
-
-Index
-=====
-1.  Copyright
-2.  Disclaimer
-3.  License
-4.  Overview and features
-5.  Module dependencies
-6.  Module loading
-7.  Module parameters
-8.  Supported devices
-9.  Notes for V4L2 application developers
-10. Contact information
-11. Credits
-
-
-1. Copyright
-============
-Copyright (C) 2006-2007 by Luca Risolia <luca.risolia@studio.unibo.it>
-
-
-2. Disclaimer
-=============
-This software is not developed or sponsored by Z-Star Microelectronics Corp.
-Trademarks are property of their respective owner.
-
-
-3. License
-==========
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-4. Overview and features
-========================
-This driver supports the video interface of the devices mounting the ZC0301 or
-ZC0301P Image Processors and Control Chips.
-
-The driver relies on the Video4Linux2 and USB core modules. It has been
-designed to run properly on SMP systems as well.
-
-The latest version of the ZC0301[P] driver can be found at the following URL:
-http://www.linux-projects.org/
-
-Some of the features of the driver are:
-
-- full compliance with the Video4Linux2 API (see also "Notes for V4L2
-  application developers" paragraph);
-- available mmap or read/poll methods for video streaming through isochronous
-  data transfers;
-- automatic detection of image sensor;
-- video format is standard JPEG;
-- dynamic driver control thanks to various module parameters (see "Module
-  parameters" paragraph);
-- up to 64 cameras can be handled at the same time; they can be connected and
-  disconnected from the host many times without turning off the computer, if
-  the system supports hotplugging;
-
-
-5. Module dependencies
-======================
-For it to work properly, the driver needs kernel support for Video4Linux and
-USB.
-
-The following options of the kernel configuration file must be enabled and
-corresponding modules must be compiled:
-
-       # Multimedia devices
-       #
-       CONFIG_VIDEO_DEV=m
-
-       # USB support
-       #
-       CONFIG_USB=m
-
-In addition, depending on the hardware being used, the modules below are
-necessary:
-
-       # USB Host Controller Drivers
-       #
-       CONFIG_USB_EHCI_HCD=m
-       CONFIG_USB_UHCI_HCD=m
-       CONFIG_USB_OHCI_HCD=m
-
-The ZC0301 controller also provides a built-in microphone interface. It is
-supported by the USB Audio driver thanks to the ALSA API:
-
-       # Sound
-       #
-       CONFIG_SOUND=y
-
-       # Advanced Linux Sound Architecture
-       #
-       CONFIG_SND=m
-
-       # USB devices
-       #
-       CONFIG_SND_USB_AUDIO=m
-
-And finally:
-
-       # V4L USB devices
-       #
-       CONFIG_USB_ZC0301=m
-
-
-6. Module loading
-=================
-To use the driver, it is necessary to load the "zc0301" module into memory
-after every other module required: "videodev", "v4l2_common", "compat_ioctl32",
-"usbcore" and, depending on the USB host controller you have, "ehci-hcd",
-"uhci-hcd" or "ohci-hcd".
-
-Loading can be done as shown below:
-
-       [root@localhost home]# modprobe zc0301
-
-At this point the devices should be recognized. You can invoke "dmesg" to
-analyze kernel messages and verify that the loading process has gone well:
-
-       [user@localhost home]$ dmesg
-
-
-7. Module parameters
-====================
-Module parameters are listed below:
--------------------------------------------------------------------------------
-Name:           video_nr
-Type:           short array (min = 0, max = 64)
-Syntax:         <-1|n[,...]>
-Description:    Specify V4L2 minor mode number:
-               -1 = use next available
-                n = use minor number n
-               You can specify up to 64 cameras this way.
-               For example:
-               video_nr=-1,2,-1 would assign minor number 2 to the second
-               registered camera and use auto for the first one and for every
-               other camera.
-Default:        -1
--------------------------------------------------------------------------------
-Name:           force_munmap
-Type:           bool array (min = 0, max = 64)
-Syntax:         <0|1[,...]>
-Description:    Force the application to unmap previously mapped buffer memory
-               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-               all the applications support this feature. This parameter is
-               specific for each detected camera.
-               0 = do not force memory unmapping
-               1 = force memory unmapping (save memory)
-Default:        0
--------------------------------------------------------------------------------
-Name:           frame_timeout
-Type:           uint array (min = 0, max = 64)
-Syntax:         <n[,...]>
-Description:    Timeout for a video frame in seconds. This parameter is
-               specific for each detected camera. This parameter can be
-               changed at runtime thanks to the /sys filesystem interface.
-Default:        2
--------------------------------------------------------------------------------
-Name:           debug
-Type:           ushort
-Syntax:         <n>
-Description:    Debugging information level, from 0 to 3:
-               0 = none (use carefully)
-               1 = critical errors
-               2 = significant information
-               3 = more verbose messages
-               Level 3 is useful for testing only, when only one device
-               is used at the same time. It also shows some information
-               about the hardware being detected. This module parameter can be
-               changed at runtime thanks to the /sys filesystem interface.
-Default:        2
--------------------------------------------------------------------------------
-
-
-8. Supported devices
-====================
-None of the names of the companies as well as their products will be mentioned
-here. They have never collaborated with the author, so no advertising.
-
-From the point of view of a driver, what unambiguously identify a device are
-its vendor and product USB identifiers. Below is a list of known identifiers of
-devices mounting the ZC0301 Image Processor and Control Chips:
-
-Vendor ID  Product ID
----------  ----------
-0x041e     0x4017
-0x041e     0x401c
-0x041e     0x401e
-0x041e     0x401f
-0x041e     0x4022
-0x041e     0x4034
-0x041e     0x4035
-0x041e     0x4036
-0x041e     0x403a
-0x0458     0x7007
-0x0458     0x700c
-0x0458     0x700f
-0x046d     0x08ae
-0x055f     0xd003
-0x055f     0xd004
-0x0ac8     0x0301
-0x0ac8     0x301b
-0x0ac8     0x303b
-0x10fd     0x0128
-0x10fd     0x8050
-0x10fd     0x804e
-
-The list above does not imply that all those devices work with this driver: up
-until now only the ones that mount the following image sensors are supported;
-kernel messages will always tell you whether this is the case:
-
-Model       Manufacturer
------       ------------
-PAS202BCB   PixArt Imaging, Inc.
-PB-0330     Photobit Corporation
-
-
-9. Notes for V4L2 application developers
-========================================
-This driver follows the V4L2 API specifications. In particular, it enforces two
-rules:
-
-- exactly one I/O method, either "mmap" or "read", is associated with each
-file descriptor. Once it is selected, the application must close and reopen the
-device to switch to the other I/O method;
-
-- although it is not mandatory, previously mapped buffer memory should always
-be unmapped before calling any "VIDIOC_S_CROP" or "VIDIOC_S_FMT" ioctl's.
-The same number of buffers as before will be allocated again to match the size
-of the new video frames, so you have to map the buffers again before any I/O
-attempts on them.
-
-
-10. Contact information
-=======================
-The author may be contacted by e-mail at <luca.risolia@studio.unibo.it>.
-
-GPG/PGP encrypted e-mail's are accepted. The GPG key ID of the author is
-'FCE635A4'; the public 1024-bit key should be available at any keyserver;
-the fingerprint is: '88E8 F32F 7244 68BA 3958  5D40 99DA 5D2A FCE6 35A4'.
-
-
-11. Credits
-===========
-- Information about the chip internals needed to enable the I2C protocol have
-  been taken from the documentation of the ZC030x Video4Linux1 driver written
-  by Andrew Birkett <andy@nobugs.org>;
-- The initialization values of the ZC0301 controller connected to the PAS202BCB
-  and PB-0330 image sensors have been taken from the SPCA5XX driver maintained
-  by Michel Xhaard <mxhaard@magic.fr>;
-- Stanislav Lechev donated one camera.
index 4e2a1f67a1fcf00b553e8190947368d240d74b44..376117d5518da2703984a58c624ccbd3fdd328f0 100644 (file)
@@ -464,6 +464,14 @@ S: Maintained
 F:     drivers/scsi/aic7xxx/
 F:     drivers/scsi/aic7xxx_old/
 
+AIMSLAB FM RADIO RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-aimslab*
+
 AIO
 M:     Benjamin LaHaise <bcrl@kvack.org>
 L:     linux-aio@kvack.org
@@ -558,6 +566,18 @@ L: linux-rdma@vger.kernel.org
 S:     Maintained
 F:     drivers/infiniband/hw/amso1100/
 
+ANALOG DEVICES INC AD9389B DRIVER
+M:     Hans Verkuil <hans.verkuil@cisco.com>
+L:     linux-media@vger.kernel.org
+S:     Maintained
+F:     drivers/media/i2c/ad9389b*
+
+ANALOG DEVICES INC ADV7604 DRIVER
+M:     Hans Verkuil <hans.verkuil@cisco.com>
+L:     linux-media@vger.kernel.org
+S:     Maintained
+F:     drivers/media/i2c/adv7604*
+
 ANALOG DEVICES INC ASOC CODEC DRIVERS
 M:     Lars-Peter Clausen <lars@metafoo.de>
 L:     device-drivers-devel@blackfin.uclinux.org
@@ -1119,6 +1139,14 @@ F:       arch/arm/mach-s5pv210/mach-goni.c
 F:     arch/arm/mach-exynos/mach-universal_c210.c
 F:     arch/arm/mach-exynos/mach-nuri.c
 
+ARM/SAMSUNG S5P SERIES 2D GRAPHICS ACCELERATION (G2D) SUPPORT
+M:     Kyungmin Park <kyungmin.park@samsung.com>
+M:     Kamil Debski <k.debski@samsung.com>
+L:     linux-arm-kernel@lists.infradead.org
+L:     linux-media@vger.kernel.org
+S:     Maintained
+F:     drivers/media/platform/s5p-g2d/
+
 ARM/SAMSUNG S5P SERIES FIMC SUPPORT
 M:     Kyungmin Park <kyungmin.park@samsung.com>
 M:     Sylwester Nawrocki <s.nawrocki@samsung.com>
@@ -1412,7 +1440,7 @@ ATMEL ISI DRIVER
 M:     Josh Wu <josh.wu@atmel.com>
 L:     linux-media@vger.kernel.org
 S:     Supported
-F:     drivers/media/platform/atmel-isi.c
+F:     drivers/media/platform/soc_camera/atmel-isi.c
 F:     include/media/atmel-isi.h
 
 ATMEL LCDFB DRIVER
@@ -1509,6 +1537,14 @@ T:       git git://linuxtv.org/media_tree.git
 S:     Maintained
 F:     drivers/media/usb/dvb-usb-v2/az6007.c
 
+AZTECH FM RADIO RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-aztech*
+
 B43 WIRELESS DRIVER
 M:     Stefano Brivio <stefano.brivio@polimi.it>
 L:     linux-wireless@vger.kernel.org
@@ -1790,6 +1826,14 @@ S:       Supported
 F:     Documentation/filesystems/caching/cachefiles.txt
 F:     fs/cachefiles/
 
+CADET FM/AM RADIO RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-cadet*
+
 CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
 M:     Jonathan Corbet <corbet@lwn.net>
 L:     linux-media@vger.kernel.org
@@ -2187,6 +2231,15 @@ F:       Documentation/video4linux/cx18.txt
 F:     drivers/media/pci/cx18/
 F:     include/uapi/linux/ivtv*
 
+CX2341X MPEG ENCODER HELPER MODULE
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/i2c/cx2341x*
+F:     include/media/cx2341x*
+
 CX88 VIDEO4LINUX DRIVER
 M:     Mauro Carvalho Chehab <mchehab@redhat.com>
 L:     linux-media@vger.kernel.org
@@ -2558,6 +2611,13 @@ S:       Maintained
 F:     drivers/gpu/drm/tegra/
 F:     Documentation/devicetree/bindings/gpu/nvidia,tegra20-host1x.txt
 
+DSBR100 USB FM RADIO DRIVER
+M:     Alexey Klimov <klimov.linux@gmail.com>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+S:     Maintained
+F:     drivers/media/radio/dsbr100.c
+
 DSCC4 DRIVER
 M:     Francois Romieu <romieu@fr.zoreil.com>
 L:     netdev@vger.kernel.org
@@ -2622,7 +2682,7 @@ W:        http://github.com/mkrufky
 Q:     http://patchwork.linuxtv.org/project/linux-media/list/
 T:     git git://linuxtv.org/media_tree.git
 S:     Maintained
-F:     drivers/media/usb/dvb-usb-v2/cxusb*
+F:     drivers/media/usb/dvb-usb/cxusb*
 
 DVB_USB_CYPRESS_FIRMWARE MEDIA DRIVER
 M:     Antti Palosaari <crope@iki.fi>
@@ -3319,6 +3379,14 @@ W:       http://www.icp-vortex.com/
 S:     Supported
 F:     drivers/scsi/gdt*
 
+GEMTEK FM RADIO RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-gemtek*
+
 GENERIC GPIO I2C DRIVER
 M:     Haavard Skinnemoen <hskinnemoen@gmail.com>
 S:     Supported
@@ -4202,6 +4270,14 @@ F:       Documentation/isapnp.txt
 F:     drivers/pnp/isapnp/
 F:     include/linux/isapnp.h
 
+ISA RADIO MODULE
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-isa*
+
 iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
 M:     Peter Jones <pjones@redhat.com>
 M:     Konrad Rzeszutek Wilk <konrad@kernel.org>
@@ -4358,6 +4434,14 @@ W:       http://lse.sourceforge.net/kdump/
 S:     Maintained
 F:     Documentation/kdump/
 
+KEENE FM RADIO TRANSMITTER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-keene*
+
 KERNEL AUTOMOUNTER v4 (AUTOFS4)
 M:     Ian Kent <raven@themaw.net>
 L:     autofs@vger.kernel.org
@@ -4831,6 +4915,13 @@ Q:       http://patchwork.linuxtv.org/project/linux-media/list/
 S:     Maintained
 F:     drivers/media/dvb-frontends/m88rs2000*
 
+MA901 MASTERKIT USB FM RADIO DRIVER
+M:      Alexey Klimov <klimov.linux@gmail.com>
+L:      linux-media@vger.kernel.org
+T:      git git://linuxtv.org/media_tree.git
+S:      Maintained
+F:      drivers/media/radio/radio-ma901.c
+
 MAC80211
 M:     Johannes Berg <johannes@sipsolutions.net>
 L:     linux-wireless@vger.kernel.org
@@ -4928,6 +5019,14 @@ S:       Maintained
 F:     Documentation/hwmon/max6650
 F:     drivers/hwmon/max6650.c
 
+MAXIRADIO FM RADIO RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/radio-maxiradio*
+
 MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
 M:     Mauro Carvalho Chehab <mchehab@redhat.com>
 P:     LinuxTV.org Project
@@ -4950,6 +5049,14 @@ F:       include/uapi/linux/meye.h
 F:     include/uapi/linux/ivtv*
 F:     include/uapi/linux/uvcvideo.h
 
+MEDIAVISION PRO MOVIE STUDIO DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Odd Fixes
+F:     drivers/media/parport/pms*
+
 MEGARAID SCSI DRIVERS
 M:     Neela Syam Kolli <megaraidlinux@lsi.com>
 L:     linux-scsi@vger.kernel.org
@@ -5019,6 +5126,14 @@ S:       Supported
 F:     Documentation/mips/
 F:     arch/mips/
 
+MIROSOUND PCM20 FM RADIO RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Odd Fixes
+F:     drivers/media/radio/radio-miropcm20*
+
 MODULE SUPPORT
 M:     Rusty Russell <rusty@rustcorp.com.au>
 S:     Maintained
@@ -6198,6 +6313,14 @@ L:       linux-hexagon@vger.kernel.org
 S:     Supported
 F:     arch/hexagon/
 
+QUICKCAM PARALLEL PORT WEBCAMS
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Odd Fixes
+F:     drivers/media/parport/*-qcam*
+
 RADOS BLOCK DEVICE (RBD)
 M:     Yehuda Sadeh <yehuda@inktank.com>
 M:     Sage Weil <sage@inktank.com>
@@ -6471,6 +6594,14 @@ L:       linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 S:     Supported
 F:     drivers/mmc/host/s3cmci.*
 
+SAA6588 RDS RECEIVER DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Odd Fixes
+F:     drivers/media/i2c/saa6588*
+
 SAA7134 VIDEO4LINUX DRIVER
 M:     Mauro Carvalho Chehab <mchehab@redhat.com>
 L:     linux-media@vger.kernel.org
@@ -6481,10 +6612,9 @@ F:       Documentation/video4linux/saa7134/
 F:     drivers/media/pci/saa7134/
 
 SAA7146 VIDEO4LINUX-2 DRIVER
-M:     Michael Hunold <michael@mihu.de>
+M:     Hans Verkuil <hverkuil@xs4all.nl>
 L:     linux-media@vger.kernel.org
 T:     git git://linuxtv.org/media_tree.git
-W:     http://www.mihu.de/linux/saa7146
 S:     Maintained
 F:     drivers/media/common/saa7146/
 F:     drivers/media/pci/saa7146/
@@ -6783,6 +6913,38 @@ M:       Robin Holt <holt@sgi.com>
 S:     Maintained
 F:     drivers/misc/sgi-xp/
 
+SI470X FM RADIO RECEIVER I2C DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Odd Fixes
+F:     drivers/media/radio/si470x/radio-si470x-i2c.c
+
+SI470X FM RADIO RECEIVER USB DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/radio/si470x/radio-si470x-common.c
+F:     drivers/media/radio/si470x/radio-si470x.h
+F:     drivers/media/radio/si470x/radio-si470x-usb.c
+
+SH_VEU V4L2 MEM2MEM DRIVER
+M:     Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+L:     linux-media@vger.kernel.org
+S:     Maintained
+F:     drivers/media/platform/sh_veu.c
+F:     include/media/sh_veu.h
+
+SH_VOU V4L2 OUTPUT DRIVER
+M:     Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+L:     linux-media@vger.kernel.org
+S:     Maintained
+F:     drivers/media/platform/sh_vou.c
+F:     include/media/sh_vou.h
+
 SIMPLE FIRMWARE INTERFACE (SFI)
 M:     Len Brown <lenb@kernel.org>
 L:     sfi-devel@simplefirmware.org
@@ -7455,6 +7617,14 @@ T:       git git://linuxtv.org/mkrufky/tuners.git
 S:     Maintained
 F:     drivers/media/tuners/tda8290.*
 
+TDA9840 MEDIA DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/i2c/tda9840*
+
 TEA5761 TUNER DRIVER
 M:     Mauro Carvalho Chehab <mchehab@redhat.com>
 L:     linux-media@vger.kernel.org
@@ -7471,6 +7641,22 @@ T:       git git://linuxtv.org/media_tree.git
 S:     Maintained
 F:     drivers/media/tuners/tea5767.*
 
+TEA6415C MEDIA DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/i2c/tea6415c*
+
+TEA6420 MEDIA DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/i2c/tea6420*
+
 TEAM DRIVER
 M:     Jiri Pirko <jpirko@redhat.com>
 L:     netdev@vger.kernel.org
@@ -8087,6 +8273,14 @@ S:       Maintained
 F:     drivers/media/usb/uvc/
 F:     include/uapi/linux/uvcvideo.h
 
+USB VISION DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Odd Fixes
+F:     drivers/media/usb/usbvision/
+
 USB WEBCAM GADGET
 M:     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 L:     linux-usb@vger.kernel.org
@@ -8234,6 +8428,14 @@ L:       netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/ethernet/via/via-velocity.*
 
+VIVI VIRTUAL VIDEO DRIVER
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+L:     linux-media@vger.kernel.org
+T:     git git://linuxtv.org/media_tree.git
+W:     http://linuxtv.org
+S:     Maintained
+F:     drivers/media/platform/vivi*
+
 VLAN (802.1Q)
 M:     Patrick McHardy <kaber@trash.net>
 L:     netdev@vger.kernel.org
index f5e018de7fa512403fbd62bcf0a82277b9727830..8e1b4ffb5e542411e180401afc36a14af61e744a 100644 (file)
@@ -690,7 +690,7 @@ static struct vpbe_output dm644xevm_vpbe_outputs[] = {
                        .std            = VENC_STD_ALL,
                        .capabilities   = V4L2_OUT_CAP_STD,
                },
-               .subdev_name    = VPBE_VENC_SUBDEV_NAME,
+               .subdev_name    = DM644X_VPBE_VENC_SUBDEV_NAME,
                .default_mode   = "ntsc",
                .num_modes      = ARRAY_SIZE(dm644xevm_enc_std_timing),
                .modes          = dm644xevm_enc_std_timing,
@@ -702,7 +702,7 @@ static struct vpbe_output dm644xevm_vpbe_outputs[] = {
                        .type           = V4L2_OUTPUT_TYPE_ANALOG,
                        .capabilities   = V4L2_OUT_CAP_DV_TIMINGS,
                },
-               .subdev_name    = VPBE_VENC_SUBDEV_NAME,
+               .subdev_name    = DM644X_VPBE_VENC_SUBDEV_NAME,
                .default_mode   = "480p59_94",
                .num_modes      = ARRAY_SIZE(dm644xevm_enc_preset_timing),
                .modes          = dm644xevm_enc_preset_timing,
@@ -713,10 +713,10 @@ static struct vpbe_config dm644xevm_display_cfg = {
        .module_name    = "dm644x-vpbe-display",
        .i2c_adapter_id = 1,
        .osd            = {
-               .module_name    = VPBE_OSD_SUBDEV_NAME,
+               .module_name    = DM644X_VPBE_OSD_SUBDEV_NAME,
        },
        .venc           = {
-               .module_name    = VPBE_VENC_SUBDEV_NAME,
+               .module_name    = DM644X_VPBE_VENC_SUBDEV_NAME,
        },
        .num_outputs    = ARRAY_SIZE(dm644xevm_vpbe_outputs),
        .outputs        = dm644xevm_vpbe_outputs,
index 11c79a3362ef9e3ec1aa7abc67280ddbada9591f..db1dd92e00af44c13f7f55f0ae364f08be1035c4 100644 (file)
@@ -669,19 +669,14 @@ static struct resource dm644x_osd_resources[] = {
        },
 };
 
-static struct osd_platform_data dm644x_osd_data = {
-       .vpbe_type     = VPBE_VERSION_1,
-};
-
 static struct platform_device dm644x_osd_dev = {
-       .name           = VPBE_OSD_SUBDEV_NAME,
+       .name           = DM644X_VPBE_OSD_SUBDEV_NAME,
        .id             = -1,
        .num_resources  = ARRAY_SIZE(dm644x_osd_resources),
        .resource       = dm644x_osd_resources,
        .dev            = {
                .dma_mask               = &dm644x_video_dma_mask,
                .coherent_dma_mask      = DMA_BIT_MASK(32),
-               .platform_data          = &dm644x_osd_data,
        },
 };
 
@@ -751,12 +746,11 @@ static struct platform_device dm644x_vpbe_display = {
 };
 
 static struct venc_platform_data dm644x_venc_pdata = {
-       .venc_type      = VPBE_VERSION_1,
        .setup_clock    = dm644x_venc_setup_clock,
 };
 
 static struct platform_device dm644x_venc_dev = {
-       .name           = VPBE_VENC_SUBDEV_NAME,
+       .name           = DM644X_VPBE_VENC_SUBDEV_NAME,
        .id             = -1,
        .num_resources  = ARRAY_SIZE(dm644x_venc_resources),
        .resource       = dm644x_venc_resources,
index b3890bd49df6089fa0871f70d7b09abc47375b4c..2652f9155c347a0e9ac2e83f82933c5ddfe40f7b 100644 (file)
@@ -105,7 +105,7 @@ void saa7146_buffer_finish(struct saa7146_dev *dev,
        }
 
        q->curr->vb.state = state;
-       do_gettimeofday(&q->curr->vb.ts);
+       v4l2_get_timestamp(&q->curr->vb.ts);
        wake_up(&q->curr->vb.done);
 
        q->curr = NULL;
index bc5a82082aaae7891d55dd2cd3c6eabff93e9b84..0e3387e0095267b88e1517491be75601bf9f295b 100644 (file)
@@ -212,7 +212,7 @@ static int ix2505v_set_params(struct dvb_frontend *fe)
                lpf = 0xb;
 
        deb_info("Osc=%x b_w=%x lpf=%x\n", local_osc, b_w, lpf);
-       deb_info("Data 0=[%x%x%x%x]\n", data[0], data[1], data[2], data[3]);
+       deb_info("Data 0=[%4phN]\n", data);
 
        if (fe->ops.i2c_gate_ctrl)
                fe->ops.i2c_gate_ctrl(fe, 1);
index c625b57b4333e499827ff9e024d98227eda78775..10cfc05791689323b0d4ab5b967eb22ff7e9e1db 100644 (file)
@@ -22,6 +22,8 @@
  *
 */
 
+#define pr_fmt(fmt)    KBUILD_MODNAME ": %s: " fmt, __func__
+
 /*
  * This driver needs external firmware. Please use the command
  * "<kerneldir>/Documentation/dvb/get_dvb_firmware or51211" to
@@ -44,9 +46,7 @@
 
 static int debug;
 #define dprintk(args...) \
-       do { \
-               if (debug) printk(KERN_DEBUG "or51211: " args); \
-       } while (0)
+       do { if (debug) pr_debug(args); } while (0)
 
 static u8 run_buf[] = {0x7f,0x01};
 static u8 cmd_buf[] = {0x04,0x01,0x50,0x80,0x06}; // ATSC
@@ -80,8 +80,7 @@ static int i2c_writebytes (struct or51211_state* state, u8 reg, const u8 *buf,
        msg.buf         = (u8 *)buf;
 
        if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) {
-               printk(KERN_WARNING "or51211: i2c_writebytes error "
-                      "(addr %02x, err == %i)\n", reg, err);
+               pr_warn("error (addr %02x, err == %i)\n", reg, err);
                return -EREMOTEIO;
        }
 
@@ -98,8 +97,7 @@ static int i2c_readbytes(struct or51211_state *state, u8 reg, u8 *buf, int len)
        msg.buf         = buf;
 
        if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) {
-               printk(KERN_WARNING "or51211: i2c_readbytes error "
-                      "(addr %02x, err == %i)\n", reg, err);
+               pr_warn("error (addr %02x, err == %i)\n", reg, err);
                return -EREMOTEIO;
        }
 
@@ -118,11 +116,11 @@ static int or51211_load_firmware (struct dvb_frontend* fe,
        /* Get eprom data */
        tudata[0] = 17;
        if (i2c_writebytes(state,0x50,tudata,1)) {
-               printk(KERN_WARNING "or51211:load_firmware error eprom addr\n");
+               pr_warn("error eprom addr\n");
                return -1;
        }
        if (i2c_readbytes(state,0x50,&tudata[145],192)) {
-               printk(KERN_WARNING "or51211: load_firmware error eprom\n");
+               pr_warn("error eprom\n");
                return -1;
        }
 
@@ -136,32 +134,32 @@ static int or51211_load_firmware (struct dvb_frontend* fe,
        state->config->reset(fe);
 
        if (i2c_writebytes(state,state->config->demod_address,tudata,585)) {
-               printk(KERN_WARNING "or51211: load_firmware error 1\n");
+               pr_warn("error 1\n");
                return -1;
        }
        msleep(1);
 
        if (i2c_writebytes(state,state->config->demod_address,
                           &fw->data[393],8125)) {
-               printk(KERN_WARNING "or51211: load_firmware error 2\n");
+               pr_warn("error 2\n");
                return -1;
        }
        msleep(1);
 
        if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) {
-               printk(KERN_WARNING "or51211: load_firmware error 3\n");
+               pr_warn("error 3\n");
                return -1;
        }
 
        /* Wait at least 5 msec */
        msleep(10);
        if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) {
-               printk(KERN_WARNING "or51211: load_firmware error 4\n");
+               pr_warn("error 4\n");
                return -1;
        }
        msleep(10);
 
-       printk("or51211: Done.\n");
+       pr_info("Done.\n");
        return 0;
 };
 
@@ -173,14 +171,14 @@ static int or51211_setmode(struct dvb_frontend* fe, int mode)
        state->config->setmode(fe, mode);
 
        if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) {
-               printk(KERN_WARNING "or51211: setmode error 1\n");
+               pr_warn("error 1\n");
                return -1;
        }
 
        /* Wait at least 5 msec */
        msleep(10);
        if (i2c_writebytes(state,state->config->demod_address,run_buf,2)) {
-               printk(KERN_WARNING "or51211: setmode error 2\n");
+               pr_warn("error 2\n");
                return -1;
        }
 
@@ -196,7 +194,7 @@ static int or51211_setmode(struct dvb_frontend* fe, int mode)
         *             normal +/-150kHz Carrier acquisition range
         */
        if (i2c_writebytes(state,state->config->demod_address,cmd_buf,3)) {
-               printk(KERN_WARNING "or51211: setmode error 3\n");
+               pr_warn("error 3\n");
                return -1;
        }
 
@@ -206,14 +204,14 @@ static int or51211_setmode(struct dvb_frontend* fe, int mode)
        rec_buf[3] = 0x00;
        msleep(20);
        if (i2c_writebytes(state,state->config->demod_address,rec_buf,3)) {
-               printk(KERN_WARNING "or51211: setmode error 5\n");
+               pr_warn("error 5\n");
        }
        msleep(3);
        if (i2c_readbytes(state,state->config->demod_address,&rec_buf[10],2)) {
-               printk(KERN_WARNING "or51211: setmode error 6");
+               pr_warn("error 6\n");
                return -1;
        }
-       dprintk("setmode rec status %02x %02x\n",rec_buf[10],rec_buf[11]);
+       dprintk("rec status %02x %02x\n", rec_buf[10], rec_buf[11]);
 
        return 0;
 }
@@ -248,15 +246,15 @@ static int or51211_read_status(struct dvb_frontend* fe, fe_status_t* status)
 
        /* Receiver Status */
        if (i2c_writebytes(state,state->config->demod_address,snd_buf,3)) {
-               printk(KERN_WARNING "or51132: read_status write error\n");
+               pr_warn("write error\n");
                return -1;
        }
        msleep(3);
        if (i2c_readbytes(state,state->config->demod_address,rec_buf,2)) {
-               printk(KERN_WARNING "or51132: read_status read error\n");
+               pr_warn("read error\n");
                return -1;
        }
-       dprintk("read_status %x %x\n",rec_buf[0],rec_buf[1]);
+       dprintk("%x %x\n", rec_buf[0], rec_buf[1]);
 
        if (rec_buf[0] &  0x01) { /* Receiver Lock */
                *status |= FE_HAS_SIGNAL;
@@ -306,20 +304,18 @@ static int or51211_read_snr(struct dvb_frontend* fe, u16* snr)
        snd_buf[2] = 0x04;
 
        if (i2c_writebytes(state,state->config->demod_address,snd_buf,3)) {
-               printk(KERN_WARNING "%s: error writing snr reg\n",
-                      __func__);
+               pr_warn("error writing snr reg\n");
                return -1;
        }
        if (i2c_readbytes(state,state->config->demod_address,rec_buf,2)) {
-               printk(KERN_WARNING "%s: read_status read error\n",
-                      __func__);
+               pr_warn("read_status read error\n");
                return -1;
        }
 
        state->snr = calculate_snr(rec_buf[0], 89599047);
        *snr = (state->snr) >> 16;
 
-       dprintk("%s: noise = 0x%02x, snr = %d.%02d dB\n", __func__, rec_buf[0],
+       dprintk("noise = 0x%02x, snr = %d.%02d dB\n", rec_buf[0],
                state->snr >> 24, (((state->snr>>8) & 0xffff) * 100) >> 16);
 
        return 0;
@@ -375,25 +371,24 @@ static int or51211_init(struct dvb_frontend* fe)
 
        if (!state->initialized) {
                /* Request the firmware, this will block until it uploads */
-               printk(KERN_INFO "or51211: Waiting for firmware upload "
-                      "(%s)...\n", OR51211_DEFAULT_FIRMWARE);
+               pr_info("Waiting for firmware upload (%s)...\n",
+                       OR51211_DEFAULT_FIRMWARE);
                ret = config->request_firmware(fe, &fw,
                                               OR51211_DEFAULT_FIRMWARE);
-               printk(KERN_INFO "or51211:Got Hotplug firmware\n");
+               pr_info("Got Hotplug firmware\n");
                if (ret) {
-                       printk(KERN_WARNING "or51211: No firmware uploaded "
-                              "(timeout or file not found?)\n");
+                       pr_warn("No firmware uploaded "
+                               "(timeout or file not found?)\n");
                        return ret;
                }
 
                ret = or51211_load_firmware(fe, fw);
                release_firmware(fw);
                if (ret) {
-                       printk(KERN_WARNING "or51211: Writing firmware to "
-                              "device failed!\n");
+                       pr_warn("Writing firmware to device failed!\n");
                        return ret;
                }
-               printk(KERN_INFO "or51211: Firmware upload complete.\n");
+               pr_info("Firmware upload complete.\n");
 
                /* Set operation mode in Receiver 1 register;
                 * type 1:
@@ -406,7 +401,7 @@ static int or51211_init(struct dvb_frontend* fe)
                 */
                if (i2c_writebytes(state,state->config->demod_address,
                                   cmd_buf,3)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error 5\n");
+                       pr_warn("Load DVR Error 5\n");
                        return -1;
                }
 
@@ -419,13 +414,13 @@ static int or51211_init(struct dvb_frontend* fe)
                msleep(30);
                if (i2c_writebytes(state,state->config->demod_address,
                                   rec_buf,3)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error A\n");
+                       pr_warn("Load DVR Error A\n");
                        return -1;
                }
                msleep(3);
                if (i2c_readbytes(state,state->config->demod_address,
                                  &rec_buf[10],2)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error B\n");
+                       pr_warn("Load DVR Error B\n");
                        return -1;
                }
 
@@ -436,13 +431,13 @@ static int or51211_init(struct dvb_frontend* fe)
                msleep(20);
                if (i2c_writebytes(state,state->config->demod_address,
                                   rec_buf,3)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error C\n");
+                       pr_warn("Load DVR Error C\n");
                        return -1;
                }
                msleep(3);
                if (i2c_readbytes(state,state->config->demod_address,
                                  &rec_buf[12],2)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error D\n");
+                       pr_warn("Load DVR Error D\n");
                        return -1;
                }
 
@@ -454,16 +449,14 @@ static int or51211_init(struct dvb_frontend* fe)
                        get_ver_buf[4] = i+1;
                        if (i2c_writebytes(state,state->config->demod_address,
                                           get_ver_buf,5)) {
-                               printk(KERN_WARNING "or51211:Load DVR Error 6"
-                                      " - %d\n",i);
+                               pr_warn("Load DVR Error 6 - %d\n", i);
                                return -1;
                        }
                        msleep(3);
 
                        if (i2c_readbytes(state,state->config->demod_address,
                                          &rec_buf[i*2],2)) {
-                               printk(KERN_WARNING "or51211:Load DVR Error 7"
-                                      " - %d\n",i);
+                               pr_warn("Load DVR Error 7 - %d\n", i);
                                return -1;
                        }
                        /* If we didn't receive the right index, try again */
@@ -471,15 +464,11 @@ static int or51211_init(struct dvb_frontend* fe)
                          i--;
                        }
                }
-               dprintk("read_fwbits %x %x %x %x %x %x %x %x %x %x\n",
-                       rec_buf[0], rec_buf[1], rec_buf[2], rec_buf[3],
-                       rec_buf[4], rec_buf[5], rec_buf[6], rec_buf[7],
-                       rec_buf[8], rec_buf[9]);
+               dprintk("read_fwbits %10ph\n", rec_buf);
 
-               printk(KERN_INFO "or51211: ver TU%02x%02x%02x VSB mode %02x"
-                      " Status %02x\n",
-                      rec_buf[2], rec_buf[4],rec_buf[6],
-                      rec_buf[12],rec_buf[10]);
+               pr_info("ver TU%02x%02x%02x VSB mode %02x Status %02x\n",
+                       rec_buf[2], rec_buf[4], rec_buf[6], rec_buf[12],
+                       rec_buf[10]);
 
                rec_buf[0] = 0x04;
                rec_buf[1] = 0x00;
@@ -488,13 +477,13 @@ static int or51211_init(struct dvb_frontend* fe)
                msleep(20);
                if (i2c_writebytes(state,state->config->demod_address,
                                   rec_buf,3)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error 8\n");
+                       pr_warn("Load DVR Error 8\n");
                        return -1;
                }
                msleep(20);
                if (i2c_readbytes(state,state->config->demod_address,
                                  &rec_buf[8],2)) {
-                       printk(KERN_WARNING "or51211: Load DVR Error 9\n");
+                       pr_warn("Load DVR Error 9\n");
                        return -1;
                }
                state->initialized = 1;
index 16a4bc54dbe79acefc0c63789c05c6f21d0d977b..2521f7e23018f70a33a9ad43e1bb26e79e037ab8 100644 (file)
@@ -30,7 +30,7 @@ static int tda10071_wr_regs(struct tda10071_priv *priv, u8 reg, u8 *val,
        u8 buf[len+1];
        struct i2c_msg msg[1] = {
                {
-                       .addr = priv->cfg.i2c_address,
+                       .addr = priv->cfg.demod_i2c_addr,
                        .flags = 0,
                        .len = sizeof(buf),
                        .buf = buf,
@@ -59,12 +59,12 @@ static int tda10071_rd_regs(struct tda10071_priv *priv, u8 reg, u8 *val,
        u8 buf[len];
        struct i2c_msg msg[2] = {
                {
-                       .addr = priv->cfg.i2c_address,
+                       .addr = priv->cfg.demod_i2c_addr,
                        .flags = 0,
                        .len = 1,
                        .buf = &reg,
                }, {
-                       .addr = priv->cfg.i2c_address,
+                       .addr = priv->cfg.demod_i2c_addr,
                        .flags = I2C_M_RD,
                        .len = sizeof(buf),
                        .buf = buf,
@@ -1064,7 +1064,7 @@ static int tda10071_init(struct dvb_frontend *fe)
                cmd.args[2] = 0x00;
                cmd.args[3] = 0x00;
                cmd.args[4] = 0x00;
-               cmd.args[5] = 0x14;
+               cmd.args[5] = (priv->cfg.tuner_i2c_addr) ? priv->cfg.tuner_i2c_addr : 0x14;
                cmd.args[6] = 0x00;
                cmd.args[7] = 0x03;
                cmd.args[8] = 0x02;
@@ -1202,6 +1202,20 @@ struct dvb_frontend *tda10071_attach(const struct tda10071_config *config,
                goto error;
        }
 
+       /* make sure demod i2c address is specified */
+       if (!config->demod_i2c_addr) {
+               dev_dbg(&i2c->dev, "%s: invalid demod i2c address!\n", __func__);
+               ret = -EINVAL;
+               goto error;
+       }
+
+       /* make sure tuner i2c address is specified */
+       if (!config->tuner_i2c_addr) {
+               dev_dbg(&i2c->dev, "%s: invalid tuner i2c address!\n", __func__);
+               ret = -EINVAL;
+               goto error;
+       }
+
        /* setup the priv */
        priv->i2c = i2c;
        memcpy(&priv->cfg, config, sizeof(struct tda10071_config));
index 21163c4b555c9f76b32958d00d1593ba554281f1..bff1c38df8026e98390fb21d74503635008ff807 100644 (file)
@@ -28,7 +28,13 @@ struct tda10071_config {
         * Default: none, must set
         * Values: 0x55,
         */
-       u8 i2c_address;
+       u8 demod_i2c_addr;
+
+       /* Tuner I2C address.
+        * Default: none, must set
+        * Values: 0x14, 0x54, ...
+        */
+       u8 tuner_i2c_addr;
 
        /* Max bytes I2C provider can write at once.
         * Note: Buffer is taken from the stack currently!
index 1af1ee49b5421d07bef42a59fe19fffefb4722b0..46710744173beac68dc7998608876c8801c2e4d6 100644 (file)
@@ -78,7 +78,7 @@ static int tda8261_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
                        return err;
                }
                *bandwidth = t_state.bandwidth;
+               printk("%s: Bandwidth=%d\n", __func__, t_state.bandwidth);
        }
-       printk("%s: Bandwidth=%d\n", __func__, t_state.bandwidth);
        return 0;
 }
index e7c82b297514ce44dae6e7a33ecf5cc556cb09ea..882ddf6f66d31526728b3bd0cdc8ac811b279f49 100644 (file)
@@ -353,7 +353,7 @@ static struct regval_list ov7670_fmt_yuv422[] = {
        { REG_RGB444, 0 },      /* No RGB444 please */
        { REG_COM1, 0 },        /* CCIR601 */
        { REG_COM15, COM15_R00FF },
-       { REG_COM9, 0x18 }, /* 4x gain ceiling; 0x8 is reserved bit */
+       { REG_COM9, 0x48 }, /* 32x gain ceiling; 0x8 is reserved bit */
        { 0x4f, 0x80 },         /* "matrix coefficient 1" */
        { 0x50, 0x80 },         /* "matrix coefficient 2" */
        { 0x51, 0    },         /* vb */
index de6f41f19187dd584be669baadc0398910e71b2b..346458bba2c533c43ccd3cc3337c29ae5ac919ea 100644 (file)
@@ -3835,7 +3835,7 @@ bttv_irq_wakeup_video(struct bttv *btv, struct bttv_buffer_set *wakeup,
 {
        struct timeval ts;
 
-       do_gettimeofday(&ts);
+       v4l2_get_timestamp(&ts);
 
        if (wakeup->top == wakeup->bottom) {
                if (NULL != wakeup->top && curr->top != wakeup->top) {
@@ -3878,7 +3878,7 @@ bttv_irq_wakeup_vbi(struct bttv *btv, struct bttv_buffer *wakeup,
        if (NULL == wakeup)
                return;
 
-       do_gettimeofday(&ts);
+       v4l2_get_timestamp(&ts);
        wakeup->vb.ts = ts;
        wakeup->vb.field_count = btv->field_count;
        wakeup->vb.state = state;
@@ -3949,7 +3949,7 @@ bttv_irq_wakeup_top(struct bttv *btv)
        btv->curr.top = NULL;
        bttv_risc_hook(btv, RISC_SLOT_O_FIELD, NULL, 0);
 
-       do_gettimeofday(&wakeup->vb.ts);
+       v4l2_get_timestamp(&wakeup->vb.ts);
        wakeup->vb.field_count = btv->field_count;
        wakeup->vb.state = VIDEOBUF_DONE;
        wake_up(&wakeup->vb.done);
index eafa1144b17dd34752703746c44ae457884db197..733d6c8ebe4c7aaac75a18e3498067e325de1f47 100644 (file)
@@ -26,6 +26,8 @@ config VIDEO_CX23885
        select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
        select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT
        select DVB_STV0367 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_TDA10071 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_A8293 if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_MT2063 if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_MT2131 if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_XC2028 if MEDIA_SUBDRV_AUTOSELECT
index 6277e145f0b831809367019d3ae2886d6440dcc1..8d96ae4ebbdd9ca3839ce78d35ee4c7bac212452 100644 (file)
@@ -572,7 +572,11 @@ struct cx23885_board cx23885_boards[] = {
        [CX23885_BOARD_PROF_8000] = {
                .name           = "Prof Revolution DVB-S2 8000",
                .portb          = CX23885_MPEG_DVB,
-       }
+       },
+       [CX23885_BOARD_HAUPPAUGE_HVR4400] = {
+               .name           = "Hauppauge WinTV-HVR4400",
+               .portb          = CX23885_MPEG_DVB,
+       },
 };
 const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
 
@@ -788,6 +792,22 @@ struct cx23885_subid cx23885_subids[] = {
                .subvendor = 0x8000,
                .subdevice = 0x3034,
                .card      = CX23885_BOARD_PROF_8000,
+       }, {
+               .subvendor = 0x0070,
+               .subdevice = 0xc108,
+               .card      = CX23885_BOARD_HAUPPAUGE_HVR4400,
+       }, {
+               .subvendor = 0x0070,
+               .subdevice = 0xc138,
+               .card      = CX23885_BOARD_HAUPPAUGE_HVR4400,
+       }, {
+               .subvendor = 0x0070,
+               .subdevice = 0xc12a,
+               .card      = CX23885_BOARD_HAUPPAUGE_HVR4400,
+       }, {
+               .subvendor = 0x0070,
+               .subdevice = 0xc1f8,
+               .card      = CX23885_BOARD_HAUPPAUGE_HVR4400,
        },
 };
 const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -1301,6 +1321,16 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
                /* enable irq */
                cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/
                break;
+       case CX23885_BOARD_HAUPPAUGE_HVR4400:
+               /* GPIO-8 tda10071 demod reset */
+
+               /* Put the parts into reset and back */
+               cx23885_gpio_enable(dev, GPIO_8, 1);
+               cx23885_gpio_clear(dev, GPIO_8);
+               mdelay(100);
+               cx23885_gpio_set(dev, GPIO_8);
+               mdelay(100);
+               break;
        }
 }
 
@@ -1378,6 +1408,7 @@ int cx23885_ir_init(struct cx23885_dev *dev)
                break;
        case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
        case CX23885_BOARD_TEVII_S470:
+       case CX23885_BOARD_MYGICA_X8507:
                if (!enable_885_ir)
                        break;
                dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
@@ -1420,6 +1451,7 @@ void cx23885_ir_fini(struct cx23885_dev *dev)
        case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
        case CX23885_BOARD_TEVII_S470:
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
+       case CX23885_BOARD_MYGICA_X8507:
                cx23885_irq_remove(dev, PCI_MSK_AV_CORE);
                /* sd_ir is a duplicate pointer to the AV Core, just clear it */
                dev->sd_ir = NULL;
@@ -1464,6 +1496,7 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
        case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
        case CX23885_BOARD_TEVII_S470:
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
+       case CX23885_BOARD_MYGICA_X8507:
                if (dev->sd_ir)
                        cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE);
                break;
@@ -1509,6 +1542,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
        case CX23885_BOARD_HAUPPAUGE_HVR1210:
        case CX23885_BOARD_HAUPPAUGE_HVR1850:
        case CX23885_BOARD_HAUPPAUGE_HVR1290:
+       case CX23885_BOARD_HAUPPAUGE_HVR4400:
                if (dev->i2c_bus[0].i2c_rc == 0)
                        hauppauge_eeprom(dev, eeprom+0xc0);
                break;
@@ -1581,6 +1615,11 @@ void cx23885_card_setup(struct cx23885_dev *dev)
                ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
                ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
                break;
+       case CX23885_BOARD_HAUPPAUGE_HVR4400:
+               ts1->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
+               ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
+               ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
+               break;
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
        case CX23885_BOARD_HAUPPAUGE_HVR1500:
        case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
index 065ecd54bda3d6127b4ff0ab8e846c41924b3d96..c7572594d43499f2851eb6513f576ccbb19de35f 100644 (file)
@@ -439,7 +439,7 @@ void cx23885_wakeup(struct cx23885_tsport *port,
                if ((s16) (count - buf->count) < 0)
                        break;
 
-               do_gettimeofday(&buf->vb.ts);
+               v4l2_get_timestamp(&buf->vb.ts);
                dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf, buf->vb.i,
                        count, buf->count);
                buf->vb.state = VIDEOBUF_DONE;
index 2f5b902e63ae07f71847e89bbbc70a2907ed24fa..a1aae563373928daa406d875c256236edbc4aa95 100644 (file)
@@ -66,6 +66,8 @@
 #include "stv090x.h"
 #include "stb6100.h"
 #include "stb6100_cfg.h"
+#include "tda10071.h"
+#include "a8293.h"
 
 static unsigned int debug;
 
@@ -659,6 +661,20 @@ static struct mt2063_config terratec_mt2063_config[] = {
        },
 };
 
+static const struct tda10071_config hauppauge_tda10071_config = {
+       .demod_i2c_addr = 0x05,
+       .tuner_i2c_addr = 0x54,
+       .i2c_wr_max = 64,
+       .ts_mode = TDA10071_TS_SERIAL,
+       .spec_inv = 0,
+       .xtal = 40444000, /* 40.444 MHz */
+       .pll_multiplier = 20,
+};
+
+static const struct a8293_config hauppauge_a8293_config = {
+       .i2c_addr = 0x0b,
+};
+
 static int netup_altera_fpga_rw(void *device, int flag, int data, int read)
 {
        struct cx23885_dev *dev = (struct cx23885_dev *)device;
@@ -1242,6 +1258,17 @@ static int dvb_register(struct cx23885_tsport *port)
                        fe0->dvb.frontend->ops.set_voltage = p8000_set_voltage;
                }
                break;
+       case CX23885_BOARD_HAUPPAUGE_HVR4400:
+               i2c_bus = &dev->i2c_bus[0];
+               fe0->dvb.frontend = dvb_attach(tda10071_attach,
+                                               &hauppauge_tda10071_config,
+                                               &i2c_bus->i2c_adap);
+               if (fe0->dvb.frontend != NULL) {
+                       dvb_attach(a8293_attach, fe0->dvb.frontend,
+                                  &i2c_bus->i2c_adap,
+                                  &hauppauge_a8293_config);
+               }
+               break;
        default:
                printk(KERN_INFO "%s: The frontend of your DVB/ATSC card "
                        " isn't supported yet\n",
index 4f1055a194b51d9446747d52361f7334eef8a51c..7875dfbe09ffae666e8365e877022af4d16a7be2 100644 (file)
@@ -89,6 +89,7 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events)
        case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
        case CX23885_BOARD_TEVII_S470:
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
+       case CX23885_BOARD_MYGICA_X8507:
                /*
                 * The only boards we handle right now.  However other boards
                 * using the CX2388x integrated IR controller should be similar
@@ -140,6 +141,7 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev)
        case CX23885_BOARD_HAUPPAUGE_HVR1850:
        case CX23885_BOARD_HAUPPAUGE_HVR1290:
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
+       case CX23885_BOARD_MYGICA_X8507:
                /*
                 * The IR controller on this board only returns pulse widths.
                 * Any other mode setting will fail to set up the device.
@@ -289,6 +291,13 @@ int cx23885_input_init(struct cx23885_dev *dev)
                /* A guess at the remote */
                rc_map = RC_MAP_TEVII_NEC;
                break;
+       case CX23885_BOARD_MYGICA_X8507:
+               /* Integrated CX23885 IR controller */
+               driver_type = RC_DRIVER_IR_RAW;
+               allowed_protos = RC_BIT_ALL;
+               /* A guess at the remote */
+               rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02;
+               break;
        default:
                return -ENODEV;
        }
index 1a21926ca412cbdab3cdb00841e40e930818f470..83975313e0f2fb85e12ab1e6de70b89984e83993 100644 (file)
@@ -300,7 +300,7 @@ void cx23885_video_wakeup(struct cx23885_dev *dev,
                if ((s16) (count - buf->count) < 0)
                        break;
 
-               do_gettimeofday(&buf->vb.ts);
+               v4l2_get_timestamp(&buf->vb.ts);
                dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf, buf->vb.i,
                        count, buf->count);
                buf->vb.state = VIDEOBUF_DONE;
index 67f40d31450be7e81d79fd24526e5436d7bb336a..61889b25a2afc761e2280a4d1788088065a459a0 100644 (file)
@@ -91,6 +91,7 @@
 #define CX23885_BOARD_TEVII_S471               35
 #define CX23885_BOARD_HAUPPAUGE_HVR1255_22111  36
 #define CX23885_BOARD_PROF_8000                37
+#define CX23885_BOARD_HAUPPAUGE_HVR4400        38
 
 #define GPIO_0 0x00000001
 #define GPIO_1 0x00000002
index 53b16dd7032054a0afce16de3037350e012214c6..d4de021dc844e88776f67e7b08018cf9ab11b394 100644 (file)
@@ -130,7 +130,7 @@ void cx25821_video_wakeup(struct cx25821_dev *dev, struct cx25821_dmaqueue *q,
                if ((s16) (count - buf->count) < 0)
                        break;
 
-               do_gettimeofday(&buf->vb.ts);
+               v4l2_get_timestamp(&buf->vb.ts);
                buf->vb.state = VIDEOBUF_DONE;
                list_del(&buf->vb.queue);
                wake_up(&buf->vb.done);
index 19a58754c6e14ee3d91152738464382edf16ab30..39f095c37ffd4462faa98b28c32efde6c112b254 100644 (file)
@@ -549,7 +549,7 @@ void cx88_wakeup(struct cx88_core *core,
                 * up to 32767 buffers in flight... */
                if ((s16) (count - buf->count) < 0)
                        break;
-               do_gettimeofday(&buf->vb.ts);
+               v4l2_get_timestamp(&buf->vb.ts);
                dprintk(2,"[%p/%d] wakeup reg=%d buf=%d\n",buf,buf->vb.i,
                        count, buf->count);
                buf->vb.state = VIDEOBUF_DONE;
index 74e9a503236432b8c606ebfed56e87bca1fca10d..5d0a5df610782ee52b7f21246f79d9248a683b06 100644 (file)
@@ -304,7 +304,7 @@ static void request_modules(struct ivtv *dev)
 
 static void flush_request_modules(struct ivtv *dev)
 {
-       flush_work_sync(&dev->request_module_wk);
+       flush_work(&dev->request_module_wk);
 }
 #else
 #define request_modules(dev)
index ae7d32027bf726e0e73499880a61a07187fa6744..ac7ab6edb06d078f7aca6abbfdfc8230f593d711 100644 (file)
@@ -811,7 +811,7 @@ again:
                                      mchip_hsize() * mchip_vsize() * 2);
                meye.grab_buffer[reqnr].size = mchip_hsize() * mchip_vsize() * 2;
                meye.grab_buffer[reqnr].state = MEYE_BUF_DONE;
-               do_gettimeofday(&meye.grab_buffer[reqnr].timestamp);
+               v4l2_get_timestamp(&meye.grab_buffer[reqnr].timestamp);
                meye.grab_buffer[reqnr].sequence = sequence++;
                kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr,
                                sizeof(int), &meye.doneq_lock);
@@ -832,7 +832,7 @@ again:
                       size);
                meye.grab_buffer[reqnr].size = size;
                meye.grab_buffer[reqnr].state = MEYE_BUF_DONE;
-               do_gettimeofday(&meye.grab_buffer[reqnr].timestamp);
+               v4l2_get_timestamp(&meye.grab_buffer[reqnr].timestamp);
                meye.grab_buffer[reqnr].sequence = sequence++;
                kfifo_in_locked(&meye.doneq, (unsigned char *)&reqnr,
                                sizeof(int), &meye.doneq_lock);
@@ -1426,7 +1426,7 @@ static int vidioc_querybuf(struct file *file, void *fh, struct v4l2_buffer *buf)
                return -EINVAL;
 
        buf->bytesused = meye.grab_buffer[index].size;
-       buf->flags = V4L2_BUF_FLAG_MAPPED;
+       buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
 
        if (meye.grab_buffer[index].state == MEYE_BUF_USING)
                buf->flags |= V4L2_BUF_FLAG_QUEUED;
@@ -1499,7 +1499,7 @@ static int vidioc_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
 
        buf->index = reqnr;
        buf->bytesused = meye.grab_buffer[reqnr].size;
-       buf->flags = V4L2_BUF_FLAG_MAPPED;
+       buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
        buf->field = V4L2_FIELD_NONE;
        buf->timestamp = meye.grab_buffer[reqnr].timestamp;
        buf->sequence = meye.grab_buffer[reqnr].sequence;
index 8976d0e65813d26d7c2761d7172fd7549899d1d4..e1aeb51e25ba8a112f0bb233e929cf377c2ab4aa 100644 (file)
@@ -308,7 +308,7 @@ void saa7134_buffer_finish(struct saa7134_dev *dev,
 
        /* finish current buffer */
        q->curr->vb.state = state;
-       do_gettimeofday(&q->curr->vb.ts);
+       v4l2_get_timestamp(&q->curr->vb.ts);
        wake_up(&q->curr->vb.done);
        q->curr = NULL;
 }
index b209de40a4f8d69373eb8600f140c613a48310b2..27915e501db9d3bbcdb3944a4bf8237ef9254ba0 100644 (file)
@@ -607,6 +607,9 @@ static int configure_tda827x_fe(struct saa7134_dev *dev,
        /* Get the first frontend */
        fe0 = videobuf_dvb_get_frontend(&dev->frontends, 1);
 
+       if (!fe0)
+               return -EINVAL;
+
        fe0->dvb.frontend = dvb_attach(tda10046_attach, cdec_conf, &dev->i2c_adap);
        if (fe0->dvb.frontend) {
                if (cdec_conf->i2c_gate)
index 4c10205264d4d7c0e2ba25ae48e999bb1aa593a7..ed1337a89a268df51462753ad493bc2b0089272c 100644 (file)
@@ -1088,7 +1088,7 @@ static irqreturn_t vip_irq(int irq, struct sta2x11_vip *vip)
 
        REG_WRITE(vip, DVP_CTL, REG_READ(vip, DVP_CTL) & ~DVP_CTL_ENA);
        if (vip->active) {
-               do_gettimeofday(&vip->active->ts);
+               v4l2_get_timestamp(&vip->active->ts);
                vip->active->field_count++;
                vip->active->state = VIDEOBUF_DONE;
                wake_up(&vip->active->done);
index a4cd504b8eeed5001648fb651b3c43f45d1a099a..519164c572c83161ada2bef277ebe5d08ab1d535 100644 (file)
@@ -1169,7 +1169,7 @@ zoran_reap_stat_com (struct zoran *zr)
                }
                frame = zr->jpg_pend[zr->jpg_dma_tail & BUZ_MASK_FRAME];
                buffer = &zr->jpg_buffers.buffer[frame];
-               do_gettimeofday(&buffer->bs.timestamp);
+               v4l2_get_timestamp(&buffer->bs.timestamp);
 
                if (zr->codec_mode == BUZ_MODE_MOTION_COMPRESS) {
                        buffer->bs.length = (stat_com & 0x7fffff) >> 1;
@@ -1407,7 +1407,7 @@ zoran_irq (int             irq,
 
                                                zr->v4l_buffers.buffer[zr->v4l_grab_frame].state = BUZ_STATE_DONE;
                                                zr->v4l_buffers.buffer[zr->v4l_grab_frame].bs.seq = zr->v4l_grab_seq;
-                                               do_gettimeofday(&zr->v4l_buffers.buffer[zr->v4l_grab_frame].bs.timestamp);
+                                               v4l2_get_timestamp(&zr->v4l_buffers.buffer[zr->v4l_grab_frame].bs.timestamp);
                                                zr->v4l_grab_frame = NO_GRAB_ACTIVE;
                                                zr->v4l_pend_tail++;
                                        }
index 53f12c7466b0b971218c2c1c6d769fa0d3f32461..33521a4f23a7186653b20a9e2c13a31bbdb0ada2 100644 (file)
@@ -1334,7 +1334,7 @@ static int zoran_v4l2_buffer_status(struct zoran_fh *fh,
        struct zoran *zr = fh->zr;
        unsigned long flags;
 
-       buf->flags = V4L2_BUF_FLAG_MAPPED;
+       buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
 
        switch (fh->map_mode) {
        case ZORAN_MAP_MODE_RAW:
index 3dcfea612c42975615e7d95f5f613918d8d547d1..c071b079de23581ce9e3d973223e564d24b93a74 100644 (file)
@@ -202,6 +202,15 @@ config VIDEO_SAMSUNG_EXYNOS_GSC
        help
          This is a v4l2 driver for Samsung EXYNOS5 SoC G-Scaler.
 
+config VIDEO_SH_VEU
+       tristate "SuperH VEU mem2mem video processing driver"
+       depends on VIDEO_DEV && VIDEO_V4L2
+       select VIDEOBUF2_DMA_CONTIG
+       select V4L2_MEM2MEM_DEV
+       help
+           Support for the Video Engine Unit (VEU) on SuperH and
+           SH-Mobile SoCs.
+
 endif # V4L_MEM2MEM_DRIVERS
 
 menuconfig V4L_TEST_DRIVERS
index 4817d280217162ec01b545bcd0164daa1db66b0e..42089ba3600fca76f2ab1a8c5abb3c9ebb9e5b79 100644 (file)
@@ -25,6 +25,8 @@ obj-$(CONFIG_VIDEO_MEM2MEM_TESTDEV) += mem2mem_testdev.o
 obj-$(CONFIG_VIDEO_MX2_EMMAPRP)                += mx2_emmaprp.o
 obj-$(CONFIG_VIDEO_CODA)               += coda.o
 
+obj-$(CONFIG_VIDEO_SH_VEU)             += sh_veu.o
+
 obj-$(CONFIG_VIDEO_MEM2MEM_DEINTERLACE)        += m2m-deinterlace.o
 
 obj-$(CONFIG_VIDEO_S3C_CAMIF)          += s3c-camif/
index ecd5323768b76aa5a6224a97db010266241e93d7..519990e1712288b0d4e9194c9f076761f9bb26a7 100644 (file)
@@ -2,9 +2,13 @@ config VIDEO_BLACKFIN_CAPTURE
        tristate "Blackfin Video Capture Driver"
        depends on VIDEO_V4L2 && BLACKFIN && I2C
        select VIDEOBUF2_DMA_CONTIG
+       select VIDEO_BLACKFIN_PPI
        help
          V4L2 bridge driver for Blackfin video capture device.
          Choose PPI or EPPI as its interface.
 
          To compile this driver as a module, choose M here: the
-         module will be called bfin_video_capture.
+         module will be called bfin_capture.
+
+config VIDEO_BLACKFIN_PPI
+       tristate
index aa3a0a21638706f6151f612823ada4a2a165581f..30421bc2308074d70e2c4ef821c7d680298f3bcd 100644 (file)
@@ -1,2 +1,2 @@
-bfin_video_capture-objs := bfin_capture.o ppi.o
-obj-$(CONFIG_VIDEO_BLACKFIN_CAPTURE) += bfin_video_capture.o
+obj-$(CONFIG_VIDEO_BLACKFIN_CAPTURE) += bfin_capture.o
+obj-$(CONFIG_VIDEO_BLACKFIN_PPI)     += ppi.o
index ec476ef5b709bbe8c56e354e6fecb5d3c70902d5..aa9f846a667e06061a8b0fe24d3f5d8b434e48a7 100644 (file)
@@ -52,6 +52,7 @@ struct bcap_format {
        u32 pixelformat;
        enum v4l2_mbus_pixelcode mbus_code;
        int bpp; /* bits per pixel */
+       int dlen; /* data length for ppi in bits */
 };
 
 struct bcap_buffer {
@@ -76,10 +77,14 @@ struct bcap_device {
        unsigned int cur_input;
        /* current selected standard */
        v4l2_std_id std;
+       /* current selected dv_timings */
+       struct v4l2_dv_timings dv_timings;
        /* used to store pixel format */
        struct v4l2_pix_format fmt;
        /* bits per pixel*/
        int bpp;
+       /* data length for ppi in bits */
+       int dlen;
        /* used to store sensor supported format */
        struct bcap_format *sensor_formats;
        /* number of sensor formats array */
@@ -116,24 +121,35 @@ static const struct bcap_format bcap_formats[] = {
                .pixelformat = V4L2_PIX_FMT_UYVY,
                .mbus_code   = V4L2_MBUS_FMT_UYVY8_2X8,
                .bpp         = 16,
+               .dlen        = 8,
        },
        {
                .desc        = "YCbCr 4:2:2 Interleaved YUYV",
                .pixelformat = V4L2_PIX_FMT_YUYV,
                .mbus_code   = V4L2_MBUS_FMT_YUYV8_2X8,
                .bpp         = 16,
+               .dlen        = 8,
+       },
+       {
+               .desc        = "YCbCr 4:2:2 Interleaved UYVY",
+               .pixelformat = V4L2_PIX_FMT_UYVY,
+               .mbus_code   = V4L2_MBUS_FMT_UYVY8_1X16,
+               .bpp         = 16,
+               .dlen        = 16,
        },
        {
                .desc        = "RGB 565",
                .pixelformat = V4L2_PIX_FMT_RGB565,
                .mbus_code   = V4L2_MBUS_FMT_RGB565_2X8_LE,
                .bpp         = 16,
+               .dlen        = 8,
        },
        {
                .desc        = "RGB 444",
                .pixelformat = V4L2_PIX_FMT_RGB444,
                .mbus_code   = V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE,
                .bpp         = 16,
+               .dlen        = 8,
        },
 
 };
@@ -366,9 +382,39 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
        params.width = bcap_dev->fmt.width;
        params.height = bcap_dev->fmt.height;
        params.bpp = bcap_dev->bpp;
+       params.dlen = bcap_dev->dlen;
        params.ppi_control = bcap_dev->cfg->ppi_control;
        params.int_mask = bcap_dev->cfg->int_mask;
-       params.blank_clocks = bcap_dev->cfg->blank_clocks;
+       if (bcap_dev->cfg->inputs[bcap_dev->cur_input].capabilities
+                       & V4L2_IN_CAP_CUSTOM_TIMINGS) {
+               struct v4l2_bt_timings *bt = &bcap_dev->dv_timings.bt;
+
+               params.hdelay = bt->hsync + bt->hbackporch;
+               params.vdelay = bt->vsync + bt->vbackporch;
+               params.line = bt->hfrontporch + bt->hsync
+                               + bt->hbackporch + bt->width;
+               params.frame = bt->vfrontporch + bt->vsync
+                               + bt->vbackporch + bt->height;
+               if (bt->interlaced)
+                       params.frame += bt->il_vfrontporch + bt->il_vsync
+                                       + bt->il_vbackporch;
+       } else if (bcap_dev->cfg->inputs[bcap_dev->cur_input].capabilities
+                       & V4L2_IN_CAP_STD) {
+               params.hdelay = 0;
+               params.vdelay = 0;
+               if (bcap_dev->std & V4L2_STD_525_60) {
+                       params.line = 858;
+                       params.frame = 525;
+               } else {
+                       params.line = 864;
+                       params.frame = 625;
+               }
+       } else {
+               params.hdelay = 0;
+               params.vdelay = 0;
+               params.line = params.width + bcap_dev->cfg->blank_pixels;
+               params.frame = params.height;
+       }
        ret = ppi->ops->set_params(ppi, &params);
        if (ret < 0) {
                v4l2_err(&bcap_dev->v4l2_dev,
@@ -484,15 +530,13 @@ static irqreturn_t bcap_isr(int irq, void *dev_id)
 {
        struct ppi_if *ppi = dev_id;
        struct bcap_device *bcap_dev = ppi->priv;
-       struct timeval timevalue;
        struct vb2_buffer *vb = &bcap_dev->cur_frm->vb;
        dma_addr_t addr;
 
        spin_lock(&bcap_dev->lock);
 
        if (bcap_dev->cur_frm != bcap_dev->next_frm) {
-               do_gettimeofday(&timevalue);
-               vb->v4l2_buf.timestamp = timevalue;
+               v4l2_get_timestamp(&vb->v4l2_buf.timestamp);
                vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
                bcap_dev->cur_frm = bcap_dev->next_frm;
        }
@@ -602,6 +646,37 @@ static int bcap_s_std(struct file *file, void *priv, v4l2_std_id *std)
        return 0;
 }
 
+static int bcap_g_dv_timings(struct file *file, void *priv,
+                               struct v4l2_dv_timings *timings)
+{
+       struct bcap_device *bcap_dev = video_drvdata(file);
+       int ret;
+
+       ret = v4l2_subdev_call(bcap_dev->sd, video,
+                               g_dv_timings, timings);
+       if (ret < 0)
+               return ret;
+
+       bcap_dev->dv_timings = *timings;
+       return 0;
+}
+
+static int bcap_s_dv_timings(struct file *file, void *priv,
+                               struct v4l2_dv_timings *timings)
+{
+       struct bcap_device *bcap_dev = video_drvdata(file);
+       int ret;
+       if (vb2_is_busy(&bcap_dev->buffer_queue))
+               return -EBUSY;
+
+       ret = v4l2_subdev_call(bcap_dev->sd, video, s_dv_timings, timings);
+       if (ret < 0)
+               return ret;
+
+       bcap_dev->dv_timings = *timings;
+       return 0;
+}
+
 static int bcap_enum_input(struct file *file, void *priv,
                                struct v4l2_input *input)
 {
@@ -650,13 +725,15 @@ static int bcap_s_input(struct file *file, void *priv, unsigned int index)
                return ret;
        }
        bcap_dev->cur_input = index;
+       /* if this route has specific config, update ppi control */
+       if (route->ppi_control)
+               config->ppi_control = route->ppi_control;
        return 0;
 }
 
 static int bcap_try_format(struct bcap_device *bcap,
                                struct v4l2_pix_format *pixfmt,
-                               enum v4l2_mbus_pixelcode *mbus_code,
-                               int *bpp)
+                               struct bcap_format *bcap_fmt)
 {
        struct bcap_format *sf = bcap->sensor_formats;
        struct bcap_format *fmt = NULL;
@@ -671,16 +748,20 @@ static int bcap_try_format(struct bcap_device *bcap,
        if (i == bcap->num_sensor_formats)
                fmt = &sf[0];
 
-       if (mbus_code)
-               *mbus_code = fmt->mbus_code;
-       if (bpp)
-               *bpp = fmt->bpp;
        v4l2_fill_mbus_format(&mbus_fmt, pixfmt, fmt->mbus_code);
        ret = v4l2_subdev_call(bcap->sd, video,
                                try_mbus_fmt, &mbus_fmt);
        if (ret < 0)
                return ret;
        v4l2_fill_pix_format(pixfmt, &mbus_fmt);
+       if (bcap_fmt) {
+               for (i = 0; i < bcap->num_sensor_formats; i++) {
+                       fmt = &sf[i];
+                       if (mbus_fmt.code == fmt->mbus_code)
+                               break;
+               }
+               *bcap_fmt = *fmt;
+       }
        pixfmt->bytesperline = pixfmt->width * fmt->bpp / 8;
        pixfmt->sizeimage = pixfmt->bytesperline * pixfmt->height;
        return 0;
@@ -709,7 +790,7 @@ static int bcap_try_fmt_vid_cap(struct file *file, void *priv,
        struct bcap_device *bcap_dev = video_drvdata(file);
        struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
 
-       return bcap_try_format(bcap_dev, pixfmt, NULL, NULL);
+       return bcap_try_format(bcap_dev, pixfmt, NULL);
 }
 
 static int bcap_g_fmt_vid_cap(struct file *file, void *priv,
@@ -726,24 +807,25 @@ static int bcap_s_fmt_vid_cap(struct file *file, void *priv,
 {
        struct bcap_device *bcap_dev = video_drvdata(file);
        struct v4l2_mbus_framefmt mbus_fmt;
-       enum v4l2_mbus_pixelcode mbus_code;
+       struct bcap_format bcap_fmt;
        struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
-       int ret, bpp;
+       int ret;
 
        if (vb2_is_busy(&bcap_dev->buffer_queue))
                return -EBUSY;
 
        /* see if format works */
-       ret = bcap_try_format(bcap_dev, pixfmt, &mbus_code, &bpp);
+       ret = bcap_try_format(bcap_dev, pixfmt, &bcap_fmt);
        if (ret < 0)
                return ret;
 
-       v4l2_fill_mbus_format(&mbus_fmt, pixfmt, mbus_code);
+       v4l2_fill_mbus_format(&mbus_fmt, pixfmt, bcap_fmt.mbus_code);
        ret = v4l2_subdev_call(bcap_dev->sd, video, s_mbus_fmt, &mbus_fmt);
        if (ret < 0)
                return ret;
        bcap_dev->fmt = *pixfmt;
-       bcap_dev->bpp = bpp;
+       bcap_dev->bpp = bcap_fmt.bpp;
+       bcap_dev->dlen = bcap_fmt.dlen;
        return 0;
 }
 
@@ -834,6 +916,8 @@ static const struct v4l2_ioctl_ops bcap_ioctl_ops = {
        .vidioc_querystd         = bcap_querystd,
        .vidioc_s_std            = bcap_s_std,
        .vidioc_g_std            = bcap_g_std,
+       .vidioc_s_dv_timings     = bcap_s_dv_timings,
+       .vidioc_g_dv_timings     = bcap_g_dv_timings,
        .vidioc_reqbufs          = bcap_reqbufs,
        .vidioc_querybuf         = bcap_querybuf,
        .vidioc_qbuf             = bcap_qbuf,
@@ -869,6 +953,7 @@ static int __devinit bcap_probe(struct platform_device *pdev)
        struct i2c_adapter *i2c_adap;
        struct bfin_capture_config *config;
        struct vb2_queue *q;
+       struct bcap_route *route;
        int ret;
 
        config = pdev->dev.platform_data;
@@ -978,6 +1063,12 @@ static int __devinit bcap_probe(struct platform_device *pdev)
                                                 NULL);
        if (bcap_dev->sd) {
                int i;
+               if (!config->num_inputs) {
+                       v4l2_err(&bcap_dev->v4l2_dev,
+                                       "Unable to work without input\n");
+                       goto err_unreg_vdev;
+               }
+
                /* update tvnorms from the sub devices */
                for (i = 0; i < config->num_inputs; i++)
                        vfd->tvnorms |= config->inputs[i].std;
@@ -989,8 +1080,24 @@ static int __devinit bcap_probe(struct platform_device *pdev)
 
        v4l2_info(&bcap_dev->v4l2_dev, "v4l2 sub device registered\n");
 
+       /*
+        * explicitly set input, otherwise some boards
+        * may not work at the state as we expected
+        */
+       route = &config->routes[0];
+       ret = v4l2_subdev_call(bcap_dev->sd, video, s_routing,
+                               route->input, route->output, 0);
+       if ((ret < 0) && (ret != -ENOIOCTLCMD)) {
+               v4l2_err(&bcap_dev->v4l2_dev, "Failed to set input\n");
+               goto err_unreg_vdev;
+       }
+       bcap_dev->cur_input = 0;
+       /* if this route has specific config, update ppi control */
+       if (route->ppi_control)
+               config->ppi_control = route->ppi_control;
+
        /* now we can probe the default state */
-       if (vfd->tvnorms) {
+       if (config->inputs[0].capabilities & V4L2_IN_CAP_STD) {
                v4l2_std_id std;
                ret = v4l2_subdev_call(bcap_dev->sd, core, g_std, &std);
                if (ret) {
@@ -1000,6 +1107,17 @@ static int __devinit bcap_probe(struct platform_device *pdev)
                }
                bcap_dev->std = std;
        }
+       if (config->inputs[0].capabilities & V4L2_IN_CAP_CUSTOM_TIMINGS) {
+               struct v4l2_dv_timings dv_timings;
+               ret = v4l2_subdev_call(bcap_dev->sd, video,
+                               g_dv_timings, &dv_timings);
+               if (ret) {
+                       v4l2_err(&bcap_dev->v4l2_dev,
+                                       "Unable to get dv timings\n");
+                       goto err_unreg_vdev;
+               }
+               bcap_dev->dv_timings = dv_timings;
+       }
        ret = bcap_init_sensor_formats(bcap_dev);
        if (ret) {
                v4l2_err(&bcap_dev->v4l2_dev,
index d29592186b020427b3464f4c820de4df344fd6b4..1e24584605f28a63aa1231b0085bab6779a7a0b0 100644 (file)
@@ -17,6 +17,7 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <linux/module.h>
 #include <linux/slab.h>
 
 #include <asm/bfin_ppi.h>
@@ -67,6 +68,13 @@ static irqreturn_t ppi_irq_err(int irq, void *dev_id)
                bfin_write16(&reg->status, 0xffff);
                break;
        }
+       case PPI_TYPE_EPPI3:
+       {
+               struct bfin_eppi3_regs *reg = info->base;
+
+               bfin_write32(&reg->stat, 0xc0ff);
+               break;
+       }
        default:
                break;
        }
@@ -128,6 +136,12 @@ static int ppi_start(struct ppi_if *ppi)
                bfin_write32(&reg->control, ppi->ppi_control);
                break;
        }
+       case PPI_TYPE_EPPI3:
+       {
+               struct bfin_eppi3_regs *reg = info->base;
+               bfin_write32(&reg->ctl, ppi->ppi_control);
+               break;
+       }
        default:
                return -EINVAL;
        }
@@ -155,6 +169,12 @@ static int ppi_stop(struct ppi_if *ppi)
                bfin_write32(&reg->control, ppi->ppi_control);
                break;
        }
+       case PPI_TYPE_EPPI3:
+       {
+               struct bfin_eppi3_regs *reg = info->base;
+               bfin_write32(&reg->ctl, ppi->ppi_control);
+               break;
+       }
        default:
                return -EINVAL;
        }
@@ -171,17 +191,23 @@ static int ppi_set_params(struct ppi_if *ppi, struct ppi_params *params)
 {
        const struct ppi_info *info = ppi->info;
        int dma32 = 0;
-       int dma_config, bytes_per_line, lines_per_frame;
+       int dma_config, bytes_per_line;
+       int hcount, hdelay, samples_per_line;
 
        bytes_per_line = params->width * params->bpp / 8;
-       lines_per_frame = params->height;
+       /* convert parameters unit from pixels to samples */
+       hcount = params->width * params->bpp / params->dlen;
+       hdelay = params->hdelay * params->bpp / params->dlen;
+       samples_per_line = params->line * params->bpp / params->dlen;
        if (params->int_mask == 0xFFFFFFFF)
                ppi->err_int = false;
        else
                ppi->err_int = true;
 
-       dma_config = (DMA_FLOW_STOP | WNR | RESTART | DMA2D | DI_EN);
+       dma_config = (DMA_FLOW_STOP | RESTART | DMA2D | DI_EN_Y);
        ppi->ppi_control = params->ppi_control & ~PORT_EN;
+       if (!(ppi->ppi_control & PORT_DIR))
+               dma_config |= WNR;
        switch (info->type) {
        case PPI_TYPE_PPI:
        {
@@ -191,8 +217,8 @@ static int ppi_set_params(struct ppi_if *ppi, struct ppi_params *params)
                        dma32 = 1;
 
                bfin_write16(&reg->control, ppi->ppi_control);
-               bfin_write16(&reg->count, bytes_per_line - 1);
-               bfin_write16(&reg->frame, lines_per_frame);
+               bfin_write16(&reg->count, samples_per_line - 1);
+               bfin_write16(&reg->frame, params->frame);
                break;
        }
        case PPI_TYPE_EPPI:
@@ -204,12 +230,31 @@ static int ppi_set_params(struct ppi_if *ppi, struct ppi_params *params)
                        dma32 = 1;
 
                bfin_write32(&reg->control, ppi->ppi_control);
-               bfin_write16(&reg->line, bytes_per_line + params->blank_clocks);
-               bfin_write16(&reg->frame, lines_per_frame);
-               bfin_write16(&reg->hdelay, 0);
-               bfin_write16(&reg->vdelay, 0);
-               bfin_write16(&reg->hcount, bytes_per_line);
-               bfin_write16(&reg->vcount, lines_per_frame);
+               bfin_write16(&reg->line, samples_per_line);
+               bfin_write16(&reg->frame, params->frame);
+               bfin_write16(&reg->hdelay, hdelay);
+               bfin_write16(&reg->vdelay, params->vdelay);
+               bfin_write16(&reg->hcount, hcount);
+               bfin_write16(&reg->vcount, params->height);
+               break;
+       }
+       case PPI_TYPE_EPPI3:
+       {
+               struct bfin_eppi3_regs *reg = info->base;
+
+               if ((params->ppi_control & PACK_EN)
+                       || (params->ppi_control & 0x70000) > DLEN_16)
+                       dma32 = 1;
+
+               bfin_write32(&reg->ctl, ppi->ppi_control);
+               bfin_write32(&reg->line, samples_per_line);
+               bfin_write32(&reg->frame, params->frame);
+               bfin_write32(&reg->hdly, hdelay);
+               bfin_write32(&reg->vdly, params->vdelay);
+               bfin_write32(&reg->hcnt, hcount);
+               bfin_write32(&reg->vcnt, params->height);
+               if (params->int_mask)
+                       bfin_write32(&reg->imsk, params->int_mask & 0xFF);
                break;
        }
        default:
@@ -217,17 +262,17 @@ static int ppi_set_params(struct ppi_if *ppi, struct ppi_params *params)
        }
 
        if (dma32) {
-               dma_config |= WDSIZE_32;
+               dma_config |= WDSIZE_32 | PSIZE_32;
                set_dma_x_count(info->dma_ch, bytes_per_line >> 2);
                set_dma_x_modify(info->dma_ch, 4);
                set_dma_y_modify(info->dma_ch, 4);
        } else {
-               dma_config |= WDSIZE_16;
+               dma_config |= WDSIZE_16 | PSIZE_16;
                set_dma_x_count(info->dma_ch, bytes_per_line >> 1);
                set_dma_x_modify(info->dma_ch, 2);
                set_dma_y_modify(info->dma_ch, 2);
        }
-       set_dma_y_count(info->dma_ch, lines_per_frame);
+       set_dma_y_count(info->dma_ch, params->height);
        set_dma_config(info->dma_ch, dma_config);
 
        SSYNC();
@@ -263,9 +308,15 @@ struct ppi_if *ppi_create_instance(const struct ppi_info *info)
        pr_info("ppi probe success\n");
        return ppi;
 }
+EXPORT_SYMBOL(ppi_create_instance);
 
 void ppi_delete_instance(struct ppi_if *ppi)
 {
        peripheral_free_list(ppi->info->pin_req);
        kfree(ppi);
 }
+EXPORT_SYMBOL(ppi_delete_instance);
+
+MODULE_DESCRIPTION("Analog Devices PPI driver");
+MODULE_AUTHOR("Scott Jiang <Scott.Jiang.Linux@gmail.com>");
+MODULE_LICENSE("GPL v2");
index 7b8b547f2d51867115f9bf5a510495e6c35baebb..2721f839852ff4676b1198e38fa9dda3ffa755f6 100644 (file)
@@ -178,6 +178,10 @@ struct coda_ctx {
        int                             idx;
 };
 
+static const u8 coda_filler_nal[14] = { 0x00, 0x00, 0x00, 0x01, 0x0c, 0xff,
+                       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80 };
+static const u8 coda_filler_size[8] = { 0, 7, 14, 13, 12, 11, 10, 9 };
+
 static inline void coda_write(struct coda_dev *dev, u32 data, u32 reg)
 {
        v4l2_dbg(1, coda_debug, &dev->v4l2_dev,
@@ -944,6 +948,24 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx, struct coda_q_data *q_d
        return 0;
 }
 
+static int coda_h264_padding(int size, char *p)
+{
+       int nal_size;
+       int diff;
+
+       diff = size - (size & ~0x7);
+       if (diff == 0)
+               return 0;
+
+       nal_size = coda_filler_size[diff];
+       memcpy(p, coda_filler_nal, nal_size);
+
+       /* Add rbsp stop bit and trailing at the end */
+       *(p + nal_size - 1) = 0x80;
+
+       return nal_size;
+}
+
 static int coda_start_streaming(struct vb2_queue *q, unsigned int count)
 {
        struct coda_ctx *ctx = vb2_get_drv_priv(q);
@@ -1171,7 +1193,15 @@ static int coda_start_streaming(struct vb2_queue *q, unsigned int count)
                                coda_read(dev, CODA_CMD_ENC_HEADER_BB_START);
                memcpy(&ctx->vpu_header[1][0], vb2_plane_vaddr(buf, 0),
                       ctx->vpu_header_size[1]);
-               ctx->vpu_header_size[2] = 0;
+               /*
+                * Length of H.264 headers is variable and thus it might not be
+                * aligned for the coda to append the encoded frame. In that is
+                * the case a filler NAL must be added to header 2.
+                */
+               ctx->vpu_header_size[2] = coda_h264_padding(
+                                       (ctx->vpu_header_size[0] +
+                                        ctx->vpu_header_size[1]),
+                                        ctx->vpu_header[2]);
                break;
        case V4L2_PIX_FMT_MPEG4:
                /*
index 3c56037c82fce5e711469b585dbd157da79b01c2..ccfde4eb626acd397ddff2fb4a43d738abbddec8 100644 (file)
@@ -97,25 +97,15 @@ config VIDEO_ISIF
           To compile this driver as a module, choose M here: the
           module will be called vpfe.
 
-config VIDEO_DM644X_VPBE
-       tristate "DM644X VPBE HW module"
-       depends on ARCH_DAVINCI_DM644x
+config VIDEO_DAVINCI_VPBE_DISPLAY
+       tristate "DM644X/DM365/DM355 VPBE HW module"
+       depends on ARCH_DAVINCI_DM644x || ARCH_DAVINCI_DM355 || ARCH_DAVINCI_DM365
        select VIDEO_VPSS_SYSTEM
        select VIDEOBUF2_DMA_CONTIG
        help
-           Enables VPBE modules used for display on a DM644x
-           SoC.
+           Enables Davinci VPBE module used for display devices.
+           This module is common for following DM644x/DM365/DM355
+           based display devices.
 
            To compile this driver as a module, choose M here: the
            module will be called vpbe.
-
-
-config VIDEO_VPBE_DISPLAY
-       tristate "VPBE V4L2 Display driver"
-       depends on ARCH_DAVINCI_DM644x
-       select VIDEO_DM644X_VPBE
-       help
-           Enables VPBE V4L2 Display driver on a DM644x device
-
-           To compile this driver as a module, choose M here: the
-           module will be called vpbe_display.
index 74ed92d09257c6ca828467202c817af627c64e74..f40f5219ca50067d5a4729fb336d7e65760125f2 100644 (file)
@@