mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 03:21:32 +00:00
6e20409004
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
462 lines
18 KiB
Plaintext
462 lines
18 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.
|