123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- 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.
|