2008-06-12 17:58:58 +04:00
/*
2010-01-07 21:59:12 +03:00
* Z - Star / Vimicro zc301 / zc302p / vc30x library
2008-06-12 17:58:58 +04:00
*
2010-01-07 21:59:12 +03:00
* Copyright ( C ) 2009 - 2010 Jean - Francois Moine < http : //moinejf.free.fr>
* Copyright ( C ) 2004 2005 2006 Michel Xhaard mxhaard @ magic . fr
2008-06-12 17:58:58 +04:00
*
* 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 0213 9 , USA .
*/
# define MODULE_NAME "zc3xx"
2010-01-29 17:05:25 +03:00
# include <linux/input.h>
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
percpu.h is included by sched.h and module.h and thus ends up being
included when building most .c files. percpu.h includes slab.h which
in turn includes gfp.h making everything defined by the two files
universally available and complicating inclusion dependencies.
percpu.h -> slab.h dependency is about to be removed. Prepare for
this change by updating users of gfp and slab facilities include those
headers directly instead of assuming availability. As this conversion
needs to touch large number of source files, the following script is
used as the basis of conversion.
http://userweb.kernel.org/~tj/misc/slabh-sweep.py
The script does the followings.
* Scan files for gfp and slab usages and update includes such that
only the necessary includes are there. ie. if only gfp is used,
gfp.h, if slab is used, slab.h.
* When the script inserts a new include, it looks at the include
blocks and try to put the new include such that its order conforms
to its surrounding. It's put in the include block which contains
core kernel includes, in the same order that the rest are ordered -
alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
doesn't seem to be any matching order.
* If the script can't find a place to put a new include (mostly
because the file doesn't have fitting include block), it prints out
an error message indicating which .h file needs to be added to the
file.
The conversion was done in the following steps.
1. The initial automatic conversion of all .c files updated slightly
over 4000 files, deleting around 700 includes and adding ~480 gfp.h
and ~3000 slab.h inclusions. The script emitted errors for ~400
files.
2. Each error was manually checked. Some didn't need the inclusion,
some needed manual addition while adding it to implementation .h or
embedding .c file was more appropriate for others. This step added
inclusions to around 150 files.
3. The script was run again and the output was compared to the edits
from #2 to make sure no file was left behind.
4. Several build tests were done and a couple of problems were fixed.
e.g. lib/decompress_*.c used malloc/free() wrappers around slab
APIs requiring slab.h to be added manually.
5. The script was run on all .h files but without automatically
editing them as sprinkling gfp.h and slab.h inclusions around .h
files could easily lead to inclusion dependency hell. Most gfp.h
inclusion directives were ignored as stuff from gfp.h was usually
wildly available and often used in preprocessor macros. Each
slab.h inclusion directive was examined and added manually as
necessary.
6. percpu.h was updated not to include slab.h.
7. Build test were done on the following configurations and failures
were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
distributed build env didn't work with gcov compiles) and a few
more options had to be turned off depending on archs to make things
build (like ipr on powerpc/64 which failed due to missing writeq).
* x86 and x86_64 UP and SMP allmodconfig and a custom test config.
* powerpc and powerpc64 SMP allmodconfig
* sparc and sparc64 SMP allmodconfig
* ia64 SMP allmodconfig
* s390 SMP allmodconfig
* alpha SMP allmodconfig
* um on x86_64 SMP allmodconfig
8. percpu.h modifications were reverted so that it could be applied as
a separate patch and serve as bisection point.
Given the fact that I had only a couple of failures from tests on step
6, I'm fairly confident about the coverage of this conversion patch.
If there is a breakage, it's likely to be something in one of the arch
headers which should be easily discoverable easily on most builds of
the specific arch.
Signed-off-by: Tejun Heo <tj@kernel.org>
Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
2010-03-24 11:04:11 +03:00
# include <linux/slab.h>
2008-06-12 17:58:58 +04:00
# include "gspca.h"
2009-03-03 11:33:41 +03:00
# include "jpeg.h"
2008-06-12 17:58:58 +04:00
2010-01-07 21:59:12 +03:00
MODULE_AUTHOR ( " Jean-Francois Moine <http://moinejf.free.fr>, "
2008-06-12 17:58:58 +04:00
" Serge A. Suchkov <Serge.A.S@tochka.ru> " ) ;
MODULE_DESCRIPTION ( " GSPCA ZC03xx/VC3xx USB Camera Driver " ) ;
MODULE_LICENSE ( " GPL " ) ;
static int force_sensor = - 1 ;
2009-01-07 22:49:57 +03:00
# define QUANT_VAL 1 /* quantization table */
2008-07-15 21:23:08 +04:00
# include "zc3xx-reg.h"
2008-06-12 17:58:58 +04:00
/* specific webcam descriptor */
struct sd {
struct gspca_dev gspca_dev ; /* !! must be the first item */
2010-01-07 21:59:12 +03:00
u8 contrast ;
u8 gamma ;
u8 autogain ;
u8 lightfreq ;
u8 sharpness ;
2009-03-03 11:33:41 +03:00
u8 quality ; /* image quality */
2009-03-02 12:40:52 +03:00
# define QUALITY_MIN 40
# define QUALITY_MAX 60
# define QUALITY_DEF 50
2008-06-12 17:58:58 +04:00
2010-01-07 21:59:12 +03:00
u8 sensor ; /* Type of image sensor chip */
2008-06-12 17:58:58 +04:00
/* !! values used in different tables */
2009-01-19 21:18:44 +03:00
# define SENSOR_ADCM2700 0
# define SENSOR_CS2102 1
# define SENSOR_CS2102K 2
# define SENSOR_GC0305 3
# define SENSOR_HDCS2020b 4
# define SENSOR_HV7131B 5
# define SENSOR_HV7131C 6
# define SENSOR_ICM105A 7
# define SENSOR_MC501CB 8
2009-11-04 22:38:04 +03:00
# define SENSOR_MI0360SOC 9
# define SENSOR_OV7620 10
/*#define SENSOR_OV7648 10 - same values */
# define SENSOR_OV7630C 11
# define SENSOR_PAS106 12
# define SENSOR_PAS202B 13
# define SENSOR_PB0330 14 /* (MI0360) */
# define SENSOR_PO2030 15
# define SENSOR_TAS5130CK 16
# define SENSOR_TAS5130CXX 17
# define SENSOR_TAS5130C_VF0250 18
# define SENSOR_MAX 19
2008-06-12 17:58:58 +04:00
unsigned short chip_revision ;
2009-03-03 11:33:41 +03:00
u8 * jpeg_hdr ;
2008-06-12 17:58:58 +04:00
} ;
/* V4L2 controls supported by the driver */
static int sd_setcontrast ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getcontrast ( struct gspca_dev * gspca_dev , __s32 * val ) ;
static int sd_setautogain ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getautogain ( struct gspca_dev * gspca_dev , __s32 * val ) ;
2008-06-30 22:50:11 +04:00
static int sd_setgamma ( struct gspca_dev * gspca_dev , __s32 val ) ;
2008-06-12 17:58:58 +04:00
static int sd_getgamma ( struct gspca_dev * gspca_dev , __s32 * val ) ;
2008-06-30 22:50:11 +04:00
static int sd_setfreq ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getfreq ( struct gspca_dev * gspca_dev , __s32 * val ) ;
static int sd_setsharpness ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getsharpness ( struct gspca_dev * gspca_dev , __s32 * val ) ;
2008-06-12 17:58:58 +04:00
2009-12-30 15:12:41 +03:00
static const struct ctrl sd_ctrls [ ] = {
2008-06-12 17:58:58 +04:00
{
{
. id = V4L2_CID_CONTRAST ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Contrast " ,
. minimum = 0 ,
2010-01-04 21:54:59 +03:00
. maximum = 255 ,
2008-06-12 17:58:58 +04:00
. step = 1 ,
2010-01-07 21:59:12 +03:00
# define CONTRAST_DEF 128
. default_value = CONTRAST_DEF ,
2008-06-12 17:58:58 +04:00
} ,
. set = sd_setcontrast ,
. get = sd_getcontrast ,
} ,
2008-06-30 22:50:11 +04:00
{
{
. id = V4L2_CID_GAMMA ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Gamma " ,
. minimum = 1 ,
. maximum = 6 ,
. step = 1 ,
. default_value = 4 ,
} ,
. set = sd_setgamma ,
. get = sd_getgamma ,
} ,
2008-06-12 17:58:58 +04:00
{
{
. id = V4L2_CID_AUTOGAIN ,
. type = V4L2_CTRL_TYPE_BOOLEAN ,
. name = " Auto Gain " ,
. minimum = 0 ,
. maximum = 1 ,
. step = 1 ,
2010-01-07 21:59:12 +03:00
# define AUTOGAIN_DEF 1
. default_value = AUTOGAIN_DEF ,
2008-06-12 17:58:58 +04:00
} ,
. set = sd_setautogain ,
. get = sd_getautogain ,
} ,
2010-04-25 22:05:31 +04:00
# define LIGHTFREQ_IDX 3
2008-06-12 17:58:58 +04:00
{
{
2008-06-30 22:50:11 +04:00
. id = V4L2_CID_POWER_LINE_FREQUENCY ,
. type = V4L2_CTRL_TYPE_MENU ,
. name = " Light frequency filter " ,
. minimum = 0 ,
. maximum = 2 , /* 0: 0, 1: 50Hz, 2:60Hz */
. step = 1 ,
2010-01-07 21:59:12 +03:00
# define FREQ_DEF 0
. default_value = FREQ_DEF ,
2008-06-30 22:50:11 +04:00
} ,
. set = sd_setfreq ,
. get = sd_getfreq ,
} ,
{
{
. id = V4L2_CID_SHARPNESS ,
2008-06-12 17:58:58 +04:00
. type = V4L2_CTRL_TYPE_INTEGER ,
2008-06-30 22:50:11 +04:00
. name = " Sharpness " ,
. minimum = 0 ,
. maximum = 3 ,
2008-06-12 17:58:58 +04:00
. step = 1 ,
2010-01-07 21:59:12 +03:00
# define SHARPNESS_DEF 2
. default_value = SHARPNESS_DEF ,
2008-06-12 17:58:58 +04:00
} ,
2008-06-30 22:50:11 +04:00
. set = sd_setsharpness ,
. get = sd_getsharpness ,
2008-06-12 17:58:58 +04:00
} ,
} ;
2008-12-29 13:49:41 +03:00
static const struct v4l2_pix_format vga_mode [ ] = {
2008-07-05 18:49:20 +04:00
{ 320 , 240 , V4L2_PIX_FMT_JPEG , V4L2_FIELD_NONE ,
. bytesperline = 320 ,
. sizeimage = 320 * 240 * 3 / 8 + 590 ,
. colorspace = V4L2_COLORSPACE_JPEG ,
. priv = 1 } ,
{ 640 , 480 , V4L2_PIX_FMT_JPEG , V4L2_FIELD_NONE ,
. bytesperline = 640 ,
. sizeimage = 640 * 480 * 3 / 8 + 590 ,
. colorspace = V4L2_COLORSPACE_JPEG ,
. priv = 0 } ,
2008-06-12 17:58:58 +04:00
} ;
2010-01-13 13:12:28 +03:00
static const struct v4l2_pix_format broken_vga_mode [ ] = {
{ 320 , 232 , V4L2_PIX_FMT_JPEG , V4L2_FIELD_NONE ,
. bytesperline = 320 ,
. sizeimage = 320 * 232 * 4 / 8 + 590 ,
. colorspace = V4L2_COLORSPACE_JPEG ,
. priv = 1 } ,
{ 640 , 472 , V4L2_PIX_FMT_JPEG , V4L2_FIELD_NONE ,
. bytesperline = 640 ,
. sizeimage = 640 * 472 * 3 / 8 + 590 ,
. colorspace = V4L2_COLORSPACE_JPEG ,
. priv = 0 } ,
} ;
2008-12-29 13:49:41 +03:00
static const struct v4l2_pix_format sif_mode [ ] = {
2008-07-05 18:49:20 +04:00
{ 176 , 144 , V4L2_PIX_FMT_JPEG , V4L2_FIELD_NONE ,
. bytesperline = 176 ,
. sizeimage = 176 * 144 * 3 / 8 + 590 ,
. colorspace = V4L2_COLORSPACE_JPEG ,
. priv = 1 } ,
{ 352 , 288 , V4L2_PIX_FMT_JPEG , V4L2_FIELD_NONE ,
. bytesperline = 352 ,
. sizeimage = 352 * 288 * 3 / 8 + 590 ,
. colorspace = V4L2_COLORSPACE_JPEG ,
. priv = 0 } ,
2008-06-12 17:58:58 +04:00
} ;
/* usb exchanges */
struct usb_action {
2010-01-07 21:59:12 +03:00
u8 req ;
u8 val ;
u16 idx ;
2008-06-12 17:58:58 +04:00
} ;
2009-01-19 21:18:44 +03:00
static const struct usb_action adcm2700_Initial [ ] = {
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x04 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,04,cc */
2009-01-26 11:29:06 +03:00
{ 0xa0 , 0x00 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
2009-01-19 21:18:44 +03:00
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xa0 , 0xd3 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,d3,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xd8 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,d8,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xde , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,de,cc */
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc */
{ 0xbb , 0x00 , 0x0400 } , /* 04,00,00,bb */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x0f , 0x140f } , /* 14,0f,0f,bb */
2009-01-26 11:29:06 +03:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,37,cc */
2009-01-19 21:18:44 +03:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x58 , ZC3XX_R116_RGAIN } , /* 01,16,58,cc */
{ 0xa0 , 0x5a , ZC3XX_R118_BGAIN } , /* 01,18,5a,cc */
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
{ 0xa0 , 0xd3 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,d3,cc */
{ 0xbb , 0x00 , 0x0408 } , /* 04,00,08,bb */
{ 0xdd , 0x00 , 0x0200 } , /* 00,02,00,dd */
{ 0xbb , 0x00 , 0x0400 } , /* 04,00,00,bb */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x0f , 0x140f } , /* 14,0f,0f,bb */
{ 0xbb , 0xe0 , 0x0c2e } , /* 0c,e0,2e,bb */
{ 0xbb , 0x01 , 0x2000 } , /* 20,01,00,bb */
{ 0xbb , 0x96 , 0x2400 } , /* 24,96,00,bb */
{ 0xbb , 0x06 , 0x1006 } , /* 10,06,06,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x5f , 0x2090 } , /* 20,5f,90,bb */
{ 0xbb , 0x01 , 0x8000 } , /* 80,01,00,bb */
{ 0xbb , 0x09 , 0x8400 } , /* 84,09,00,bb */
{ 0xbb , 0x86 , 0x0002 } , /* 00,86,02,bb */
{ 0xbb , 0xe6 , 0x0401 } , /* 04,e6,01,bb */
{ 0xbb , 0x86 , 0x0802 } , /* 08,86,02,bb */
{ 0xbb , 0xe6 , 0x0c01 } , /* 0c,e6,01,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xaa , 0xfe , 0x0000 } , /* 00,fe,00,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0020 } , /* 00,fe,20,aa */
2009-01-26 11:29:06 +03:00
/*mswin+*/
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xaa , 0xfe , 0x0002 } ,
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xaa , 0xb4 , 0xcd37 } ,
{ 0xaa , 0xa4 , 0x0004 } ,
{ 0xaa , 0xa8 , 0x0007 } ,
{ 0xaa , 0xac , 0x0004 } ,
/*mswin-*/
2009-01-19 21:18:44 +03:00
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xaa , 0xfe , 0x0000 } , /* 00,fe,00,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x04 , 0x0400 } , /* 04,04,00,bb */
{ 0xdd , 0x00 , 0x0100 } , /* 00,01,00,dd */
{ 0xbb , 0x01 , 0x0400 } , /* 04,01,00,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xbb , 0x41 , 0x2803 } , /* 28,41,03,bb */
{ 0xbb , 0x40 , 0x2c03 } , /* 2c,40,03,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0010 } , /* 00,fe,10,aa */
{ }
} ;
static const struct usb_action adcm2700_InitialScale [ ] = {
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,10,cc */
2009-01-26 11:29:06 +03:00
{ 0xa0 , 0x00 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
2009-01-19 21:18:44 +03:00
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xa0 , 0xd3 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,d3,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xd0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,d0,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xd8 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,d8,cc */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc */
{ 0xbb , 0x00 , 0x0400 } , /* 04,00,00,bb */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x0f , 0x140f } , /* 14,0f,0f,bb */
2009-01-26 11:29:06 +03:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,37,cc */
2009-01-19 21:18:44 +03:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x58 , ZC3XX_R116_RGAIN } , /* 01,16,58,cc */
{ 0xa0 , 0x5a , ZC3XX_R118_BGAIN } , /* 01,18,5a,cc */
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
{ 0xa0 , 0xd3 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,d3,cc */
{ 0xbb , 0x00 , 0x0408 } , /* 04,00,08,bb */
{ 0xdd , 0x00 , 0x0200 } , /* 00,02,00,dd */
{ 0xbb , 0x00 , 0x0400 } , /* 04,00,00,bb */
{ 0xdd , 0x00 , 0x0050 } , /* 00,00,50,dd */
{ 0xbb , 0x0f , 0x140f } , /* 14,0f,0f,bb */
{ 0xbb , 0xe0 , 0x0c2e } , /* 0c,e0,2e,bb */
{ 0xbb , 0x01 , 0x2000 } , /* 20,01,00,bb */
{ 0xbb , 0x96 , 0x2400 } , /* 24,96,00,bb */
{ 0xbb , 0x06 , 0x1006 } , /* 10,06,06,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x5f , 0x2090 } , /* 20,5f,90,bb */
{ 0xbb , 0x01 , 0x8000 } , /* 80,01,00,bb */
{ 0xbb , 0x09 , 0x8400 } , /* 84,09,00,bb */
2009-01-26 11:29:06 +03:00
{ 0xbb , 0x86 , 0x0002 } , /* 00,88,02,bb */
2009-01-19 21:18:44 +03:00
{ 0xbb , 0xe6 , 0x0401 } , /* 04,e6,01,bb */
2009-01-26 11:29:06 +03:00
{ 0xbb , 0x86 , 0x0802 } , /* 08,88,02,bb */
2009-01-19 21:18:44 +03:00
{ 0xbb , 0xe6 , 0x0c01 } , /* 0c,e6,01,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xaa , 0xfe , 0x0000 } , /* 00,fe,00,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0020 } , /* 00,fe,20,aa */
/*******/
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xaa , 0xfe , 0x0000 } , /* 00,fe,00,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xdd , 0x00 , 0x0010 } , /* 00,00,10,dd */
{ 0xbb , 0x04 , 0x0400 } , /* 04,04,00,bb */
{ 0xdd , 0x00 , 0x0100 } , /* 00,01,00,dd */
{ 0xbb , 0x01 , 0x0400 } , /* 04,01,00,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xbb , 0x41 , 0x2803 } , /* 28,41,03,bb */
{ 0xbb , 0x40 , 0x2c03 } , /* 2c,40,03,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0010 } , /* 00,fe,10,aa */
{ }
} ;
static const struct usb_action adcm2700_50HZ [ ] = {
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xbb , 0x05 , 0x8400 } , /* 84,05,00,bb */
{ 0xbb , 0xd0 , 0xb007 } , /* b0,d0,07,bb */
{ 0xbb , 0xa0 , 0xb80f } , /* b8,a0,0f,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0010 } , /* 00,fe,10,aa */
{ 0xaa , 0x26 , 0x00d0 } , /* 00,26,d0,aa */
{ 0xaa , 0x28 , 0x0002 } , /* 00,28,02,aa */
{ }
} ;
static const struct usb_action adcm2700_60HZ [ ] = {
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xbb , 0x07 , 0x8400 } , /* 84,07,00,bb */
{ 0xbb , 0x82 , 0xb006 } , /* b0,82,06,bb */
{ 0xbb , 0x04 , 0xb80d } , /* b8,04,0d,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0010 } , /* 00,fe,10,aa */
{ 0xaa , 0x26 , 0x0057 } , /* 00,26,57,aa */
{ 0xaa , 0x28 , 0x0002 } , /* 00,28,02,aa */
{ }
} ;
static const struct usb_action adcm2700_NoFliker [ ] = {
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0002 } , /* 00,fe,02,aa */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0a,cc */
{ 0xbb , 0x07 , 0x8400 } , /* 84,07,00,bb */
{ 0xbb , 0x05 , 0xb000 } , /* b0,05,00,bb */
{ 0xbb , 0xa0 , 0xb801 } , /* b8,a0,01,bb */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xaa , 0xfe , 0x0010 } , /* 00,fe,10,aa */
{ }
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x20 , ZC3XX_R080_HBLANKHIGH } ,
{ 0xa0 , 0x21 , ZC3XX_R081_HBLANKLOW } ,
{ 0xa0 , 0x30 , ZC3XX_R083_RGAINADDR } ,
{ 0xa0 , 0x31 , ZC3XX_R084_GGAINADDR } ,
{ 0xa0 , 0x32 , ZC3XX_R085_BGAINADDR } ,
{ 0xa0 , 0x23 , ZC3XX_R086_EXPTIMEHIGH } ,
{ 0xa0 , 0x24 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x25 , ZC3XX_R088_EXPTIMELOW } ,
{ 0xa0 , 0xb3 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00 */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x02 , 0x0008 } ,
{ 0xaa , 0x03 , 0x0000 } ,
{ 0xaa , 0x11 , 0x0000 } ,
{ 0xaa , 0x12 , 0x0089 } ,
{ 0xaa , 0x13 , 0x0000 } ,
{ 0xaa , 0x14 , 0x00e9 } ,
{ 0xaa , 0x20 , 0x0000 } ,
{ 0xaa , 0x22 , 0x0000 } ,
{ 0xaa , 0x0b , 0x0004 } ,
{ 0xaa , 0x30 , 0x0030 } ,
{ 0xaa , 0x31 , 0x0030 } ,
{ 0xaa , 0x32 , 0x0030 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x10 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x68 , ZC3XX_R18D_YTARGET } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x20 , ZC3XX_R080_HBLANKHIGH } ,
{ 0xa0 , 0x21 , ZC3XX_R081_HBLANKLOW } ,
{ 0xa0 , 0x30 , ZC3XX_R083_RGAINADDR } ,
{ 0xa0 , 0x31 , ZC3XX_R084_GGAINADDR } ,
{ 0xa0 , 0x32 , ZC3XX_R085_BGAINADDR } ,
{ 0xa0 , 0x23 , ZC3XX_R086_EXPTIMEHIGH } ,
{ 0xa0 , 0x24 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x25 , ZC3XX_R088_EXPTIMELOW } ,
{ 0xa0 , 0xb3 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00 */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x02 , 0x0008 } ,
{ 0xaa , 0x03 , 0x0000 } ,
{ 0xaa , 0x11 , 0x0001 } ,
{ 0xaa , 0x12 , 0x0087 } ,
{ 0xaa , 0x13 , 0x0001 } ,
{ 0xaa , 0x14 , 0x00e7 } ,
{ 0xaa , 0x20 , 0x0000 } ,
{ 0xaa , 0x22 , 0x0000 } ,
{ 0xaa , 0x0b , 0x0004 } ,
{ 0xaa , 0x30 , 0x0030 } ,
{ 0xaa , 0x31 , 0x0030 } ,
{ 0xaa , 0x32 , 0x0030 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x68 , ZC3XX_R18D_YTARGET } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
2009-09-18 12:36:24 +04:00
{ }
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_50HZScale [ ] = {
2009-09-18 12:36:24 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xaa , 0x23 , 0x0001 } ,
{ 0xaa , 0x24 , 0x005f } ,
{ 0xaa , 0x25 , 0x0090 } ,
{ 0xaa , 0x21 , 0x00dd } ,
{ 0xa0 , 0x02 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0xbf , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x20 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x3a , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x98 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xdd , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xe4 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf0 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ }
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_50HZ [ ] = {
2009-09-18 12:36:24 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xaa , 0x23 , 0x0000 } ,
{ 0xaa , 0x24 , 0x00af } ,
{ 0xaa , 0x25 , 0x00c8 } ,
{ 0xaa , 0x21 , 0x0068 } ,
{ 0xa0 , 0x01 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x5f , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x90 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x1d , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x4c , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x68 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xe3 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf0 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ }
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_60HZScale [ ] = {
2009-09-18 12:36:24 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xaa , 0x23 , 0x0001 } ,
{ 0xaa , 0x24 , 0x0055 } ,
{ 0xaa , 0x25 , 0x00cc } ,
{ 0xaa , 0x21 , 0x003f } ,
{ 0xa0 , 0x02 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0xab , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x98 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x30 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0xd4 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x39 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x70 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xb0 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ }
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x23 , 0x0000 } ,
{ 0xaa , 0x24 , 0x00aa } ,
{ 0xaa , 0x25 , 0x00e6 } ,
{ 0xaa , 0x21 , 0x003f } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x55 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xcc , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x18 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x6a , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x3f , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xa5 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf0 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_NoFlikerScale [ ] = {
2009-09-18 12:36:24 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xaa , 0x23 , 0x0001 } ,
{ 0xaa , 0x24 , 0x005f } ,
{ 0xaa , 0x25 , 0x0000 } ,
{ 0xaa , 0x21 , 0x0001 } ,
{ 0xa0 , 0x02 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0xbf , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x00 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x80 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x01 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x40 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xa0 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102_NoFliker [ ] = {
2009-09-18 12:36:24 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xaa , 0x23 , 0x0000 } ,
{ 0xaa , 0x24 , 0x00af } ,
{ 0xaa , 0x25 , 0x0080 } ,
{ 0xaa , 0x21 , 0x0001 } ,
{ 0xa0 , 0x01 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x5f , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x80 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x80 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x01 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x40 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xa0 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
/* CS2102_KOCOM */
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102K_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x11 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x55 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0a , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0b , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0c , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0d , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xa3 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x03 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xfb , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x05 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x06 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x09 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x08 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0e , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0f , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x10 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x11 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x12 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x15 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x16 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x0c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x17 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x0c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
{ 0xa0 , 0x01 , 0x01b1 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x60 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x4c , ZC3XX_R118_BGAIN } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x13 , ZC3XX_R120_GAMMA00 } , /* gamma 4 */
{ 0xa0 , 0x38 , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x59 , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x79 , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0x92 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xa7 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xb9 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xc8 , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xd4 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xdf , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xe7 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xee , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xf4 , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xf9 , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xfc , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x26 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x22 , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x20 , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1c , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x16 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x13 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x10 , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x06 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x05 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x04 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x03 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x02 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x58 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf4 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x58 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf4 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf4 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x58 , ZC3XX_R112_RGB22 } ,
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x22 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x22 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } ,
{ 0xa0 , 0x22 , ZC3XX_R0A4_EXPOSURETIMELOW } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xee , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x3a , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x0c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x28 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x04 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x0f , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x19 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0x1f , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x60 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x4c , ZC3XX_R118_BGAIN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x5c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x5c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x96 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x96 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action cs2102K_Initial [ ] = {
2009-01-20 14:14:17 +03:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
2009-01-20 14:14:17 +03:00
/*fixme: next sequence = i2c exchanges*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x55 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0a , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0b , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0c , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7b , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0d , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xa3 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x03 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xfb , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x05 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x06 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x09 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x08 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0e , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x0f , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x10 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x11 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x12 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x18 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x15 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x16 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x0c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x17 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x0c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0xf7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
{ 0xa0 , 0x01 , 0x01b1 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x60 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x4c , ZC3XX_R118_BGAIN } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x13 , ZC3XX_R120_GAMMA00 } , /* gamma 4 */
{ 0xa0 , 0x38 , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x59 , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x79 , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0x92 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xa7 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xb9 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xc8 , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xd4 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xdf , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xe7 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xee , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xf4 , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xf9 , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xfc , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x26 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x22 , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x20 , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1c , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x16 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x13 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x10 , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x06 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x05 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x04 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x03 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x02 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x58 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf4 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x58 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf4 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf4 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x58 , ZC3XX_R112_RGB22 } ,
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x22 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x22 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } ,
{ 0xa0 , 0x22 , ZC3XX_R0A4_EXPOSURETIMELOW } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xee , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x3a , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x0c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x28 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x04 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x0f , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x19 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0x1f , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x60 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x4c , ZC3XX_R118_BGAIN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x5c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x5c , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x96 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x96 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
2009-01-20 14:14:17 +03:00
/*fixme:what does the next sequence?*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xd0 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xd0 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x02 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x0a , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x0a , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x44 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x44 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x21 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7e , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x13 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7e , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x14 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x18 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action gc0305_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xa0 , 0x04 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,04,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xe6 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e6,cc */
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc */
{ 0xa0 , 0x98 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,98,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x13 , 0x0002 } , /* 00,13,02,aa */
{ 0xaa , 0x15 , 0x0003 } , /* 00,15,03,aa */
{ 0xaa , 0x01 , 0x0000 } , /* 00,01,00,aa */
{ 0xaa , 0x02 , 0x0000 } , /* 00,02,00,aa */
{ 0xaa , 0x1a , 0x0000 } , /* 00,1a,00,aa */
{ 0xaa , 0x1c , 0x0017 } , /* 00,1c,17,aa */
{ 0xaa , 0x1d , 0x0080 } , /* 00,1d,80,aa */
{ 0xaa , 0x1f , 0x0008 } , /* 00,1f,08,aa */
{ 0xaa , 0x21 , 0x0012 } , /* 00,21,12,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x82 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,82,cc */
{ 0xa0 , 0x83 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,83,cc */
{ 0xa0 , 0x84 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,84,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x05 , 0x0000 } , /* 00,05,00,aa */
{ 0xaa , 0x0a , 0x0000 } , /* 00,0a,00,aa */
{ 0xaa , 0x0b , 0x00b0 } , /* 00,0b,b0,aa */
{ 0xaa , 0x0c , 0x0000 } , /* 00,0c,00,aa */
{ 0xaa , 0x0d , 0x00b0 } , /* 00,0d,b0,aa */
{ 0xaa , 0x0e , 0x0000 } , /* 00,0e,00,aa */
{ 0xaa , 0x0f , 0x00b0 } , /* 00,0f,b0,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x11 , 0x00b0 } , /* 00,11,b0,aa */
{ 0xaa , 0x16 , 0x0001 } , /* 00,16,01,aa */
{ 0xaa , 0x17 , 0x00e6 } , /* 00,17,e6,aa */
{ 0xaa , 0x18 , 0x0002 } , /* 00,18,02,aa */
{ 0xaa , 0x19 , 0x0086 } , /* 00,19,86,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x1b , 0x0020 } , /* 00,1b,20,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,b7,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x76 , ZC3XX_R189_AWBSTATUS } , /* 01,89,76,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } , /* 01,ad,09,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,60,cc */
{ 0xa0 , 0x85 , ZC3XX_R18D_YTARGET } , /* 01,8d,85,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x011e } , /* 01,1e,00,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x52 , ZC3XX_R116_RGAIN } , /* 01,16,52,cc */
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } , /* 01,17,40,cc */
{ 0xa0 , 0x52 , ZC3XX_R118_BGAIN } , /* 01,18,52,cc */
{ 0xa0 , 0x03 , ZC3XX_R113_RGB03 } , /* 01,13,03,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action gc0305_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,10,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e8,cc */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc */
{ 0xa0 , 0x98 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,98,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x13 , 0x0000 } , /* 00,13,00,aa */
{ 0xaa , 0x15 , 0x0001 } , /* 00,15,01,aa */
{ 0xaa , 0x01 , 0x0000 } , /* 00,01,00,aa */
{ 0xaa , 0x02 , 0x0000 } , /* 00,02,00,aa */
{ 0xaa , 0x1a , 0x0000 } , /* 00,1a,00,aa */
{ 0xaa , 0x1c , 0x0017 } , /* 00,1c,17,aa */
{ 0xaa , 0x1d , 0x0080 } , /* 00,1d,80,aa */
{ 0xaa , 0x1f , 0x0008 } , /* 00,1f,08,aa */
{ 0xaa , 0x21 , 0x0012 } , /* 00,21,12,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x82 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,82,cc */
{ 0xa0 , 0x83 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,83,cc */
{ 0xa0 , 0x84 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,84,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x05 , 0x0000 } , /* 00,05,00,aa */
{ 0xaa , 0x0a , 0x0000 } , /* 00,0a,00,aa */
{ 0xaa , 0x0b , 0x00b0 } , /* 00,0b,b0,aa */
{ 0xaa , 0x0c , 0x0000 } , /* 00,0c,00,aa */
{ 0xaa , 0x0d , 0x00b0 } , /* 00,0d,b0,aa */
{ 0xaa , 0x0e , 0x0000 } , /* 00,0e,00,aa */
{ 0xaa , 0x0f , 0x00b0 } , /* 00,0f,b0,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x11 , 0x00b0 } , /* 00,11,b0,aa */
{ 0xaa , 0x16 , 0x0001 } , /* 00,16,01,aa */
{ 0xaa , 0x17 , 0x00e8 } , /* 00,17,e8,aa */
{ 0xaa , 0x18 , 0x0002 } , /* 00,18,02,aa */
{ 0xaa , 0x19 , 0x0088 } , /* 00,19,88,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x1b , 0x0020 } , /* 00,1b,20,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,b7,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x76 , ZC3XX_R189_AWBSTATUS } , /* 01,89,76,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } , /* 01,ad,09,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,60,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x011e } , /* 01,1e,00,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x52 , ZC3XX_R116_RGAIN } , /* 01,16,52,cc */
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } , /* 01,17,40,cc */
{ 0xa0 , 0x52 , ZC3XX_R118_BGAIN } , /* 01,18,52,cc */
{ 0xa0 , 0x03 , ZC3XX_R113_RGB03 } , /* 01,13,03,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action gc0305_50HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0002 } , /* 00,83,02,aa */
{ 0xaa , 0x84 , 0x0038 } , /* 00,84,38,aa */ /* win: 00,84,ec */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x0b , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,0b,cc */
{ 0xa0 , 0x18 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,18,cc */
/* win: 01,92,10 */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x8e , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,8e,cc */
/* win: 01,97,ec */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,60,cc */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc */
/* {0xa0, 0x85, ZC3XX_R18D_YTARGET}, * 01,8d,85,cc *
* if 640 x480 */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action gc0305_60HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0000 } , /* 00,83,00,aa */
{ 0xaa , 0x84 , 0x00ec } , /* 00,84,ec,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x0b , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,0b,cc */
{ 0xa0 , 0x10 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,10,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0xec , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,ec,cc */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,60,cc */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc */
{ 0xa0 , 0x80 , ZC3XX_R18D_YTARGET } , /* 01,8d,80,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action gc0305_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0c , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0c,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0000 } , /* 00,83,00,aa */
{ 0xaa , 0x84 , 0x0020 } , /* 00,84,20,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,00,cc */
{ 0xa0 , 0x48 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,48,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,60,cc */
{ 0xa0 , 0x03 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,03,cc */
{ 0xa0 , 0x80 , ZC3XX_R18D_YTARGET } , /* 01,8d,80,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action hdcs2020b_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x11 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* qtable 0x05 */
{ 0xa0 , 0x08 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x1c , 0x0000 } ,
{ 0xaa , 0x0a , 0x0001 } ,
{ 0xaa , 0x0b , 0x0006 } ,
{ 0xaa , 0x0c , 0x007b } ,
{ 0xaa , 0x0d , 0x00a7 } ,
{ 0xaa , 0x03 , 0x00fb } ,
{ 0xaa , 0x05 , 0x0000 } ,
{ 0xaa , 0x06 , 0x0003 } ,
{ 0xaa , 0x09 , 0x0008 } ,
{ 0xaa , 0x0f , 0x0018 } , /* set sensor gain */
{ 0xaa , 0x10 , 0x0018 } ,
{ 0xaa , 0x11 , 0x0018 } ,
{ 0xaa , 0x12 , 0x0018 } ,
{ 0xaa , 0x15 , 0x004e } ,
{ 0xaa , 0x1c , 0x0004 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0002 } ,
{ 0xa1 , 0x01 , 0x0008 } ,
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x13 , ZC3XX_R120_GAMMA00 } , /* gamma 4 */
{ 0xa0 , 0x38 , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x59 , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x79 , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0x92 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xa7 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xb9 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xc8 , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xd4 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xdf , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xe7 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xee , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xf4 , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xf9 , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xfc , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x26 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x22 , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x20 , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1c , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x16 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x13 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x10 , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x06 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x05 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x04 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x03 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x02 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x66 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xed , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xed , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xed , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x66 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xed , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xed , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xed , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x66 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x13 , 0x0031 } ,
{ 0xaa , 0x14 , 0x0001 } ,
{ 0xaa , 0x0e , 0x0004 } ,
{ 0xaa , 0x19 , 0x00cd } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x62 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x3d , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x0c , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 0x14 */
{ 0xa0 , 0x28 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x04 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x18 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x2c , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0x41 , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action hdcs2020b_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x1c , 0x0000 } ,
{ 0xaa , 0x0a , 0x0001 } ,
{ 0xaa , 0x0b , 0x0006 } ,
{ 0xaa , 0x0c , 0x007a } ,
{ 0xaa , 0x0d , 0x00a7 } ,
{ 0xaa , 0x03 , 0x00fb } ,
{ 0xaa , 0x05 , 0x0000 } ,
{ 0xaa , 0x06 , 0x0003 } ,
{ 0xaa , 0x09 , 0x0008 } ,
{ 0xaa , 0x0f , 0x0018 } , /* original setting */
{ 0xaa , 0x10 , 0x0018 } ,
{ 0xaa , 0x11 , 0x0018 } ,
{ 0xaa , 0x12 , 0x0018 } ,
{ 0xaa , 0x15 , 0x004e } ,
{ 0xaa , 0x1c , 0x0004 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xf7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0002 } ,
{ 0xa1 , 0x01 , 0x0008 } ,
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x13 , ZC3XX_R120_GAMMA00 } , /* gamma 4 */
{ 0xa0 , 0x38 , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x59 , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x79 , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0x92 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xa7 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xb9 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xc8 , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xd4 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xdf , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xe7 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xee , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xf4 , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xf9 , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xfc , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x26 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x22 , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x20 , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1c , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x16 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x13 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x10 , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x06 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x05 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x04 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x03 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x02 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x66 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xed , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xed , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xed , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x66 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xed , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xed , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xed , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x66 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
/**** set exposure ***/
{ 0xaa , 0x13 , 0x0031 } ,
{ 0xaa , 0x14 , 0x0001 } ,
{ 0xaa , 0x0e , 0x0004 } ,
{ 0xaa , 0x19 , 0x00cd } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x62 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x3d , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x0c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x28 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x04 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x18 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x2c , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0x41 , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action hdcs2020b_50HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-07-21 12:42:17 +04:00
{ 0xaa , 0x13 , 0x0018 } , /* 00,13,18,aa */
{ 0xaa , 0x14 , 0x0001 } , /* 00,14,01,aa */
{ 0xaa , 0x0e , 0x0005 } , /* 00,0e,05,aa */
{ 0xaa , 0x19 , 0x001f } , /* 00,19,1f,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,02,cc */
{ 0xa0 , 0x76 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,76,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x46 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,46,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x0c , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,0c,cc */
{ 0xa0 , 0x28 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,28,cc */
{ 0xa0 , 0x05 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,05,cc */
{ 0xa0 , 0x1a , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,1a,cc */
{ 0xa0 , 0x2f , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,2f,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action hdcs2020b_60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-07-21 12:42:17 +04:00
{ 0xaa , 0x13 , 0x0031 } , /* 00,13,31,aa */
{ 0xaa , 0x14 , 0x0001 } , /* 00,14,01,aa */
{ 0xaa , 0x0e , 0x0004 } , /* 00,0e,04,aa */
{ 0xaa , 0x19 , 0x00cd } , /* 00,19,cd,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,02,cc */
{ 0xa0 , 0x62 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,62,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x3d , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,3d,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x0c , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,0c,cc */
{ 0xa0 , 0x28 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,28,cc */
{ 0xa0 , 0x04 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,04,cc */
{ 0xa0 , 0x18 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,18,cc */
{ 0xa0 , 0x2c , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,2c,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action hdcs2020b_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-07-21 12:42:17 +04:00
{ 0xaa , 0x13 , 0x0010 } , /* 00,13,10,aa */
{ 0xaa , 0x14 , 0x0001 } , /* 00,14,01,aa */
{ 0xaa , 0x0e , 0x0004 } , /* 00,0e,04,aa */
{ 0xaa , 0x19 , 0x0000 } , /* 00,19,00,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,02,cc */
{ 0xa0 , 0x70 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,70,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,04,cc */
{ 0xa0 , 0x17 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,17,cc */
{ 0xa0 , 0x2a , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,2a,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action hv7131b_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00 */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x30 , 0x002d } ,
{ 0xaa , 0x01 , 0x0005 } ,
{ 0xaa , 0x11 , 0x0000 } ,
{ 0xaa , 0x13 , 0x0001 } , /* {0xaa, 0x13, 0x0000}, */
{ 0xaa , 0x14 , 0x0001 } ,
{ 0xaa , 0x15 , 0x00e8 } ,
{ 0xaa , 0x16 , 0x0002 } ,
2008-11-06 21:29:47 +03:00
{ 0xaa , 0x17 , 0x0086 } , /* 00,17,88,aa */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x31 , 0x0038 } ,
{ 0xaa , 0x32 , 0x0038 } ,
{ 0xaa , 0x33 , 0x0038 } ,
{ 0xaa , 0x5b , 0x0001 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x68 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
{ 0xa0 , 0xc0 , 0x019b } ,
{ 0xa0 , 0xa0 , 0x019c } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R188_MINGAIN } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-11-06 21:29:47 +03:00
{ 0xaa , 0x02 , 0x0090 } , /* 00,02,80,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action hv7131b_Initial [ ] = { /* 640x480*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00 */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x30 , 0x002d } ,
{ 0xaa , 0x01 , 0x0005 } ,
{ 0xaa , 0x11 , 0x0001 } ,
{ 0xaa , 0x13 , 0x0000 } , /* {0xaa, 0x13, 0x0001}; */
{ 0xaa , 0x14 , 0x0001 } ,
{ 0xaa , 0x15 , 0x00e6 } ,
{ 0xaa , 0x16 , 0x0002 } ,
{ 0xaa , 0x17 , 0x0086 } ,
{ 0xaa , 0x31 , 0x0038 } ,
{ 0xaa , 0x32 , 0x0038 } ,
{ 0xaa , 0x33 , 0x0038 } ,
{ 0xaa , 0x5b , 0x0001 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
{ 0xa0 , 0xc0 , 0x019b } ,
{ 0xa0 , 0xa0 , 0x019c } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R188_MINGAIN } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x02 , 0x0090 } , /* {0xaa, 0x02, 0x0080}, */
2008-11-06 21:35:21 +03:00
{ }
} ;
static const struct usb_action hv7131b_50HZ [ ] = { /* 640x480*/
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xaa , 0x25 , 0x0007 } , /* 00,25,07,aa */
{ 0xaa , 0x26 , 0x0053 } , /* 00,26,53,aa */
{ 0xaa , 0x27 , 0x0000 } , /* 00,27,00,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x21 , 0x0050 } , /* 00,21,50,aa */
{ 0xaa , 0x22 , 0x001b } , /* 00,22,1b,aa */
{ 0xaa , 0x23 , 0x00fc } , /* 00,23,fc,aa */
2008-12-08 12:25:40 +03:00
{ 0xa0 , 0x2f , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,2f,cc */
{ 0xa0 , 0x9b , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,9b,cc */
{ 0xa0 , 0x80 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,80,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0xea , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,ea,cc */
{ 0xa0 , 0x60 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,60,cc */
2008-11-06 21:35:21 +03:00
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0c,cc */
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,18,cc */
{ 0xa0 , 0x18 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,18,cc */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,00,cc */
{ 0xa0 , 0x50 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,50,cc */
{ 0xa0 , 0x1b , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,1b,cc */
{ 0xa0 , 0xfc , ZC3XX_R020_HSYNC_3 } , /* 00,20,fc,cc */
{ }
} ;
static const struct usb_action hv7131b_50HZScale [ ] = { /* 320x240 */
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xaa , 0x25 , 0x0007 } , /* 00,25,07,aa */
{ 0xaa , 0x26 , 0x0053 } , /* 00,26,53,aa */
{ 0xaa , 0x27 , 0x0000 } , /* 00,27,00,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x21 , 0x0050 } , /* 00,21,50,aa */
{ 0xaa , 0x22 , 0x0012 } , /* 00,22,12,aa */
{ 0xaa , 0x23 , 0x0080 } , /* 00,23,80,aa */
2008-12-08 12:25:40 +03:00
{ 0xa0 , 0x2f , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,2f,cc */
{ 0xa0 , 0x9b , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,9b,cc */
{ 0xa0 , 0x80 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,01,cc */
{ 0xa0 , 0xd4 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,d4,cc */
{ 0xa0 , 0xc0 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,c0,cc */
2008-11-06 21:35:21 +03:00
{ 0xa0 , 0x07 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,07,cc */
{ 0xa0 , 0x0f , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,0f,cc */
{ 0xa0 , 0x18 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,18,cc */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,00,cc */
{ 0xa0 , 0x50 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,50,cc */
{ 0xa0 , 0x12 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,12,cc */
{ 0xa0 , 0x80 , ZC3XX_R020_HSYNC_3 } , /* 00,20,80,cc */
{ }
} ;
static const struct usb_action hv7131b_60HZ [ ] = { /* 640x480*/
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xaa , 0x25 , 0x0007 } , /* 00,25,07,aa */
{ 0xaa , 0x26 , 0x00a1 } , /* 00,26,a1,aa */
{ 0xaa , 0x27 , 0x0020 } , /* 00,27,20,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x21 , 0x0040 } , /* 00,21,40,aa */
{ 0xaa , 0x22 , 0x0013 } , /* 00,22,13,aa */
{ 0xaa , 0x23 , 0x004c } , /* 00,23,4c,aa */
2008-12-08 12:25:40 +03:00
{ 0xa0 , 0x2f , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,2f,cc */
{ 0xa0 , 0x4d , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,4d,cc */
{ 0xa0 , 0x60 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,60,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0xc3 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,c3,cc */
{ 0xa0 , 0x50 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,50,cc */
2008-11-06 21:35:21 +03:00
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0c,cc */
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,18,cc */
{ 0xa0 , 0x18 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,18,cc */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,00,cc */
{ 0xa0 , 0x40 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,40,cc */
{ 0xa0 , 0x13 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,13,cc */
{ 0xa0 , 0x4c , ZC3XX_R020_HSYNC_3 } , /* 00,20,4c,cc */
{ }
} ;
static const struct usb_action hv7131b_60HZScale [ ] = { /* 320x240 */
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xaa , 0x25 , 0x0007 } , /* 00,25,07,aa */
{ 0xaa , 0x26 , 0x00a1 } , /* 00,26,a1,aa */
{ 0xaa , 0x27 , 0x0020 } , /* 00,27,20,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x21 , 0x00a0 } , /* 00,21,a0,aa */
{ 0xaa , 0x22 , 0x0016 } , /* 00,22,16,aa */
{ 0xaa , 0x23 , 0x0040 } , /* 00,23,40,aa */
2008-12-08 12:25:40 +03:00
{ 0xa0 , 0x2f , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,2f,cc */
{ 0xa0 , 0x4d , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,4d,cc */
{ 0xa0 , 0x60 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,60,cc */
{ 0xa0 , 0x01 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,01,cc */
{ 0xa0 , 0x86 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,86,cc */
{ 0xa0 , 0xa0 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,a0,cc */
2008-11-06 21:35:21 +03:00
{ 0xa0 , 0x07 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,07,cc */
{ 0xa0 , 0x0f , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,0f,cc */
{ 0xa0 , 0x18 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,18,cc */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,00,cc */
{ 0xa0 , 0xa0 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,a0,cc */
{ 0xa0 , 0x16 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,16,cc */
{ 0xa0 , 0x40 , ZC3XX_R020_HSYNC_3 } , /* 00,20,40,cc */
{ }
} ;
static const struct usb_action hv7131b_NoFliker [ ] = { /* 640x480*/
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xaa , 0x25 , 0x0003 } , /* 00,25,03,aa */
{ 0xaa , 0x26 , 0x0000 } , /* 00,26,00,aa */
{ 0xaa , 0x27 , 0x0000 } , /* 00,27,00,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x21 , 0x0010 } , /* 00,21,10,aa */
{ 0xaa , 0x22 , 0x0000 } , /* 00,22,00,aa */
{ 0xaa , 0x23 , 0x0003 } , /* 00,23,03,aa */
2008-12-08 12:25:40 +03:00
{ 0xa0 , 0x2f , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,2f,cc */
{ 0xa0 , 0xf8 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,f8,cc */
{ 0xa0 , 0x00 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,02,cc */
{ 0xa0 , 0x00 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,00,cc */
2008-11-06 21:35:21 +03:00
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,00,cc */
{ 0xa0 , 0x10 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,10,cc */
{ 0xa0 , 0x00 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,00,cc */
{ 0xa0 , 0x03 , ZC3XX_R020_HSYNC_3 } , /* 00,20,03,cc */
{ }
} ;
static const struct usb_action hv7131b_NoFlikerScale [ ] = { /* 320x240 */
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xaa , 0x25 , 0x0003 } , /* 00,25,03,aa */
{ 0xaa , 0x26 , 0x0000 } , /* 00,26,00,aa */
{ 0xaa , 0x27 , 0x0000 } , /* 00,27,00,aa */
{ 0xaa , 0x20 , 0x0000 } , /* 00,20,00,aa */
{ 0xaa , 0x21 , 0x00a0 } , /* 00,21,a0,aa */
{ 0xaa , 0x22 , 0x0016 } , /* 00,22,16,aa */
{ 0xaa , 0x23 , 0x0040 } , /* 00,23,40,aa */
2008-12-08 12:25:40 +03:00
{ 0xa0 , 0x2f , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,2f,cc */
{ 0xa0 , 0xf8 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,f8,cc */
{ 0xa0 , 0x00 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,02,cc */
{ 0xa0 , 0x00 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,00,cc */
2008-11-06 21:35:21 +03:00
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,00,cc */
{ 0xa0 , 0xa0 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,a0,cc */
{ 0xa0 , 0x16 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,16,cc */
{ 0xa0 , 0x40 , ZC3XX_R020_HSYNC_3 } , /* 00,20,40,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action hv7131r_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x000c } ,
{ 0xaa , 0x11 , 0x0000 } ,
{ 0xaa , 0x13 , 0x0000 } ,
{ 0xaa , 0x14 , 0x0001 } ,
{ 0xaa , 0x15 , 0x00e8 } ,
{ 0xaa , 0x16 , 0x0002 } ,
{ 0xaa , 0x17 , 0x0088 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x89 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x50 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
{ 0xa0 , 0xc0 , 0x019b } ,
{ 0xa0 , 0xa0 , 0x019c } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0002 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R090_I2CCOMMAND } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0091 } ,
{ 0xa1 , 0x01 , 0x0095 } ,
{ 0xa1 , 0x01 , 0x0096 } ,
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x60 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf0 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf0 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf0 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x60 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf0 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf0 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf0 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x60 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x25 , 0x0007 } ,
{ 0xaa , 0x26 , 0x0053 } ,
{ 0xaa , 0x27 , 0x0000 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 2f */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 9b */
{ 0xa0 , 0x60 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 80 */
{ 0xa0 , 0x01 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0xd4 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0xc0 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x13 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x001d } ,
{ 0xa1 , 0x01 , 0x001e } ,
{ 0xa1 , 0x01 , 0x001f } ,
{ 0xa1 , 0x01 , 0x0020 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action hv7131r_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } , /* diff */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 1e0 */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x000c } ,
{ 0xaa , 0x11 , 0x0000 } ,
{ 0xaa , 0x13 , 0x0000 } ,
{ 0xaa , 0x14 , 0x0001 } ,
{ 0xaa , 0x15 , 0x00e8 } ,
{ 0xaa , 0x16 , 0x0002 } ,
{ 0xaa , 0x17 , 0x0088 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00 */
2008-06-12 17:58:58 +04:00
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x89 , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x50 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
{ 0xa0 , 0xc0 , 0x019b } ,
{ 0xa0 , 0xa0 , 0x019c } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0002 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R092_I2CADDRESSSELECT } ,
/* read the i2c chips ident */
{ 0xa0 , 0x02 , ZC3XX_R090_I2CCOMMAND } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0091 } ,
{ 0xa1 , 0x01 , 0x0095 } ,
{ 0xa1 , 0x01 , 0x0096 } ,
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x60 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf0 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf0 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf0 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x60 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf0 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf0 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf0 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x60 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x25 , 0x0007 } ,
{ 0xaa , 0x26 , 0x0053 } ,
{ 0xaa , 0x27 , 0x0000 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 2f */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 9b */
{ 0xa0 , 0x60 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 80 */
2008-06-12 17:58:58 +04:00
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0xd4 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0xc0 , ZC3XX_R197_ANTIFLICKERLOW } ,
2008-06-12 17:58:58 +04:00
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x13 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x001d } ,
{ 0xa1 , 0x01 , 0x001e } ,
{ 0xa1 , 0x01 , 0x001f } ,
{ 0xa1 , 0x01 , 0x0020 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x0c , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0xa1 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x00 , ZC3XX_R097_WINYSTARTHIGH } ,
{ 0xa0 , 0x01 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R099_WINXSTARTHIGH } ,
{ 0xa0 , 0x01 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0010 } ,
{ 0xaa , 0x03 , 0x0000 } ,
{ 0xaa , 0x04 , 0x0001 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0001 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0001 } ,
{ 0xaa , 0x04 , 0x0011 } ,
{ 0xaa , 0x05 , 0x00a0 } ,
{ 0xaa , 0x06 , 0x0001 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0002 } ,
{ 0xaa , 0x04 , 0x0013 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0001 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0003 } ,
{ 0xaa , 0x04 , 0x0015 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0004 } ,
{ 0xaa , 0x04 , 0x0017 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x000d } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0005 } ,
{ 0xaa , 0x04 , 0x0019 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0006 } ,
{ 0xaa , 0x04 , 0x0017 } ,
{ 0xaa , 0x05 , 0x0026 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0007 } ,
{ 0xaa , 0x04 , 0x0019 } ,
{ 0xaa , 0x05 , 0x0022 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0008 } ,
{ 0xaa , 0x04 , 0x0021 } ,
{ 0xaa , 0x05 , 0x00aa } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0009 } ,
{ 0xaa , 0x04 , 0x0023 } ,
{ 0xaa , 0x05 , 0x00aa } ,
{ 0xaa , 0x06 , 0x000d } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x000a } ,
{ 0xaa , 0x04 , 0x0025 } ,
{ 0xaa , 0x05 , 0x00aa } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x000b } ,
{ 0xaa , 0x04 , 0x00ec } ,
{ 0xaa , 0x05 , 0x002e } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x000c } ,
{ 0xaa , 0x04 , 0x00fa } ,
{ 0xaa , 0x05 , 0x002a } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x07 , 0x000d } ,
{ 0xaa , 0x01 , 0x0005 } ,
{ 0xaa , 0x94 , 0x0002 } ,
{ 0xaa , 0x90 , 0x0000 } ,
{ 0xaa , 0x91 , 0x001f } ,
{ 0xaa , 0x10 , 0x0064 } ,
{ 0xaa , 0x9b , 0x00f0 } ,
{ 0xaa , 0x9c , 0x0002 } ,
{ 0xaa , 0x14 , 0x001a } ,
{ 0xaa , 0x20 , 0x0080 } ,
{ 0xaa , 0x22 , 0x0080 } ,
{ 0xaa , 0x24 , 0x0080 } ,
{ 0xaa , 0x26 , 0x0080 } ,
{ 0xaa , 0x00 , 0x0084 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa8 , 0x00c0 } ,
{ 0xa1 , 0x01 , 0x0002 } ,
{ 0xa1 , 0x01 , 0x0008 } ,
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x52 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf7 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x52 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf7 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf7 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x52 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } ,
{ 0xaa , 0x0c , 0x008c } ,
{ 0xaa , 0x0e , 0x0095 } ,
{ 0xaa , 0x0f , 0x0002 } ,
{ 0xaa , 0x1c , 0x0094 } ,
{ 0xaa , 0x1d , 0x0002 } ,
{ 0xaa , 0x20 , 0x0080 } ,
{ 0xaa , 0x22 , 0x0080 } ,
{ 0xaa , 0x24 , 0x0080 } ,
{ 0xaa , 0x26 , 0x0080 } ,
{ 0xaa , 0x00 , 0x0084 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } ,
{ 0xa0 , 0x94 , ZC3XX_R0A4_EXPOSURETIMELOW } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x20 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x84 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x12 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xe3 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xec , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf5 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0xc0 , ZC3XX_R1A8_DIGITALGAIN } ,
{ 0xa0 , 0xc0 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x0c , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0xa1 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x00 , ZC3XX_R097_WINYSTARTHIGH } ,
{ 0xa0 , 0x02 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R099_WINXSTARTHIGH } ,
{ 0xa0 , 0x02 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } ,
{ 0xa0 , 0xe6 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } ,
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0010 } ,
{ 0xaa , 0x03 , 0x0000 } ,
{ 0xaa , 0x04 , 0x0001 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0001 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0001 } ,
{ 0xaa , 0x04 , 0x0011 } ,
{ 0xaa , 0x05 , 0x00a0 } ,
{ 0xaa , 0x06 , 0x0001 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0002 } ,
{ 0xaa , 0x04 , 0x0013 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0001 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0003 } ,
{ 0xaa , 0x04 , 0x0015 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0004 } ,
{ 0xaa , 0x04 , 0x0017 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x000d } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0005 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x04 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x19 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0091 } ,
{ 0xaa , 0x05 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0006 } ,
{ 0xaa , 0x04 , 0x0017 } ,
{ 0xaa , 0x05 , 0x0026 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0007 } ,
{ 0xaa , 0x04 , 0x0019 } ,
{ 0xaa , 0x05 , 0x0022 } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0008 } ,
{ 0xaa , 0x04 , 0x0021 } ,
{ 0xaa , 0x05 , 0x00aa } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x0009 } ,
{ 0xaa , 0x04 , 0x0023 } ,
{ 0xaa , 0x05 , 0x00aa } ,
{ 0xaa , 0x06 , 0x000d } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x000a } ,
{ 0xaa , 0x04 , 0x0025 } ,
{ 0xaa , 0x05 , 0x00aa } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x000b } ,
{ 0xaa , 0x04 , 0x00ec } ,
{ 0xaa , 0x05 , 0x002e } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x03 , 0x000c } ,
{ 0xaa , 0x04 , 0x00fa } ,
{ 0xaa , 0x05 , 0x002a } ,
{ 0xaa , 0x06 , 0x0005 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x07 , 0x000d } ,
{ 0xaa , 0x01 , 0x0005 } ,
{ 0xaa , 0x94 , 0x0002 } ,
{ 0xaa , 0x90 , 0x0000 } ,
{ 0xaa , 0x91 , 0x0010 } ,
{ 0xaa , 0x10 , 0x0064 } ,
{ 0xaa , 0x9b , 0x00f0 } ,
{ 0xaa , 0x9c , 0x0002 } ,
{ 0xaa , 0x14 , 0x001a } ,
{ 0xaa , 0x20 , 0x0080 } ,
{ 0xaa , 0x22 , 0x0080 } ,
{ 0xaa , 0x24 , 0x0080 } ,
{ 0xaa , 0x26 , 0x0080 } ,
{ 0xaa , 0x00 , 0x0084 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa8 , 0x0080 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0002 } ,
{ 0xa1 , 0x01 , 0x0008 } ,
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x52 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf7 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x52 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf7 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf7 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x52 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } ,
{ 0xaa , 0x0c , 0x0020 } ,
{ 0xaa , 0x0e , 0x000e } ,
{ 0xaa , 0x0f , 0x0002 } ,
{ 0xaa , 0x1c , 0x000d } ,
{ 0xaa , 0x1d , 0x0002 } ,
{ 0xaa , 0x20 , 0x0080 } ,
{ 0xaa , 0x22 , 0x0080 } ,
{ 0xaa , 0x24 , 0x0080 } ,
{ 0xaa , 0x26 , 0x0080 } ,
{ 0xaa , 0x00 , 0x0084 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } ,
{ 0xa0 , 0x0d , ZC3XX_R0A4_EXPOSURETIMELOW } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x1a , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x4b , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x12 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xc8 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xd8 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xea , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_50HZScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } , /* 00,0d,03,aa */
{ 0xaa , 0x0c , 0x0020 } , /* 00,0c,20,aa */
{ 0xaa , 0x0e , 0x000e } , /* 00,0e,0e,aa */
{ 0xaa , 0x0f , 0x0002 } , /* 00,0f,02,aa */
{ 0xaa , 0x1c , 0x000d } , /* 00,1c,0d,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x20 , 0x0080 } , /* 00,20,80,aa */
{ 0xaa , 0x22 , 0x0080 } , /* 00,22,80,aa */
{ 0xaa , 0x24 , 0x0080 } , /* 00,24,80,aa */
{ 0xaa , 0x26 , 0x0080 } , /* 00,26,80,aa */
{ 0xaa , 0x00 , 0x0084 } , /* 00,00,84,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,02,cc */
{ 0xa0 , 0x0d , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,0d,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x1a , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,1a,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x4b , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,4b,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x12 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,12,cc */
{ 0xa0 , 0xc8 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,c8,cc */
{ 0xa0 , 0xd8 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d8,cc */
{ 0xa0 , 0xea , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,ea,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_50HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } , /* 00,0d,03,aa */
{ 0xaa , 0x0c , 0x008c } , /* 00,0c,8c,aa */
{ 0xaa , 0x0e , 0x0095 } , /* 00,0e,95,aa */
{ 0xaa , 0x0f , 0x0002 } , /* 00,0f,02,aa */
{ 0xaa , 0x1c , 0x0094 } , /* 00,1c,94,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x20 , 0x0080 } , /* 00,20,80,aa */
{ 0xaa , 0x22 , 0x0080 } , /* 00,22,80,aa */
{ 0xaa , 0x24 , 0x0080 } , /* 00,24,80,aa */
{ 0xaa , 0x26 , 0x0080 } , /* 00,26,80,aa */
{ 0xaa , 0x00 , 0x0084 } , /* 00,00,84,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,02,cc */
{ 0xa0 , 0x94 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,94,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x20 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x84 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,84,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x12 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,12,cc */
{ 0xa0 , 0xe3 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,e3,cc */
{ 0xa0 , 0xec , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,ec,cc */
{ 0xa0 , 0xf5 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,f5,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } , /* 01,a7,00,cc */
{ 0xa0 , 0xc0 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,c0,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_60HZScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } , /* 00,0d,03,aa */
{ 0xaa , 0x0c , 0x0004 } , /* 00,0c,04,aa */
{ 0xaa , 0x0e , 0x000d } , /* 00,0e,0d,aa */
{ 0xaa , 0x0f , 0x0002 } , /* 00,0f,02,aa */
{ 0xaa , 0x1c , 0x0008 } , /* 00,1c,08,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x20 , 0x0080 } , /* 00,20,80,aa */
{ 0xaa , 0x22 , 0x0080 } , /* 00,22,80,aa */
{ 0xaa , 0x24 , 0x0080 } , /* 00,24,80,aa */
{ 0xaa , 0x26 , 0x0080 } , /* 00,26,80,aa */
{ 0xaa , 0x00 , 0x0084 } , /* 00,00,84,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,02,cc */
{ 0xa0 , 0x08 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,08,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x10 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,10,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x41 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,41,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x12 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,12,cc */
{ 0xa0 , 0xc1 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,c1,cc */
{ 0xa0 , 0xd4 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d4,cc */
{ 0xa0 , 0xe8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } , /* 00,0d,03,aa */
{ 0xaa , 0x0c , 0x0008 } , /* 00,0c,08,aa */
{ 0xaa , 0x0e , 0x0086 } , /* 00,0e,86,aa */
{ 0xaa , 0x0f , 0x0002 } , /* 00,0f,02,aa */
{ 0xaa , 0x1c , 0x0085 } , /* 00,1c,85,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x20 , 0x0080 } , /* 00,20,80,aa */
{ 0xaa , 0x22 , 0x0080 } , /* 00,22,80,aa */
{ 0xaa , 0x24 , 0x0080 } , /* 00,24,80,aa */
{ 0xaa , 0x26 , 0x0080 } , /* 00,26,80,aa */
{ 0xaa , 0x00 , 0x0084 } , /* 00,00,84,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,02,cc */
{ 0xa0 , 0x85 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,85,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x08 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,08,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x81 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,81,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x12 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,12,cc */
{ 0xa0 , 0xc2 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,c2,cc */
{ 0xa0 , 0xd6 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d6,cc */
{ 0xa0 , 0xea , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,ea,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } , /* 01,a7,00,cc */
{ 0xa0 , 0xc0 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,c0,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_NoFlikerScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } , /* 00,0d,03,aa */
{ 0xaa , 0x0c , 0x0004 } , /* 00,0c,04,aa */
{ 0xaa , 0x0e , 0x000d } , /* 00,0e,0d,aa */
{ 0xaa , 0x0f , 0x0002 } , /* 00,0f,02,aa */
{ 0xaa , 0x1c , 0x0000 } , /* 00,1c,00,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x20 , 0x0080 } , /* 00,20,80,aa */
{ 0xaa , 0x22 , 0x0080 } , /* 00,22,80,aa */
{ 0xaa , 0x24 , 0x0080 } , /* 00,24,80,aa */
{ 0xaa , 0x26 , 0x0080 } , /* 00,26,80,aa */
{ 0xaa , 0x00 , 0x0084 } , /* 00,00,84,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,02,cc */
{ 0xa0 , 0x00 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x20 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0xc1 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,c1,cc */
{ 0xa0 , 0xd4 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d4,cc */
{ 0xa0 , 0xe8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action icm105a_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x0d , 0x0003 } , /* 00,0d,03,aa */
{ 0xaa , 0x0c , 0x0004 } , /* 00,0c,04,aa */
{ 0xaa , 0x0e , 0x0081 } , /* 00,0e,81,aa */
{ 0xaa , 0x0f , 0x0002 } , /* 00,0f,02,aa */
{ 0xaa , 0x1c , 0x0080 } , /* 00,1c,80,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x20 , 0x0080 } , /* 00,20,80,aa */
{ 0xaa , 0x22 , 0x0080 } , /* 00,22,80,aa */
{ 0xaa , 0x24 , 0x0080 } , /* 00,24,80,aa */
{ 0xaa , 0x26 , 0x0080 } , /* 00,26,80,aa */
{ 0xaa , 0x00 , 0x0084 } , /* 00,00,84,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,80,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x20 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0xc1 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,c1,cc */
{ 0xa0 , 0xd4 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d4,cc */
{ 0xa0 , 0xe8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A7_CALCGLOBALMEAN } , /* 01,a7,00,cc */
{ 0xa0 , 0xc0 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,c0,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,00,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xd8 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,d8,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } , /* 00,9b,01,cc */
{ 0xa0 , 0xde , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,de,cc */
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } , /* 00,9d,02,cc */
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc */
{ 0xa0 , 0x33 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,33,cc */
{ 0xa0 , 0x34 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,34,cc */
{ 0xa0 , 0x35 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,35,cc */
{ 0xa0 , 0xb0 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,b0,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0001 } , /* 00,01,01,aa */
{ 0xaa , 0x01 , 0x0003 } , /* 00,01,03,aa */
{ 0xaa , 0x01 , 0x0001 } , /* 00,01,01,aa */
{ 0xaa , 0x03 , 0x0000 } , /* 00,03,00,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x11 , 0x0080 } , /* 00,11,80,aa */
{ 0xaa , 0x12 , 0x0000 } , /* 00,12,00,aa */
{ 0xaa , 0x13 , 0x0000 } , /* 00,13,00,aa */
{ 0xaa , 0x14 , 0x0000 } , /* 00,14,00,aa */
{ 0xaa , 0x15 , 0x0000 } , /* 00,15,00,aa */
{ 0xaa , 0x16 , 0x0000 } , /* 00,16,00,aa */
{ 0xaa , 0x17 , 0x0001 } , /* 00,17,01,aa */
{ 0xaa , 0x18 , 0x00de } , /* 00,18,de,aa */
{ 0xaa , 0x19 , 0x0002 } , /* 00,19,02,aa */
{ 0xaa , 0x1a , 0x0086 } , /* 00,1a,86,aa */
{ 0xaa , 0x20 , 0x00a8 } , /* 00,20,a8,aa */
{ 0xaa , 0x22 , 0x0000 } , /* 00,22,00,aa */
{ 0xaa , 0x23 , 0x0000 } , /* 00,23,00,aa */
{ 0xaa , 0x24 , 0x0000 } , /* 00,24,00,aa */
{ 0xaa , 0x40 , 0x0033 } , /* 00,40,33,aa */
{ 0xaa , 0x41 , 0x0077 } , /* 00,41,77,aa */
{ 0xaa , 0x42 , 0x0053 } , /* 00,42,53,aa */
{ 0xaa , 0x43 , 0x00b0 } , /* 00,43,b0,aa */
{ 0xaa , 0x4b , 0x0001 } , /* 00,4b,01,aa */
{ 0xaa , 0x72 , 0x0020 } , /* 00,72,20,aa */
{ 0xaa , 0x73 , 0x0000 } , /* 00,73,00,aa */
{ 0xaa , 0x80 , 0x0000 } , /* 00,80,00,aa */
{ 0xaa , 0x85 , 0x0050 } , /* 00,85,50,aa */
{ 0xaa , 0x91 , 0x0070 } , /* 00,91,70,aa */
{ 0xaa , 0x92 , 0x0072 } , /* 00,92,72,aa */
{ 0xaa , 0x03 , 0x0001 } , /* 00,03,01,aa */
{ 0xaa , 0x10 , 0x00a0 } , /* 00,10,a0,aa */
{ 0xaa , 0x11 , 0x0001 } , /* 00,11,01,aa */
{ 0xaa , 0x30 , 0x0000 } , /* 00,30,00,aa */
{ 0xaa , 0x60 , 0x0000 } , /* 00,60,00,aa */
2008-07-15 21:23:08 +04:00
{ 0xaa , 0xa0 , ZC3XX_R01A_LASTFRAMESTATE } , /* 00,a0,1a,aa */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa1 , 0x0000 } , /* 00,a1,00,aa */
{ 0xaa , 0xa2 , 0x003f } , /* 00,a2,3f,aa */
{ 0xaa , 0xa3 , 0x0028 } , /* 00,a3,28,aa */
{ 0xaa , 0xa4 , 0x0010 } , /* 00,a4,10,aa */
{ 0xaa , 0xa5 , 0x0020 } , /* 00,a5,20,aa */
{ 0xaa , 0xb1 , 0x0044 } , /* 00,b1,44,aa */
{ 0xaa , 0xd0 , 0x0001 } , /* 00,d0,01,aa */
{ 0xaa , 0xd1 , 0x0085 } , /* 00,d1,85,aa */
{ 0xaa , 0xd2 , 0x0080 } , /* 00,d2,80,aa */
{ 0xaa , 0xd3 , 0x0080 } , /* 00,d3,80,aa */
{ 0xaa , 0xd4 , 0x0080 } , /* 00,d4,80,aa */
{ 0xaa , 0xd5 , 0x0080 } , /* 00,d5,80,aa */
{ 0xaa , 0xc0 , 0x00c3 } , /* 00,c0,c3,aa */
{ 0xaa , 0xc2 , 0x0044 } , /* 00,c2,44,aa */
{ 0xaa , 0xc4 , 0x0040 } , /* 00,c4,40,aa */
{ 0xaa , 0xc5 , 0x0020 } , /* 00,c5,20,aa */
{ 0xaa , 0xc6 , 0x0008 } , /* 00,c6,08,aa */
{ 0xaa , 0x03 , 0x0004 } , /* 00,03,04,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x40 , 0x0030 } , /* 00,40,30,aa */
{ 0xaa , 0x41 , 0x0020 } , /* 00,41,20,aa */
{ 0xaa , 0x42 , 0x002d } , /* 00,42,2d,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x1c , 0x0050 } , /* 00,1C,50,aa */
{ 0xaa , 0x11 , 0x0081 } , /* 00,11,81,aa */
{ 0xaa , 0x3b , 0x001d } , /* 00,3b,1D,aa */
{ 0xaa , 0x3c , 0x004c } , /* 00,3c,4C,aa */
{ 0xaa , 0x3d , 0x0018 } , /* 00,3d,18,aa */
{ 0xaa , 0x3e , 0x006a } , /* 00,3e,6A,aa */
{ 0xaa , 0x01 , 0x0000 } , /* 00,01,00,aa */
{ 0xaa , 0x52 , 0x00ff } , /* 00,52,FF,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,37,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0002 } , /* 00,03,02,aa */
{ 0xaa , 0x51 , 0x0027 } , /* 00,51,27,aa */
{ 0xaa , 0x52 , 0x0020 } , /* 00,52,20,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x50 , 0x0010 } , /* 00,50,10,aa */
{ 0xaa , 0x51 , 0x0010 } , /* 00,51,10,aa */
{ 0xaa , 0x54 , 0x0010 } , /* 00,54,10,aa */
{ 0xaa , 0x55 , 0x0010 } , /* 00,55,10,aa */
{ 0xa0 , 0xf0 , 0x0199 } , /* 01,99,F0,cc */
{ 0xa0 , 0x80 , 0x019a } , /* 01,9A,80,cc */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x001d } , /* 00,36,1D,aa */
{ 0xaa , 0x37 , 0x004c } , /* 00,37,4C,aa */
{ 0xaa , 0x3b , 0x001d } , /* 00,3B,1D,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,10,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xd0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,d0,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } , /* 00,9b,01,cc */
{ 0xa0 , 0xd8 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,d8,cc */
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } , /* 00,9d,02,cc */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc */
{ 0xa0 , 0x33 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,33,cc */
{ 0xa0 , 0x34 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,34,cc */
{ 0xa0 , 0x35 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,35,cc */
{ 0xa0 , 0xb0 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,b0,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0001 } , /* 00,01,01,aa */
{ 0xaa , 0x01 , 0x0003 } , /* 00,01,03,aa */
{ 0xaa , 0x01 , 0x0001 } , /* 00,01,01,aa */
{ 0xaa , 0x03 , 0x0000 } , /* 00,03,00,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x11 , 0x0080 } , /* 00,11,80,aa */
{ 0xaa , 0x12 , 0x0000 } , /* 00,12,00,aa */
{ 0xaa , 0x13 , 0x0000 } , /* 00,13,00,aa */
{ 0xaa , 0x14 , 0x0000 } , /* 00,14,00,aa */
{ 0xaa , 0x15 , 0x0000 } , /* 00,15,00,aa */
{ 0xaa , 0x16 , 0x0000 } , /* 00,16,00,aa */
{ 0xaa , 0x17 , 0x0001 } , /* 00,17,01,aa */
{ 0xaa , 0x18 , 0x00d8 } , /* 00,18,d8,aa */
{ 0xaa , 0x19 , 0x0002 } , /* 00,19,02,aa */
{ 0xaa , 0x1a , 0x0088 } , /* 00,1a,88,aa */
{ 0xaa , 0x20 , 0x00a8 } , /* 00,20,a8,aa */
{ 0xaa , 0x22 , 0x0000 } , /* 00,22,00,aa */
{ 0xaa , 0x23 , 0x0000 } , /* 00,23,00,aa */
{ 0xaa , 0x24 , 0x0000 } , /* 00,24,00,aa */
{ 0xaa , 0x40 , 0x0033 } , /* 00,40,33,aa */
{ 0xaa , 0x41 , 0x0077 } , /* 00,41,77,aa */
{ 0xaa , 0x42 , 0x0053 } , /* 00,42,53,aa */
{ 0xaa , 0x43 , 0x00b0 } , /* 00,43,b0,aa */
{ 0xaa , 0x4b , 0x0001 } , /* 00,4b,01,aa */
{ 0xaa , 0x72 , 0x0020 } , /* 00,72,20,aa */
{ 0xaa , 0x73 , 0x0000 } , /* 00,73,00,aa */
{ 0xaa , 0x80 , 0x0000 } , /* 00,80,00,aa */
{ 0xaa , 0x85 , 0x0050 } , /* 00,85,50,aa */
{ 0xaa , 0x91 , 0x0070 } , /* 00,91,70,aa */
{ 0xaa , 0x92 , 0x0072 } , /* 00,92,72,aa */
{ 0xaa , 0x03 , 0x0001 } , /* 00,03,01,aa */
{ 0xaa , 0x10 , 0x00a0 } , /* 00,10,a0,aa */
{ 0xaa , 0x11 , 0x0001 } , /* 00,11,01,aa */
{ 0xaa , 0x30 , 0x0000 } , /* 00,30,00,aa */
{ 0xaa , 0x60 , 0x0000 } , /* 00,60,00,aa */
2008-07-15 21:23:08 +04:00
{ 0xaa , 0xa0 , ZC3XX_R01A_LASTFRAMESTATE } , /* 00,a0,1a,aa */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa1 , 0x0000 } , /* 00,a1,00,aa */
{ 0xaa , 0xa2 , 0x003f } , /* 00,a2,3f,aa */
{ 0xaa , 0xa3 , 0x0028 } , /* 00,a3,28,aa */
{ 0xaa , 0xa4 , 0x0010 } , /* 00,a4,10,aa */
{ 0xaa , 0xa5 , 0x0020 } , /* 00,a5,20,aa */
{ 0xaa , 0xb1 , 0x0044 } , /* 00,b1,44,aa */
{ 0xaa , 0xd0 , 0x0001 } , /* 00,d0,01,aa */
{ 0xaa , 0xd1 , 0x0085 } , /* 00,d1,85,aa */
{ 0xaa , 0xd2 , 0x0080 } , /* 00,d2,80,aa */
{ 0xaa , 0xd3 , 0x0080 } , /* 00,d3,80,aa */
{ 0xaa , 0xd4 , 0x0080 } , /* 00,d4,80,aa */
{ 0xaa , 0xd5 , 0x0080 } , /* 00,d5,80,aa */
{ 0xaa , 0xc0 , 0x00c3 } , /* 00,c0,c3,aa */
{ 0xaa , 0xc2 , 0x0044 } , /* 00,c2,44,aa */
{ 0xaa , 0xc4 , 0x0040 } , /* 00,c4,40,aa */
{ 0xaa , 0xc5 , 0x0020 } , /* 00,c5,20,aa */
{ 0xaa , 0xc6 , 0x0008 } , /* 00,c6,08,aa */
{ 0xaa , 0x03 , 0x0004 } , /* 00,03,04,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x40 , 0x0030 } , /* 00,40,30,aa */
{ 0xaa , 0x41 , 0x0020 } , /* 00,41,20,aa */
{ 0xaa , 0x42 , 0x002d } , /* 00,42,2d,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x1c , 0x0050 } , /* 00,1c,50,aa */
{ 0xaa , 0x11 , 0x0081 } , /* 00,11,81,aa */
{ 0xaa , 0x3b , 0x003a } , /* 00,3b,3A,aa */
{ 0xaa , 0x3c , 0x0098 } , /* 00,3c,98,aa */
{ 0xaa , 0x3d , 0x0030 } , /* 00,3d,30,aa */
{ 0xaa , 0x3e , 0x00d4 } , /* 00,3E,D4,aa */
{ 0xaa , 0x01 , 0x0000 } , /* 00,01,00,aa */
{ 0xaa , 0x52 , 0x00ff } , /* 00,52,FF,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,37,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0002 } , /* 00,03,02,aa */
{ 0xaa , 0x51 , 0x004e } , /* 00,51,4E,aa */
{ 0xaa , 0x52 , 0x0041 } , /* 00,52,41,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x50 , 0x0010 } , /* 00,50,10,aa */
{ 0xaa , 0x51 , 0x0010 } , /* 00,51,10,aa */
{ 0xaa , 0x54 , 0x0010 } , /* 00,54,10,aa */
{ 0xaa , 0x55 , 0x0010 } , /* 00,55,10,aa */
{ 0xa0 , 0xf0 , 0x0199 } , /* 01,99,F0,cc */
{ 0xa0 , 0x80 , 0x019a } , /* 01,9A,80,cc */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x001d } , /* 00,36,1D,aa */
{ 0xaa , 0x37 , 0x004c } , /* 00,37,4C,aa */
{ 0xaa , 0x3b , 0x001d } , /* 00,3B,1D,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_50HZScale [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x001d } , /* 00,36,1D,aa */
{ 0xaa , 0x37 , 0x004c } , /* 00,37,4C,aa */
{ 0xaa , 0x3b , 0x001d } , /* 00,3B,1D,aa */
{ 0xaa , 0x3c , 0x004c } , /* 00,3C,4C,aa */
{ 0xaa , 0x3d , 0x001d } , /* 00,3D,1D,aa */
{ 0xaa , 0x3e , 0x004c } , /* 00,3E,4C,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x003a } , /* 00,36,3A,aa */
{ 0xaa , 0x37 , 0x0098 } , /* 00,37,98,aa */
{ 0xaa , 0x3b , 0x003a } , /* 00,3B,3A,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_50HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x003a } , /* 00,36,3A,aa */
{ 0xaa , 0x37 , 0x0098 } , /* 00,37,98,aa */
{ 0xaa , 0x3b , 0x003a } , /* 00,3B,3A,aa */
{ 0xaa , 0x3c , 0x0098 } , /* 00,3C,98,aa */
{ 0xaa , 0x3d , 0x003a } , /* 00,3D,3A,aa */
{ 0xaa , 0x3e , 0x0098 } , /* 00,3E,98,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0018 } , /* 00,36,18,aa */
{ 0xaa , 0x37 , 0x006a } , /* 00,37,6A,aa */
{ 0xaa , 0x3d , 0x0018 } , /* 00,3D,18,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_60HZScale [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0018 } , /* 00,36,18,aa */
{ 0xaa , 0x37 , 0x006a } , /* 00,37,6A,aa */
{ 0xaa , 0x3d , 0x0018 } , /* 00,3D,18,aa */
{ 0xaa , 0x3e , 0x006a } , /* 00,3E,6A,aa */
{ 0xaa , 0x3b , 0x0018 } , /* 00,3B,18,aa */
{ 0xaa , 0x3c , 0x006a } , /* 00,3C,6A,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0030 } , /* 00,36,30,aa */
{ 0xaa , 0x37 , 0x00d4 } , /* 00,37,D4,aa */
{ 0xaa , 0x3d , 0x0030 } , /* 00,3D,30,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_60HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0030 } , /* 00,36,30,aa */
{ 0xaa , 0x37 , 0x00d4 } , /* 00,37,D4,aa */
{ 0xaa , 0x3d , 0x0030 } , /* 00,3D,30,aa */
{ 0xaa , 0x3e , 0x00d4 } , /* 00,3E,D4,aa */
{ 0xaa , 0x3b , 0x0030 } , /* 00,3B,30,aa */
{ 0xaa , 0x3c , 0x00d4 } , /* 00,3C,D4,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0018 } , /* 00,36,18,aa */
{ 0xaa , 0x37 , 0x006a } , /* 00,37,6A,aa */
{ 0xaa , 0x3d , 0x0018 } , /* 00,3D,18,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_NoFlikerScale [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0018 } , /* 00,36,18,aa */
{ 0xaa , 0x37 , 0x006a } , /* 00,37,6A,aa */
{ 0xaa , 0x3d , 0x0018 } , /* 00,3D,18,aa */
{ 0xaa , 0x3e , 0x006a } , /* 00,3E,6A,aa */
{ 0xaa , 0x3b , 0x0018 } , /* 00,3B,18,aa */
{ 0xaa , 0x3c , 0x006a } , /* 00,3C,6A,aa */
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0030 } , /* 00,36,30,aa */
{ 0xaa , 0x37 , 0x00d4 } , /* 00,37,D4,aa */
{ 0xaa , 0x3d , 0x0030 } , /* 00,3D,30,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action mc501cb_NoFliker [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x03 , 0x0003 } , /* 00,03,03,aa */
{ 0xaa , 0x10 , 0x00fc } , /* 00,10,fc,aa */
{ 0xaa , 0x36 , 0x0030 } , /* 00,36,30,aa */
{ 0xaa , 0x37 , 0x00d4 } , /* 00,37,D4,aa */
{ 0xaa , 0x3d , 0x0030 } , /* 00,3D,30,aa */
{ 0xaa , 0x3e , 0x00d4 } , /* 00,3E,D4,aa */
{ 0xaa , 0x3b , 0x0030 } , /* 00,3B,30,aa */
{ 0xaa , 0x3c , 0x00d4 } , /* 00,3C,D4,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
/* from zs211.inf */
static const struct usb_action ov7620_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x40 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,40,cc */
{ 0xa0 , 0x00 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,00,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x06 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,06,cc */
{ 0xa0 , 0x02 , ZC3XX_R083_RGAINADDR } , /* 00,83,02,cc */
{ 0xa0 , 0x01 , ZC3XX_R085_BGAINADDR } , /* 00,85,01,cc */
{ 0xa0 , 0x80 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,80,cc */
{ 0xa0 , 0x81 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,81,cc */
{ 0xa0 , 0x10 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,10,cc */
{ 0xa0 , 0xa1 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,a1,cc */
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } , /* 00,8d,08,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xd8 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,d8,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xde , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,de,cc */
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x12 , 0x0088 } , /* 00,12,88,aa */
{ 0xaa , 0x12 , 0x0048 } , /* 00,12,48,aa */
{ 0xaa , 0x75 , 0x008a } , /* 00,75,8a,aa */
{ 0xaa , 0x13 , 0x00a3 } , /* 00,13,a3,aa */
{ 0xaa , 0x04 , 0x0000 } , /* 00,04,00,aa */
{ 0xaa , 0x05 , 0x0000 } , /* 00,05,00,aa */
{ 0xaa , 0x14 , 0x0000 } , /* 00,14,00,aa */
{ 0xaa , 0x15 , 0x0004 } , /* 00,15,04,aa */
{ 0xaa , 0x17 , 0x0018 } , /* 00,17,18,aa */
{ 0xaa , 0x18 , 0x00ba } , /* 00,18,ba,aa */
{ 0xaa , 0x19 , 0x0002 } , /* 00,19,02,aa */
{ 0xaa , 0x1a , 0x00f1 } , /* 00,1a,f1,aa */
{ 0xaa , 0x20 , 0x0040 } , /* 00,20,40,aa */
{ 0xaa , 0x24 , 0x0088 } , /* 00,24,88,aa */
{ 0xaa , 0x25 , 0x0078 } , /* 00,25,78,aa */
{ 0xaa , 0x27 , 0x00f6 } , /* 00,27,f6,aa */
{ 0xaa , 0x28 , 0x00a0 } , /* 00,28,a0,aa */
{ 0xaa , 0x21 , 0x0000 } , /* 00,21,00,aa */
{ 0xaa , 0x2a , 0x0083 } , /* 00,2a,83,aa */
{ 0xaa , 0x2b , 0x0096 } , /* 00,2b,96,aa */
{ 0xaa , 0x2d , 0x0005 } , /* 00,2d,05,aa */
{ 0xaa , 0x74 , 0x0020 } , /* 00,74,20,aa */
{ 0xaa , 0x61 , 0x0068 } , /* 00,61,68,aa */
{ 0xaa , 0x64 , 0x0088 } , /* 00,64,88,aa */
{ 0xaa , 0x00 , 0x0000 } , /* 00,00,00,aa */
{ 0xaa , 0x06 , 0x0080 } , /* 00,06,80,aa */
{ 0xaa , 0x01 , 0x0090 } , /* 00,01,90,aa */
{ 0xaa , 0x02 , 0x0030 } , /* 00,02,30,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,77,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } , /* 01,ad,00,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x68 , ZC3XX_R116_RGAIN } , /* 01,16,68,cc */
{ 0xa0 , 0x52 , ZC3XX_R118_BGAIN } , /* 01,18,52,cc */
{ 0xa0 , 0x40 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,40,cc */
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
{ 0xa0 , 0x50 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,50,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action ov7620_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x50 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,50,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,00,cc */
/* mx change? */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x06 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,06,cc */
{ 0xa0 , 0x02 , ZC3XX_R083_RGAINADDR } , /* 00,83,02,cc */
{ 0xa0 , 0x01 , ZC3XX_R085_BGAINADDR } , /* 00,85,01,cc */
{ 0xa0 , 0x80 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,80,cc */
{ 0xa0 , 0x81 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,81,cc */
{ 0xa0 , 0x10 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,10,cc */
{ 0xa0 , 0xa1 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,a1,cc */
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } , /* 00,8d,08,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xd0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,d0,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xd6 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,d6,cc */
/* OV7648 00,9c,d8,cc */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x12 , 0x0088 } , /* 00,12,88,aa */
{ 0xaa , 0x12 , 0x0048 } , /* 00,12,48,aa */
{ 0xaa , 0x75 , 0x008a } , /* 00,75,8a,aa */
{ 0xaa , 0x13 , 0x00a3 } , /* 00,13,a3,aa */
{ 0xaa , 0x04 , 0x0000 } , /* 00,04,00,aa */
{ 0xaa , 0x05 , 0x0000 } , /* 00,05,00,aa */
{ 0xaa , 0x14 , 0x0000 } , /* 00,14,00,aa */
{ 0xaa , 0x15 , 0x0004 } , /* 00,15,04,aa */
{ 0xaa , 0x24 , 0x0088 } , /* 00,24,88,aa */
{ 0xaa , 0x25 , 0x0078 } , /* 00,25,78,aa */
{ 0xaa , 0x17 , 0x0018 } , /* 00,17,18,aa */
{ 0xaa , 0x18 , 0x00ba } , /* 00,18,ba,aa */
{ 0xaa , 0x19 , 0x0002 } , /* 00,19,02,aa */
{ 0xaa , 0x1a , 0x00f2 } , /* 00,1a,f2,aa */
{ 0xaa , 0x20 , 0x0040 } , /* 00,20,40,aa */
{ 0xaa , 0x27 , 0x00f6 } , /* 00,27,f6,aa */
{ 0xaa , 0x28 , 0x00a0 } , /* 00,28,a0,aa */
{ 0xaa , 0x21 , 0x0000 } , /* 00,21,00,aa */
{ 0xaa , 0x2a , 0x0083 } , /* 00,2a,83,aa */
{ 0xaa , 0x2b , 0x0096 } , /* 00,2b,96,aa */
{ 0xaa , 0x2d , 0x0005 } , /* 00,2d,05,aa */
{ 0xaa , 0x74 , 0x0020 } , /* 00,74,20,aa */
{ 0xaa , 0x61 , 0x0068 } , /* 00,61,68,aa */
{ 0xaa , 0x64 , 0x0088 } , /* 00,64,88,aa */
{ 0xaa , 0x00 , 0x0000 } , /* 00,00,00,aa */
{ 0xaa , 0x06 , 0x0080 } , /* 00,06,80,aa */
{ 0xaa , 0x01 , 0x0090 } , /* 00,01,90,aa */
{ 0xaa , 0x02 , 0x0030 } , /* 00,02,30,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,77,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x00 , 0x01ad } , /* 01,ad,00,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x68 , ZC3XX_R116_RGAIN } , /* 01,16,68,cc */
{ 0xa0 , 0x52 , ZC3XX_R118_BGAIN } , /* 01,18,52,cc */
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,50,cc */
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
{ 0xa0 , 0x50 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,50,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action ov7620_50HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x13 , 0x00a3 } , /* 00,13,a3,aa */
{ 0xdd , 0x00 , 0x0100 } , /* 00,01,00,dd */
{ 0xaa , 0x2b , 0x0096 } , /* 00,2b,96,aa */
{ 0xaa , 0x75 , 0x008a } , /* 00,75,8a,aa */
{ 0xaa , 0x2d , 0x0005 } , /* 00,2d,05,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x18 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,18,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x83 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,83,cc */
{ 0xaa , 0x10 , 0x0082 } , /* 00,10,82,aa */
{ 0xaa , 0x76 , 0x0003 } , /* 00,76,03,aa */
/* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc
if mode0 ( 640 x480 ) */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action ov7620_60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xaa , 0x13 , 0x00a3 } , /* 00,13,a3,aa */
/* (bug in zs211.inf) */
{ 0xdd , 0x00 , 0x0100 } , /* 00,01,00,dd */
{ 0xaa , 0x2b , 0x0000 } , /* 00,2b,00,aa */
{ 0xaa , 0x75 , 0x008a } , /* 00,75,8a,aa */
{ 0xaa , 0x2d , 0x0005 } , /* 00,2d,05,aa */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x18 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,18,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x83 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,83,cc */
{ 0xaa , 0x10 , 0x0020 } , /* 00,10,20,aa */
{ 0xaa , 0x76 , 0x0003 } , /* 00,76,03,aa */
/* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc
* if mode0 ( 640 x480 ) */
2008-06-12 17:58:58 +04:00
/* ?? in gspca v1, it was
{ 0xa0 , 0x00 , 0x0039 } , * 00 , 00 , 00 , dd *
{ 0xa1 , 0x01 , 0x0037 } , */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action ov7620_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xaa , 0x13 , 0x00a3 } , /* 00,13,a3,aa */
/* (bug in zs211.inf) */
{ 0xdd , 0x00 , 0x0100 } , /* 00,01,00,dd */
{ 0xaa , 0x2b , 0x0000 } , /* 00,2b,00,aa */
{ 0xaa , 0x75 , 0x008e } , /* 00,75,8e,aa */
{ 0xaa , 0x2d , 0x0001 } , /* 00,2d,01,aa */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,04,cc */
{ 0xa0 , 0x18 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,18,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x01 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,01,cc */
/* {0xa0, 0x44, ZC3XX_R002_CLOCKSELECT}, * 00,02,44,cc
- if mode1 ( 320 x240 ) */
2008-06-12 17:58:58 +04:00
/* ?? was
{ 0xa0 , 0x00 , 0x0039 } , * 00 , 00 , 00 , dd *
{ 0xa1 , 0x01 , 0x0037 } , */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action ov7630c_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x06 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0xa1 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x12 , 0x0080 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R083_RGAINADDR } ,
{ 0xa0 , 0x01 , ZC3XX_R085_BGAINADDR } ,
{ 0xa0 , 0x90 , ZC3XX_R086_EXPTIMEHIGH } ,
{ 0xa0 , 0x91 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x10 , ZC3XX_R088_EXPTIMELOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xd8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x12 , 0x0069 } ,
{ 0xaa , 0x04 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0050 } ,
{ 0xaa , 0x13 , 0x0083 } ,
{ 0xaa , 0x14 , 0x0000 } ,
{ 0xaa , 0x15 , 0x0024 } ,
{ 0xaa , 0x17 , 0x0018 } ,
{ 0xaa , 0x18 , 0x00ba } ,
{ 0xaa , 0x19 , 0x0002 } ,
{ 0xaa , 0x1a , 0x00f6 } ,
{ 0xaa , 0x1b , 0x0002 } ,
{ 0xaa , 0x20 , 0x00c2 } ,
{ 0xaa , 0x24 , 0x0060 } ,
{ 0xaa , 0x25 , 0x0040 } ,
{ 0xaa , 0x26 , 0x0030 } ,
{ 0xaa , 0x27 , 0x00ea } ,
{ 0xaa , 0x28 , 0x00a0 } ,
{ 0xaa , 0x21 , 0x0000 } ,
{ 0xaa , 0x2a , 0x0081 } ,
{ 0xaa , 0x2b , 0x0096 } ,
{ 0xaa , 0x2d , 0x0094 } ,
{ 0xaa , 0x2f , 0x003d } ,
{ 0xaa , 0x30 , 0x0024 } ,
{ 0xaa , 0x60 , 0x0000 } ,
{ 0xaa , 0x61 , 0x0040 } ,
{ 0xaa , 0x68 , 0x007c } ,
{ 0xaa , 0x6f , 0x0015 } ,
{ 0xaa , 0x75 , 0x0088 } ,
{ 0xaa , 0x77 , 0x00b5 } ,
{ 0xaa , 0x01 , 0x0060 } ,
{ 0xaa , 0x02 , 0x0060 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x46 , ZC3XX_R118_BGAIN } ,
{ 0xa0 , 0x04 , ZC3XX_R113_RGB03 } ,
2008-06-12 17:58:58 +04:00
/* 0x10, */
{ 0xa1 , 0x01 , 0x0002 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x50 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf8 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf8 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf8 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x50 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf8 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf8 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf8 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x50 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
/* 0x03, */
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x01 , ZC3XX_R120_GAMMA00 } , /* gamma 2 ?*/
{ 0xa0 , 0x0c , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x1f , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x3a , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0x53 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0x6d , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0x85 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0x9c , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xb0 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xc2 , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xd1 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xde , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xe9 , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xf2 , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xf9 , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x05 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x0f , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x16 , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1a , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x19 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x19 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x17 , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x15 , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x12 , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x10 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x0e , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x0b , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x09 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x08 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x06 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x03 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x50 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf8 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf8 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf8 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x50 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf8 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf8 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf8 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x50 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x10 , 0x001b } ,
{ 0xaa , 0x76 , 0x0002 } ,
{ 0xaa , 0x2a , 0x0081 } ,
{ 0xaa , 0x2b , 0x0000 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x01 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xb8 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x37 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x26 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x13 , 0x0083 } , /* 40 */
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action ov7630c_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x06 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0xa1 , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x12 , 0x0080 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R083_RGAINADDR } ,
{ 0xa0 , 0x01 , ZC3XX_R085_BGAINADDR } ,
{ 0xa0 , 0x90 , ZC3XX_R086_EXPTIMEHIGH } ,
{ 0xa0 , 0x91 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x10 , ZC3XX_R088_EXPTIMELOW } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe6 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x12 , 0x0069 } , /* i2c */
{ 0xaa , 0x04 , 0x0020 } ,
{ 0xaa , 0x06 , 0x0050 } ,
{ 0xaa , 0x13 , 0x00c3 } ,
{ 0xaa , 0x14 , 0x0000 } ,
{ 0xaa , 0x15 , 0x0024 } ,
{ 0xaa , 0x19 , 0x0003 } ,
{ 0xaa , 0x1a , 0x00f6 } ,
{ 0xaa , 0x1b , 0x0002 } ,
{ 0xaa , 0x20 , 0x00c2 } ,
{ 0xaa , 0x24 , 0x0060 } ,
{ 0xaa , 0x25 , 0x0040 } ,
{ 0xaa , 0x26 , 0x0030 } ,
{ 0xaa , 0x27 , 0x00ea } ,
{ 0xaa , 0x28 , 0x00a0 } ,
{ 0xaa , 0x21 , 0x0000 } ,
{ 0xaa , 0x2a , 0x0081 } ,
{ 0xaa , 0x2b , 0x0096 } ,
{ 0xaa , 0x2d , 0x0084 } ,
{ 0xaa , 0x2f , 0x003d } ,
{ 0xaa , 0x30 , 0x0024 } ,
{ 0xaa , 0x60 , 0x0000 } ,
{ 0xaa , 0x61 , 0x0040 } ,
{ 0xaa , 0x68 , 0x007c } ,
{ 0xaa , 0x6f , 0x0015 } ,
{ 0xaa , 0x75 , 0x0088 } ,
{ 0xaa , 0x77 , 0x00b5 } ,
{ 0xaa , 0x01 , 0x0060 } ,
{ 0xaa , 0x02 , 0x0060 } ,
{ 0xaa , 0x17 , 0x0018 } ,
{ 0xaa , 0x18 , 0x00ba } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x77 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x04 , ZC3XX_R1A7_CALCGLOBALMEAN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x46 , ZC3XX_R118_BGAIN } ,
{ 0xa0 , 0x04 , ZC3XX_R113_RGB03 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0002 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x4e , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xfe , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x4d , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xfc , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0x00 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf6 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x4a , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0008 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* clock ? */
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x01c8 } ,
{ 0xa1 , 0x01 , 0x01c9 } ,
{ 0xa1 , 0x01 , 0x01ca } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x16 , ZC3XX_R120_GAMMA00 } , /* gamma ~4 */
{ 0xa0 , 0x3a , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x5b , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x7c , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0x94 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xa9 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xbb , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xca , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xd7 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xe1 , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xea , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xf1 , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xf7 , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xfc , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xff , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x20 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x22 , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x20 , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1c , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x16 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x13 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x10 , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x06 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x05 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x04 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x00 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x01 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x4e , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xfe , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf7 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x4d , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xfc , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0x00 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf6 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x4a , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x10 , 0x000d } ,
{ 0xaa , 0x76 , 0x0002 } ,
{ 0xaa , 0x2a , 0x0081 } ,
{ 0xaa , 0x2b , 0x0000 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xd8 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x1b , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x26 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x13 , 0x00c3 } ,
{ 0xa1 , 0x01 , 0x0180 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pas106b_Initial_com [ ] = {
2008-06-12 17:58:58 +04:00
/* Sream and Sensor specific */
{ 0xa1 , 0x01 , 0x0010 } , /* CMOSSensorSelect */
/* System */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* SystemControl */
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* SystemControl */
2008-06-12 17:58:58 +04:00
/* Picture size */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } , /* ClockSelect */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x03 , 0x003a } ,
{ 0xa0 , 0x0c , 0x003b } ,
{ 0xa0 , 0x04 , 0x0038 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action pas106b_InitialScale [ ] = { /* 176x144 */
2008-06-12 17:58:58 +04:00
/* JPEG control */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
2008-06-12 17:58:58 +04:00
/* Sream and Sensor specific */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x0f , ZC3XX_R010_CMOSSENSORSELECT } ,
2008-06-12 17:58:58 +04:00
/* Picture size */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x00 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0xb0 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0x90 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
2008-06-12 17:58:58 +04:00
/* System */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
2008-06-12 17:58:58 +04:00
/* Sream and Sensor specific */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
/* Sensor Interface */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } ,
2008-06-12 17:58:58 +04:00
/* Window inside sensor array */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x03 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0x28 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x68 , ZC3XX_R09E_WINWIDTHLOW } ,
2008-06-12 17:58:58 +04:00
/* Init the sensor */
{ 0xaa , 0x02 , 0x0004 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x09 , 0x0005 } ,
{ 0xaa , 0x0a , 0x0002 } ,
{ 0xaa , 0x0b , 0x0002 } ,
{ 0xaa , 0x0c , 0x0005 } ,
{ 0xaa , 0x0d , 0x0000 } ,
{ 0xaa , 0x0e , 0x0002 } ,
{ 0xaa , 0x14 , 0x0081 } ,
/* Other registors */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
2008-06-12 17:58:58 +04:00
/* Frame retreiving */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
/* Gains */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0xa0 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
/* Unknown */
{ 0xa0 , 0x00 , 0x01ad } ,
/* Sharpness */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
/* Other registors */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
2008-06-12 17:58:58 +04:00
/* Auto exposure and white balance */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2008-06-12 17:58:58 +04:00
/*Dead pixels */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
2008-06-12 17:58:58 +04:00
/* EEPROM */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
/* JPEG control */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } ,
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
/* Other registers */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
2008-06-12 17:58:58 +04:00
/* Auto exposure and white balance */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2008-06-12 17:58:58 +04:00
/*Dead pixels */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
2008-06-12 17:58:58 +04:00
/* EEPROM */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
/* JPEG control */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } ,
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x58 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf4 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x58 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf4 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf4 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x58 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
/* Auto correction */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R181_WINXSTART } ,
{ 0xa0 , 0x08 , ZC3XX_R182_WINXWIDTH } ,
{ 0xa0 , 0x16 , ZC3XX_R183_WINXCENTER } ,
{ 0xa0 , 0x03 , ZC3XX_R184_WINYSTART } ,
{ 0xa0 , 0x05 , ZC3XX_R185_WINYWIDTH } ,
{ 0xa0 , 0x14 , ZC3XX_R186_WINYCENTER } ,
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
/* Auto exposure and white balance */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x03 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xb1 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x87 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
2008-06-12 17:58:58 +04:00
/* sensor on */
{ 0xaa , 0x07 , 0x00b1 } ,
{ 0xaa , 0x05 , 0x0003 } ,
{ 0xaa , 0x04 , 0x0001 } ,
{ 0xaa , 0x03 , 0x003b } ,
/* Gains */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x20 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x26 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xa0 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-12 17:58:58 +04:00
/* Auto correction */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-07-15 21:23:08 +04:00
{ 0xa1 , 0x01 , 0x0180 } , /* AutoCorrectEnable */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
/* Gains */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action pas106b_Initial [ ] = { /* 352x288 */
2008-06-12 17:58:58 +04:00
/* JPEG control */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
2008-06-12 17:58:58 +04:00
/* Sream and Sensor specific */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x0f , ZC3XX_R010_CMOSSENSORSELECT } ,
2008-06-12 17:58:58 +04:00
/* Picture size */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x01 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x60 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0x20 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
2008-06-12 17:58:58 +04:00
/* System */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
2008-06-12 17:58:58 +04:00
/* Sream and Sensor specific */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
/* Sensor Interface */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } ,
2008-06-12 17:58:58 +04:00
/* Window inside sensor array */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x03 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0x28 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x68 , ZC3XX_R09E_WINWIDTHLOW } ,
2008-06-12 17:58:58 +04:00
/* Init the sensor */
{ 0xaa , 0x02 , 0x0004 } ,
{ 0xaa , 0x08 , 0x0000 } ,
{ 0xaa , 0x09 , 0x0005 } ,
{ 0xaa , 0x0a , 0x0002 } ,
{ 0xaa , 0x0b , 0x0002 } ,
{ 0xaa , 0x0c , 0x0005 } ,
{ 0xaa , 0x0d , 0x0000 } ,
{ 0xaa , 0x0e , 0x0002 } ,
{ 0xaa , 0x14 , 0x0081 } ,
/* Other registors */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
2008-06-12 17:58:58 +04:00
/* Frame retreiving */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2008-06-12 17:58:58 +04:00
/* Gains */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0xa0 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
/* Unknown */
{ 0xa0 , 0x00 , 0x01ad } ,
/* Sharpness */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
/* Other registors */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
2008-06-12 17:58:58 +04:00
/* Auto exposure and white balance */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
{ 0xa0 , 0x80 , ZC3XX_R18D_YTARGET } ,
2008-06-12 17:58:58 +04:00
/*Dead pixels */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
2008-06-12 17:58:58 +04:00
/* EEPROM */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
/* JPEG control */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } ,
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } ,
2008-06-12 17:58:58 +04:00
/* Other registers */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
2008-06-12 17:58:58 +04:00
/* Auto exposure and white balance */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2008-06-12 17:58:58 +04:00
/*Dead pixels */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
2008-06-12 17:58:58 +04:00
/* EEPROM */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2008-06-12 17:58:58 +04:00
/* JPEG control */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } ,
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x58 , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf4 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x58 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf4 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xf4 , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0xf4 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x58 , ZC3XX_R112_RGB22 } ,
2008-06-12 17:58:58 +04:00
/* Auto correction */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x03 , ZC3XX_R181_WINXSTART } ,
{ 0xa0 , 0x08 , ZC3XX_R182_WINXWIDTH } ,
{ 0xa0 , 0x16 , ZC3XX_R183_WINXCENTER } ,
{ 0xa0 , 0x03 , ZC3XX_R184_WINYSTART } ,
{ 0xa0 , 0x05 , ZC3XX_R185_WINYWIDTH } ,
{ 0xa0 , 0x14 , ZC3XX_R186_WINYCENTER } ,
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
/* Auto exposure and white balance */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x03 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xb1 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-06-12 17:58:58 +04:00
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x87 , ZC3XX_R197_ANTIFLICKERLOW } ,
2008-06-12 17:58:58 +04:00
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
2008-06-12 17:58:58 +04:00
/* sensor on */
{ 0xaa , 0x07 , 0x00b1 } ,
{ 0xaa , 0x05 , 0x0003 } ,
{ 0xaa , 0x04 , 0x0001 } ,
{ 0xaa , 0x03 , 0x003b } ,
/* Gains */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x20 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x26 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xa0 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-12 17:58:58 +04:00
/* Auto correction */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-07-15 21:23:08 +04:00
{ 0xa1 , 0x01 , 0x0180 } , /* AutoCorrectEnable */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
/* Gains */
2008-07-21 12:42:17 +04:00
{ 0xa0 , 0x40 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R117_GGAIN } ,
{ 0xa0 , 0x40 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , 0x0007 } , /* AutoCorrectEnable */
{ 0xa0 , 0xff , ZC3XX_R018_FRAMELOST } , /* Frame adjust */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pas106b_50HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x06 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,06,cc */
{ 0xa0 , 0x54 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,54,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x87 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,87,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x30 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,30,cc */
{ 0xaa , 0x03 , 0x0021 } , /* 00,03,21,aa */
{ 0xaa , 0x04 , 0x000c } , /* 00,04,0c,aa */
{ 0xaa , 0x05 , 0x0002 } , /* 00,05,02,aa */
{ 0xaa , 0x07 , 0x001c } , /* 00,07,1c,aa */
{ 0xa0 , 0x04 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,04,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pas106b_60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x06 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,06,cc */
{ 0xa0 , 0x2e , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,2e,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x71 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,71,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x30 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,30,cc */
{ 0xaa , 0x03 , 0x001c } , /* 00,03,1c,aa */
{ 0xaa , 0x04 , 0x0004 } , /* 00,04,04,aa */
{ 0xaa , 0x05 , 0x0001 } , /* 00,05,01,aa */
{ 0xaa , 0x07 , 0x00c4 } , /* 00,07,c4,aa */
{ 0xa0 , 0x04 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,04,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pas106b_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
{ 0xa0 , 0x06 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,06,cc */
{ 0xa0 , 0x50 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,50,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xaa , 0x03 , 0x0013 } , /* 00,03,13,aa */
{ 0xaa , 0x04 , 0x0000 } , /* 00,04,00,aa */
{ 0xaa , 0x05 , 0x0001 } , /* 00,05,01,aa */
{ 0xaa , 0x07 , 0x0030 } , /* 00,07,30,aa */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-04 22:09:47 +03:00
/* from lvWIMv.inf 046d:08a2/:08aa 2007/06/03 */
2008-12-08 12:41:04 +03:00
static const struct usb_action pas202b_Initial [ ] = { /* 640x480 */
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x0e , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0e,cc */
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } , /* 00,8d,08,cc */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x03 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,03,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x03 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } , /* 00,9b,01,cc */
{ 0xa0 , 0xe6 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e6,cc */
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } , /* 00,9d,02,cc */
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc */
{ 0xaa , 0x02 , 0x0002 } , /* 00,02,04,aa --> 02 */
{ 0xaa , 0x07 , 0x0006 } , /* 00,07,06,aa */
{ 0xaa , 0x08 , 0x0002 } , /* 00,08,02,aa */
{ 0xaa , 0x09 , 0x0006 } , /* 00,09,06,aa */
{ 0xaa , 0x0a , 0x0001 } , /* 00,0a,01,aa */
{ 0xaa , 0x0b , 0x0001 } , /* 00,0b,01,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x0c , 0x0006 } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0d , 0x0000 } , /* 00,0d,00,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x12 , 0x0005 } , /* 00,12,05,aa */
{ 0xaa , 0x13 , 0x0063 } , /* 00,13,63,aa */
{ 0xaa , 0x15 , 0x0070 } , /* 00,15,70,aa */
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,b7,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x00 , 0x01ad } , /* 01,ad,00,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } , /* 01,8d,70,cc */
{ }
} ;
static const struct usb_action pas202b_InitialScale [ ] = { /* 320x240 */
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x0e , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,0e,cc */
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,10,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x08 , ZC3XX_R08D_COMPABILITYMODE } , /* 00,8d,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,08,cc */
{ 0xa0 , 0x02 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,02,cc */
{ 0xa0 , 0x08 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,08,cc */
{ 0xa0 , 0x02 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,02,cc */
{ 0xa0 , 0x01 , ZC3XX_R09B_WINHEIGHTHIGH } , /* 00,9b,01,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } , /* 00,9d,02,cc */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc */
{ 0xaa , 0x02 , 0x0002 } , /* 00,02,02,aa */
{ 0xaa , 0x07 , 0x0006 } , /* 00,07,06,aa */
{ 0xaa , 0x08 , 0x0002 } , /* 00,08,02,aa */
{ 0xaa , 0x09 , 0x0006 } , /* 00,09,06,aa */
{ 0xaa , 0x0a , 0x0001 } , /* 00,0a,01,aa */
{ 0xaa , 0x0b , 0x0001 } , /* 00,0b,01,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x0c , 0x0006 } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0d , 0x0000 } , /* 00,0d,00,aa */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa */
{ 0xaa , 0x12 , 0x0005 } , /* 00,12,05,aa */
{ 0xaa , 0x13 , 0x0063 } , /* 00,13,63,aa */
{ 0xaa , 0x15 , 0x0070 } , /* 00,15,70,aa */
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,37,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
{ 0xa0 , 0x00 , 0x01ad } , /* 01,ad,00,cc */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } , /* 01,8d,70,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0xff , ZC3XX_R097_WINYSTARTHIGH } ,
{ 0xa0 , 0xfe , ZC3XX_R098_WINYSTARTLOW } ,
2008-12-08 12:41:04 +03:00
{ }
} ;
static const struct usb_action pas202b_50HZ [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,20,cc */
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,21,cc */
{ 0xaa , 0x20 , 0x0002 } , /* 00,20,02,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x21 , 0x001b } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x03 , 0x0044 } , /* 00,03,44,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x04 , 0x0008 } ,
{ 0xaa , 0x05 , 0x001b } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0e , 0x0001 } , /* 00,0e,01,aa */
{ 0xaa , 0x0f , 0x0000 } , /* 00,0f,00,aa */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x1c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x1b , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x4d , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,4d,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1b , ZC3XX_R18F_AEUNFREEZE } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x44 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,44,cc */
{ 0xa0 , 0x6f , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,6f,cc */
{ 0xa0 , 0xad , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,ad,cc */
{ 0xa0 , 0xeb , ZC3XX_R020_HSYNC_3 } , /* 00,20,eb,cc */
{ 0xa0 , 0x0f , ZC3XX_R087_EXPTIMEMID } , /* 00,87,0f,cc */
{ 0xa0 , 0x0e , ZC3XX_R088_EXPTIMELOW } , /* 00,88,0e,cc */
{ }
} ;
static const struct usb_action pas202b_50HZScale [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,20,cc */
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,21,cc */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x20 , 0x0004 } ,
{ 0xaa , 0x21 , 0x003d } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x03 , 0x0041 } , /* 00,03,41,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x04 , 0x0010 } ,
{ 0xaa , 0x05 , 0x003d } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0e , 0x0001 } , /* 00,0e,01,aa */
{ 0xaa , 0x0f , 0x0000 } , /* 00,0f,00,aa */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x1c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x3d , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x9b , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,9b,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1b , ZC3XX_R18F_AEUNFREEZE } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x41 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,41,cc */
{ 0xa0 , 0x6f , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,6f,cc */
{ 0xa0 , 0xad , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,ad,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x0f , ZC3XX_R087_EXPTIMEMID } , /* 00,87,0f,cc */
{ 0xa0 , 0x0e , ZC3XX_R088_EXPTIMELOW } , /* 00,88,0e,cc */
{ }
} ;
static const struct usb_action pas202b_60HZ [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,20,cc */
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,21,cc */
{ 0xaa , 0x20 , 0x0002 } , /* 00,20,02,aa */
{ 0xaa , 0x21 , 0x0000 } , /* 00,21,00,aa */
{ 0xaa , 0x03 , 0x0045 } , /* 00,03,45,aa */
{ 0xaa , 0x04 , 0x0008 } , /* 00,04,08,aa */
{ 0xaa , 0x05 , 0x0000 } , /* 00,05,00,aa */
{ 0xaa , 0x0e , 0x0001 } , /* 00,0e,01,aa */
{ 0xaa , 0x0f , 0x0000 } , /* 00,0f,00,aa */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x1c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x00 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x40 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,40,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1b , ZC3XX_R18F_AEUNFREEZE } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x45 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,45,cc */
{ 0xa0 , 0x8e , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,8e,cc */
{ 0xa0 , 0xc1 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c1,cc */
{ 0xa0 , 0xf5 , ZC3XX_R020_HSYNC_3 } , /* 00,20,f5,cc */
{ 0xa0 , 0x0f , ZC3XX_R087_EXPTIMEMID } , /* 00,87,0f,cc */
{ 0xa0 , 0x0e , ZC3XX_R088_EXPTIMELOW } , /* 00,88,0e,cc */
{ }
} ;
static const struct usb_action pas202b_60HZScale [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,20,cc */
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,21,cc */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x20 , 0x0004 } ,
{ 0xaa , 0x21 , 0x0008 } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x03 , 0x0042 } , /* 00,03,42,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x04 , 0x0010 } ,
{ 0xaa , 0x05 , 0x0008 } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0e , 0x0001 } , /* 00,0e,01,aa */
{ 0xaa , 0x0f , 0x0000 } , /* 00,0f,00,aa */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x1c , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x08 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x81 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,81,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1b , ZC3XX_R18F_AEUNFREEZE } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x42 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,42,cc */
{ 0xa0 , 0x6f , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,6f,cc */
{ 0xa0 , 0xaf , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,af,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x0f , ZC3XX_R087_EXPTIMEMID } , /* 00,87,0f,cc */
{ 0xa0 , 0x0e , ZC3XX_R088_EXPTIMELOW } , /* 00,88,0e,cc */
{ }
} ;
static const struct usb_action pas202b_NoFliker [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,20,cc */
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,21,cc */
{ 0xaa , 0x20 , 0x0002 } , /* 00,20,02,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x21 , 0x0006 } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x03 , 0x0040 } , /* 00,03,40,aa */
{ 0xaa , 0x04 , 0x0008 } , /* 00,04,08,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x05 , 0x0006 } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0e , 0x0001 } , /* 00,0e,01,aa */
{ 0xaa , 0x0f , 0x0000 } , /* 00,0f,00,aa */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x02 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x06 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x01 , ZC3XX_R197_ANTIFLICKERLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x40 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,40,cc */
{ 0xa0 , 0x60 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,60,cc */
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,90,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x0f , ZC3XX_R087_EXPTIMEMID } , /* 00,87,0f,cc */
{ 0xa0 , 0x0e , ZC3XX_R088_EXPTIMELOW } , /* 00,88,0e,cc */
{ }
} ;
static const struct usb_action pas202b_NoFlikerScale [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
{ 0xa0 , 0x20 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,20,cc */
{ 0xa0 , 0x21 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,21,cc */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x20 , 0x0004 } ,
{ 0xaa , 0x21 , 0x000c } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x03 , 0x0040 } , /* 00,03,40,aa */
2010-01-04 22:09:47 +03:00
{ 0xaa , 0x04 , 0x0010 } ,
{ 0xaa , 0x05 , 0x000c } ,
2008-12-08 12:41:04 +03:00
{ 0xaa , 0x0e , 0x0001 } , /* 00,0e,01,aa */
{ 0xaa , 0x0f , 0x0000 } , /* 00,0f,00,aa */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x0c , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x02 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,02,cc */
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } , /* 01,8c,10,cc */
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,20,cc */
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
2010-01-04 22:09:47 +03:00
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-12-08 12:41:04 +03:00
{ 0xa0 , 0x40 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,40,cc */
{ 0xa0 , 0x60 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,60,cc */
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,90,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x0f , ZC3XX_R087_EXPTIMEMID } , /* 00,87,0f,cc */
{ 0xa0 , 0x0e , ZC3XX_R088_EXPTIMELOW } , /* 00,88,0e,cc */
{ }
} ;
2009-11-04 22:38:04 +03:00
/* mi0360soc and pb0330 from vm30x.inf for 0ac8:301b and 0ac8:303b 07/02/13 */
static const struct usb_action mi0360soc_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } , /*jfm: was 03*/
/* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
2009-11-04 22:38:04 +03:00
{ 0xdd , 0x00 , 0x0200 } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0001 } ,
{ 0xaa , 0x06 , 0x0000 } ,
{ 0xaa , 0x08 , 0x0483 } ,
{ 0xaa , 0x01 , 0x0004 } ,
{ 0xaa , 0x08 , 0x0006 } ,
{ 0xaa , 0x02 , 0x0011 } ,
2009-11-04 22:38:04 +03:00
{ 0xaa , 0x03 , 0x01e5 } , /*jfm: was 01e7*/
{ 0xaa , 0x04 , 0x0285 } , /*jfm: was 0287*/
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x07 , 0x3002 } ,
2009-11-04 22:38:04 +03:00
{ 0xaa , 0x20 , 0x5100 } , /*jfm: was 1100*/
{ 0xaa , 0x35 , 0x507f } , /*jfm: was 0050*/
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x30 , 0x0005 } ,
{ 0xaa , 0x31 , 0x0000 } ,
{ 0xaa , 0x58 , 0x0078 } ,
{ 0xaa , 0x62 , 0x0411 } ,
{ 0xaa , 0x2b , 0x0028 } ,
2009-11-04 22:38:04 +03:00
{ 0xaa , 0x2c , 0x007f } , /*jfm: was 0030*/
{ 0xaa , 0x2d , 0x007f } , /*jfm: was 0030*/
{ 0xaa , 0x2e , 0x007f } , /*jfm: was 0030*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /*jfm: was 37*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x09 , 0x01ad } , /*jfm: was 00*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x6c , ZC3XX_R18D_YTARGET } , /* jfm: was 78 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x61 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x65 , ZC3XX_R118_BGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2009-11-04 22:38:04 +03:00
static const struct usb_action mi0360soc_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } , /*jfm: was 03*/
/* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
2009-11-04 22:38:04 +03:00
{ 0xdd , 0x00 , 0x0200 } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0001 } ,
{ 0xaa , 0x06 , 0x0000 } ,
{ 0xaa , 0x08 , 0x0483 } ,
{ 0xaa , 0x01 , 0x0004 } ,
{ 0xaa , 0x08 , 0x0006 } ,
{ 0xaa , 0x02 , 0x0011 } ,
{ 0xaa , 0x03 , 0x01e7 } ,
{ 0xaa , 0x04 , 0x0287 } ,
{ 0xaa , 0x07 , 0x3002 } ,
2009-11-04 22:38:04 +03:00
{ 0xaa , 0x20 , 0x5100 } , /*jfm: was 1100*/
{ 0xaa , 0x35 , 0x007f } , /*jfm: was 0050*/
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x30 , 0x0005 } ,
{ 0xaa , 0x31 , 0x0000 } ,
{ 0xaa , 0x58 , 0x0078 } ,
{ 0xaa , 0x62 , 0x0411 } ,
2009-11-04 22:38:04 +03:00
{ 0xaa , 0x2b , 0x007f } , /*jfm: was 28*/
{ 0xaa , 0x2c , 0x007f } , /*jfm: was 30*/
{ 0xaa , 0x2d , 0x007f } , /*jfm: was 30*/
{ 0xaa , 0x2e , 0x007f } , /*jfm: was 28*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /*jfm: was 37*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x09 , 0x01ad } , /*jfm: was 00*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x6c , ZC3XX_R18D_YTARGET } , /*jfm: was 78*/
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x61 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x65 , ZC3XX_R118_BGAIN } ,
2009-11-04 22:38:04 +03:00
{ }
} ;
static const struct usb_action mi360soc_AE50HZ [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0562 } ,
{ 0xbb , 0x01 , 0x09aa } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x03 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x9b , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x47 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ }
} ;
static const struct usb_action mi360soc_AE50HZScale [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0509 } ,
{ 0xbb , 0x01 , 0x0934 } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xd2 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x9a , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xd7 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xf4 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf9 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ }
} ;
static const struct usb_action mi360soc_AE60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x053d } ,
{ 0xbb , 0x01 , 0x096e } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xdd , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x3d , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ }
} ;
static const struct usb_action mi360soc_AE60HZScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2009-11-04 22:38:04 +03:00
{ 0xbb , 0x00 , 0x0509 } ,
{ 0xbb , 0x01 , 0x0983 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x8f , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x81 , ZC3XX_R197_ANTIFLICKERLOW } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xd7 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xf4 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf9 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2009-11-04 22:38:04 +03:00
{ }
} ;
static const struct usb_action mi360soc_AENoFliker [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0509 } ,
{ 0xbb , 0x01 , 0x0960 } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xf0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x04 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x09 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x40 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xe0 , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2009-11-04 22:38:04 +03:00
static const struct usb_action mi360soc_AENoFlikerScale [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0534 } ,
{ 0xbb , 0x02 , 0x0960 } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xf0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x04 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x34 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x60 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xe0 , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ }
} ;
static const struct usb_action pb0330_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00 */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
2009-11-04 22:38:04 +03:00
{ 0xdd , 0x00 , 0x0200 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0006 } ,
{ 0xaa , 0x02 , 0x0011 } ,
2009-11-04 22:38:04 +03:00
{ 0xaa , 0x03 , 0x01e5 } , /*jfm: was 1e7*/
{ 0xaa , 0x04 , 0x0285 } , /*jfm: was 0287*/
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x06 , 0x0003 } ,
{ 0xaa , 0x07 , 0x3002 } ,
{ 0xaa , 0x20 , 0x1100 } ,
{ 0xaa , 0x2f , 0xf7b0 } ,
{ 0xaa , 0x30 , 0x0005 } ,
{ 0xaa , 0x31 , 0x0000 } ,
{ 0xaa , 0x34 , 0x0100 } ,
{ 0xaa , 0x35 , 0x0060 } ,
{ 0xaa , 0x3d , 0x068f } ,
{ 0xaa , 0x40 , 0x01e0 } ,
{ 0xaa , 0x58 , 0x0078 } ,
{ 0xaa , 0x62 , 0x0411 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x09 , 0x01ad } , /*jfm: was 00 */
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } , /*jfm: was 6c*/
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2009-11-04 22:38:04 +03:00
static const struct usb_action pb0330_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00 */
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
2009-11-04 22:38:04 +03:00
{ 0xdd , 0x00 , 0x0200 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0006 } ,
{ 0xaa , 0x02 , 0x0011 } ,
{ 0xaa , 0x03 , 0x01e7 } ,
{ 0xaa , 0x04 , 0x0287 } ,
{ 0xaa , 0x06 , 0x0003 } ,
{ 0xaa , 0x07 , 0x3002 } ,
{ 0xaa , 0x20 , 0x1100 } ,
{ 0xaa , 0x2f , 0xf7b0 } ,
{ 0xaa , 0x30 , 0x0005 } ,
{ 0xaa , 0x31 , 0x0000 } ,
{ 0xaa , 0x34 , 0x0100 } ,
{ 0xaa , 0x35 , 0x0060 } ,
{ 0xaa , 0x3d , 0x068f } ,
{ 0xaa , 0x40 , 0x01e0 } ,
{ 0xaa , 0x58 , 0x0078 } ,
{ 0xaa , 0x62 , 0x0411 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x09 , 0x01ad } ,
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } , /*jfm: was 6c*/
{ }
} ;
static const struct usb_action pb0330_50HZ [ ] = {
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x055c } ,
{ 0xbb , 0x01 , 0x09aa } ,
{ 0xbb , 0x00 , 0x1001 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xc4 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x47 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1a , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x5c , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ }
} ;
static const struct usb_action pb0330_50HZScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
2009-11-04 22:38:04 +03:00
{ 0xbb , 0x00 , 0x0566 } ,
{ 0xbb , 0x02 , 0x09b2 } ,
{ 0xbb , 0x00 , 0x1002 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x8c , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x8a , ZC3XX_R197_ANTIFLICKERLOW } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1a , ZC3XX_R18F_AEUNFREEZE } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xd7 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xf0 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf8 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pb0330_60HZ [ ] = {
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0535 } ,
{ 0xbb , 0x01 , 0x0974 } ,
{ 0xbb , 0x00 , 0x1001 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xfe , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x3e , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1a , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x35 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x50 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xd0 , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pb0330_60HZScale [ ] = {
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0535 } ,
{ 0xbb , 0x02 , 0x096c } ,
{ 0xbb , 0x00 , 0x1002 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xc0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x7c , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1a , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x35 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x50 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xd0 , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pb0330_NoFliker [ ] = {
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0509 } ,
{ 0xbb , 0x02 , 0x0940 } ,
{ 0xbb , 0x00 , 0x1002 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xf0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x01 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x09 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x40 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xe0 , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action pb0330_NoFlikerScale [ ] = {
2009-11-04 22:38:04 +03:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xbb , 0x00 , 0x0535 } ,
{ 0xbb , 0x01 , 0x0980 } ,
{ 0xbb , 0x00 , 0x1001 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xf0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x01 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x10 , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x20 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x35 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x60 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0x90 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xe0 , ZC3XX_R020_HSYNC_3 } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
/* from oem9.inf */
static const struct usb_action po2030_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x04 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,04,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x04 , ZC3XX_R080_HBLANKHIGH } , /* 00,80,04,cc */
{ 0xa0 , 0x05 , ZC3XX_R081_HBLANKLOW } , /* 00,81,05,cc */
{ 0xa0 , 0x16 , ZC3XX_R083_RGAINADDR } , /* 00,83,16,cc */
{ 0xa0 , 0x18 , ZC3XX_R085_BGAINADDR } , /* 00,85,18,cc */
{ 0xa0 , 0x1a , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,1a,cc */
{ 0xa0 , 0x1b , ZC3XX_R087_EXPTIMEMID } , /* 00,87,1b,cc */
{ 0xa0 , 0x1c , ZC3XX_R088_EXPTIMELOW } , /* 00,88,1c,cc */
{ 0xa0 , 0xee , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,ee,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc */
{ 0xaa , 0x8d , 0x0008 } , /* 00,8d,08,aa */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xe6 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e6,cc */
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x09 , 0x00ce } , /* 00,09,ce,aa */
{ 0xaa , 0x0b , 0x0005 } , /* 00,0b,05,aa */
{ 0xaa , 0x0d , 0x0054 } , /* 00,0d,54,aa */
{ 0xaa , 0x0f , 0x00eb } , /* 00,0f,eb,aa */
{ 0xaa , 0x87 , 0x0000 } , /* 00,87,00,aa */
{ 0xaa , 0x88 , 0x0004 } , /* 00,88,04,aa */
{ 0xaa , 0x89 , 0x0000 } , /* 00,89,00,aa */
{ 0xaa , 0x8a , 0x0005 } , /* 00,8a,05,aa */
{ 0xaa , 0x13 , 0x0003 } , /* 00,13,03,aa */
{ 0xaa , 0x16 , 0x0040 } , /* 00,16,40,aa */
{ 0xaa , 0x18 , 0x0040 } , /* 00,18,40,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x29 , 0x00e8 } , /* 00,29,e8,aa */
{ 0xaa , 0x45 , 0x0045 } , /* 00,45,45,aa */
{ 0xaa , 0x50 , 0x00ed } , /* 00,50,ed,aa */
{ 0xaa , 0x51 , 0x0025 } , /* 00,51,25,aa */
{ 0xaa , 0x52 , 0x0042 } , /* 00,52,42,aa */
{ 0xaa , 0x53 , 0x002f } , /* 00,53,2f,aa */
{ 0xaa , 0x79 , 0x0025 } , /* 00,79,25,aa */
{ 0xaa , 0x7b , 0x0000 } , /* 00,7b,00,aa */
{ 0xaa , 0x7e , 0x0025 } , /* 00,7e,25,aa */
{ 0xaa , 0x7f , 0x0025 } , /* 00,7f,25,aa */
{ 0xaa , 0x21 , 0x0000 } , /* 00,21,00,aa */
{ 0xaa , 0x33 , 0x0036 } , /* 00,33,36,aa */
{ 0xaa , 0x36 , 0x0060 } , /* 00,36,60,aa */
{ 0xaa , 0x37 , 0x0008 } , /* 00,37,08,aa */
{ 0xaa , 0x3b , 0x0031 } , /* 00,3b,31,aa */
{ 0xaa , 0x44 , 0x000f } , /* 00,44,0f,aa */
{ 0xaa , 0x58 , 0x0002 } , /* 00,58,02,aa */
{ 0xaa , 0x66 , 0x00c0 } , /* 00,66,c0,aa */
{ 0xaa , 0x67 , 0x0044 } , /* 00,67,44,aa */
{ 0xaa , 0x6b , 0x00a0 } , /* 00,6b,a0,aa */
{ 0xaa , 0x6c , 0x0054 } , /* 00,6c,54,aa */
{ 0xaa , 0xd6 , 0x0007 } , /* 00,d6,07,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xf7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,f7,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } , /* 01,ad,00,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x7a , ZC3XX_R116_RGAIN } , /* 01,16,7a,cc */
{ 0xa0 , 0x4a , ZC3XX_R118_BGAIN } , /* 01,18,4a,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
/* from oem9.inf */
static const struct usb_action po2030_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc */
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,10,cc */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc */
{ 0xa0 , 0x04 , ZC3XX_R080_HBLANKHIGH } , /* 00,80,04,cc */
{ 0xa0 , 0x05 , ZC3XX_R081_HBLANKLOW } , /* 00,81,05,cc */
{ 0xa0 , 0x16 , ZC3XX_R083_RGAINADDR } , /* 00,83,16,cc */
{ 0xa0 , 0x18 , ZC3XX_R085_BGAINADDR } , /* 00,85,18,cc */
{ 0xa0 , 0x1a , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,1a,cc */
{ 0xa0 , 0x1b , ZC3XX_R087_EXPTIMEMID } , /* 00,87,1b,cc */
{ 0xa0 , 0x1c , ZC3XX_R088_EXPTIMELOW } , /* 00,88,1c,cc */
{ 0xa0 , 0xee , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,ee,cc */
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,03,cc */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc */
{ 0xaa , 0x8d , 0x0008 } , /* 00,8d,08,aa */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc */
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e8,cc */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x09 , 0x00cc } , /* 00,09,cc,aa */
{ 0xaa , 0x0b , 0x0005 } , /* 00,0b,05,aa */
{ 0xaa , 0x0d , 0x0058 } , /* 00,0d,58,aa */
{ 0xaa , 0x0f , 0x00ed } , /* 00,0f,ed,aa */
{ 0xaa , 0x87 , 0x0000 } , /* 00,87,00,aa */
{ 0xaa , 0x88 , 0x0004 } , /* 00,88,04,aa */
{ 0xaa , 0x89 , 0x0000 } , /* 00,89,00,aa */
{ 0xaa , 0x8a , 0x0005 } , /* 00,8a,05,aa */
{ 0xaa , 0x13 , 0x0003 } , /* 00,13,03,aa */
{ 0xaa , 0x16 , 0x0040 } , /* 00,16,40,aa */
{ 0xaa , 0x18 , 0x0040 } , /* 00,18,40,aa */
{ 0xaa , 0x1d , 0x0002 } , /* 00,1d,02,aa */
{ 0xaa , 0x29 , 0x00e8 } , /* 00,29,e8,aa */
{ 0xaa , 0x45 , 0x0045 } , /* 00,45,45,aa */
{ 0xaa , 0x50 , 0x00ed } , /* 00,50,ed,aa */
{ 0xaa , 0x51 , 0x0025 } , /* 00,51,25,aa */
{ 0xaa , 0x52 , 0x0042 } , /* 00,52,42,aa */
{ 0xaa , 0x53 , 0x002f } , /* 00,53,2f,aa */
{ 0xaa , 0x79 , 0x0025 } , /* 00,79,25,aa */
{ 0xaa , 0x7b , 0x0000 } , /* 00,7b,00,aa */
{ 0xaa , 0x7e , 0x0025 } , /* 00,7e,25,aa */
{ 0xaa , 0x7f , 0x0025 } , /* 00,7f,25,aa */
{ 0xaa , 0x21 , 0x0000 } , /* 00,21,00,aa */
{ 0xaa , 0x33 , 0x0036 } , /* 00,33,36,aa */
{ 0xaa , 0x36 , 0x0060 } , /* 00,36,60,aa */
{ 0xaa , 0x37 , 0x0008 } , /* 00,37,08,aa */
{ 0xaa , 0x3b , 0x0031 } , /* 00,3b,31,aa */
{ 0xaa , 0x44 , 0x000f } , /* 00,44,0f,aa */
{ 0xaa , 0x58 , 0x0002 } , /* 00,58,02,aa */
{ 0xaa , 0x66 , 0x00c0 } , /* 00,66,c0,aa */
{ 0xaa , 0x67 , 0x0044 } , /* 00,67,44,aa */
{ 0xaa , 0x6b , 0x00a0 } , /* 00,6b,a0,aa */
{ 0xaa , 0x6c , 0x0054 } , /* 00,6c,54,aa */
{ 0xaa , 0xd6 , 0x0007 } , /* 00,d6,07,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xf7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,f7,cc */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc */
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } , /* 01,89,06,cc */
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } , /* 01,ad,00,cc */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc */
{ 0xa0 , 0x7a , ZC3XX_R116_RGAIN } , /* 01,16,7a,cc */
{ 0xa0 , 0x4a , ZC3XX_R118_BGAIN } , /* 01,18,4a,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action po2030_50HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x8d , 0x0008 } , /* 00,8d,08,aa */
{ 0xaa , 0x1a , 0x0001 } , /* 00,1a,01,aa */
{ 0xaa , 0x1b , 0x000a } , /* 00,1b,0a,aa */
{ 0xaa , 0x1c , 0x00b0 } , /* 00,1c,b0,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x05 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,05,cc */
{ 0xa0 , 0x35 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,35,cc */
{ 0xa0 , 0x70 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,70,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x85 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,85,cc */
{ 0xa0 , 0x58 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,58,cc */
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0c,cc */
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,18,cc */
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,60,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x22 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,22,cc */
{ 0xa0 , 0x88 , ZC3XX_R18D_YTARGET } , /* 01,8d,88,cc */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action po2030_60HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x8d , 0x0008 } , /* 00,8d,08,aa */
{ 0xaa , 0x1a , 0x0000 } , /* 00,1a,00,aa */
{ 0xaa , 0x1b , 0x00de } , /* 00,1b,de,aa */
{ 0xaa , 0x1c , 0x0040 } , /* 00,1c,40,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x08 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,08,cc */
{ 0xa0 , 0xae , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,ae,cc */
{ 0xa0 , 0x80 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,80,cc */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x6f , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,6f,cc */
{ 0xa0 , 0x20 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,20,cc */
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0c,cc */
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,18,cc */
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,60,cc */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc */
{ 0xa0 , 0x22 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,22,cc */
{ 0xa0 , 0x88 , ZC3XX_R18D_YTARGET } , /* 01,8d,88,cc */
/* win: 01,8d,80 */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action po2030_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,02,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x8d , 0x000d } , /* 00,8d,0d,aa */
{ 0xaa , 0x1a , 0x0000 } , /* 00,1a,00,aa */
{ 0xaa , 0x1b , 0x0002 } , /* 00,1b,02,aa */
{ 0xaa , 0x1c , 0x0078 } , /* 00,1c,78,aa */
{ 0xaa , 0x46 , 0x0000 } , /* 00,46,00,aa */
{ 0xaa , 0x15 , 0x0000 } , /* 00,15,00,aa */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
/* TEST */
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130cK_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x01 , 0x003b } ,
{ 0xa0 , 0x0e , 0x003a } ,
{ 0xa0 , 0x01 , 0x0038 } ,
{ 0xa0 , 0x0b , 0x0039 } ,
{ 0xa0 , 0x00 , 0x0038 } ,
{ 0xa0 , 0x0b , 0x0039 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x06 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x08 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x83 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x04 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x01 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x08 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x06 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x02 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x11 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x03 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xE7 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x01 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x04 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x87 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x02 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x07 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x30 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x51 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x35 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7F , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x30 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x05 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x31 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x58 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x78 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x62 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x11 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x04 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2B , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2c , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2D , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2e , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
{ 0xa0 , 0x6c , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x61 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x65 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } ,
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x4c , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf1 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0x03 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xfe , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x51 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf1 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xec , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0x03 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x51 , ZC3XX_R112_RGB22 } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x38 , ZC3XX_R120_GAMMA00 } , /* gamma > 5 */
{ 0xa0 , 0x51 , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x6e , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x8c , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0xa2 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xb6 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xc8 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xd6 , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xe2 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xed , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xf5 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xfc , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xff , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xff , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xff , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x12 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x1b , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x1d , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1a , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x15 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x12 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x0f , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x05 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x00 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x00 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x00 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x01 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x4c , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf1 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0x03 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xfe , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x51 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf1 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xec , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0x03 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x51 , ZC3XX_R112_RGB22 } ,
{ 0xa0 , 0x10 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x05 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x09 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x09 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x34 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x01 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xd2 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x9a , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0xd7 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0xf4 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xf9 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } ,
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130cK_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x01 , 0x003b } ,
{ 0xa0 , 0x0e , 0x003a } ,
{ 0xa0 , 0x01 , 0x0038 } ,
{ 0xa0 , 0x0b , 0x0039 } ,
{ 0xa0 , 0x00 , 0x0038 } ,
{ 0xa0 , 0x0b , 0x0039 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x0a , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x07 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xdc , ZC3XX_R08B_I2CDEVICEADDR } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x06 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x08 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x83 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x04 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x01 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x04 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x08 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x06 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x02 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x11 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x03 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xe5 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x01 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x04 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x85 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x02 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x07 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x02 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x30 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x20 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x51 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x35 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7F , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x50 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x30 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x05 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x31 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x00 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x58 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x78 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x62 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x11 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x04 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2B , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2C , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7F , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2D , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x2e , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x7f , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } ,
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } ,
{ 0xa0 , 0x6c , ZC3XX_R18D_YTARGET } ,
{ 0xa0 , 0x61 , ZC3XX_R116_RGAIN } ,
{ 0xa0 , 0x65 , ZC3XX_R118_BGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } ,
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x4c , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf1 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0x03 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xfe , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x51 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf1 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xec , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0x03 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x51 , ZC3XX_R112_RGB22 } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x08 , ZC3XX_R1C6_SHARPNESS00 } , /* sharpness+ */
{ 0xa0 , 0x0f , ZC3XX_R1CB_SHARPNESS05 } , /* sharpness- */
{ 0xa0 , 0x38 , ZC3XX_R120_GAMMA00 } , /* gamma > 5 */
{ 0xa0 , 0x51 , ZC3XX_R121_GAMMA01 } ,
{ 0xa0 , 0x6e , ZC3XX_R122_GAMMA02 } ,
{ 0xa0 , 0x8c , ZC3XX_R123_GAMMA03 } ,
{ 0xa0 , 0xa2 , ZC3XX_R124_GAMMA04 } ,
{ 0xa0 , 0xb6 , ZC3XX_R125_GAMMA05 } ,
{ 0xa0 , 0xc8 , ZC3XX_R126_GAMMA06 } ,
{ 0xa0 , 0xd6 , ZC3XX_R127_GAMMA07 } ,
{ 0xa0 , 0xe2 , ZC3XX_R128_GAMMA08 } ,
{ 0xa0 , 0xed , ZC3XX_R129_GAMMA09 } ,
{ 0xa0 , 0xf5 , ZC3XX_R12A_GAMMA0A } ,
{ 0xa0 , 0xfc , ZC3XX_R12B_GAMMA0B } ,
{ 0xa0 , 0xff , ZC3XX_R12C_GAMMA0C } ,
{ 0xa0 , 0xff , ZC3XX_R12D_GAMMA0D } ,
{ 0xa0 , 0xff , ZC3XX_R12E_GAMMA0E } ,
{ 0xa0 , 0xff , ZC3XX_R12F_GAMMA0F } ,
{ 0xa0 , 0x12 , ZC3XX_R130_GAMMA10 } ,
{ 0xa0 , 0x1b , ZC3XX_R131_GAMMA11 } ,
{ 0xa0 , 0x1d , ZC3XX_R132_GAMMA12 } ,
{ 0xa0 , 0x1a , ZC3XX_R133_GAMMA13 } ,
{ 0xa0 , 0x15 , ZC3XX_R134_GAMMA14 } ,
{ 0xa0 , 0x12 , ZC3XX_R135_GAMMA15 } ,
{ 0xa0 , 0x0f , ZC3XX_R136_GAMMA16 } ,
{ 0xa0 , 0x0d , ZC3XX_R137_GAMMA17 } ,
{ 0xa0 , 0x0b , ZC3XX_R138_GAMMA18 } ,
{ 0xa0 , 0x09 , ZC3XX_R139_GAMMA19 } ,
{ 0xa0 , 0x07 , ZC3XX_R13A_GAMMA1A } ,
{ 0xa0 , 0x05 , ZC3XX_R13B_GAMMA1B } ,
{ 0xa0 , 0x00 , ZC3XX_R13C_GAMMA1C } ,
{ 0xa0 , 0x00 , ZC3XX_R13D_GAMMA1D } ,
{ 0xa0 , 0x00 , ZC3XX_R13E_GAMMA1E } ,
{ 0xa0 , 0x01 , ZC3XX_R13F_GAMMA1F } ,
{ 0xa0 , 0x4c , ZC3XX_R10A_RGB00 } , /* matrix */
{ 0xa0 , 0xf1 , ZC3XX_R10B_RGB01 } ,
{ 0xa0 , 0x03 , ZC3XX_R10C_RGB02 } ,
{ 0xa0 , 0xfe , ZC3XX_R10D_RGB10 } ,
{ 0xa0 , 0x51 , ZC3XX_R10E_RGB11 } ,
{ 0xa0 , 0xf1 , ZC3XX_R10F_RGB12 } ,
{ 0xa0 , 0xec , ZC3XX_R110_RGB20 } ,
{ 0xa0 , 0x03 , ZC3XX_R111_RGB21 } ,
{ 0xa0 , 0x51 , ZC3XX_R112_RGB22 } ,
{ 0xa0 , 0x10 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } ,
{ 0xa0 , 0x05 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0x62 , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x00 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x09 , ZC3XX_R092_I2CADDRESSSELECT } ,
{ 0xa0 , 0xaa , ZC3XX_R093_I2CSETVALUE } ,
{ 0xa0 , 0x01 , ZC3XX_R094_I2CWRITEACK } ,
{ 0xa0 , 0x01 , ZC3XX_R090_I2CCOMMAND } ,
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } ,
{ 0xa0 , 0x03 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x9b , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x47 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x1c , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x14 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x66 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } ,
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } ,
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } ,
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } ,
{ 0xa0 , 0x60 , ZC3XX_R11D_GLOBALGAIN } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x09 , 0x01ad } ,
{ 0xa0 , 0x15 , 0x01ae } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x40 , ZC3XX_R180_AUTOCORRECTENABLE } ,
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x30 , 0x0007 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R008_CLOCKSETTING } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x0007 } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2009-10-07 12:24:19 +04:00
static const struct usb_action tas5130cxx_InitialScale [ ] = { /* 320x240 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x50 , ZC3XX_R002_CLOCKSELECT } ,
{ 0xa0 , 0x03 , ZC3XX_R008_CLOCKSETTING } ,
{ 0xa0 , 0x02 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x00 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x04 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x0f , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x04 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x0f , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } ,
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x06 , ZC3XX_R08D_COMPABILITYMODE } ,
{ 0xa0 , 0xf7 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2009-12-02 12:06:03 +03:00
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } ,
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x50 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2009-12-02 12:06:03 +03:00
{ 0xa0 , 0x07 , ZC3XX_R0A5_EXPOSUREGAIN } ,
{ 0xa0 , 0x02 , ZC3XX_R0A6_EXPOSUREBLACKLVL } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2009-10-07 12:24:19 +04:00
static const struct usb_action tas5130cxx_Initial [ ] = { /* 640x480 */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } ,
{ 0xa0 , 0x40 , ZC3XX_R002_CLOCKSELECT } ,
2009-12-02 12:06:03 +03:00
{ 0xa0 , 0x00 , ZC3XX_R008_CLOCKSETTING } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x02 , ZC3XX_R010_CMOSSENSORSELECT } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x00 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } ,
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } ,
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } ,
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } ,
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } ,
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } ,
{ 0xa0 , 0x05 , ZC3XX_R098_WINYSTARTLOW } ,
{ 0xa0 , 0x0f , ZC3XX_R09A_WINXSTARTLOW } ,
{ 0xa0 , 0x05 , ZC3XX_R11A_FIRSTYLOW } ,
{ 0xa0 , 0x0f , ZC3XX_R11C_FIRSTXLOW } ,
{ 0xa0 , 0xe6 , ZC3XX_R09C_WINHEIGHTLOW } ,
{ 0xa0 , 0x02 , ZC3XX_R09D_WINWIDTHHIGH } ,
{ 0xa0 , 0x86 , ZC3XX_R09E_WINWIDTHLOW } ,
{ 0xa0 , 0x06 , ZC3XX_R08D_COMPABILITYMODE } ,
{ 0xa0 , 0x37 , ZC3XX_R101_SENSORCORRECTION } ,
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } ,
{ 0xa0 , 0x06 , ZC3XX_R189_AWBSTATUS } ,
2009-12-02 12:06:03 +03:00
{ 0xa0 , 0x70 , ZC3XX_R18D_YTARGET } ,
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x50 , ZC3XX_R1A8_DIGITALGAIN } ,
2008-06-12 17:58:58 +04:00
{ 0xa0 , 0x00 , 0x01ad } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } ,
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } ,
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } ,
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } ,
2009-12-02 12:06:03 +03:00
{ 0xa0 , 0x07 , ZC3XX_R0A5_EXPOSUREGAIN } ,
{ 0xa0 , 0x02 , ZC3XX_R0A6_EXPOSUREBLACKLVL } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action tas5130cxx_50HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa3 , 0x0001 } , /* 00,a3,01,aa */
{ 0xaa , 0xa4 , 0x0063 } , /* 00,a4,63,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,01,cc */
{ 0xa0 , 0x63 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,63,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x04 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xfe , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x47 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,47,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x08 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xd3 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,d3,cc */
{ 0xa0 , 0xda , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,da,cc */
{ 0xa0 , 0xea , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,ea,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x03 , ZC3XX_R09F_MAXXHIGH } , /* 00,9f,03,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x4c , ZC3XX_R0A0_MAXXLOW } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action tas5130cxx_50HZScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa3 , 0x0001 } , /* 00,a3,01,aa */
{ 0xaa , 0xa4 , 0x0077 } , /* 00,a4,77,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,01,cc */
{ 0xa0 , 0x77 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,77,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x07 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xd0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x7d , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,7d,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x08 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xf0 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,f0,cc */
{ 0xa0 , 0xf4 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,f4,cc */
{ 0xa0 , 0xf8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,f8,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x03 , ZC3XX_R09F_MAXXHIGH } , /* 00,9f,03,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0xc0 , ZC3XX_R0A0_MAXXLOW } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action tas5130cxx_60HZ [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa3 , 0x0001 } , /* 00,a3,01,aa */
{ 0xaa , 0xa4 , 0x0036 } , /* 00,a4,36,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,01,cc */
{ 0xa0 , 0x36 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,36,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x05 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x54 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x3e , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,3e,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x08 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xca , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,ca,cc */
{ 0xa0 , 0xd0 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d0,cc */
{ 0xa0 , 0xe0 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e0,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x03 , ZC3XX_R09F_MAXXHIGH } , /* 00,9f,03,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x28 , ZC3XX_R0A0_MAXXLOW } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action tas5130cxx_60HZScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa3 , 0x0001 } , /* 00,a3,01,aa */
{ 0xaa , 0xa4 , 0x0077 } , /* 00,a4,77,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,01,cc */
{ 0xa0 , 0x77 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,77,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x09 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x47 , ZC3XX_R192_EXPOSURELIMITLOW } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc */
{ 0xa0 , 0x7d , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,7d,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
{ 0xa0 , 0x08 , ZC3XX_R1A9_DIGITALLIMITDIFF } ,
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xc8 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,c8,cc */
{ 0xa0 , 0xd0 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d0,cc */
{ 0xa0 , 0xe0 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e0,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x03 , ZC3XX_R09F_MAXXHIGH } , /* 00,9f,03,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x20 , ZC3XX_R0A0_MAXXLOW } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action tas5130cxx_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa3 , 0x0001 } , /* 00,a3,01,aa */
{ 0xaa , 0xa4 , 0x0040 } , /* 00,a4,40,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,01,cc */
{ 0xa0 , 0x40 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,40,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x05 , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0xa0 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x04 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0xbc , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,bc,cc */
{ 0xa0 , 0xd0 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d0,cc */
{ 0xa0 , 0xe0 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e0,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x02 , ZC3XX_R09F_MAXXHIGH } , /* 00,9f,02,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0xf0 , ZC3XX_R0A0_MAXXLOW } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const struct usb_action tas5130cxx_NoFlikerScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R019_AUTOADJUSTFPS } , /* 00,19,00,cc */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0xa3 , 0x0001 } , /* 00,a3,01,aa */
{ 0xaa , 0xa4 , 0x0090 } , /* 00,a4,90,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R0A3_EXPOSURETIMEHIGH } , /* 00,a3,01,cc */
{ 0xa0 , 0x90 , ZC3XX_R0A4_EXPOSURETIMELOW } , /* 00,a4,90,cc */
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0x0a , ZC3XX_R191_EXPOSURELIMITMID } ,
{ 0xa0 , 0x00 , ZC3XX_R192_EXPOSURELIMITLOW } ,
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } ,
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } ,
{ 0xa0 , 0x04 , ZC3XX_R197_ANTIFLICKERLOW } ,
{ 0xa0 , 0x0c , ZC3XX_R18C_AEFREEZE } ,
{ 0xa0 , 0x18 , ZC3XX_R18F_AEUNFREEZE } ,
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,00,cc */
{ 0xa0 , 0x00 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,00,cc */
{ 0xa0 , 0xbc , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,bc,cc */
{ 0xa0 , 0xd0 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,d0,cc */
{ 0xa0 , 0xe0 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,e0,cc */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc */
{ 0xa0 , 0x02 , ZC3XX_R09F_MAXXHIGH } , /* 00,9f,02,cc */
2009-10-07 12:24:19 +04:00
{ 0xa0 , 0xf0 , ZC3XX_R0A0_MAXXLOW } ,
{ 0xa0 , 0x50 , ZC3XX_R11D_GLOBALGAIN } ,
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_InitialScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc, */
{ 0xa0 , 0x02 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,02,cc, */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc, */
{ 0xa0 , 0x10 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,00,cc,
* 0 < - > 10 */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc, */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc, */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc, */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc, */
{ 0xa0 , 0x98 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,98,cc, */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc, */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc, */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc, */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc, */
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e6,cc,
* 6 < - > 8 */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,86,cc,
* 6 < - > 8 */
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,10,cc, */
{ 0xa0 , 0x98 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,98,cc, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x1b , 0x0024 } , /* 00,1b,24,aa, */
{ 0xdd , 0x00 , 0x0080 } , /* 00,00,80,dd, */
{ 0xaa , 0x1b , 0x0000 } , /* 00,1b,00,aa, */
{ 0xaa , 0x13 , 0x0002 } , /* 00,13,02,aa, */
{ 0xaa , 0x15 , 0x0004 } , /* 00,15,04,aa */
2008-07-21 12:42:17 +04:00
/*?? {0xaa, 0x01, 0x0000}, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0000 } ,
{ 0xaa , 0x1a , 0x0000 } , /* 00,1a,00,aa, */
{ 0xaa , 0x1c , 0x0017 } , /* 00,1c,17,aa, */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x82 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,82,cc, */
{ 0xa0 , 0x83 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,83,cc, */
{ 0xa0 , 0x84 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,84,cc, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x05 , 0x0010 } , /* 00,05,10,aa, */
{ 0xaa , 0x0a , 0x0000 } , /* 00,0a,00,aa, */
{ 0xaa , 0x0b , 0x00a0 } , /* 00,0b,a0,aa, */
{ 0xaa , 0x0c , 0x0000 } , /* 00,0c,00,aa, */
{ 0xaa , 0x0d , 0x00a0 } , /* 00,0d,a0,aa, */
{ 0xaa , 0x0e , 0x0000 } , /* 00,0e,00,aa, */
{ 0xaa , 0x0f , 0x00a0 } , /* 00,0f,a0,aa, */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa, */
{ 0xaa , 0x11 , 0x00a0 } , /* 00,11,a0,aa, */
2008-07-21 12:42:17 +04:00
/*?? {0xa0, 0x00, 0x0039},
{ 0xa1 , 0x01 , 0x0037 } , */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x16 , 0x0001 } , /* 00,16,01,aa, */
{ 0xaa , 0x17 , 0x00e8 } , /* 00,17,e6,aa, (e6 -> e8) */
{ 0xaa , 0x18 , 0x0002 } , /* 00,18,02,aa, */
{ 0xaa , 0x19 , 0x0088 } , /* 00,19,86,aa, */
{ 0xaa , 0x20 , 0x0020 } , /* 00,20,20,aa, */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,b7,cc, */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc, */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc, */
{ 0xa0 , 0x76 , ZC3XX_R189_AWBSTATUS } , /* 01,89,76,cc, */
{ 0xa0 , 0x09 , 0x01ad } , /* 01,ad,09,cc, */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc, */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc, */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc, */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc, */
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,60,cc, */
{ 0xa0 , 0x61 , ZC3XX_R116_RGAIN } , /* 01,16,61,cc, */
{ 0xa0 , 0x65 , ZC3XX_R118_BGAIN } , /* 01,18,65,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_Initial [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x01 , ZC3XX_R000_SYSTEMCONTROL } , /* 00,00,01,cc, */
{ 0xa0 , 0x02 , ZC3XX_R008_CLOCKSETTING } , /* 00,08,02,cc, */
{ 0xa0 , 0x01 , ZC3XX_R010_CMOSSENSORSELECT } , /* 00,10,01,cc, */
{ 0xa0 , 0x00 , ZC3XX_R002_CLOCKSELECT } , /* 00,02,10,cc, */
{ 0xa0 , 0x02 , ZC3XX_R003_FRAMEWIDTHHIGH } , /* 00,03,02,cc, */
{ 0xa0 , 0x80 , ZC3XX_R004_FRAMEWIDTHLOW } , /* 00,04,80,cc, */
{ 0xa0 , 0x01 , ZC3XX_R005_FRAMEHEIGHTHIGH } , /* 00,05,01,cc, */
{ 0xa0 , 0xe0 , ZC3XX_R006_FRAMEHEIGHTLOW } , /* 00,06,e0,cc, */
{ 0xa0 , 0x98 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,98,cc, */
{ 0xa0 , 0x01 , ZC3XX_R001_SYSTEMOPERATING } , /* 00,01,01,cc, */
{ 0xa0 , 0x03 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,03,cc, */
{ 0xa0 , 0x01 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,01,cc, */
{ 0xa0 , 0x00 , ZC3XX_R098_WINYSTARTLOW } , /* 00,98,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R09A_WINXSTARTLOW } , /* 00,9a,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R11A_FIRSTYLOW } , /* 01,1a,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R11C_FIRSTXLOW } , /* 01,1c,00,cc, */
{ 0xa0 , 0xe8 , ZC3XX_R09C_WINHEIGHTLOW } , /* 00,9c,e8,cc,
* 8 < - > 6 */
{ 0xa0 , 0x88 , ZC3XX_R09E_WINWIDTHLOW } , /* 00,9e,88,cc,
* 8 < - > 6 */
{ 0xa0 , 0x10 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,10,cc, */
{ 0xa0 , 0x98 , ZC3XX_R08B_I2CDEVICEADDR } , /* 00,8b,98,cc, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x1b , 0x0024 } , /* 00,1b,24,aa, */
{ 0xdd , 0x00 , 0x0080 } , /* 00,00,80,dd, */
{ 0xaa , 0x1b , 0x0000 } , /* 00,1b,00,aa, */
{ 0xaa , 0x13 , 0x0002 } , /* 00,13,02,aa, */
{ 0xaa , 0x15 , 0x0004 } , /* 00,15,04,aa */
2008-11-28 21:31:43 +03:00
/*?? {0xaa, 0x01, 0x0000}, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x01 , 0x0000 } ,
{ 0xaa , 0x1a , 0x0000 } , /* 00,1a,00,aa, */
{ 0xaa , 0x1c , 0x0017 } , /* 00,1c,17,aa, */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x82 , ZC3XX_R086_EXPTIMEHIGH } , /* 00,86,82,cc, */
{ 0xa0 , 0x83 , ZC3XX_R087_EXPTIMEMID } , /* 00,87,83,cc, */
{ 0xa0 , 0x84 , ZC3XX_R088_EXPTIMELOW } , /* 00,88,84,cc, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x05 , 0x0010 } , /* 00,05,10,aa, */
{ 0xaa , 0x0a , 0x0000 } , /* 00,0a,00,aa, */
{ 0xaa , 0x0b , 0x00a0 } , /* 00,0b,a0,aa, */
{ 0xaa , 0x0c , 0x0000 } , /* 00,0c,00,aa, */
{ 0xaa , 0x0d , 0x00a0 } , /* 00,0d,a0,aa, */
{ 0xaa , 0x0e , 0x0000 } , /* 00,0e,00,aa, */
{ 0xaa , 0x0f , 0x00a0 } , /* 00,0f,a0,aa, */
{ 0xaa , 0x10 , 0x0000 } , /* 00,10,00,aa, */
{ 0xaa , 0x11 , 0x00a0 } , /* 00,11,a0,aa, */
2008-11-28 21:31:43 +03:00
/*?? {0xa0, 0x00, 0x0039},
{ 0xa1 , 0x01 , 0x0037 } , */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x16 , 0x0001 } , /* 00,16,01,aa, */
{ 0xaa , 0x17 , 0x00e8 } , /* 00,17,e6,aa (e6 -> e8) */
{ 0xaa , 0x18 , 0x0002 } , /* 00,18,02,aa, */
{ 0xaa , 0x19 , 0x0088 } , /* 00,19,88,aa, */
{ 0xaa , 0x20 , 0x0020 } , /* 00,20,20,aa, */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0xb7 , ZC3XX_R101_SENSORCORRECTION } , /* 01,01,b7,cc, */
{ 0xa0 , 0x05 , ZC3XX_R012_VIDEOCONTROLFUNC } , /* 00,12,05,cc, */
{ 0xa0 , 0x0d , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0d,cc, */
{ 0xa0 , 0x76 , ZC3XX_R189_AWBSTATUS } , /* 01,89,76,cc, */
{ 0xa0 , 0x09 , 0x01ad } , /* 01,ad,09,cc, */
{ 0xa0 , 0x03 , ZC3XX_R1C5_SHARPNESSMODE } , /* 01,c5,03,cc, */
{ 0xa0 , 0x13 , ZC3XX_R1CB_SHARPNESS05 } , /* 01,cb,13,cc, */
{ 0xa0 , 0x08 , ZC3XX_R250_DEADPIXELSMODE } , /* 02,50,08,cc, */
{ 0xa0 , 0x08 , ZC3XX_R301_EEPROMACCESS } , /* 03,01,08,cc, */
{ 0xa0 , 0x60 , ZC3XX_R1A8_DIGITALGAIN } , /* 01,a8,60,cc, */
{ 0xa0 , 0x61 , ZC3XX_R116_RGAIN } , /* 01,16,61,cc, */
{ 0xa0 , 0x65 , ZC3XX_R118_BGAIN } , /* 01,18,65,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_50HZScale [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0001 } , /* 00,83,01,aa */
{ 0xaa , 0x84 , 0x00aa } , /* 00,84,aa,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc, */
{ 0xa0 , 0x06 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,0d,cc, */
{ 0xa0 , 0xa8 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,50,cc, */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc, */
{ 0xa0 , 0x8e , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,47,cc, */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc, */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc, */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc, */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc, */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc, */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc, */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc, */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc, */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc, */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc, */
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } , /* 01,8d,78,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_50HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0003 } , /* 00,83,03,aa */
{ 0xaa , 0x84 , 0x0054 } , /* 00,84,54,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc, */
{ 0xa0 , 0x0d , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,0d,cc, */
{ 0xa0 , 0x50 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,50,cc, */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc, */
{ 0xa0 , 0x8e , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,8e,cc, */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc, */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc, */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc, */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc, */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc, */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc, */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc, */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc, */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc, */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc, */
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } , /* 01,8d,78,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_60HZScale [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0001 } , /* 00,83,01,aa */
{ 0xaa , 0x84 , 0x0062 } , /* 00,84,62,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc, */
{ 0xa0 , 0x05 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,05,cc, */
{ 0xa0 , 0x88 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,88,cc, */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc, */
{ 0xa0 , 0x3b , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,3b,cc, */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc, */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc, */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,a9,10,cc, */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,aa,24,cc, */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc, */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc, */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc, */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc, */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc, */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc, */
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } , /* 01,8d,78,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_60HZ [ ] = {
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0002 } , /* 00,83,02,aa */
{ 0xaa , 0x84 , 0x00c4 } , /* 00,84,c4,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc, */
{ 0xa0 , 0x0b , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,1,0b,cc, */
{ 0xa0 , 0x10 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,2,10,cc, */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,5,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,6,00,cc, */
{ 0xa0 , 0x76 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,7,76,cc, */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,c,0e,cc, */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,f,15,cc, */
{ 0xa0 , 0x10 , ZC3XX_R1A9_DIGITALLIMITDIFF } , /* 01,9,10,cc, */
{ 0xa0 , 0x24 , ZC3XX_R1AA_DIGITALGAINSTEP } , /* 01,a,24,cc, */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,d,62,cc, */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,e,90,cc, */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,f,c8,cc, */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,0,ff,cc, */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,d,58,cc, */
{ 0xa0 , 0x42 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,42,cc, */
{ 0xa0 , 0x78 , ZC3XX_R18D_YTARGET } , /* 01,d,78,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_NoFlikerScale [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0c , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0c,cc, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0000 } , /* 00,83,00,aa */
{ 0xaa , 0x84 , 0x0020 } , /* 00,84,20,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,0,00,cc, */
{ 0xa0 , 0x05 , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,05,cc, */
{ 0xa0 , 0x88 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,88,cc, */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc, */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc, */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc, */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc, */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc, */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc, */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc, */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc, */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc, */
{ 0xa0 , 0x03 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,03,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2010-01-08 13:06:06 +03:00
static const struct usb_action tas5130c_vf0250_NoFliker [ ] = {
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x0c , ZC3XX_R100_OPERATIONMODE } , /* 01,00,0c,cc, */
2008-06-12 17:58:58 +04:00
{ 0xaa , 0x82 , 0x0000 } , /* 00,82,00,aa */
{ 0xaa , 0x83 , 0x0000 } , /* 00,83,00,aa */
{ 0xaa , 0x84 , 0x0020 } , /* 00,84,20,aa */
2008-07-15 21:23:08 +04:00
{ 0xa0 , 0x00 , ZC3XX_R190_EXPOSURELIMITHIGH } , /* 01,90,00,cc, */
{ 0xa0 , 0x0b , ZC3XX_R191_EXPOSURELIMITMID } , /* 01,91,0b,cc, */
{ 0xa0 , 0x10 , ZC3XX_R192_EXPOSURELIMITLOW } , /* 01,92,10,cc, */
{ 0xa0 , 0x00 , ZC3XX_R195_ANTIFLICKERHIGH } , /* 01,95,00,cc, */
{ 0xa0 , 0x00 , ZC3XX_R196_ANTIFLICKERMID } , /* 01,96,00,cc, */
{ 0xa0 , 0x10 , ZC3XX_R197_ANTIFLICKERLOW } , /* 01,97,10,cc, */
{ 0xa0 , 0x0e , ZC3XX_R18C_AEFREEZE } , /* 01,8c,0e,cc, */
{ 0xa0 , 0x15 , ZC3XX_R18F_AEUNFREEZE } , /* 01,8f,15,cc, */
{ 0xa0 , 0x62 , ZC3XX_R01D_HSYNC_0 } , /* 00,1d,62,cc, */
{ 0xa0 , 0x90 , ZC3XX_R01E_HSYNC_1 } , /* 00,1e,90,cc, */
{ 0xa0 , 0xc8 , ZC3XX_R01F_HSYNC_2 } , /* 00,1f,c8,cc, */
{ 0xa0 , 0xff , ZC3XX_R020_HSYNC_3 } , /* 00,20,ff,cc, */
{ 0xa0 , 0x58 , ZC3XX_R11D_GLOBALGAIN } , /* 01,1d,58,cc, */
{ 0xa0 , 0x03 , ZC3XX_R180_AUTOCORRECTENABLE } , /* 01,80,03,cc */
2008-06-30 22:50:11 +04:00
{ }
2008-06-12 17:58:58 +04:00
} ;
2009-01-08 15:38:45 +03:00
static u8 reg_r_i ( struct gspca_dev * gspca_dev ,
2010-01-07 21:59:12 +03:00
u16 index )
2008-06-12 17:58:58 +04:00
{
2008-07-14 16:38:29 +04:00
usb_control_msg ( gspca_dev - > dev ,
usb_rcvctrlpipe ( gspca_dev - > dev , 0 ) ,
2008-06-12 17:58:58 +04:00
0xa1 ,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE ,
0x01 , /* value */
2008-07-14 16:38:29 +04:00
index , gspca_dev - > usb_buf , 1 ,
2008-06-12 17:58:58 +04:00
500 ) ;
2008-07-14 16:38:29 +04:00
return gspca_dev - > usb_buf [ 0 ] ;
2008-06-12 17:58:58 +04:00
}
2009-01-08 15:38:45 +03:00
static u8 reg_r ( struct gspca_dev * gspca_dev ,
2010-01-07 21:59:12 +03:00
u16 index )
2008-06-12 17:58:58 +04:00
{
2009-01-08 15:38:45 +03:00
u8 ret ;
2008-07-14 16:38:29 +04:00
ret = reg_r_i ( gspca_dev , index ) ;
PDEBUG ( D_USBI , " reg r [%04x] -> %02x " , index , ret ) ;
return ret ;
2008-06-12 17:58:58 +04:00
}
static void reg_w_i ( struct usb_device * dev ,
2010-01-07 21:59:12 +03:00
u8 value ,
u16 index )
2008-06-12 17:58:58 +04:00
{
usb_control_msg ( dev ,
usb_sndctrlpipe ( dev , 0 ) ,
0xa0 ,
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE ,
value , index , NULL , 0 ,
500 ) ;
}
static void reg_w ( struct usb_device * dev ,
2010-01-07 21:59:12 +03:00
u8 value ,
u16 index )
2008-06-12 17:58:58 +04:00
{
2008-07-21 12:42:17 +04:00
PDEBUG ( D_USBO , " reg w [%04x] = %02x " , index , value ) ;
2008-06-12 17:58:58 +04:00
reg_w_i ( dev , value , index ) ;
}
2010-01-07 21:59:12 +03:00
static u16 i2c_read ( struct gspca_dev * gspca_dev ,
u8 reg )
2008-06-12 17:58:58 +04:00
{
2010-01-07 21:59:12 +03:00
u8 retbyte ;
u16 retval ;
2008-06-12 17:58:58 +04:00
2009-01-19 21:18:44 +03:00
reg_w_i ( gspca_dev - > dev , reg , 0x0092 ) ;
reg_w_i ( gspca_dev - > dev , 0x02 , 0x0090 ) ; /* <- read command */
2009-10-20 12:25:16 +04:00
msleep ( 20 ) ;
2008-07-14 16:38:29 +04:00
retbyte = reg_r_i ( gspca_dev , 0x0091 ) ; /* read status */
2009-10-20 12:25:16 +04:00
if ( retbyte ! = 0x00 )
err ( " i2c_r status error %02x " , retbyte ) ;
2008-07-21 12:42:17 +04:00
retval = reg_r_i ( gspca_dev , 0x0095 ) ; /* read Lowbyte */
retval | = reg_r_i ( gspca_dev , 0x0096 ) < < 8 ; /* read Hightbyte */
2009-04-07 12:30:31 +04:00
PDEBUG ( D_USBI , " i2c r [%02x] -> %04x (%02x) " ,
2008-07-21 12:42:17 +04:00
reg , retval , retbyte ) ;
return retval ;
2008-06-12 17:58:58 +04:00
}
2010-01-07 21:59:12 +03:00
static u8 i2c_write ( struct gspca_dev * gspca_dev ,
u8 reg ,
u8 valL ,
u8 valH )
2008-06-12 17:58:58 +04:00
{
2010-01-07 21:59:12 +03:00
u8 retbyte ;
2008-06-12 17:58:58 +04:00
2008-07-14 16:38:29 +04:00
reg_w_i ( gspca_dev - > dev , reg , 0x92 ) ;
reg_w_i ( gspca_dev - > dev , valL , 0x93 ) ;
reg_w_i ( gspca_dev - > dev , valH , 0x94 ) ;
reg_w_i ( gspca_dev - > dev , 0x01 , 0x90 ) ; /* <- write command */
2009-10-20 12:25:16 +04:00
msleep ( 1 ) ;
2008-07-14 16:38:29 +04:00
retbyte = reg_r_i ( gspca_dev , 0x0091 ) ; /* read status */
2009-10-20 12:25:16 +04:00
if ( retbyte ! = 0x00 )
err ( " i2c_w status error %02x " , retbyte ) ;
2008-07-21 12:42:17 +04:00
PDEBUG ( D_USBO , " i2c w [%02x] = %02x%02x (%02x) " ,
2008-06-12 17:58:58 +04:00
reg , valH , valL , retbyte ) ;
return retbyte ;
}
2008-07-14 16:38:29 +04:00
static void usb_exchange ( struct gspca_dev * gspca_dev ,
2008-07-04 18:16:16 +04:00
const struct usb_action * action )
2008-06-12 17:58:58 +04:00
{
while ( action - > req ) {
switch ( action - > req ) {
case 0xa0 : /* write register */
2008-07-14 16:38:29 +04:00
reg_w ( gspca_dev - > dev , action - > val , action - > idx ) ;
2008-06-12 17:58:58 +04:00
break ;
case 0xa1 : /* read status */
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , action - > idx ) ;
2008-06-12 17:58:58 +04:00
break ;
case 0xaa :
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev ,
2008-06-12 17:58:58 +04:00
action - > val , /* reg */
action - > idx & 0xff , /* valL */
action - > idx > > 8 ) ; /* valH */
break ;
2009-01-19 21:18:44 +03:00
case 0xbb :
i2c_write ( gspca_dev ,
action - > idx > > 8 , /* reg */
action - > idx & 0xff , /* valL */
action - > val ) ; /* valH */
break ;
2008-06-12 17:58:58 +04:00
default :
/* case 0xdd: * delay */
msleep ( action - > val / 64 + 10 ) ;
break ;
}
action + + ;
2009-10-20 12:25:16 +04:00
msleep ( 1 ) ;
2008-06-12 17:58:58 +04:00
}
}
static void setmatrix ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
int i ;
2010-01-07 21:59:12 +03:00
const u8 * matrix ;
2009-01-19 21:18:44 +03:00
static const u8 adcm2700_matrix [ 9 ] =
2009-01-26 11:29:06 +03:00
/* {0x66, 0xed, 0xed, 0xed, 0x66, 0xed, 0xed, 0xed, 0x66}; */
/*ms-win*/
{ 0x74 , 0xed , 0xed , 0xed , 0x74 , 0xed , 0xed , 0xed , 0x74 } ;
2010-01-07 21:59:12 +03:00
static const u8 gc0305_matrix [ 9 ] =
2008-06-12 17:58:58 +04:00
{ 0x50 , 0xf8 , 0xf8 , 0xf8 , 0x50 , 0xf8 , 0xf8 , 0xf8 , 0x50 } ;
2010-01-07 21:59:12 +03:00
static const u8 ov7620_matrix [ 9 ] =
2008-06-12 17:58:58 +04:00
{ 0x58 , 0xf4 , 0xf4 , 0xf4 , 0x58 , 0xf4 , 0xf4 , 0xf4 , 0x58 } ;
2010-01-07 21:59:12 +03:00
static const u8 pas202b_matrix [ 9 ] =
2008-12-08 12:41:04 +03:00
{ 0x4c , 0xf5 , 0xff , 0xf9 , 0x51 , 0xf5 , 0xfb , 0xed , 0x5f } ;
2010-01-07 21:59:12 +03:00
static const u8 po2030_matrix [ 9 ] =
2008-06-12 17:58:58 +04:00
{ 0x60 , 0xf0 , 0xf0 , 0xf0 , 0x60 , 0xf0 , 0xf0 , 0xf0 , 0x60 } ;
2009-10-07 12:24:19 +04:00
static const u8 tas5130c_matrix [ 9 ] =
{ 0x68 , 0xec , 0xec , 0xec , 0x68 , 0xec , 0xec , 0xec , 0x68 } ;
2010-01-07 21:59:12 +03:00
static const u8 vf0250_matrix [ 9 ] =
2008-07-21 12:42:17 +04:00
{ 0x7b , 0xea , 0xea , 0xea , 0x7b , 0xea , 0xea , 0xea , 0x7b } ;
2010-01-07 21:59:12 +03:00
static const u8 * matrix_tb [ SENSOR_MAX ] = {
2009-01-19 21:18:44 +03:00
adcm2700_matrix , /* SENSOR_ADCM2700 0 */
2009-09-18 12:36:24 +04:00
ov7620_matrix , /* SENSOR_CS2102 1 */
2009-01-19 21:18:44 +03:00
NULL , /* SENSOR_CS2102K 2 */
gc0305_matrix , /* SENSOR_GC0305 3 */
NULL , /* SENSOR_HDCS2020b 4 */
NULL , /* SENSOR_HV7131B 5 */
NULL , /* SENSOR_HV7131C 6 */
NULL , /* SENSOR_ICM105A 7 */
NULL , /* SENSOR_MC501CB 8 */
2009-11-04 22:38:04 +03:00
gc0305_matrix , /* SENSOR_MI0360SOC 9 */
ov7620_matrix , /* SENSOR_OV7620 10 */
NULL , /* SENSOR_OV7630C 11 */
NULL , /* SENSOR_PAS106 12 */
pas202b_matrix , /* SENSOR_PAS202B 13 */
gc0305_matrix , /* SENSOR_PB0330 14 */
po2030_matrix , /* SENSOR_PO2030 15 */
NULL , /* SENSOR_TAS5130CK 16 */
tas5130c_matrix , /* SENSOR_TAS5130CXX 17 */
vf0250_matrix , /* SENSOR_TAS5130C_VF0250 18 */
2008-12-08 12:41:04 +03:00
} ;
2008-06-12 17:58:58 +04:00
2008-12-08 12:41:04 +03:00
matrix = matrix_tb [ sd - > sensor ] ;
if ( matrix = = NULL )
return ; /* matrix already loaded */
2008-06-12 17:58:58 +04:00
for ( i = 0 ; i < ARRAY_SIZE ( ov7620_matrix ) ; i + + )
reg_w ( gspca_dev - > dev , matrix [ i ] , 0x010a + i ) ;
}
static void setsharpness ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
struct usb_device * dev = gspca_dev - > dev ;
int sharpness ;
2010-01-07 21:59:12 +03:00
static const u8 sharpness_tb [ ] [ 2 ] = {
2008-06-12 17:58:58 +04:00
{ 0x02 , 0x03 } ,
{ 0x04 , 0x07 } ,
{ 0x08 , 0x0f } ,
{ 0x10 , 0x1e }
} ;
2008-06-30 22:50:11 +04:00
sharpness = sd - > sharpness ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , sharpness_tb [ sharpness ] [ 0 ] , 0x01c6 ) ;
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x01c8 ) ;
reg_r ( gspca_dev , 0x01c9 ) ;
reg_r ( gspca_dev , 0x01ca ) ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , sharpness_tb [ sharpness ] [ 1 ] , 0x01cb ) ;
}
static void setcontrast ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
struct usb_device * dev = gspca_dev - > dev ;
2010-01-07 21:59:12 +03:00
const u8 * Tgamma ;
2010-01-04 21:54:59 +03:00
int g , i , k , adj , gp ;
u8 gr [ 16 ] ;
static const u8 delta_tb [ 16 ] = /* delta for contrast */
2010-04-25 22:25:42 +04:00
{ 0x2c , 0x1a , 0x12 , 0x0c , 0x0a , 0x06 , 0x06 , 0x06 ,
0x04 , 0x06 , 0x04 , 0x04 , 0x03 , 0x03 , 0x02 , 0x02 } ;
2010-01-04 21:54:59 +03:00
static const u8 gamma_tb [ 6 ] [ 16 ] = {
2008-06-12 17:58:58 +04:00
{ 0x00 , 0x00 , 0x03 , 0x0d , 0x1b , 0x2e , 0x45 , 0x5f ,
2010-01-04 21:54:59 +03:00
0x79 , 0x93 , 0xab , 0xc1 , 0xd4 , 0xe5 , 0xf3 , 0xff } ,
2008-06-12 17:58:58 +04:00
{ 0x01 , 0x0c , 0x1f , 0x3a , 0x53 , 0x6d , 0x85 , 0x9c ,
2010-01-04 21:54:59 +03:00
0xb0 , 0xc2 , 0xd1 , 0xde , 0xe9 , 0xf2 , 0xf9 , 0xff } ,
2008-06-12 17:58:58 +04:00
{ 0x04 , 0x16 , 0x30 , 0x4e , 0x68 , 0x81 , 0x98 , 0xac ,
2010-01-04 21:54:59 +03:00
0xbe , 0xcd , 0xda , 0xe4 , 0xed , 0xf5 , 0xfb , 0xff } ,
2008-06-12 17:58:58 +04:00
{ 0x13 , 0x38 , 0x59 , 0x79 , 0x92 , 0xa7 , 0xb9 , 0xc8 ,
2010-01-04 21:54:59 +03:00
0xd4 , 0xdf , 0xe7 , 0xee , 0xf4 , 0xf9 , 0xfc , 0xff } ,
2008-06-12 17:58:58 +04:00
{ 0x20 , 0x4b , 0x6e , 0x8d , 0xa3 , 0xb5 , 0xc5 , 0xd2 ,
2010-01-04 21:54:59 +03:00
0xdc , 0xe5 , 0xec , 0xf2 , 0xf6 , 0xfa , 0xfd , 0xff } ,
2008-06-12 17:58:58 +04:00
{ 0x24 , 0x44 , 0x64 , 0x84 , 0x9d , 0xb2 , 0xc4 , 0xd3 ,
2010-01-04 21:54:59 +03:00
0xe0 , 0xeb , 0xf4 , 0xff , 0xff , 0xff , 0xff , 0xff } ,
2008-06-12 17:58:58 +04:00
} ;
2010-01-04 21:54:59 +03:00
Tgamma = gamma_tb [ sd - > gamma - 1 ] ;
2008-06-12 17:58:58 +04:00
2010-01-04 21:54:59 +03:00
k = ( ( int ) sd - > contrast - 128 ) ; /* -128 / 128 */
adj = 0 ;
gp = 0 ;
2008-06-12 17:58:58 +04:00
for ( i = 0 ; i < 16 ; i + + ) {
2010-04-25 22:25:42 +04:00
g = Tgamma [ i ] - delta_tb [ i ] * k / 256 - adj / 2 ;
2008-06-12 17:58:58 +04:00
if ( g > 0xff )
g = 0xff ;
2010-04-25 22:25:42 +04:00
else if ( g < 0 )
g = 0 ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , g , 0x0120 + i ) ; /* gamma */
2010-01-04 21:54:59 +03:00
if ( k > 0 )
adj - - ;
else
adj + + ;
if ( i ! = 0 ) {
if ( gp = = 0 )
gr [ i - 1 ] = 0 ;
2008-06-12 17:58:58 +04:00
else
2010-01-04 21:54:59 +03:00
gr [ i - 1 ] = g - gp ;
2008-06-12 17:58:58 +04:00
}
2010-01-04 21:54:59 +03:00
gp = g ;
2008-06-12 17:58:58 +04:00
}
2010-01-04 21:54:59 +03:00
gr [ 15 ] = gr [ 14 ] / 2 ;
for ( i = 0 ; i < 16 ; i + + )
reg_w ( dev , gr [ i ] , 0x0130 + i ) ; /* gradient */
2008-06-12 17:58:58 +04:00
}
static void setquality ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
struct usb_device * dev = gspca_dev - > dev ;
2010-01-07 21:59:12 +03:00
u8 frxt ;
2008-06-12 17:58:58 +04:00
switch ( sd - > sensor ) {
2009-01-26 11:29:06 +03:00
case SENSOR_ADCM2700 :
2008-06-12 17:58:58 +04:00
case SENSOR_GC0305 :
2008-11-06 21:29:47 +03:00
case SENSOR_HV7131B :
2008-06-12 17:58:58 +04:00
case SENSOR_OV7620 :
2010-01-04 22:09:47 +03:00
case SENSOR_PAS202B :
2008-06-12 17:58:58 +04:00
case SENSOR_PO2030 :
return ;
}
/*fixme: is it really 0008 0007 0018 for all other sensors? */
2009-01-07 22:49:57 +03:00
reg_w ( dev , QUANT_VAL , 0x0008 ) ;
2008-06-12 17:58:58 +04:00
frxt = 0x30 ;
reg_w ( dev , frxt , 0x0007 ) ;
2009-01-07 22:49:57 +03:00
# if QUANT_VAL == 0 || QUANT_VAL == 1 || QUANT_VAL == 2
frxt = 0xff ;
# elif QUANT_VAL == 3
frxt = 0xf0 ;
# elif QUANT_VAL == 4
frxt = 0xe0 ;
# else
frxt = 0x20 ;
# endif
2008-06-12 17:58:58 +04:00
reg_w ( dev , frxt , 0x0018 ) ;
}
/* Matches the sensor's internal frame rate to the lighting frequency.
* Valid frequencies are :
* 50 Hz , for European and Asian lighting ( default )
* 60 Hz , for American lighting
* 0 = No Fliker ( for outdoore usage )
* Returns : 0 for success
*/
static int setlightfreq ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
int i , mode ;
2008-07-04 18:16:16 +04:00
const struct usb_action * zc3_freq ;
static const struct usb_action * freq_tb [ SENSOR_MAX ] [ 6 ] = {
2009-01-19 21:18:44 +03:00
/* SENSOR_ADCM2700 0 */
2009-01-20 16:02:35 +03:00
{ adcm2700_NoFliker , adcm2700_NoFliker ,
adcm2700_50HZ , adcm2700_50HZ ,
adcm2700_60HZ , adcm2700_60HZ } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_CS2102 1 */
2008-06-30 22:50:11 +04:00
{ cs2102_NoFliker , cs2102_NoFlikerScale ,
cs2102_50HZ , cs2102_50HZScale ,
cs2102_60HZ , cs2102_60HZScale } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_CS2102K 2 */
2008-06-30 22:50:11 +04:00
{ cs2102_NoFliker , cs2102_NoFlikerScale ,
2008-09-09 11:32:46 +04:00
NULL , NULL , /* currently disabled */
NULL , NULL } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_GC0305 3 */
2008-06-30 22:50:11 +04:00
{ gc0305_NoFliker , gc0305_NoFliker ,
gc0305_50HZ , gc0305_50HZ ,
gc0305_60HZ , gc0305_60HZ } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_HDCS2020b 4 */
2008-06-30 22:50:11 +04:00
{ hdcs2020b_NoFliker , hdcs2020b_NoFliker ,
hdcs2020b_50HZ , hdcs2020b_50HZ ,
hdcs2020b_60HZ , hdcs2020b_60HZ } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_HV7131B 5 */
2010-01-08 13:06:06 +03:00
{ hv7131b_NoFliker , hv7131b_NoFlikerScale ,
hv7131b_50HZ , hv7131b_50HZScale ,
hv7131b_60HZ , hv7131b_60HZScale } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_HV7131C 6 */
2008-07-05 13:12:47 +04:00
{ NULL , NULL ,
NULL , NULL ,
NULL , NULL } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_ICM105A 7 */
2008-06-30 22:50:11 +04:00
{ icm105a_NoFliker , icm105a_NoFlikerScale ,
icm105a_50HZ , icm105a_50HZScale ,
icm105a_60HZ , icm105a_60HZScale } ,
2009-01-19 21:18:44 +03:00
/* SENSOR_MC501CB 8 */
2010-01-08 13:06:06 +03:00
{ mc501cb_NoFliker , mc501cb_NoFlikerScale ,
mc501cb_50HZ , mc501cb_50HZScale ,
mc501cb_60HZ , mc501cb_60HZScale } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_MI0360SOC 9 */
2010-01-08 13:06:06 +03:00
{ mi360soc_AENoFliker , mi360soc_AENoFlikerScale ,
mi360soc_AE50HZ , mi360soc_AE50HZScale ,
mi360soc_AE60HZ , mi360soc_AE60HZScale } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_OV7620 10 */
2010-01-08 13:06:06 +03:00
{ ov7620_NoFliker , ov7620_NoFliker ,
ov7620_50HZ , ov7620_50HZ ,
ov7620_60HZ , ov7620_60HZ } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_OV7630C 11 */
2008-07-05 13:12:47 +04:00
{ NULL , NULL ,
NULL , NULL ,
NULL , NULL } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_PAS106 12 */
2008-06-30 22:50:11 +04:00
{ pas106b_NoFliker , pas106b_NoFliker ,
pas106b_50HZ , pas106b_50HZ ,
pas106b_60HZ , pas106b_60HZ } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_PAS202B 13 */
2010-04-25 21:57:10 +04:00
{ pas202b_NoFliker , pas202b_NoFlikerScale ,
pas202b_50HZ , pas202b_50HZScale ,
pas202b_60HZ , pas202b_60HZScale } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_PB0330 14 */
2010-04-25 21:57:10 +04:00
{ pb0330_NoFliker , pb0330_NoFlikerScale ,
pb0330_50HZ , pb0330_50HZScale ,
pb0330_60HZ , pb0330_60HZScale } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_PO2030 15 */
2010-01-08 13:06:06 +03:00
{ po2030_NoFliker , po2030_NoFliker ,
po2030_50HZ , po2030_50HZ ,
po2030_60HZ , po2030_60HZ } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_TAS5130CK 16 */
2010-01-08 13:06:06 +03:00
{ tas5130cxx_NoFliker , tas5130cxx_NoFlikerScale ,
tas5130cxx_50HZ , tas5130cxx_50HZScale ,
tas5130cxx_60HZ , tas5130cxx_60HZScale } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_TAS5130CXX 17 */
2010-01-08 13:06:06 +03:00
{ tas5130cxx_NoFliker , tas5130cxx_NoFlikerScale ,
tas5130cxx_50HZ , tas5130cxx_50HZScale ,
tas5130cxx_60HZ , tas5130cxx_60HZScale } ,
2009-11-04 22:38:04 +03:00
/* SENSOR_TAS5130C_VF0250 18 */
2008-06-30 22:50:11 +04:00
{ tas5130c_vf0250_NoFliker , tas5130c_vf0250_NoFlikerScale ,
tas5130c_vf0250_50HZ , tas5130c_vf0250_50HZScale ,
tas5130c_vf0250_60HZ , tas5130c_vf0250_60HZScale } ,
2008-06-12 17:58:58 +04:00
} ;
2008-06-30 22:50:11 +04:00
i = sd - > lightfreq * 2 ;
2008-07-05 18:49:20 +04:00
mode = gspca_dev - > cam . cam_mode [ ( int ) gspca_dev - > curr_mode ] . priv ;
2010-01-08 13:06:06 +03:00
if ( mode )
i + + ; /* 320x240 */
2010-01-07 21:59:12 +03:00
zc3_freq = freq_tb [ sd - > sensor ] [ i ] ;
2008-07-05 13:12:47 +04:00
if ( zc3_freq ! = NULL ) {
2008-07-14 16:38:29 +04:00
usb_exchange ( gspca_dev , zc3_freq ) ;
2008-06-12 17:58:58 +04:00
switch ( sd - > sensor ) {
case SENSOR_GC0305 :
if ( mode /* if 320x240 */
2008-06-30 22:50:11 +04:00
& & sd - > lightfreq = = 1 ) /* and 50Hz */
2008-06-12 17:58:58 +04:00
reg_w ( gspca_dev - > dev , 0x85 , 0x018d ) ;
/* win: 0x80, 0x018d */
break ;
case SENSOR_OV7620 :
if ( ! mode ) { /* if 640x480 */
2008-06-30 22:50:11 +04:00
if ( sd - > lightfreq ! = 0 ) /* and 50 or 60 Hz */
2008-06-12 17:58:58 +04:00
reg_w ( gspca_dev - > dev , 0x40 , 0x0002 ) ;
else
reg_w ( gspca_dev - > dev , 0x44 , 0x0002 ) ;
}
break ;
2010-01-04 22:09:47 +03:00
case SENSOR_PAS202B :
reg_w ( gspca_dev - > dev , 0x00 , 0x01a7 ) ;
break ;
2008-06-12 17:58:58 +04:00
}
}
return 0 ;
}
static void setautogain ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
2010-01-07 21:59:12 +03:00
u8 autoval ;
2008-06-12 17:58:58 +04:00
if ( sd - > autogain )
autoval = 0x42 ;
else
autoval = 0x02 ;
reg_w ( gspca_dev - > dev , autoval , 0x0180 ) ;
}
static void send_unknown ( struct usb_device * dev , int sensor )
{
2008-06-30 22:50:11 +04:00
reg_w ( dev , 0x01 , 0x0000 ) ; /* led off */
2008-06-12 17:58:58 +04:00
switch ( sensor ) {
case SENSOR_PAS106 :
reg_w ( dev , 0x03 , 0x003a ) ;
reg_w ( dev , 0x0c , 0x003b ) ;
reg_w ( dev , 0x08 , 0x0038 ) ;
break ;
2009-01-19 21:18:44 +03:00
case SENSOR_ADCM2700 :
2008-06-12 17:58:58 +04:00
case SENSOR_GC0305 :
case SENSOR_OV7620 :
2009-11-04 22:38:04 +03:00
case SENSOR_MI0360SOC :
2008-06-12 17:58:58 +04:00
case SENSOR_PB0330 :
case SENSOR_PO2030 :
reg_w ( dev , 0x0d , 0x003a ) ;
reg_w ( dev , 0x02 , 0x003b ) ;
reg_w ( dev , 0x00 , 0x0038 ) ;
break ;
2010-01-04 22:09:47 +03:00
case SENSOR_PAS202B :
reg_w ( dev , 0x03 , 0x003b ) ;
reg_w ( dev , 0x0c , 0x003a ) ;
reg_w ( dev , 0x0b , 0x0039 ) ;
reg_w ( dev , 0x0b , 0x0038 ) ;
break ;
2008-06-12 17:58:58 +04:00
}
}
/* start probe 2 wires */
static void start_2wr_probe ( struct usb_device * dev , int sensor )
{
reg_w ( dev , 0x01 , 0x0000 ) ;
reg_w ( dev , sensor , 0x0010 ) ;
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0x03 , 0x0012 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
/* msleep(2); */
}
2008-07-14 16:38:29 +04:00
static int sif_probe ( struct gspca_dev * gspca_dev )
2008-06-12 17:58:58 +04:00
{
2010-01-07 21:59:12 +03:00
u16 checkword ;
2008-06-12 17:58:58 +04:00
2008-07-14 16:38:29 +04:00
start_2wr_probe ( gspca_dev - > dev , 0x0f ) ; /* PAS106 */
reg_w ( gspca_dev - > dev , 0x08 , 0x008d ) ;
2008-06-12 17:58:58 +04:00
msleep ( 150 ) ;
2008-07-14 16:38:29 +04:00
checkword = ( ( i2c_read ( gspca_dev , 0x00 ) & 0x0f ) < < 4 )
| ( ( i2c_read ( gspca_dev , 0x01 ) & 0xf0 ) > > 4 ) ;
2008-06-12 17:58:58 +04:00
PDEBUG ( D_PROBE , " probe sif 0x%04x " , checkword ) ;
if ( checkword = = 0x0007 ) {
2008-07-14 16:38:29 +04:00
send_unknown ( gspca_dev - > dev , SENSOR_PAS106 ) ;
2008-06-12 17:58:58 +04:00
return 0x0f ; /* PAS106 */
}
return - 1 ;
}
2008-07-14 16:38:29 +04:00
static int vga_2wr_probe ( struct gspca_dev * gspca_dev )
2008-06-12 17:58:58 +04:00
{
2008-07-14 16:38:29 +04:00
struct usb_device * dev = gspca_dev - > dev ;
2009-01-08 15:38:45 +03:00
u16 retword ;
2008-06-12 17:58:58 +04:00
start_2wr_probe ( dev , 0x00 ) ; /* HV7131B */
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x01 , 0xaa , 0x00 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x01 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x00 ; /* HV7131B */
start_2wr_probe ( dev , 0x04 ) ; /* CS2102 */
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x01 , 0xaa , 0x00 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x01 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x04 ; /* CS2102 */
start_2wr_probe ( dev , 0x06 ) ; /* OmniVision */
2008-07-21 12:42:17 +04:00
reg_w ( dev , 0x08 , 0x008d ) ;
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x11 , 0xaa , 0x00 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x11 ) ;
if ( retword ! = 0 ) {
2008-06-12 17:58:58 +04:00
/* (should have returned 0xaa) --> Omnivision? */
/* reg_r 0x10 -> 0x06 --> */
goto ov_check ;
}
start_2wr_probe ( dev , 0x08 ) ; /* HDCS2020 */
2010-01-08 14:01:43 +03:00
i2c_write ( gspca_dev , 0x1c , 0x00 , 0x00 ) ;
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x15 , 0xaa , 0x00 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x15 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x08 ; /* HDCS2020 */
start_2wr_probe ( dev , 0x0a ) ; /* PB0330 */
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x07 , 0xaa , 0xaa ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x07 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x0a ; /* PB0330 */
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x03 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x0a ; /* PB0330 ?? */
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x04 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x0a ; /* PB0330 ?? */
start_2wr_probe ( dev , 0x0c ) ; /* ICM105A */
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x01 , 0x11 , 0x00 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x01 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x0c ; /* ICM105A */
start_2wr_probe ( dev , 0x0e ) ; /* PAS202BCB */
2008-07-21 12:42:17 +04:00
reg_w ( dev , 0x08 , 0x008d ) ;
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x03 , 0xaa , 0x00 ) ;
2009-10-20 12:25:16 +04:00
msleep ( 50 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x03 ) ;
2010-01-04 22:09:47 +03:00
if ( retword ! = 0 ) {
send_unknown ( dev , SENSOR_PAS202B ) ;
2008-06-12 17:58:58 +04:00
return 0x0e ; /* PAS202BCB */
2010-01-04 22:09:47 +03:00
}
2008-06-12 17:58:58 +04:00
2009-12-02 12:06:03 +03:00
start_2wr_probe ( dev , 0x02 ) ; /* TAS5130C */
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x01 , 0xaa , 0x00 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x01 ) ;
if ( retword ! = 0 )
2009-12-02 12:06:03 +03:00
return 0x02 ; /* TAS5130C */
2008-06-12 17:58:58 +04:00
ov_check :
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0010 ) ; /* ?? */
reg_r ( gspca_dev , 0x0010 ) ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x01 , 0x0000 ) ;
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0x06 , 0x0010 ) ; /* OmniVision */
reg_w ( dev , 0xa1 , 0x008b ) ;
reg_w ( dev , 0x08 , 0x008d ) ;
msleep ( 500 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
2008-07-14 16:38:29 +04:00
i2c_write ( gspca_dev , 0x12 , 0x80 , 0x00 ) ; /* sensor reset */
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x0a ) < < 8 ;
retword | = i2c_read ( gspca_dev , 0x0b ) ;
PDEBUG ( D_PROBE , " probe 2wr ov vga 0x%04x " , retword ) ;
switch ( retword ) {
2008-06-12 17:58:58 +04:00
case 0x7631 : /* OV7630C */
reg_w ( dev , 0x06 , 0x0010 ) ;
break ;
case 0x7620 : /* OV7620 */
case 0x7648 : /* OV7648 */
break ;
default :
return - 1 ; /* not OmniVision */
}
2009-01-08 15:38:45 +03:00
return retword ;
2008-06-12 17:58:58 +04:00
}
struct sensor_by_chipset_revision {
2010-01-07 21:59:12 +03:00
u16 revision ;
u8 internal_sensor_id ;
2008-06-12 17:58:58 +04:00
} ;
static const struct sensor_by_chipset_revision chipset_revision_sensor [ ] = {
2009-10-07 12:24:19 +04:00
{ 0xc000 , 0x12 } , /* TAS5130C */
2009-11-04 22:38:04 +03:00
{ 0xc001 , 0x13 } , /* MI0360SOC */
2008-06-12 17:58:58 +04:00
{ 0xe001 , 0x13 } ,
{ 0x8001 , 0x13 } ,
{ 0x8000 , 0x14 } , /* CS2102K */
{ 0x8400 , 0x15 } , /* TAS5130K */
2009-12-15 19:40:44 +03:00
{ 0xe400 , 0x15 } ,
2008-06-12 17:58:58 +04:00
} ;
static int vga_3wr_probe ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
struct usb_device * dev = gspca_dev - > dev ;
int i ;
2010-01-07 21:59:12 +03:00
u8 retbyte ;
2009-01-08 15:38:45 +03:00
u16 retword ;
2008-06-12 17:58:58 +04:00
/*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/
reg_w ( dev , 0x02 , 0x0010 ) ;
2008-07-21 12:42:17 +04:00
reg_r ( gspca_dev , 0x0010 ) ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x01 , 0x0000 ) ;
reg_w ( dev , 0x00 , 0x0010 ) ;
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0x91 , 0x008b ) ;
reg_w ( dev , 0x03 , 0x0012 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
reg_w ( dev , 0x05 , 0x0012 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x14 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x11 ; /* HV7131R */
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x15 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x11 ; /* HV7131R */
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x16 ) ;
if ( retword ! = 0 )
2008-06-12 17:58:58 +04:00
return 0x11 ; /* HV7131R */
reg_w ( dev , 0x02 , 0x0010 ) ;
2009-01-08 15:38:45 +03:00
retword = reg_r ( gspca_dev , 0x000b ) < < 8 ;
retword | = reg_r ( gspca_dev , 0x000a ) ;
PDEBUG ( D_PROBE , " probe 3wr vga 1 0x%04x " , retword ) ;
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0010 ) ;
2009-04-05 11:01:13 +04:00
/* value 0x4001 is meaningless */
if ( retword ! = 0x4001 ) {
2009-12-02 12:06:03 +03:00
if ( ( retword & 0xff00 ) = = 0x6400 )
return 0x02 ; /* TAS5130C */
2009-04-05 11:01:13 +04:00
for ( i = 0 ; i < ARRAY_SIZE ( chipset_revision_sensor ) ; i + + ) {
if ( chipset_revision_sensor [ i ] . revision = = retword ) {
sd - > chip_revision = retword ;
send_unknown ( dev , SENSOR_PB0330 ) ;
return chipset_revision_sensor [ i ]
. internal_sensor_id ;
}
2008-06-12 17:58:58 +04:00
}
}
2009-12-02 12:06:03 +03:00
reg_w ( dev , 0x01 , 0x0000 ) ; /* check PB0330 */
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0xdd , 0x008b ) ;
reg_w ( dev , 0x0a , 0x0010 ) ;
reg_w ( dev , 0x03 , 0x0012 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x00 ) ;
if ( retword ! = 0 ) {
2008-06-12 17:58:58 +04:00
PDEBUG ( D_PROBE , " probe 3wr vga type 0a ? " ) ;
2009-12-02 12:06:03 +03:00
return 0x0a ; /* PB0330 */
2008-06-12 17:58:58 +04:00
}
reg_w ( dev , 0x01 , 0x0000 ) ;
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0x98 , 0x008b ) ;
reg_w ( dev , 0x01 , 0x0010 ) ;
reg_w ( dev , 0x03 , 0x0012 ) ;
msleep ( 2 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x00 ) ;
if ( retword ! = 0 ) {
PDEBUG ( D_PROBE , " probe 3wr vga type %02x " , retword ) ;
if ( retword = = 0x0011 ) /* VF0250 */
2008-07-21 12:42:17 +04:00
return 0x0250 ;
2009-01-08 15:38:45 +03:00
if ( retword = = 0x0029 ) /* gc0305 */
2008-07-21 12:42:17 +04:00
send_unknown ( dev , SENSOR_GC0305 ) ;
2009-01-08 15:38:45 +03:00
return retword ;
2008-06-12 17:58:58 +04:00
}
reg_w ( dev , 0x01 , 0x0000 ) ; /* check OmniVision */
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0xa1 , 0x008b ) ;
reg_w ( dev , 0x08 , 0x008d ) ;
reg_w ( dev , 0x06 , 0x0010 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
reg_w ( dev , 0x05 , 0x0012 ) ;
2009-01-08 15:38:45 +03:00
if ( i2c_read ( gspca_dev , 0x1c ) = = 0x007f /* OV7610 - manufacturer ID */
& & i2c_read ( gspca_dev , 0x1d ) = = 0x00a2 ) {
2008-06-12 17:58:58 +04:00
send_unknown ( dev , SENSOR_OV7620 ) ;
return 0x06 ; /* OmniVision confirm ? */
}
2008-07-21 12:42:17 +04:00
reg_w ( dev , 0x01 , 0x0000 ) ;
reg_w ( dev , 0x00 , 0x0002 ) ;
reg_w ( dev , 0x01 , 0x0010 ) ;
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0xee , 0x008b ) ;
reg_w ( dev , 0x03 , 0x0012 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
reg_w ( dev , 0x05 , 0x0012 ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x00 ) < < 8 ; /* ID 0 */
retword | = i2c_read ( gspca_dev , 0x01 ) ; /* ID 1 */
PDEBUG ( D_PROBE , " probe 3wr vga 2 0x%04x " , retword ) ;
if ( retword = = 0x2030 ) {
2008-07-14 16:38:29 +04:00
retbyte = i2c_read ( gspca_dev , 0x02 ) ; /* revision number */
2008-06-12 17:58:58 +04:00
PDEBUG ( D_PROBE , " sensor PO2030 rev 0x%02x " , retbyte ) ;
send_unknown ( dev , SENSOR_PO2030 ) ;
2009-01-08 15:38:45 +03:00
return retword ;
2008-06-12 17:58:58 +04:00
}
2008-07-21 12:42:17 +04:00
reg_w ( dev , 0x01 , 0x0000 ) ;
reg_w ( dev , 0x0a , 0x0010 ) ;
reg_w ( dev , 0xd3 , 0x008b ) ;
reg_w ( dev , 0x01 , 0x0001 ) ;
reg_w ( dev , 0x03 , 0x0012 ) ;
reg_w ( dev , 0x01 , 0x0012 ) ;
2009-04-05 11:01:13 +04:00
reg_w ( dev , 0x05 , 0x0012 ) ;
2008-07-21 12:42:17 +04:00
reg_w ( dev , 0xd3 , 0x008b ) ;
2009-01-08 15:38:45 +03:00
retword = i2c_read ( gspca_dev , 0x01 ) ;
if ( retword ! = 0 ) {
PDEBUG ( D_PROBE , " probe 3wr vga type 0a ? ret: %04x " , retword ) ;
2009-04-05 11:01:13 +04:00
return 0x16 ; /* adcm2700 (6100/6200) */
2008-06-12 17:58:58 +04:00
}
return - 1 ;
}
static int zcxx_probeSensor ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
2009-02-19 21:38:31 +03:00
int sensor ;
2008-06-12 17:58:58 +04:00
switch ( sd - > sensor ) {
case SENSOR_MC501CB :
2008-07-21 12:42:17 +04:00
return - 1 ; /* don't probe */
2008-06-12 17:58:58 +04:00
case SENSOR_TAS5130C_VF0250 :
2008-09-03 23:47:28 +04:00
/* may probe but with no write in reg 0x0010 */
2008-06-12 17:58:58 +04:00
return - 1 ; /* don't probe */
2008-09-03 23:47:28 +04:00
case SENSOR_PAS106 :
sensor = sif_probe ( gspca_dev ) ;
if ( sensor > = 0 )
return sensor ;
break ;
2008-06-12 17:58:58 +04:00
}
2008-07-14 16:38:29 +04:00
sensor = vga_2wr_probe ( gspca_dev ) ;
2009-02-19 21:38:31 +03:00
if ( sensor > = 0 )
2008-09-03 23:47:28 +04:00
return sensor ;
2009-02-19 21:38:31 +03:00
return vga_3wr_probe ( gspca_dev ) ;
2008-06-12 17:58:58 +04:00
}
/* this function is called at probe time */
static int sd_config ( struct gspca_dev * gspca_dev ,
const struct usb_device_id * id )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
struct cam * cam ;
int sensor ;
2010-01-07 21:59:12 +03:00
static const u8 gamma [ SENSOR_MAX ] = {
2009-01-19 21:18:44 +03:00
4 , /* SENSOR_ADCM2700 0 */
2009-09-18 12:36:24 +04:00
4 , /* SENSOR_CS2102 1 */
2009-01-19 21:18:44 +03:00
5 , /* SENSOR_CS2102K 2 */
4 , /* SENSOR_GC0305 3 */
4 , /* SENSOR_HDCS2020b 4 */
4 , /* SENSOR_HV7131B 5 */
4 , /* SENSOR_HV7131C 6 */
4 , /* SENSOR_ICM105A 7 */
4 , /* SENSOR_MC501CB 8 */
2009-11-04 22:38:04 +03:00
4 , /* SENSOR_MI0360SOC 9 */
3 , /* SENSOR_OV7620 10 */
4 , /* SENSOR_OV7630C 11 */
4 , /* SENSOR_PAS106 12 */
4 , /* SENSOR_PAS202B 13 */
4 , /* SENSOR_PB0330 14 */
4 , /* SENSOR_PO2030 15 */
4 , /* SENSOR_TAS5130CK 16 */
3 , /* SENSOR_TAS5130CXX 17 */
3 , /* SENSOR_TAS5130C_VF0250 18 */
2008-06-12 17:58:58 +04:00
} ;
2010-01-13 13:12:28 +03:00
static const u8 mode_tb [ SENSOR_MAX ] = {
2 , /* SENSOR_ADCM2700 0 */
1 , /* SENSOR_CS2102 1 */
1 , /* SENSOR_CS2102K 2 */
1 , /* SENSOR_GC0305 3 */
1 , /* SENSOR_HDCS2020b 4 */
1 , /* SENSOR_HV7131B 5 */
1 , /* SENSOR_HV7131C 6 */
1 , /* SENSOR_ICM105A 7 */
2 , /* SENSOR_MC501CB 8 */
1 , /* SENSOR_MI0360SOC 9 */
2 , /* SENSOR_OV7620 10 */
1 , /* SENSOR_OV7630C 11 */
0 , /* SENSOR_PAS106 12 */
1 , /* SENSOR_PAS202B 13 */
1 , /* SENSOR_PB0330 14 */
1 , /* SENSOR_PO2030 15 */
1 , /* SENSOR_TAS5130CK 16 */
1 , /* SENSOR_TAS5130CXX 17 */
1 , /* SENSOR_TAS5130C_VF0250 18 */
} ;
2008-06-12 17:58:58 +04:00
/* define some sensors from the vendor/product */
2010-01-07 21:59:12 +03:00
sd - > sharpness = SHARPNESS_DEF ;
2008-09-04 00:12:13 +04:00
sd - > sensor = id - > driver_info ;
2008-06-12 17:58:58 +04:00
sensor = zcxx_probeSensor ( gspca_dev ) ;
if ( sensor > = 0 )
2009-01-19 21:18:44 +03:00
PDEBUG ( D_PROBE , " probe sensor -> %04x " , sensor ) ;
2008-06-12 17:58:58 +04:00
if ( ( unsigned ) force_sensor < SENSOR_MAX ) {
sd - > sensor = force_sensor ;
PDEBUG ( D_PROBE , " sensor forced to %d " , force_sensor ) ;
} else {
switch ( sensor ) {
case - 1 :
switch ( sd - > sensor ) {
case SENSOR_MC501CB :
PDEBUG ( D_PROBE , " Sensor MC501CB " ) ;
break ;
case SENSOR_TAS5130C_VF0250 :
PDEBUG ( D_PROBE , " Sensor Tas5130 (VF0250) " ) ;
break ;
default :
PDEBUG ( D_PROBE ,
tree-wide: fix assorted typos all over the place
That is "success", "unknown", "through", "performance", "[re|un]mapping"
, "access", "default", "reasonable", "[con]currently", "temperature"
, "channel", "[un]used", "application", "example","hierarchy", "therefore"
, "[over|under]flow", "contiguous", "threshold", "enough" and others.
Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2009-11-14 18:09:05 +03:00
" Sensor UNKNOWN_0 force Tas5130 " ) ;
2008-06-12 17:58:58 +04:00
sd - > sensor = SENSOR_TAS5130CXX ;
}
break ;
case 0 :
2009-12-20 11:07:10 +03:00
/* check the sensor type */
sensor = i2c_read ( gspca_dev , 0x00 ) ;
PDEBUG ( D_PROBE , " Sensor hv7131 type %d " , sensor ) ;
switch ( sensor ) {
case 0 : /* hv7131b */
case 1 : /* hv7131e */
PDEBUG ( D_PROBE , " Find Sensor HV7131B " ) ;
sd - > sensor = SENSOR_HV7131B ;
break ;
default :
/* case 2: * hv7131r */
PDEBUG ( D_PROBE , " Find Sensor HV7131R(c) " ) ;
sd - > sensor = SENSOR_HV7131C ;
break ;
}
2008-06-12 17:58:58 +04:00
break ;
2009-12-02 12:06:03 +03:00
case 0x02 :
PDEBUG ( D_PROBE , " Sensor TAS5130C " ) ;
sd - > sensor = SENSOR_TAS5130CXX ;
break ;
2008-06-12 17:58:58 +04:00
case 0x04 :
PDEBUG ( D_PROBE , " Find Sensor CS2102 " ) ;
sd - > sensor = SENSOR_CS2102 ;
break ;
case 0x08 :
PDEBUG ( D_PROBE , " Find Sensor HDCS2020(b) " ) ;
sd - > sensor = SENSOR_HDCS2020b ;
break ;
case 0x0a :
PDEBUG ( D_PROBE ,
" Find Sensor PB0330. Chip revision %x " ,
sd - > chip_revision ) ;
sd - > sensor = SENSOR_PB0330 ;
break ;
case 0x0c :
PDEBUG ( D_PROBE , " Find Sensor ICM105A " ) ;
sd - > sensor = SENSOR_ICM105A ;
break ;
case 0x0e :
2008-12-08 12:41:04 +03:00
PDEBUG ( D_PROBE , " Find Sensor PAS202B " ) ;
sd - > sensor = SENSOR_PAS202B ;
2010-01-08 14:02:42 +03:00
/* sd->sharpness = 1; */
2008-06-12 17:58:58 +04:00
break ;
case 0x0f :
PDEBUG ( D_PROBE , " Find Sensor PAS106 " ) ;
sd - > sensor = SENSOR_PAS106 ;
break ;
case 0x10 :
case 0x12 :
2009-10-07 12:24:19 +04:00
PDEBUG ( D_PROBE , " Find Sensor TAS5130C " ) ;
2008-06-12 17:58:58 +04:00
sd - > sensor = SENSOR_TAS5130CXX ;
break ;
case 0x11 :
PDEBUG ( D_PROBE , " Find Sensor HV7131R(c) " ) ;
sd - > sensor = SENSOR_HV7131C ;
break ;
case 0x13 :
PDEBUG ( D_PROBE ,
2009-11-04 22:38:04 +03:00
" Find Sensor MI0360SOC. Chip revision %x " ,
2008-06-12 17:58:58 +04:00
sd - > chip_revision ) ;
2009-11-04 22:38:04 +03:00
sd - > sensor = SENSOR_MI0360SOC ;
2008-06-12 17:58:58 +04:00
break ;
case 0x14 :
PDEBUG ( D_PROBE ,
" Find Sensor CS2102K?. Chip revision %x " ,
sd - > chip_revision ) ;
sd - > sensor = SENSOR_CS2102K ;
break ;
case 0x15 :
PDEBUG ( D_PROBE ,
" Find Sensor TAS5130CK?. Chip revision %x " ,
sd - > chip_revision ) ;
sd - > sensor = SENSOR_TAS5130CK ;
break ;
2009-01-20 11:12:34 +03:00
case 0x16 :
PDEBUG ( D_PROBE , " Find Sensor ADCM2700 " ) ;
sd - > sensor = SENSOR_ADCM2700 ;
break ;
2008-06-12 17:58:58 +04:00
case 0x29 :
PDEBUG ( D_PROBE , " Find Sensor GC0305 " ) ;
sd - > sensor = SENSOR_GC0305 ;
break ;
2008-07-21 12:42:17 +04:00
case 0x0250 :
PDEBUG ( D_PROBE , " Sensor Tas5130 (VF0250) " ) ;
sd - > sensor = SENSOR_TAS5130C_VF0250 ;
break ;
2008-06-12 17:58:58 +04:00
case 0x2030 :
PDEBUG ( D_PROBE , " Find Sensor PO2030 " ) ;
sd - > sensor = SENSOR_PO2030 ;
2008-06-30 22:50:11 +04:00
sd - > sharpness = 0 ; /* from win traces */
2008-06-12 17:58:58 +04:00
break ;
case 0x7620 :
PDEBUG ( D_PROBE , " Find Sensor OV7620 " ) ;
sd - > sensor = SENSOR_OV7620 ;
break ;
2009-02-19 21:41:28 +03:00
case 0x7631 :
PDEBUG ( D_PROBE , " Find Sensor OV7630C " ) ;
sd - > sensor = SENSOR_OV7630C ;
break ;
2008-06-12 17:58:58 +04:00
case 0x7648 :
PDEBUG ( D_PROBE , " Find Sensor OV7648 " ) ;
sd - > sensor = SENSOR_OV7620 ; /* same sensor (?) */
break ;
default :
2009-01-20 11:12:34 +03:00
PDEBUG ( D_ERR | D_PROBE , " Unknown sensor %04x " , sensor ) ;
2008-06-12 17:58:58 +04:00
return - EINVAL ;
}
}
if ( sensor < 0x20 ) {
if ( sensor = = - 1 | | sensor = = 0x10 | | sensor = = 0x12 )
reg_w ( gspca_dev - > dev , 0x02 , 0x0010 ) ;
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0010 ) ;
2008-06-12 17:58:58 +04:00
}
cam = & gspca_dev - > cam ;
/*fixme:test*/
gspca_dev - > nbalt - - ;
2010-01-13 13:12:28 +03:00
switch ( mode_tb [ sd - > sensor ] ) {
case 0 :
2008-06-12 17:58:58 +04:00
cam - > cam_mode = sif_mode ;
2008-07-07 15:31:16 +04:00
cam - > nmodes = ARRAY_SIZE ( sif_mode ) ;
2010-01-13 13:12:28 +03:00
break ;
case 1 :
cam - > cam_mode = vga_mode ;
cam - > nmodes = ARRAY_SIZE ( vga_mode ) ;
break ;
default :
/* case 2: */
cam - > cam_mode = broken_vga_mode ;
cam - > nmodes = ARRAY_SIZE ( broken_vga_mode ) ;
break ;
2008-06-12 17:58:58 +04:00
}
2010-01-07 21:59:12 +03:00
sd - > contrast = CONTRAST_DEF ;
sd - > gamma = gamma [ sd - > sensor ] ;
sd - > autogain = AUTOGAIN_DEF ;
sd - > lightfreq = FREQ_DEF ;
2009-03-02 12:40:52 +03:00
sd - > quality = QUALITY_DEF ;
2008-06-12 17:58:58 +04:00
2008-09-04 00:12:14 +04:00
switch ( sd - > sensor ) {
case SENSOR_HV7131B :
case SENSOR_HV7131C :
case SENSOR_OV7630C :
gspca_dev - > ctrl_dis = ( 1 < < LIGHTFREQ_IDX ) ;
break ;
}
2008-06-12 17:58:58 +04:00
return 0 ;
}
2008-09-04 00:12:16 +04:00
/* this function is called at probe and resume time */
static int sd_init ( struct gspca_dev * gspca_dev )
2008-06-12 17:58:58 +04:00
{
2010-01-08 14:04:21 +03:00
/* switch off the led */
2008-06-12 17:58:58 +04:00
reg_w ( gspca_dev - > dev , 0x01 , 0x0000 ) ;
return 0 ;
}
2008-09-20 13:39:08 +04:00
static int sd_start ( struct gspca_dev * gspca_dev )
2008-06-12 17:58:58 +04:00
{
struct sd * sd = ( struct sd * ) gspca_dev ;
struct usb_device * dev = gspca_dev - > dev ;
int mode ;
2008-07-04 18:16:16 +04:00
static const struct usb_action * init_tb [ SENSOR_MAX ] [ 2 ] = {
2009-01-19 21:18:44 +03:00
{ adcm2700_Initial , adcm2700_InitialScale } , /* 0 */
2010-01-08 13:06:06 +03:00
{ cs2102_Initial , cs2102_InitialScale } , /* 1 */
{ cs2102K_Initial , cs2102K_InitialScale } , /* 2 */
2009-01-19 21:18:44 +03:00
{ gc0305_Initial , gc0305_InitialScale } , /* 3 */
2010-01-08 13:06:06 +03:00
{ hdcs2020b_Initial , hdcs2020b_InitialScale } , /* 4 */
{ hv7131b_Initial , hv7131b_InitialScale } , /* 5 */
{ hv7131r_Initial , hv7131r_InitialScale } , /* 6 */
{ icm105a_Initial , icm105a_InitialScale } , /* 7 */
{ mc501cb_Initial , mc501cb_InitialScale } , /* 8 */
2009-11-04 22:38:04 +03:00
{ mi0360soc_Initial , mi0360soc_InitialScale } , /* 9 */
2010-01-08 13:06:06 +03:00
{ ov7620_Initial , ov7620_InitialScale } , /* 10 */
{ ov7630c_Initial , ov7630c_InitialScale } , /* 11 */
{ pas106b_Initial , pas106b_InitialScale } , /* 12 */
2009-11-04 22:38:04 +03:00
{ pas202b_Initial , pas202b_InitialScale } , /* 13 */
{ pb0330_Initial , pb0330_InitialScale } , /* 14 */
2010-01-08 13:06:06 +03:00
{ po2030_Initial , po2030_InitialScale } , /* 15 */
{ tas5130cK_Initial , tas5130cK_InitialScale } , /* 16 */
2009-11-04 22:38:04 +03:00
{ tas5130cxx_Initial , tas5130cxx_InitialScale } , /* 17 */
2010-01-08 13:06:06 +03:00
{ tas5130c_vf0250_Initial , tas5130c_vf0250_InitialScale } ,
2009-11-04 22:38:04 +03:00
/* 18 */
2008-06-12 17:58:58 +04:00
} ;
2009-03-03 11:33:41 +03:00
/* create the JPEG header */
sd - > jpeg_hdr = kmalloc ( JPEG_HDR_SZ , GFP_KERNEL ) ;
2009-07-19 14:09:32 +04:00
if ( ! sd - > jpeg_hdr )
return - ENOMEM ;
2009-03-03 11:33:41 +03:00
jpeg_define ( sd - > jpeg_hdr , gspca_dev - > height , gspca_dev - > width ,
0x21 ) ; /* JPEG 422 */
jpeg_set_qual ( sd - > jpeg_hdr , sd - > quality ) ;
2010-01-08 14:08:12 +03:00
mode = gspca_dev - > cam . cam_mode [ gspca_dev - > curr_mode ] . priv ;
2008-06-12 17:58:58 +04:00
switch ( sd - > sensor ) {
case SENSOR_HV7131C :
zcxx_probeSensor ( gspca_dev ) ;
break ;
case SENSOR_PAS106 :
2008-07-14 16:38:29 +04:00
usb_exchange ( gspca_dev , pas106b_Initial_com ) ;
2008-06-12 17:58:58 +04:00
break ;
}
2010-01-08 14:08:12 +03:00
usb_exchange ( gspca_dev , init_tb [ sd - > sensor ] [ mode ] ) ;
2008-06-12 17:58:58 +04:00
switch ( sd - > sensor ) {
2009-01-19 21:18:44 +03:00
case SENSOR_ADCM2700 :
2008-06-12 17:58:58 +04:00
case SENSOR_GC0305 :
case SENSOR_OV7620 :
case SENSOR_PO2030 :
2009-12-02 12:06:03 +03:00
case SENSOR_TAS5130CXX :
2008-07-21 12:42:17 +04:00
case SENSOR_TAS5130C_VF0250 :
2009-01-19 21:18:44 +03:00
/* msleep(100); * ?? */
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0002 ) ; /* --> 0x40 */
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x09 , 0x01ad ) ; /* (from win traces) */
reg_w ( dev , 0x15 , 0x01ae ) ;
2009-12-02 12:06:03 +03:00
if ( sd - > sensor = = SENSOR_TAS5130CXX )
break ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x0d , 0x003a ) ;
reg_w ( dev , 0x02 , 0x003b ) ;
reg_w ( dev , 0x00 , 0x0038 ) ;
break ;
2010-01-04 22:09:47 +03:00
case SENSOR_PAS202B :
reg_w ( dev , 0x03 , 0x003b ) ;
reg_w ( dev , 0x0c , 0x003a ) ;
reg_w ( dev , 0x0b , 0x0039 ) ;
break ;
2008-06-12 17:58:58 +04:00
}
setmatrix ( gspca_dev ) ;
switch ( sd - > sensor ) {
2009-01-19 21:18:44 +03:00
case SENSOR_ADCM2700 :
2008-06-12 17:58:58 +04:00
case SENSOR_OV7620 :
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0008 ) ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x00 , 0x0008 ) ;
break ;
2008-12-08 12:41:04 +03:00
case SENSOR_PAS202B :
2008-06-12 17:58:58 +04:00
case SENSOR_GC0305 :
2009-12-02 12:06:03 +03:00
case SENSOR_TAS5130CXX :
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0008 ) ;
2008-06-12 17:58:58 +04:00
/* fall thru */
case SENSOR_PO2030 :
reg_w ( dev , 0x03 , 0x0008 ) ;
break ;
}
setsharpness ( gspca_dev ) ;
/* set the gamma tables when not set */
switch ( sd - > sensor ) {
2009-09-18 12:36:24 +04:00
case SENSOR_CS2102K : /* gamma set in xxx_Initial */
2008-06-12 17:58:58 +04:00
case SENSOR_HDCS2020b :
case SENSOR_OV7630C :
case SENSOR_TAS5130CK :
break ;
default :
setcontrast ( gspca_dev ) ;
break ;
}
setmatrix ( gspca_dev ) ; /* one more time? */
switch ( sd - > sensor ) {
case SENSOR_OV7620 :
2008-12-08 12:41:04 +03:00
case SENSOR_PAS202B :
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0180 ) ; /* from win */
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x00 , 0x0180 ) ;
break ;
default :
setquality ( gspca_dev ) ;
break ;
}
setlightfreq ( gspca_dev ) ;
switch ( sd - > sensor ) {
2009-01-19 21:18:44 +03:00
case SENSOR_ADCM2700 :
reg_w ( dev , 0x09 , 0x01ad ) ; /* (from win traces) */
reg_w ( dev , 0x15 , 0x01ae ) ;
reg_w ( dev , 0x02 , 0x0180 ) ;
/* ms-win + */
reg_w ( dev , 0x40 , 0x0117 ) ;
break ;
2008-06-12 17:58:58 +04:00
case SENSOR_GC0305 :
2009-12-02 12:06:03 +03:00
case SENSOR_TAS5130CXX :
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x09 , 0x01ad ) ; /* (from win traces) */
reg_w ( dev , 0x15 , 0x01ae ) ;
2008-12-08 12:41:04 +03:00
/* fall thru */
case SENSOR_PAS202B :
2008-06-12 17:58:58 +04:00
case SENSOR_PO2030 :
2008-12-08 12:41:04 +03:00
/* reg_w(dev, 0x40, ZC3XX_R117_GGAIN); * (from win traces) */
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0180 ) ;
2008-06-12 17:58:58 +04:00
break ;
case SENSOR_OV7620 :
2008-12-08 12:41:04 +03:00
reg_w ( dev , 0x09 , 0x01ad ) ;
reg_w ( dev , 0x15 , 0x01ae ) ;
2008-07-14 16:38:29 +04:00
i2c_read ( gspca_dev , 0x13 ) ; /*fixme: returns 0xa3 */
i2c_write ( gspca_dev , 0x13 , 0xa3 , 0x00 ) ;
/*fixme: returned value to send? */
2008-12-08 12:41:04 +03:00
reg_w ( dev , 0x40 , 0x0117 ) ;
2008-07-14 16:38:29 +04:00
reg_r ( gspca_dev , 0x0180 ) ;
2008-12-08 12:41:04 +03:00
break ;
}
setautogain ( gspca_dev ) ;
switch ( sd - > sensor ) {
2008-06-12 17:58:58 +04:00
case SENSOR_PO2030 :
2009-10-20 12:25:16 +04:00
msleep ( 50 ) ;
2008-06-12 17:58:58 +04:00
reg_w ( dev , 0x00 , 0x0007 ) ; /* (from win traces) */
2009-01-26 11:29:06 +03:00
reg_w ( dev , 0x02 , ZC3XX_R008_CLOCKSETTING ) ;
2008-06-12 17:58:58 +04:00
break ;
2010-01-04 22:09:47 +03:00
case SENSOR_PAS202B :
reg_w ( dev , 0x32 , 0x0007 ) ; /* (from win traces) */
reg_w ( dev , 0x02 , ZC3XX_R008_CLOCKSETTING ) ;
break ;
2008-06-12 17:58:58 +04:00
}
2008-09-20 13:39:08 +04:00
return 0 ;
2008-06-12 17:58:58 +04:00
}
2008-11-18 12:33:08 +03:00
/* called on streamoff with alt 0 and on disconnect */
2008-06-12 17:58:58 +04:00
static void sd_stop0 ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
2009-03-03 11:33:41 +03:00
kfree ( sd - > jpeg_hdr ) ;
2008-11-18 12:33:08 +03:00
if ( ! gspca_dev - > present )
return ;
2008-06-12 17:58:58 +04:00
send_unknown ( gspca_dev - > dev , sd - > sensor ) ;
}
static void sd_pkt_scan ( struct gspca_dev * gspca_dev ,
2009-11-13 15:21:03 +03:00
u8 * data ,
2008-06-12 17:58:58 +04:00
int len )
{
2009-03-03 11:33:41 +03:00
struct sd * sd = ( struct sd * ) gspca_dev ;
2008-06-12 17:58:58 +04:00
if ( data [ 0 ] = = 0xff & & data [ 1 ] = = 0xd8 ) { /* start of frame */
2009-11-13 15:21:03 +03:00
gspca_frame_add ( gspca_dev , LAST_PACKET ,
NULL , 0 ) ;
2008-06-12 17:58:58 +04:00
/* put the JPEG header in the new frame */
2009-11-13 15:21:03 +03:00
gspca_frame_add ( gspca_dev , FIRST_PACKET ,
2009-03-03 11:33:41 +03:00
sd - > jpeg_hdr , JPEG_HDR_SZ ) ;
2008-06-12 17:58:58 +04:00
/* remove the webcam's header:
* ff d8 ff fe 00 0 e 00 00 ss ss 00 01 ww ww hh hh pp pp
* - ' ss ss ' is the frame sequence number ( BE )
* - ' ww ww ' and ' hh hh ' are the window dimensions ( BE )
* - ' pp pp ' is the packet sequence number ( BE )
*/
data + = 18 ;
len - = 18 ;
}
2009-11-13 15:21:03 +03:00
gspca_frame_add ( gspca_dev , INTER_PACKET , data , len ) ;
2008-06-12 17:58:58 +04:00
}
static int sd_setcontrast ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > contrast = val ;
if ( gspca_dev - > streaming )
setcontrast ( gspca_dev ) ;
return 0 ;
}
static int sd_getcontrast ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > contrast ;
return 0 ;
}
static int sd_setautogain ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > autogain = val ;
if ( gspca_dev - > streaming )
setautogain ( gspca_dev ) ;
return 0 ;
}
static int sd_getautogain ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > autogain ;
return 0 ;
}
2008-06-30 22:50:11 +04:00
static int sd_setgamma ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > gamma = val ;
if ( gspca_dev - > streaming )
setcontrast ( gspca_dev ) ;
return 0 ;
}
2008-06-12 17:58:58 +04:00
static int sd_getgamma ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > gamma ;
return 0 ;
}
2008-06-30 22:50:11 +04:00
static int sd_setfreq ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > lightfreq = val ;
if ( gspca_dev - > streaming )
setlightfreq ( gspca_dev ) ;
return 0 ;
}
static int sd_getfreq ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > lightfreq ;
return 0 ;
}
static int sd_setsharpness ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > sharpness = val ;
if ( gspca_dev - > streaming )
setsharpness ( gspca_dev ) ;
return 0 ;
}
static int sd_getsharpness ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > sharpness ;
return 0 ;
}
static int sd_querymenu ( struct gspca_dev * gspca_dev ,
struct v4l2_querymenu * menu )
{
switch ( menu - > id ) {
case V4L2_CID_POWER_LINE_FREQUENCY :
switch ( menu - > index ) {
case 0 : /* V4L2_CID_POWER_LINE_FREQUENCY_DISABLED */
2008-07-04 18:16:16 +04:00
strcpy ( ( char * ) menu - > name , " NoFliker " ) ;
2008-06-30 22:50:11 +04:00
return 0 ;
case 1 : /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */
2008-07-04 18:16:16 +04:00
strcpy ( ( char * ) menu - > name , " 50 Hz " ) ;
2008-06-30 22:50:11 +04:00
return 0 ;
case 2 : /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */
2008-07-04 18:16:16 +04:00
strcpy ( ( char * ) menu - > name , " 60 Hz " ) ;
2008-06-30 22:50:11 +04:00
return 0 ;
}
break ;
}
return - EINVAL ;
}
2009-03-02 12:40:52 +03:00
static int sd_set_jcomp ( struct gspca_dev * gspca_dev ,
struct v4l2_jpegcompression * jcomp )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
if ( jcomp - > quality < QUALITY_MIN )
sd - > quality = QUALITY_MIN ;
else if ( jcomp - > quality > QUALITY_MAX )
sd - > quality = QUALITY_MAX ;
else
sd - > quality = jcomp - > quality ;
if ( gspca_dev - > streaming )
jpeg_set_qual ( sd - > jpeg_hdr , sd - > quality ) ;
return 0 ;
}
static int sd_get_jcomp ( struct gspca_dev * gspca_dev ,
struct v4l2_jpegcompression * jcomp )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
memset ( jcomp , 0 , sizeof * jcomp ) ;
jcomp - > quality = sd - > quality ;
jcomp - > jpeg_markers = V4L2_JPEG_MARKER_DHT
| V4L2_JPEG_MARKER_DQT ;
return 0 ;
}
2010-01-29 17:05:25 +03:00
# ifdef CONFIG_INPUT
static int sd_int_pkt_scan ( struct gspca_dev * gspca_dev ,
u8 * data , /* interrupt packet data */
int len ) /* interrput packet length */
{
if ( len = = 8 & & data [ 4 ] = = 1 ) {
input_report_key ( gspca_dev - > input_dev , KEY_CAMERA , 1 ) ;
input_sync ( gspca_dev - > input_dev ) ;
input_report_key ( gspca_dev - > input_dev , KEY_CAMERA , 0 ) ;
input_sync ( gspca_dev - > input_dev ) ;
}
return 0 ;
}
# endif
2008-07-04 18:16:16 +04:00
static const struct sd_desc sd_desc = {
2008-06-12 17:58:58 +04:00
. name = MODULE_NAME ,
. ctrls = sd_ctrls ,
2009-07-22 07:02:29 +04:00
. nctrls = ARRAY_SIZE ( sd_ctrls ) ,
2008-06-12 17:58:58 +04:00
. config = sd_config ,
2008-09-04 00:12:16 +04:00
. init = sd_init ,
2008-06-12 17:58:58 +04:00
. start = sd_start ,
. stop0 = sd_stop0 ,
. pkt_scan = sd_pkt_scan ,
2008-06-30 22:50:11 +04:00
. querymenu = sd_querymenu ,
2009-03-02 12:40:52 +03:00
. get_jcomp = sd_get_jcomp ,
. set_jcomp = sd_set_jcomp ,
2010-01-29 17:05:25 +03:00
# ifdef CONFIG_INPUT
. int_pkt_scan = sd_int_pkt_scan ,
# endif
2008-06-12 17:58:58 +04:00
} ;
2008-07-04 18:16:16 +04:00
static const __devinitdata struct usb_device_id device_table [ ] = {
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x041e , 0x041e ) } ,
{ USB_DEVICE ( 0x041e , 0x4017 ) } ,
2008-09-04 00:12:13 +04:00
{ USB_DEVICE ( 0x041e , 0x401c ) , . driver_info = SENSOR_PAS106 } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x041e , 0x401e ) } ,
{ USB_DEVICE ( 0x041e , 0x401f ) } ,
2008-09-04 00:12:20 +04:00
{ USB_DEVICE ( 0x041e , 0x4022 ) } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x041e , 0x4029 ) } ,
2008-09-04 00:12:13 +04:00
{ USB_DEVICE ( 0x041e , 0x4034 ) , . driver_info = SENSOR_PAS106 } ,
{ USB_DEVICE ( 0x041e , 0x4035 ) , . driver_info = SENSOR_PAS106 } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x041e , 0x4036 ) } ,
{ USB_DEVICE ( 0x041e , 0x403a ) } ,
2008-09-04 00:12:13 +04:00
{ USB_DEVICE ( 0x041e , 0x4051 ) , . driver_info = SENSOR_TAS5130C_VF0250 } ,
{ USB_DEVICE ( 0x041e , 0x4053 ) , . driver_info = SENSOR_TAS5130C_VF0250 } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x0458 , 0x7007 ) } ,
{ USB_DEVICE ( 0x0458 , 0x700c ) } ,
{ USB_DEVICE ( 0x0458 , 0x700f ) } ,
{ USB_DEVICE ( 0x0461 , 0x0a00 ) } ,
2008-12-26 20:41:48 +03:00
{ USB_DEVICE ( 0x046d , 0x089d ) , . driver_info = SENSOR_MC501CB } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x046d , 0x08a0 ) } ,
{ USB_DEVICE ( 0x046d , 0x08a1 ) } ,
{ USB_DEVICE ( 0x046d , 0x08a2 ) } ,
{ USB_DEVICE ( 0x046d , 0x08a3 ) } ,
{ USB_DEVICE ( 0x046d , 0x08a6 ) } ,
{ USB_DEVICE ( 0x046d , 0x08a7 ) } ,
{ USB_DEVICE ( 0x046d , 0x08a9 ) } ,
{ USB_DEVICE ( 0x046d , 0x08aa ) } ,
{ USB_DEVICE ( 0x046d , 0x08ac ) } ,
{ USB_DEVICE ( 0x046d , 0x08ad ) } ,
2008-09-04 00:12:20 +04:00
# if !defined CONFIG_USB_ZC0301 && !defined CONFIG_USB_ZC0301_MODULE
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x046d , 0x08ae ) } ,
2008-07-07 15:31:16 +04:00
# endif
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x046d , 0x08af ) } ,
{ USB_DEVICE ( 0x046d , 0x08b9 ) } ,
{ USB_DEVICE ( 0x046d , 0x08d7 ) } ,
{ USB_DEVICE ( 0x046d , 0x08d9 ) } ,
{ USB_DEVICE ( 0x046d , 0x08d8 ) } ,
{ USB_DEVICE ( 0x046d , 0x08da ) } ,
2008-09-04 00:12:13 +04:00
{ USB_DEVICE ( 0x046d , 0x08dd ) , . driver_info = SENSOR_MC501CB } ,
{ USB_DEVICE ( 0x0471 , 0x0325 ) , . driver_info = SENSOR_PAS106 } ,
{ USB_DEVICE ( 0x0471 , 0x0326 ) , . driver_info = SENSOR_PAS106 } ,
{ USB_DEVICE ( 0x0471 , 0x032d ) , . driver_info = SENSOR_PAS106 } ,
{ USB_DEVICE ( 0x0471 , 0x032e ) , . driver_info = SENSOR_PAS106 } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x055f , 0xc005 ) } ,
{ USB_DEVICE ( 0x055f , 0xd003 ) } ,
{ USB_DEVICE ( 0x055f , 0xd004 ) } ,
{ USB_DEVICE ( 0x0698 , 0x2003 ) } ,
2008-09-04 00:12:20 +04:00
{ USB_DEVICE ( 0x0ac8 , 0x0301 ) , . driver_info = SENSOR_PAS106 } ,
2009-03-26 11:10:55 +03:00
{ USB_DEVICE ( 0x0ac8 , 0x0302 ) , . driver_info = SENSOR_PAS106 } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x0ac8 , 0x301b ) } ,
{ USB_DEVICE ( 0x0ac8 , 0x303b ) } ,
2009-12-02 12:06:03 +03:00
{ USB_DEVICE ( 0x0ac8 , 0x305b ) } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x0ac8 , 0x307b ) } ,
{ USB_DEVICE ( 0x10fd , 0x0128 ) } ,
2008-09-04 00:12:20 +04:00
{ USB_DEVICE ( 0x10fd , 0x804d ) } ,
2008-07-25 15:53:03 +04:00
{ USB_DEVICE ( 0x10fd , 0x8050 ) } ,
2008-06-12 17:58:58 +04:00
{ } /* end of entry */
} ;
# undef DVNAME
MODULE_DEVICE_TABLE ( usb , device_table ) ;
/* -- device connect -- */
static int sd_probe ( struct usb_interface * intf ,
const struct usb_device_id * id )
{
return gspca_dev_probe ( intf , id , & sd_desc , sizeof ( struct sd ) ,
THIS_MODULE ) ;
}
/* USB driver */
static struct usb_driver sd_driver = {
. name = MODULE_NAME ,
. id_table = device_table ,
. probe = sd_probe ,
. disconnect = gspca_disconnect ,
2008-09-03 23:48:10 +04:00
# ifdef CONFIG_PM
. suspend = gspca_suspend ,
. resume = gspca_resume ,
# endif
2008-06-12 17:58:58 +04:00
} ;
static int __init sd_mod_init ( void )
{
2009-01-01 19:02:07 +03:00
int ret ;
ret = usb_register ( & sd_driver ) ;
if ( ret < 0 )
2009-01-01 19:04:58 +03:00
return ret ;
2008-07-21 12:42:17 +04:00
PDEBUG ( D_PROBE , " registered " ) ;
2008-06-12 17:58:58 +04:00
return 0 ;
}
static void __exit sd_mod_exit ( void )
{
usb_deregister ( & sd_driver ) ;
PDEBUG ( D_PROBE , " deregistered " ) ;
}
module_init ( sd_mod_init ) ;
module_exit ( sd_mod_exit ) ;
module_param ( force_sensor , int , 0644 ) ;
MODULE_PARM_DESC ( force_sensor ,
" Force sensor. Only for experts!!! " ) ;