![Adrian Bunk](/assets/img/avatar_default.png)
- the w9968cf-vpp module is not intended for inclusion into the kernel - the upstream w9968cf package shipping the w9968cf-vpp module suggests to simply replace the w9968cf module shipped with the kernel Therefore, there seems to be no good reason spending some bytes of kernel memory for hooks for the w9968cf-vpp module. Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Luca Risolia <luca.risolia@studio.unibo.it> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
462 lines
19 KiB
Plaintext
462 lines
19 KiB
Plaintext
|
|
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 paramaters
|
|
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
|
|
Note: The kernel must be compiled with the CONFIG_KMOD option
|
|
enabled for the 'ovcamchip' module to be loaded and for
|
|
this parameter to be present.
|
|
-------------------------------------------------------------------------------
|
|
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 informations
|
|
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.
|