This is a driver for the CPiA PPC2 driven parallel connected
Camera. For example the Creative WebcamII is CPiA driven.

   ) [1]Peter Pregler, Linz 2000, published under the [2]GNU GPL

---------------------------------------------------------------------------

USAGE:

General:
========

1) Make sure you have created the video devices (/dev/video*):

- if you have a recent MAKEDEV do a 'cd /dev;./MAKEDEV video'
- otherwise do a:

cd /dev
mknod video0 c 81 0
ln -s video0 video

2) Compile the kernel (see below for the list of options to use),
   configure your parport and reboot.

3) If all worked well you should get messages similar
   to the following (your versions may be different) on the console:

V4L-Driver for Vision CPiA based cameras v0.7.4
parport0: read2 timeout.
parport0: Multimedia device, VLSI Vision Ltd PPC2
Parallel port driver for Vision CPiA based camera
  CPIA Version: 1.20 (2.0)
  CPIA PnP-ID: 0553:0002:0100
  VP-Version: 1.0 0100
  1 camera(s) found


As modules:
===========

Make sure you have selected the following kernel options (you can
select all stuff as modules):

The cpia-stuff is in the section 'Character devices -> Video For Linux'.

CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_1284=y
CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_CPIA=m
CONFIG_VIDEO_CPIA_PP=m

For autoloading of all those modules you need to tell module-init-tools
some stuff. Add the following line to your module-init-tools config-file
(e.g. /etc/modprobe.conf or wherever your distribution does store that
stuff):

options parport_pc io=0x378 irq=7 dma=3
alias char-major-81 cpia_pp

The first line tells the dma/irq channels to use. Those _must_ match
the settings of your BIOS. Do NOT simply use the values above.  See
Documentation/parport.txt for more information about this. The second
line associates the video-device file with the driver. Of cause you
can also load the modules once upon boot (usually done in /etc/modules).

Linked into the kernel:
=======================

Make sure you have selected the following kernel options. Note that
you cannot compile the parport-stuff as modules and the cpia-driver
statically (the other way round is okay though).

The cpia-stuff is in the section 'Character devices -> Video For Linux'.

CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_1284=y
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_CPIA=y
CONFIG_VIDEO_CPIA_PP=y

To use DMA/irq you will need to tell the kernel upon boot time the
hardware configuration of the parport. You can give the boot-parameter
at the LILO-prompt or specify it in lilo.conf. I use the following
append-line in lilo.conf:

        append="parport=0x378,7,3"

See Documentation/parport.txt for more information about the
configuration of the parport and the values given above. Do not simply
use the values given above.

---------------------------------------------------------------------------
FEATURES:

- mmap/read v4l-interface (but no overlay)
- image formats: CIF/QCIF, SIF/QSIF, various others used by isabel;
  note: all sizes except CIF/QCIF are implemented by clipping, i.e.
  pixels are not uploaded from the camera
- palettes: VIDEO_PALETTE_GRAY, VIDEO_PALETTE_RGB565, VIDEO_PALETTE_RGB555,
  VIDEO_PALETTE_RGB24, VIDEO_PALETTE_RGB32, VIDEO_PALETTE_YUYV,
  VIDEO_PALETTE_UYVY, VIDEO_PALETTE_YUV422
- state information (color balance, exposure, ...) is preserved between
  device opens
- complete control over camera via proc-interface (_all_ camera settings are
  supported), there is also a python-gtk application available for this [3]
- works under SMP (but the driver is completely serialized and synchronous)
  so you get no benefit from SMP, but at least it does not crash your box
- might work for non-Intel architecture, let us know about this

---------------------------------------------------------------------------
TESTED APPLICATIONS:

- a simple test application based on Xt is available at [3]
- another test-application based on gqcam-0.4 (uses GTK)
- gqcam-0.6 should work
- xawtv-3.x (also the webcam software)
- xawtv-2.46
- w3cam (cgi-interface and vidcat, e.g. you may try out 'vidcat  |xv
  -maxpect -root -quit +noresetroot -rmode 5 -')
- vic, the MBONE video conferencing tool (version 2.8ucl4-1)
- isabel 3R4beta (barely working, but AFAICT all the problems are on
  their side)
- camserv-0.40

See [3] for pointers to v4l-applications.

---------------------------------------------------------------------------
KNOWN PROBLEMS:

- some applications do not handle the image format correctly, you will
  see strange horizontal stripes instead of a nice picture -> make sure
  your application does use a supported image size or queries the driver
  for the actually used size (reason behind this: the camera cannot
  provide any image format, so if size NxM is requested the driver will
  use a format to the closest fitting N1xM1, the application should now
  query for this granted size, most applications do not).
- all the todo ;)
- if there is not enough light and the picture is too dark try to
  adjust the SetSensorFPS setting, automatic frame rate adjustment
  has its price
- do not try out isabel 3R4beta (built 135), you will be disappointed

---------------------------------------------------------------------------
TODO:

- multiple camera support (struct camera or something) - This should work,
  but hasn't been tested yet.
- architecture independence?
- SMP-safe asynchronous mmap interface
- nibble mode for old parport interfaces
- streaming capture, this should give a performance gain

---------------------------------------------------------------------------
IMPLEMENTATION NOTES:

The camera can act in two modes, streaming or grabbing. Right now a
polling grab-scheme is used. Maybe interrupt driven streaming will be
used for a asynchronous mmap interface in the next major release of the
driver. This might give a better frame rate.

---------------------------------------------------------------------------
THANKS (in no particular order):

- Scott J. Bertin <sbertin@mindspring.com> for cleanups, the proc-filesystem
  and much more
- Henry Bruce <whb@vvl.co.uk> for providing developers information about
  the CPiA chip, I wish all companies would treat Linux as seriously
- Karoly Erdei <Karoly.Erdei@risc.uni-linz.ac.at> and RISC-Linz for being
  my boss ;) resp. my employer and for providing me the hardware and
  allow me to devote some working time to this project
- Manuel J. Petit de Gabriel <mpetit@dit.upm.es> for providing help
  with Isabel (http://isabel.dit.upm.es/)
- Bas Huisman <bhuism@cs.utwente.nl> for writing the initial parport code
- Jarl Totland <Jarl.Totland@bdc.no> for setting up the mailing list 
  and maintaining the web-server[3]
- Chris Whiteford <Chris@informinteractive.com> for fixes related to the
  1.02 firmware
- special kudos to all the tester whose machines crashed and/or
  will crash. :)

---------------------------------------------------------------------------
REFERENCES

   1. http://www.risc.uni-linz.ac.at/people/ppregler
      mailto:Peter_Pregler@email.com
   2. see the file COPYING in the top directory of the kernel tree
   3. http://webcam.sourceforge.net/
