2008-06-30 22:50:11 +04:00
/*
* SPCA501 chip based cameras initialization data
*
* V4L2 by Jean - Francois Moine < http : //moinejf.free.fr>
*
* 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
* 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 . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
*/
# define MODULE_NAME "spca501"
# include "gspca.h"
MODULE_AUTHOR ( " Michel Xhaard <mxhaard@users.sourceforge.net> " ) ;
MODULE_DESCRIPTION ( " GSPCA/SPCA501 USB Camera Driver " ) ;
MODULE_LICENSE ( " GPL " ) ;
/* specific webcam descriptor */
struct sd {
struct gspca_dev gspca_dev ; /* !! must be the first item */
unsigned short contrast ;
__u8 brightness ;
__u8 colors ;
2008-11-17 21:03:03 +03:00
__u8 blue_balance ;
__u8 red_balance ;
2008-06-30 22:50:11 +04:00
char subtype ;
# define Arowana300KCMOSCamera 0
# define IntelCreateAndShare 1
# define KodakDVC325 2
# define MystFromOriUnknownCamera 3
# define SmileIntlCamera 4
# define ThreeComHomeConnectLite 5
# define ViewQuestM318B 6
} ;
/* V4L2 controls supported by the driver */
static int sd_setbrightness ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getbrightness ( struct gspca_dev * gspca_dev , __s32 * val ) ;
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_setcolors ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getcolors ( struct gspca_dev * gspca_dev , __s32 * val ) ;
2008-11-17 21:03:03 +03:00
static int sd_setblue_balance ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getblue_balance ( struct gspca_dev * gspca_dev , __s32 * val ) ;
static int sd_setred_balance ( struct gspca_dev * gspca_dev , __s32 val ) ;
static int sd_getred_balance ( struct gspca_dev * gspca_dev , __s32 * val ) ;
2008-06-30 22:50:11 +04:00
2009-12-30 15:12:41 +03:00
static const struct ctrl sd_ctrls [ ] = {
2008-06-30 22:50:11 +04:00
# define MY_BRIGHTNESS 0
{
{
. id = V4L2_CID_BRIGHTNESS ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Brightness " ,
. minimum = 0 ,
. maximum = 127 ,
. step = 1 ,
2008-11-17 21:03:03 +03:00
. default_value = 0 ,
2008-06-30 22:50:11 +04:00
} ,
. set = sd_setbrightness ,
. get = sd_getbrightness ,
} ,
# define MY_CONTRAST 1
{
{
. id = V4L2_CID_CONTRAST ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Contrast " ,
. minimum = 0 ,
2008-11-17 21:03:03 +03:00
. maximum = 64725 ,
2008-06-30 22:50:11 +04:00
. step = 1 ,
2008-11-17 21:03:03 +03:00
. default_value = 64725 ,
2008-06-30 22:50:11 +04:00
} ,
. set = sd_setcontrast ,
. get = sd_getcontrast ,
} ,
# define MY_COLOR 2
{
{
. id = V4L2_CID_SATURATION ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Color " ,
. minimum = 0 ,
. maximum = 63 ,
. step = 1 ,
2008-11-17 21:03:03 +03:00
. default_value = 20 ,
2008-06-30 22:50:11 +04:00
} ,
. set = sd_setcolors ,
. get = sd_getcolors ,
} ,
2008-11-17 21:03:03 +03:00
# define MY_BLUE_BALANCE 3
{
{
. id = V4L2_CID_BLUE_BALANCE ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Blue Balance " ,
. minimum = 0 ,
. maximum = 127 ,
. step = 1 ,
. default_value = 0 ,
} ,
. set = sd_setblue_balance ,
. get = sd_getblue_balance ,
} ,
# define MY_RED_BALANCE 4
{
{
. id = V4L2_CID_RED_BALANCE ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " Red Balance " ,
. minimum = 0 ,
. maximum = 127 ,
. step = 1 ,
. default_value = 0 ,
} ,
. set = sd_setred_balance ,
. get = sd_getred_balance ,
} ,
2008-06-30 22:50:11 +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
{ 160 , 120 , V4L2_PIX_FMT_SPCA501 , V4L2_FIELD_NONE ,
. bytesperline = 160 ,
2008-07-16 17:00:08 +04:00
. sizeimage = 160 * 120 * 3 / 2 ,
2008-07-05 18:49:20 +04:00
. colorspace = V4L2_COLORSPACE_SRGB ,
. priv = 2 } ,
{ 320 , 240 , V4L2_PIX_FMT_SPCA501 , V4L2_FIELD_NONE ,
. bytesperline = 320 ,
2008-07-16 17:00:08 +04:00
. sizeimage = 320 * 240 * 3 / 2 ,
2008-07-05 18:49:20 +04:00
. colorspace = V4L2_COLORSPACE_SRGB ,
. priv = 1 } ,
{ 640 , 480 , V4L2_PIX_FMT_SPCA501 , V4L2_FIELD_NONE ,
. bytesperline = 640 ,
2008-07-16 17:00:08 +04:00
. sizeimage = 640 * 480 * 3 / 2 ,
2008-07-05 18:49:20 +04:00
. colorspace = V4L2_COLORSPACE_SRGB ,
. priv = 0 } ,
2008-06-30 22:50:11 +04:00
} ;
# define SPCA50X_REG_USB 0x2 /* spca505 501 */
/*
* Data to initialize a SPCA501 . From a capture file provided by Bill Roehl
* With SPCA501 chip description
*/
# define CCDSP_SET /* set CCDSP parameters */
# define TG_SET /* set time generator set */
# undef DSPWIN_SET /* set DSP windows parameters */
# undef ALTER_GAMA /* Set alternate set to YUV transform coeffs. */
# define SPCA501_SNAPBIT 0x80
# define SPCA501_SNAPCTRL 0x10
/* Frame packet header offsets for the spca501 */
# define SPCA501_OFFSET_GPIO 1
# define SPCA501_OFFSET_TYPE 2
# define SPCA501_OFFSET_TURN3A 3
# define SPCA501_OFFSET_FRAMSEQ 4
# define SPCA501_OFFSET_COMPRESS 5
# define SPCA501_OFFSET_QUANT 6
# define SPCA501_OFFSET_QUANT2 7
# define SPCA501_OFFSET_DATA 8
# define SPCA501_PROP_COMP_ENABLE(d) ((d) & 1)
# define SPCA501_PROP_SNAP(d) ((d) & 0x40)
# define SPCA501_PROP_SNAP_CTRL(d) ((d) & 0x10)
# define SPCA501_PROP_COMP_THRESH(d) (((d) & 0x0e) >> 1)
# define SPCA501_PROP_COMP_QUANT(d) (((d) & 0x70) >> 4)
/* SPCA501 CCDSP control */
# define SPCA501_REG_CCDSP 0x01
/* SPCA501 control/status registers */
# define SPCA501_REG_CTLRL 0x02
/* registers for color correction and YUV transformation */
# define SPCA501_A11 0x08
# define SPCA501_A12 0x09
# define SPCA501_A13 0x0A
# define SPCA501_A21 0x0B
# define SPCA501_A22 0x0C
# define SPCA501_A23 0x0D
# define SPCA501_A31 0x0E
# define SPCA501_A32 0x0F
# define SPCA501_A33 0x10
/* Data for video camera initialization before capturing */
2008-07-04 18:16:16 +04:00
static const __u16 spca501_open_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
/* bmRequest,value,index */
{ 0x2 , 0x50 , 0x00 } , /* C/S enable soft reset */
{ 0x2 , 0x40 , 0x00 } , /* C/S disable soft reset */
{ 0x2 , 0x02 , 0x05 } , /* C/S general purpose I/O data */
{ 0x2 , 0x03 , 0x05 } , /* C/S general purpose I/O data */
# ifdef CCDSP_SET
{ 0x1 , 0x38 , 0x01 } , /* CCDSP options */
{ 0x1 , 0x05 , 0x02 } , /* CCDSP Optical black level for user settings */
{ 0x1 , 0xC0 , 0x03 } , /* CCDSP Optical black settings */
{ 0x1 , 0x67 , 0x07 } ,
{ 0x1 , 0x63 , 0x3f } , /* CCDSP CCD gamma enable */
{ 0x1 , 0x03 , 0x56 } , /* Add gamma correction */
{ 0x1 , 0xFF , 0x15 } , /* CCDSP High luminance for white balance */
{ 0x1 , 0x01 , 0x16 } , /* CCDSP Low luminance for white balance */
/* Color correction and RGB-to-YUV transformation coefficients changing */
# ifdef ALTER_GAMA
{ 0x0 , 0x00 , 0x08 } , /* A11 */
{ 0x0 , 0x00 , 0x09 } , /* A12 */
{ 0x0 , 0x90 , 0x0A } , /* A13 */
{ 0x0 , 0x12 , 0x0B } , /* A21 */
{ 0x0 , 0x00 , 0x0C } , /* A22 */
{ 0x0 , 0x00 , 0x0D } , /* A23 */
{ 0x0 , 0x00 , 0x0E } , /* A31 */
{ 0x0 , 0x02 , 0x0F } , /* A32 */
{ 0x0 , 0x00 , 0x10 } , /* A33 */
# else
{ 0x1 , 0x2a , 0x08 } , /* A11 0x31 */
{ 0x1 , 0xf8 , 0x09 } , /* A12 f8 */
{ 0x1 , 0xf8 , 0x0A } , /* A13 f8 */
{ 0x1 , 0xf8 , 0x0B } , /* A21 f8 */
{ 0x1 , 0x14 , 0x0C } , /* A22 0x14 */
{ 0x1 , 0xf8 , 0x0D } , /* A23 f8 */
{ 0x1 , 0xf8 , 0x0E } , /* A31 f8 */
{ 0x1 , 0xf8 , 0x0F } , /* A32 f8 */
{ 0x1 , 0x20 , 0x10 } , /* A33 0x20 */
# endif
{ 0x1 , 0x00 , 0x11 } , /* R offset */
{ 0x1 , 0x00 , 0x12 } , /* G offset */
{ 0x1 , 0x00 , 0x13 } , /* B offset */
{ 0x1 , 0x00 , 0x14 } , /* GB offset */
# endif
# ifdef TG_SET
/* Time generator manipulations */
{ 0x0 , 0xfc , 0x0 } , /* Set up high bits of shutter speed */
{ 0x0 , 0x01 , 0x1 } , /* Set up low bits of shutter speed */
{ 0x0 , 0xe4 , 0x04 } , /* DCLK*2 clock phase adjustment */
{ 0x0 , 0x08 , 0x05 } , /* ADCK phase adjustment, inv. ext. VB */
{ 0x0 , 0x03 , 0x06 } , /* FR phase adjustment */
{ 0x0 , 0x01 , 0x07 } , /* FCDS phase adjustment */
{ 0x0 , 0x39 , 0x08 } , /* FS phase adjustment */
{ 0x0 , 0x88 , 0x0a } , /* FH1 phase and delay adjustment */
{ 0x0 , 0x03 , 0x0f } , /* pixel identification */
{ 0x0 , 0x00 , 0x11 } , /* clock source selection (default) */
/*VERY strange manipulations with
* select DMCLP or OBPX to be ADCLP output ( 0x0C )
* OPB always toggle or not ( 0x0D ) but they allow
* us to set up brightness
*/
{ 0x0 , 0x01 , 0x0c } ,
{ 0x0 , 0xe0 , 0x0d } ,
/* Done */
# endif
# ifdef DSPWIN_SET
{ 0x1 , 0xa0 , 0x01 } , /* Setting image processing parameters */
{ 0x1 , 0x1c , 0x17 } , /* Changing Windows positions X1 */
{ 0x1 , 0xe2 , 0x19 } , /* X2 */
{ 0x1 , 0x1c , 0x1b } , /* X3 */
{ 0x1 , 0xe2 , 0x1d } , /* X4 */
{ 0x1 , 0x5f , 0x1f } , /* X5 */
{ 0x1 , 0x32 , 0x20 } , /* Y5 */
{ 0x1 , 0x01 , 0x10 } , /* Changing A33 */
# endif
{ 0x2 , 0x204a , 0x07 } , /* Setting video compression & resolution 160x120 */
{ 0x2 , 0x94 , 0x06 } , /* Setting video no compression */
{ }
} ;
/*
The SPCAxxx docs from Sunplus document these values
in tables , one table per register number . In the data
below , dmRequest is the register number , index is the Addr ,
and value is a combination of Bit values .
Bit Value ( hex )
0 01
1 02
2 04
3 08
4 10
5 20
6 40
7 80
*/
/* Data for chip initialization (set default values) */
2008-07-04 18:16:16 +04:00
static const __u16 spca501_init_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
/* Set all the values to powerup defaults */
/* bmRequest,value,index */
{ 0x0 , 0xAA , 0x00 } ,
{ 0x0 , 0x02 , 0x01 } ,
{ 0x0 , 0x01 , 0x02 } ,
{ 0x0 , 0x02 , 0x03 } ,
{ 0x0 , 0xCE , 0x04 } ,
{ 0x0 , 0x00 , 0x05 } ,
{ 0x0 , 0x00 , 0x06 } ,
{ 0x0 , 0x00 , 0x07 } ,
{ 0x0 , 0x00 , 0x08 } ,
{ 0x0 , 0x00 , 0x09 } ,
{ 0x0 , 0x90 , 0x0A } ,
{ 0x0 , 0x12 , 0x0B } ,
{ 0x0 , 0x00 , 0x0C } ,
{ 0x0 , 0x00 , 0x0D } ,
{ 0x0 , 0x00 , 0x0E } ,
{ 0x0 , 0x02 , 0x0F } ,
{ 0x0 , 0x00 , 0x10 } ,
{ 0x0 , 0x00 , 0x11 } ,
{ 0x0 , 0x00 , 0x12 } ,
{ 0x0 , 0x00 , 0x13 } ,
{ 0x0 , 0x00 , 0x14 } ,
{ 0x0 , 0x00 , 0x15 } ,
{ 0x0 , 0x00 , 0x16 } ,
{ 0x0 , 0x00 , 0x17 } ,
{ 0x0 , 0x00 , 0x18 } ,
{ 0x0 , 0x00 , 0x19 } ,
{ 0x0 , 0x00 , 0x1A } ,
{ 0x0 , 0x00 , 0x1B } ,
{ 0x0 , 0x00 , 0x1C } ,
{ 0x0 , 0x00 , 0x1D } ,
{ 0x0 , 0x00 , 0x1E } ,
{ 0x0 , 0x00 , 0x1F } ,
{ 0x0 , 0x00 , 0x20 } ,
{ 0x0 , 0x00 , 0x21 } ,
{ 0x0 , 0x00 , 0x22 } ,
{ 0x0 , 0x00 , 0x23 } ,
{ 0x0 , 0x00 , 0x24 } ,
{ 0x0 , 0x00 , 0x25 } ,
{ 0x0 , 0x00 , 0x26 } ,
{ 0x0 , 0x00 , 0x27 } ,
{ 0x0 , 0x00 , 0x28 } ,
{ 0x0 , 0x00 , 0x29 } ,
{ 0x0 , 0x00 , 0x2A } ,
{ 0x0 , 0x00 , 0x2B } ,
{ 0x0 , 0x00 , 0x2C } ,
{ 0x0 , 0x00 , 0x2D } ,
{ 0x0 , 0x00 , 0x2E } ,
{ 0x0 , 0x00 , 0x2F } ,
{ 0x0 , 0x00 , 0x30 } ,
{ 0x0 , 0x00 , 0x31 } ,
{ 0x0 , 0x00 , 0x32 } ,
{ 0x0 , 0x00 , 0x33 } ,
{ 0x0 , 0x00 , 0x34 } ,
{ 0x0 , 0x00 , 0x35 } ,
{ 0x0 , 0x00 , 0x36 } ,
{ 0x0 , 0x00 , 0x37 } ,
{ 0x0 , 0x00 , 0x38 } ,
{ 0x0 , 0x00 , 0x39 } ,
{ 0x0 , 0x00 , 0x3A } ,
{ 0x0 , 0x00 , 0x3B } ,
{ 0x0 , 0x00 , 0x3C } ,
{ 0x0 , 0x00 , 0x3D } ,
{ 0x0 , 0x00 , 0x3E } ,
{ 0x0 , 0x00 , 0x3F } ,
{ 0x0 , 0x00 , 0x40 } ,
{ 0x0 , 0x00 , 0x41 } ,
{ 0x0 , 0x00 , 0x42 } ,
{ 0x0 , 0x00 , 0x43 } ,
{ 0x0 , 0x00 , 0x44 } ,
{ 0x0 , 0x00 , 0x45 } ,
{ 0x0 , 0x00 , 0x46 } ,
{ 0x0 , 0x00 , 0x47 } ,
{ 0x0 , 0x00 , 0x48 } ,
{ 0x0 , 0x00 , 0x49 } ,
{ 0x0 , 0x00 , 0x4A } ,
{ 0x0 , 0x00 , 0x4B } ,
{ 0x0 , 0x00 , 0x4C } ,
{ 0x0 , 0x00 , 0x4D } ,
{ 0x0 , 0x00 , 0x4E } ,
{ 0x0 , 0x00 , 0x4F } ,
{ 0x0 , 0x00 , 0x50 } ,
{ 0x0 , 0x00 , 0x51 } ,
{ 0x0 , 0x00 , 0x52 } ,
{ 0x0 , 0x00 , 0x53 } ,
{ 0x0 , 0x00 , 0x54 } ,
{ 0x0 , 0x00 , 0x55 } ,
{ 0x0 , 0x00 , 0x56 } ,
{ 0x0 , 0x00 , 0x57 } ,
{ 0x0 , 0x00 , 0x58 } ,
{ 0x0 , 0x00 , 0x59 } ,
{ 0x0 , 0x00 , 0x5A } ,
{ 0x0 , 0x00 , 0x5B } ,
{ 0x0 , 0x00 , 0x5C } ,
{ 0x0 , 0x00 , 0x5D } ,
{ 0x0 , 0x00 , 0x5E } ,
{ 0x0 , 0x00 , 0x5F } ,
{ 0x0 , 0x00 , 0x60 } ,
{ 0x0 , 0x00 , 0x61 } ,
{ 0x0 , 0x00 , 0x62 } ,
{ 0x0 , 0x00 , 0x63 } ,
{ 0x0 , 0x00 , 0x64 } ,
{ 0x0 , 0x00 , 0x65 } ,
{ 0x0 , 0x00 , 0x66 } ,
{ 0x0 , 0x00 , 0x67 } ,
{ 0x0 , 0x00 , 0x68 } ,
{ 0x0 , 0x00 , 0x69 } ,
{ 0x0 , 0x00 , 0x6A } ,
{ 0x0 , 0x00 , 0x6B } ,
{ 0x0 , 0x00 , 0x6C } ,
{ 0x0 , 0x00 , 0x6D } ,
{ 0x0 , 0x00 , 0x6E } ,
{ 0x0 , 0x00 , 0x6F } ,
{ 0x0 , 0x00 , 0x70 } ,
{ 0x0 , 0x00 , 0x71 } ,
{ 0x0 , 0x00 , 0x72 } ,
{ 0x0 , 0x00 , 0x73 } ,
{ 0x0 , 0x00 , 0x74 } ,
{ 0x0 , 0x00 , 0x75 } ,
{ 0x0 , 0x00 , 0x76 } ,
{ 0x0 , 0x00 , 0x77 } ,
{ 0x0 , 0x00 , 0x78 } ,
{ 0x0 , 0x00 , 0x79 } ,
{ 0x0 , 0x00 , 0x7A } ,
{ 0x0 , 0x00 , 0x7B } ,
{ 0x0 , 0x00 , 0x7C } ,
{ 0x0 , 0x00 , 0x7D } ,
{ 0x0 , 0x00 , 0x7E } ,
{ 0x0 , 0x00 , 0x7F } ,
{ 0x0 , 0x00 , 0x80 } ,
{ 0x0 , 0x00 , 0x81 } ,
{ 0x0 , 0x00 , 0x82 } ,
{ 0x0 , 0x00 , 0x83 } ,
{ 0x0 , 0x00 , 0x84 } ,
{ 0x0 , 0x00 , 0x85 } ,
{ 0x0 , 0x00 , 0x86 } ,
{ 0x0 , 0x00 , 0x87 } ,
{ 0x0 , 0x00 , 0x88 } ,
{ 0x0 , 0x00 , 0x89 } ,
{ 0x0 , 0x00 , 0x8A } ,
{ 0x0 , 0x00 , 0x8B } ,
{ 0x0 , 0x00 , 0x8C } ,
{ 0x0 , 0x00 , 0x8D } ,
{ 0x0 , 0x00 , 0x8E } ,
{ 0x0 , 0x00 , 0x8F } ,
{ 0x0 , 0x00 , 0x90 } ,
{ 0x0 , 0x00 , 0x91 } ,
{ 0x0 , 0x00 , 0x92 } ,
{ 0x0 , 0x00 , 0x93 } ,
{ 0x0 , 0x00 , 0x94 } ,
{ 0x0 , 0x00 , 0x95 } ,
{ 0x0 , 0x00 , 0x96 } ,
{ 0x0 , 0x00 , 0x97 } ,
{ 0x0 , 0x00 , 0x98 } ,
{ 0x0 , 0x00 , 0x99 } ,
{ 0x0 , 0x00 , 0x9A } ,
{ 0x0 , 0x00 , 0x9B } ,
{ 0x0 , 0x00 , 0x9C } ,
{ 0x0 , 0x00 , 0x9D } ,
{ 0x0 , 0x00 , 0x9E } ,
{ 0x0 , 0x00 , 0x9F } ,
{ 0x0 , 0x00 , 0xA0 } ,
{ 0x0 , 0x00 , 0xA1 } ,
{ 0x0 , 0x00 , 0xA2 } ,
{ 0x0 , 0x00 , 0xA3 } ,
{ 0x0 , 0x00 , 0xA4 } ,
{ 0x0 , 0x00 , 0xA5 } ,
{ 0x0 , 0x00 , 0xA6 } ,
{ 0x0 , 0x00 , 0xA7 } ,
{ 0x0 , 0x00 , 0xA8 } ,
{ 0x0 , 0x00 , 0xA9 } ,
{ 0x0 , 0x00 , 0xAA } ,
{ 0x0 , 0x00 , 0xAB } ,
{ 0x0 , 0x00 , 0xAC } ,
{ 0x0 , 0x00 , 0xAD } ,
{ 0x0 , 0x00 , 0xAE } ,
{ 0x0 , 0x00 , 0xAF } ,
{ 0x0 , 0x00 , 0xB0 } ,
{ 0x0 , 0x00 , 0xB1 } ,
{ 0x0 , 0x00 , 0xB2 } ,
{ 0x0 , 0x00 , 0xB3 } ,
{ 0x0 , 0x00 , 0xB4 } ,
{ 0x0 , 0x00 , 0xB5 } ,
{ 0x0 , 0x00 , 0xB6 } ,
{ 0x0 , 0x00 , 0xB7 } ,
{ 0x0 , 0x00 , 0xB8 } ,
{ 0x0 , 0x00 , 0xB9 } ,
{ 0x0 , 0x00 , 0xBA } ,
{ 0x0 , 0x00 , 0xBB } ,
{ 0x0 , 0x00 , 0xBC } ,
{ 0x0 , 0x00 , 0xBD } ,
{ 0x0 , 0x00 , 0xBE } ,
{ 0x0 , 0x00 , 0xBF } ,
{ 0x0 , 0x00 , 0xC0 } ,
{ 0x0 , 0x00 , 0xC1 } ,
{ 0x0 , 0x00 , 0xC2 } ,
{ 0x0 , 0x00 , 0xC3 } ,
{ 0x0 , 0x00 , 0xC4 } ,
{ 0x0 , 0x00 , 0xC5 } ,
{ 0x0 , 0x00 , 0xC6 } ,
{ 0x0 , 0x00 , 0xC7 } ,
{ 0x0 , 0x00 , 0xC8 } ,
{ 0x0 , 0x00 , 0xC9 } ,
{ 0x0 , 0x00 , 0xCA } ,
{ 0x0 , 0x00 , 0xCB } ,
{ 0x0 , 0x00 , 0xCC } ,
{ 0x1 , 0xF4 , 0x00 } ,
{ 0x1 , 0x38 , 0x01 } ,
{ 0x1 , 0x40 , 0x02 } ,
{ 0x1 , 0x0A , 0x03 } ,
{ 0x1 , 0x40 , 0x04 } ,
{ 0x1 , 0x40 , 0x05 } ,
{ 0x1 , 0x40 , 0x06 } ,
{ 0x1 , 0x67 , 0x07 } ,
{ 0x1 , 0x31 , 0x08 } ,
{ 0x1 , 0x00 , 0x09 } ,
{ 0x1 , 0x00 , 0x0A } ,
{ 0x1 , 0x00 , 0x0B } ,
{ 0x1 , 0x14 , 0x0C } ,
{ 0x1 , 0x00 , 0x0D } ,
{ 0x1 , 0x00 , 0x0E } ,
{ 0x1 , 0x00 , 0x0F } ,
{ 0x1 , 0x1E , 0x10 } ,
{ 0x1 , 0x00 , 0x11 } ,
{ 0x1 , 0x00 , 0x12 } ,
{ 0x1 , 0x00 , 0x13 } ,
{ 0x1 , 0x00 , 0x14 } ,
{ 0x1 , 0xFF , 0x15 } ,
{ 0x1 , 0x01 , 0x16 } ,
{ 0x1 , 0x32 , 0x17 } ,
{ 0x1 , 0x23 , 0x18 } ,
{ 0x1 , 0xCE , 0x19 } ,
{ 0x1 , 0x23 , 0x1A } ,
{ 0x1 , 0x32 , 0x1B } ,
{ 0x1 , 0x8D , 0x1C } ,
{ 0x1 , 0xCE , 0x1D } ,
{ 0x1 , 0x8D , 0x1E } ,
{ 0x1 , 0x00 , 0x1F } ,
{ 0x1 , 0x00 , 0x20 } ,
{ 0x1 , 0xFF , 0x3E } ,
{ 0x1 , 0x02 , 0x3F } ,
{ 0x1 , 0x00 , 0x40 } ,
{ 0x1 , 0x00 , 0x41 } ,
{ 0x1 , 0x00 , 0x42 } ,
{ 0x1 , 0x00 , 0x43 } ,
{ 0x1 , 0x00 , 0x44 } ,
{ 0x1 , 0x00 , 0x45 } ,
{ 0x1 , 0x00 , 0x46 } ,
{ 0x1 , 0x00 , 0x47 } ,
{ 0x1 , 0x00 , 0x48 } ,
{ 0x1 , 0x00 , 0x49 } ,
{ 0x1 , 0x00 , 0x4A } ,
{ 0x1 , 0x00 , 0x4B } ,
{ 0x1 , 0x00 , 0x4C } ,
{ 0x1 , 0x00 , 0x4D } ,
{ 0x1 , 0x00 , 0x4E } ,
{ 0x1 , 0x00 , 0x4F } ,
{ 0x1 , 0x00 , 0x50 } ,
{ 0x1 , 0x00 , 0x51 } ,
{ 0x1 , 0x00 , 0x52 } ,
{ 0x1 , 0x00 , 0x53 } ,
{ 0x1 , 0x00 , 0x54 } ,
{ 0x1 , 0x00 , 0x55 } ,
{ 0x1 , 0x00 , 0x56 } ,
{ 0x1 , 0x00 , 0x57 } ,
{ 0x1 , 0x00 , 0x58 } ,
{ 0x1 , 0x00 , 0x59 } ,
{ 0x1 , 0x00 , 0x5A } ,
{ 0x2 , 0x03 , 0x00 } ,
{ 0x2 , 0x00 , 0x01 } ,
{ 0x2 , 0x00 , 0x05 } ,
{ 0x2 , 0x00 , 0x06 } ,
{ 0x2 , 0x00 , 0x07 } ,
{ 0x2 , 0x00 , 0x10 } ,
{ 0x2 , 0x00 , 0x11 } ,
/* Strange - looks like the 501 driver doesn't do anything
* at insert time except read the EEPROM
*/
{ }
} ;
/* Data for video camera init before capture.
* Capture and decoding by Colin Peart .
* This is is for the 3 com HomeConnect Lite which is spca501a based .
*/
2008-07-04 18:16:16 +04:00
static const __u16 spca501_3com_open_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
/* bmRequest,value,index */
{ 0x2 , 0x0050 , 0x0000 } , /* C/S Enable TG soft reset, timing mode=010 */
{ 0x2 , 0x0043 , 0x0000 } , /* C/S Disable TG soft reset, timing mode=010 */
{ 0x2 , 0x0002 , 0x0005 } , /* C/S GPIO */
{ 0x2 , 0x0003 , 0x0005 } , /* C/S GPIO */
# ifdef CCDSP_SET
{ 0x1 , 0x0020 , 0x0001 } , /* CCDSP Options */
{ 0x1 , 0x0020 , 0x0002 } , /* CCDSP Black Level */
{ 0x1 , 0x006e , 0x0007 } , /* CCDSP Gamma options */
{ 0x1 , 0x0090 , 0x0015 } , /* CCDSP Luminance Low */
{ 0x1 , 0x00ff , 0x0016 } , /* CCDSP Luminance High */
{ 0x1 , 0x0003 , 0x003F } , /* CCDSP Gamma correction toggle */
# ifdef ALTER_GAMMA
{ 0x1 , 0x0010 , 0x0008 } , /* CCDSP YUV A11 */
{ 0x1 , 0x0000 , 0x0009 } , /* CCDSP YUV A12 */
{ 0x1 , 0x0000 , 0x000a } , /* CCDSP YUV A13 */
{ 0x1 , 0x0000 , 0x000b } , /* CCDSP YUV A21 */
{ 0x1 , 0x0010 , 0x000c } , /* CCDSP YUV A22 */
{ 0x1 , 0x0000 , 0x000d } , /* CCDSP YUV A23 */
{ 0x1 , 0x0000 , 0x000e } , /* CCDSP YUV A31 */
{ 0x1 , 0x0000 , 0x000f } , /* CCDSP YUV A32 */
{ 0x1 , 0x0010 , 0x0010 } , /* CCDSP YUV A33 */
{ 0x1 , 0x0000 , 0x0011 } , /* CCDSP R Offset */
{ 0x1 , 0x0000 , 0x0012 } , /* CCDSP G Offset */
{ 0x1 , 0x0001 , 0x0013 } , /* CCDSP B Offset */
{ 0x1 , 0x0001 , 0x0014 } , /* CCDSP BG Offset */
{ 0x1 , 0x003f , 0x00C1 } , /* CCDSP Gamma Correction Enable */
# endif
# endif
# ifdef TG_SET
{ 0x0 , 0x00fc , 0x0000 } , /* TG Shutter Speed High Bits */
{ 0x0 , 0x0000 , 0x0001 } , /* TG Shutter Speed Low Bits */
{ 0x0 , 0x00e4 , 0x0004 } , /* TG DCLK*2 Adjust */
{ 0x0 , 0x0008 , 0x0005 } , /* TG ADCK Adjust */
{ 0x0 , 0x0003 , 0x0006 } , /* TG FR Phase Adjust */
{ 0x0 , 0x0001 , 0x0007 } , /* TG FCDS Phase Adjust */
{ 0x0 , 0x0039 , 0x0008 } , /* TG FS Phase Adjust */
{ 0x0 , 0x0088 , 0x000a } , /* TG MH1 */
{ 0x0 , 0x0003 , 0x000f } , /* TG Pixel ID */
/* Like below, unexplained toglleing */
{ 0x0 , 0x0080 , 0x000c } ,
{ 0x0 , 0x0000 , 0x000d } ,
{ 0x0 , 0x0080 , 0x000c } ,
{ 0x0 , 0x0004 , 0x000d } ,
{ 0x0 , 0x0000 , 0x000c } ,
{ 0x0 , 0x0000 , 0x000d } ,
{ 0x0 , 0x0040 , 0x000c } ,
{ 0x0 , 0x0017 , 0x000d } ,
{ 0x0 , 0x00c0 , 0x000c } ,
{ 0x0 , 0x0000 , 0x000d } ,
{ 0x0 , 0x0080 , 0x000c } ,
{ 0x0 , 0x0006 , 0x000d } ,
{ 0x0 , 0x0080 , 0x000c } ,
{ 0x0 , 0x0004 , 0x000d } ,
{ 0x0 , 0x0002 , 0x0003 } ,
# endif
# ifdef DSPWIN_SET
{ 0x1 , 0x001c , 0x0017 } , /* CCDSP W1 Start X */
{ 0x1 , 0x00e2 , 0x0019 } , /* CCDSP W2 Start X */
{ 0x1 , 0x001c , 0x001b } , /* CCDSP W3 Start X */
{ 0x1 , 0x00e2 , 0x001d } , /* CCDSP W4 Start X */
{ 0x1 , 0x00aa , 0x001f } , /* CCDSP W5 Start X */
{ 0x1 , 0x0070 , 0x0020 } , /* CCDSP W5 Start Y */
# endif
{ 0x0 , 0x0001 , 0x0010 } , /* TG Start Clock */
/* {0x2, 0x006a, 0x0001}, * C/S Enable ISOSYNCH Packet Engine */
{ 0x2 , 0x0068 , 0x0001 } , /* C/S Diable ISOSYNCH Packet Engine */
{ 0x2 , 0x0000 , 0x0005 } ,
{ 0x2 , 0x0043 , 0x0000 } , /* C/S Set Timing Mode, Disable TG soft reset */
{ 0x2 , 0x0043 , 0x0000 } , /* C/S Set Timing Mode, Disable TG soft reset */
{ 0x2 , 0x0002 , 0x0005 } , /* C/S GPIO */
{ 0x2 , 0x0003 , 0x0005 } , /* C/S GPIO */
{ 0x2 , 0x006a , 0x0001 } , /* C/S Enable ISOSYNCH Packet Engine */
{ }
} ;
/*
* Data used to initialize a SPCA501C with HV7131B sensor .
* From a capture file taken with USBSnoop v 1.5
* I have a " SPCA501C pc camera chipset " manual by sunplus , but some
* of the value meanings are obscure or simply " reserved " .
* to do list :
* 1 ) Understand what every value means
* 2 ) Understand why some values seem to appear more than once
* 3 ) Write a small comment for each line of the following arrays .
*/
2008-07-04 18:16:16 +04:00
static const __u16 spca501c_arowana_open_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
/* bmRequest,value,index */
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x01 , 0x0006 , 0x0011 } ,
{ 0x01 , 0x00ff , 0x0012 } ,
{ 0x01 , 0x0014 , 0x0013 } ,
{ 0x01 , 0x0000 , 0x0014 } ,
{ 0x01 , 0x0042 , 0x0051 } ,
{ 0x01 , 0x0040 , 0x0052 } ,
{ 0x01 , 0x0051 , 0x0053 } ,
{ 0x01 , 0x0040 , 0x0054 } ,
{ 0x01 , 0x0000 , 0x0055 } ,
{ 0x00 , 0x0025 , 0x0000 } ,
{ 0x00 , 0x0026 , 0x0000 } ,
{ 0x00 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0027 , 0x0000 } ,
{ 0x00 , 0x008a , 0x0000 } ,
{ }
} ;
2008-07-04 18:16:16 +04:00
static const __u16 spca501c_arowana_init_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
/* bmRequest,value,index */
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x01 , 0x0006 , 0x0011 } ,
{ 0x01 , 0x00ff , 0x0012 } ,
{ 0x01 , 0x0014 , 0x0013 } ,
{ 0x01 , 0x0000 , 0x0014 } ,
{ 0x01 , 0x0042 , 0x0051 } ,
{ 0x01 , 0x0040 , 0x0052 } ,
{ 0x01 , 0x0051 , 0x0053 } ,
{ 0x01 , 0x0040 , 0x0054 } ,
{ 0x01 , 0x0000 , 0x0055 } ,
{ 0x00 , 0x0025 , 0x0000 } ,
{ 0x00 , 0x0026 , 0x0000 } ,
{ 0x00 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0027 , 0x0000 } ,
{ 0x00 , 0x008a , 0x0000 } ,
{ 0x02 , 0x0000 , 0x0005 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x000c , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0000 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } ,
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } ,
{ 0x00 , 0x0000 , 0x0024 } ,
{ 0x00 , 0x00d5 , 0x0025 } ,
{ 0x00 , 0x0000 , 0x0026 } ,
{ 0x00 , 0x000b , 0x0027 } ,
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
{ 0xff , 0x0000 , 0x00d0 } ,
{ 0xff , 0x00d8 , 0x00d1 } ,
{ 0xff , 0x0000 , 0x00d4 } ,
{ 0xff , 0x0000 , 0x00d5 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0x00fd , 0x000a } ,
{ 0x01 , 0x0038 , 0x000b } ,
{ 0x01 , 0x00d1 , 0x000c } ,
{ 0x01 , 0x00f7 , 0x000d } ,
{ 0x01 , 0x00ed , 0x000e } ,
{ 0x01 , 0x00d8 , 0x000f } ,
{ 0x01 , 0x0038 , 0x0010 } ,
{ 0x01 , 0x00ff , 0x0015 } ,
{ 0x01 , 0x0001 , 0x0016 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } ,
{ 0x01 , 0x00ff , 0x003e } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0060 , 0x0057 } ,
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } ,
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x100a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x000c , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0000 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } ,
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } ,
{ 0x00 , 0x0000 , 0x0024 } ,
{ 0x00 , 0x00d5 , 0x0025 } ,
{ 0x00 , 0x0000 , 0x0026 } ,
{ 0x00 , 0x000b , 0x0027 } ,
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
{ 0xff , 0x0000 , 0x00d0 } ,
{ 0xff , 0x00d8 , 0x00d1 } ,
{ 0xff , 0x0000 , 0x00d4 } ,
{ 0xff , 0x0000 , 0x00d5 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0x00fd , 0x000a } ,
{ 0x01 , 0x0038 , 0x000b } ,
{ 0x01 , 0x00d1 , 0x000c } ,
{ 0x01 , 0x00f7 , 0x000d } ,
{ 0x01 , 0x00ed , 0x000e } ,
{ 0x01 , 0x00d8 , 0x000f } ,
{ 0x01 , 0x0038 , 0x0010 } ,
{ 0x01 , 0x00ff , 0x0015 } ,
{ 0x01 , 0x0001 , 0x0016 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } ,
{ 0x01 , 0x00ff , 0x003e } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0060 , 0x0057 } ,
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } ,
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x100a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0xfffd , 0x000a } ,
{ 0x01 , 0x0023 , 0x000b } ,
{ 0x01 , 0xffea , 0x000c } ,
{ 0x01 , 0xfff4 , 0x000d } ,
{ 0x01 , 0xfffc , 0x000e } ,
{ 0x01 , 0xffe3 , 0x000f } ,
{ 0x01 , 0x001f , 0x0010 } ,
{ 0x01 , 0x00a8 , 0x0001 } ,
{ 0x01 , 0x0067 , 0x0007 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x00c8 , 0x0015 } ,
{ 0x01 , 0x0032 , 0x0016 } ,
{ 0x01 , 0x0000 , 0x0011 } ,
{ 0x01 , 0x0000 , 0x0012 } ,
{ 0x01 , 0x0000 , 0x0013 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xc000 , 0x0001 } ,
{ 0x02 , 0x0000 , 0x0005 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x000c , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0000 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } ,
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } ,
{ 0x00 , 0x0000 , 0x0024 } ,
{ 0x00 , 0x00d5 , 0x0025 } ,
{ 0x00 , 0x0000 , 0x0026 } ,
{ 0x00 , 0x000b , 0x0027 } ,
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
{ 0xff , 0x0000 , 0x00d0 } ,
{ 0xff , 0x00d8 , 0x00d1 } ,
{ 0xff , 0x0000 , 0x00d4 } ,
{ 0xff , 0x0000 , 0x00d5 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0x00fd , 0x000a } ,
{ 0x01 , 0x0038 , 0x000b } ,
{ 0x01 , 0x00d1 , 0x000c } ,
{ 0x01 , 0x00f7 , 0x000d } ,
{ 0x01 , 0x00ed , 0x000e } ,
{ 0x01 , 0x00d8 , 0x000f } ,
{ 0x01 , 0x0038 , 0x0010 } ,
{ 0x01 , 0x00ff , 0x0015 } ,
{ 0x01 , 0x0001 , 0x0016 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } ,
{ 0x01 , 0x00ff , 0x003e } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0060 , 0x0057 } ,
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } ,
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x100a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x000c , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0000 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } ,
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } ,
{ 0x00 , 0x0000 , 0x0024 } ,
{ 0x00 , 0x00d5 , 0x0025 } ,
{ 0x00 , 0x0000 , 0x0026 } ,
{ 0x00 , 0x000b , 0x0027 } ,
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
{ 0xff , 0x0000 , 0x00d0 } ,
{ 0xff , 0x00d8 , 0x00d1 } ,
{ 0xff , 0x0000 , 0x00d4 } ,
{ 0xff , 0x0000 , 0x00d5 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0x00fd , 0x000a } ,
{ 0x01 , 0x0038 , 0x000b } ,
{ 0x01 , 0x00d1 , 0x000c } ,
{ 0x01 , 0x00f7 , 0x000d } ,
{ 0x01 , 0x00ed , 0x000e } ,
{ 0x01 , 0x00d8 , 0x000f } ,
{ 0x01 , 0x0038 , 0x0010 } ,
{ 0x01 , 0x00ff , 0x0015 } ,
{ 0x01 , 0x0001 , 0x0016 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } ,
{ 0x01 , 0x00ff , 0x003e } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0060 , 0x0057 } ,
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } ,
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x100a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x000f , 0x0000 } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0xfffd , 0x000a } ,
{ 0x01 , 0x0023 , 0x000b } ,
{ 0x01 , 0xffea , 0x000c } ,
{ 0x01 , 0xfff4 , 0x000d } ,
{ 0x01 , 0xfffc , 0x000e } ,
{ 0x01 , 0xffe3 , 0x000f } ,
{ 0x01 , 0x001f , 0x0010 } ,
{ 0x01 , 0x00a8 , 0x0001 } ,
{ 0x01 , 0x0067 , 0x0007 } ,
{ 0x01 , 0x0042 , 0x0051 } ,
{ 0x01 , 0x0051 , 0x0053 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xc000 , 0x0001 } ,
{ 0x02 , 0x0000 , 0x0005 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x000c , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0000 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } ,
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } ,
{ 0x00 , 0x0000 , 0x0024 } ,
{ 0x00 , 0x00d5 , 0x0025 } ,
{ 0x00 , 0x0000 , 0x0026 } ,
{ 0x00 , 0x000b , 0x0027 } ,
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
{ 0xff , 0x0000 , 0x00d0 } ,
{ 0xff , 0x00d8 , 0x00d1 } ,
{ 0xff , 0x0000 , 0x00d4 } ,
{ 0xff , 0x0000 , 0x00d5 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0x00fd , 0x000a } ,
{ 0x01 , 0x0038 , 0x000b } ,
{ 0x01 , 0x00d1 , 0x000c } ,
{ 0x01 , 0x00f7 , 0x000d } ,
{ 0x01 , 0x00ed , 0x000e } ,
{ 0x01 , 0x00d8 , 0x000f } ,
{ 0x01 , 0x0038 , 0x0010 } ,
{ 0x01 , 0x00ff , 0x0015 } ,
{ 0x01 , 0x0001 , 0x0016 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } ,
{ 0x01 , 0x00ff , 0x003e } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0060 , 0x0057 } ,
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } ,
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x100a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x000c , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0000 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } ,
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } ,
{ 0x00 , 0x0000 , 0x0024 } ,
{ 0x00 , 0x00d5 , 0x0025 } ,
{ 0x00 , 0x0000 , 0x0026 } ,
{ 0x00 , 0x000b , 0x0027 } ,
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
{ 0xff , 0x0000 , 0x00d0 } ,
{ 0xff , 0x00d8 , 0x00d1 } ,
{ 0xff , 0x0000 , 0x00d4 } ,
{ 0xff , 0x0000 , 0x00d5 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0x00fd , 0x000a } ,
{ 0x01 , 0x0038 , 0x000b } ,
{ 0x01 , 0x00d1 , 0x000c } ,
{ 0x01 , 0x00f7 , 0x000d } ,
{ 0x01 , 0x00ed , 0x000e } ,
{ 0x01 , 0x00d8 , 0x000f } ,
{ 0x01 , 0x0038 , 0x0010 } ,
{ 0x01 , 0x00ff , 0x0015 } ,
{ 0x01 , 0x0001 , 0x0016 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } ,
{ 0x01 , 0x00ff , 0x003e } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0060 , 0x0057 } ,
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } ,
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x100a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x001e , 0x0000 } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x0011 , 0x0008 } ,
{ 0x01 , 0x0032 , 0x0009 } ,
{ 0x01 , 0xfffd , 0x000a } ,
{ 0x01 , 0x0023 , 0x000b } ,
{ 0x01 , 0xffea , 0x000c } ,
{ 0x01 , 0xfff4 , 0x000d } ,
{ 0x01 , 0xfffc , 0x000e } ,
{ 0x01 , 0xffe3 , 0x000f } ,
{ 0x01 , 0x001f , 0x0010 } ,
{ 0x01 , 0x00a8 , 0x0001 } ,
{ 0x01 , 0x0067 , 0x0007 } ,
{ 0x01 , 0x0042 , 0x0051 } ,
{ 0x01 , 0x0051 , 0x0053 } ,
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x01 , 0x0042 , 0x0051 } ,
{ 0x01 , 0x0051 , 0x0053 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x002d , 0x0000 } ,
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x02 , 0xc000 , 0x0001 } ,
{ 0x02 , 0x0000 , 0x0005 } ,
{ }
} ;
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
/* Unknown camera from Ori Usbid 0x0000:0x0000 */
2008-06-30 22:50:11 +04:00
/* Based on snoops from Ori Cohen */
2008-07-04 18:16:16 +04:00
static const __u16 spca501c_mysterious_open_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
/* DSP Registers */
{ 0x01 , 0x0016 , 0x0011 } , /* RGB offset */
{ 0x01 , 0x0000 , 0x0012 } ,
{ 0x01 , 0x0006 , 0x0013 } ,
{ 0x01 , 0x0078 , 0x0051 } ,
{ 0x01 , 0x0040 , 0x0052 } ,
{ 0x01 , 0x0046 , 0x0053 } ,
{ 0x01 , 0x0040 , 0x0054 } ,
{ 0x00 , 0x0025 , 0x0000 } ,
/* {0x00, 0x0000, 0x0000 }, */
/* Part 2 */
/* TG Registers */
{ 0x00 , 0x0026 , 0x0000 } ,
{ 0x00 , 0x0001 , 0x0000 } ,
{ 0x00 , 0x0027 , 0x0000 } ,
{ 0x00 , 0x008a , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x2000 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0015 , 0x0001 } ,
{ 0x05 , 0x00ea , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0023 , 0x0001 } ,
{ 0x05 , 0x0003 , 0x0000 } ,
{ 0x05 , 0x0030 , 0x0001 } ,
{ 0x05 , 0x002b , 0x0000 } ,
{ 0x05 , 0x0031 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0032 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0033 , 0x0001 } ,
{ 0x05 , 0x0023 , 0x0000 } ,
{ 0x05 , 0x0034 , 0x0001 } ,
{ 0x05 , 0x0002 , 0x0000 } ,
{ 0x05 , 0x0050 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0051 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0052 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0054 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ }
} ;
/* Based on snoops from Ori Cohen */
2008-07-04 18:16:16 +04:00
static const __u16 spca501c_mysterious_init_data [ ] [ 3 ] = {
2008-06-30 22:50:11 +04:00
/* Part 3 */
/* TG registers */
/* {0x00, 0x0000, 0x0000}, */
{ 0x00 , 0x0000 , 0x0001 } ,
{ 0x00 , 0x0000 , 0x0002 } ,
{ 0x00 , 0x0006 , 0x0003 } ,
{ 0x00 , 0x0000 , 0x0004 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x00 , 0x0000 , 0x0006 } ,
{ 0x00 , 0x0040 , 0x0007 } ,
{ 0x00 , 0x00c0 , 0x0008 } ,
{ 0x00 , 0x004a , 0x0009 } ,
{ 0x00 , 0x0000 , 0x000a } ,
{ 0x00 , 0x0000 , 0x000b } ,
{ 0x00 , 0x0001 , 0x000c } ,
{ 0x00 , 0x0001 , 0x000d } ,
{ 0x00 , 0x0000 , 0x000e } ,
{ 0x00 , 0x0002 , 0x000f } ,
{ 0x00 , 0x0001 , 0x0010 } ,
{ 0x00 , 0x0000 , 0x0011 } ,
{ 0x00 , 0x0001 , 0x0012 } ,
{ 0x00 , 0x0002 , 0x0020 } ,
{ 0x00 , 0x0080 , 0x0021 } , /* 640 */
{ 0x00 , 0x0001 , 0x0022 } ,
{ 0x00 , 0x00e0 , 0x0023 } , /* 480 */
{ 0x00 , 0x0000 , 0x0024 } , /* Offset H hight */
{ 0x00 , 0x00d3 , 0x0025 } , /* low */
{ 0x00 , 0x0000 , 0x0026 } , /* Offset V */
{ 0x00 , 0x000d , 0x0027 } , /* low */
{ 0x00 , 0x0000 , 0x0046 } ,
{ 0x00 , 0x0000 , 0x0047 } ,
{ 0x00 , 0x0000 , 0x0048 } ,
{ 0x00 , 0x0000 , 0x0049 } ,
{ 0x00 , 0x0008 , 0x004a } ,
2010-10-19 11:29:10 +04:00
/* DSP Registers */
2008-06-30 22:50:11 +04:00
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x01 , 0x0028 , 0x0001 } ,
{ 0x01 , 0x0000 , 0x0002 } ,
{ 0x01 , 0x000a , 0x0003 } , /* Level Calc bit7 ->1 Auto */
{ 0x01 , 0x0040 , 0x0004 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x000f , 0x0008 } , /* A11 Color correction coeff */
{ 0x01 , 0x002d , 0x0009 } , /* A12 */
{ 0x01 , 0x0005 , 0x000a } , /* A13 */
{ 0x01 , 0x0023 , 0x000b } , /* A21 */
{ 0x01 , 0x00e0 , 0x000c } , /* A22 */
{ 0x01 , 0x00fd , 0x000d } , /* A23 */
{ 0x01 , 0x00f4 , 0x000e } , /* A31 */
{ 0x01 , 0x00e4 , 0x000f } , /* A32 */
{ 0x01 , 0x0028 , 0x0010 } , /* A33 */
{ 0x01 , 0x00ff , 0x0015 } , /* Reserved */
{ 0x01 , 0x0001 , 0x0016 } , /* Reserved */
{ 0x01 , 0x0032 , 0x0017 } , /* Win1 Start begin */
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x0000 , 0x001f } ,
{ 0x01 , 0x0000 , 0x0020 } , /* Win1 Start end */
{ 0x01 , 0x00ff , 0x003e } , /* Reserved begin */
{ 0x01 , 0x0002 , 0x003f } ,
{ 0x01 , 0x0000 , 0x0040 } ,
{ 0x01 , 0x0035 , 0x0041 } ,
{ 0x01 , 0x0053 , 0x0042 } ,
{ 0x01 , 0x0069 , 0x0043 } ,
{ 0x01 , 0x007c , 0x0044 } ,
{ 0x01 , 0x008c , 0x0045 } ,
{ 0x01 , 0x009a , 0x0046 } ,
{ 0x01 , 0x00a8 , 0x0047 } ,
{ 0x01 , 0x00b4 , 0x0048 } ,
{ 0x01 , 0x00bf , 0x0049 } ,
{ 0x01 , 0x00ca , 0x004a } ,
{ 0x01 , 0x00d4 , 0x004b } ,
{ 0x01 , 0x00dd , 0x004c } ,
{ 0x01 , 0x00e7 , 0x004d } ,
{ 0x01 , 0x00ef , 0x004e } ,
{ 0x01 , 0x00f8 , 0x004f } ,
{ 0x01 , 0x00ff , 0x0050 } ,
{ 0x01 , 0x0003 , 0x0056 } , /* Reserved end */
{ 0x01 , 0x0060 , 0x0057 } , /* Edge Gain */
{ 0x01 , 0x0040 , 0x0058 } ,
{ 0x01 , 0x0011 , 0x0059 } , /* Edge Bandwidth */
{ 0x01 , 0x0001 , 0x005a } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ 0x02 , 0x0015 , 0x0006 } ,
{ 0x02 , 0x200a , 0x0007 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x02 , 0xc000 , 0x0001 } ,
{ 0x02 , 0x000f , 0x0005 } ,
{ 0x02 , 0xa048 , 0x0000 } ,
{ 0x05 , 0x0022 , 0x0004 } ,
{ 0x05 , 0x0025 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
2010-10-19 11:29:10 +04:00
/* Part 4 */
2008-06-30 22:50:11 +04:00
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0001 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x05 , 0x0021 , 0x0001 } ,
{ 0x05 , 0x00d2 , 0x0000 } ,
{ 0x05 , 0x0020 , 0x0001 } ,
{ 0x05 , 0x0000 , 0x0000 } ,
{ 0x00 , 0x0090 , 0x0005 } ,
{ 0x01 , 0x00a6 , 0x0000 } ,
{ 0x02 , 0x0000 , 0x0005 } ,
{ 0x05 , 0x0026 , 0x0001 } ,
{ 0x05 , 0x0001 , 0x0000 } ,
{ 0x05 , 0x0027 , 0x0001 } ,
{ 0x05 , 0x004e , 0x0000 } ,
2010-10-19 11:29:10 +04:00
/* Part 5 */
2008-06-30 22:50:11 +04:00
{ 0x01 , 0x0003 , 0x003f } ,
{ 0x01 , 0x0001 , 0x0056 } ,
{ 0x01 , 0x000f , 0x0008 } ,
{ 0x01 , 0x002d , 0x0009 } ,
{ 0x01 , 0x0005 , 0x000a } ,
{ 0x01 , 0x0023 , 0x000b } ,
{ 0x01 , 0xffe0 , 0x000c } ,
{ 0x01 , 0xfffd , 0x000d } ,
{ 0x01 , 0xfff4 , 0x000e } ,
{ 0x01 , 0xffe4 , 0x000f } ,
{ 0x01 , 0x0028 , 0x0010 } ,
{ 0x01 , 0x00a8 , 0x0001 } ,
{ 0x01 , 0x0066 , 0x0007 } ,
{ 0x01 , 0x0032 , 0x0017 } ,
{ 0x01 , 0x0023 , 0x0018 } ,
{ 0x01 , 0x00ce , 0x0019 } ,
{ 0x01 , 0x0023 , 0x001a } ,
{ 0x01 , 0x0032 , 0x001b } ,
{ 0x01 , 0x008d , 0x001c } ,
{ 0x01 , 0x00ce , 0x001d } ,
{ 0x01 , 0x008d , 0x001e } ,
{ 0x01 , 0x00c8 , 0x0015 } , /* c8 Poids fort Luma */
{ 0x01 , 0x0032 , 0x0016 } , /* 32 */
{ 0x01 , 0x0016 , 0x0011 } , /* R 00 */
{ 0x01 , 0x0016 , 0x0012 } , /* G 00 */
{ 0x01 , 0x0016 , 0x0013 } , /* B 00 */
{ 0x01 , 0x000a , 0x0003 } ,
{ 0x02 , 0xc002 , 0x0001 } ,
{ 0x02 , 0x0007 , 0x0005 } ,
{ }
} ;
static int reg_write ( struct usb_device * dev ,
__u16 req , __u16 index , __u16 value )
{
int ret ;
ret = usb_control_msg ( dev ,
usb_sndctrlpipe ( dev , 0 ) ,
req ,
USB_TYPE_VENDOR | USB_RECIP_DEVICE ,
value , index , NULL , 0 , 500 ) ;
PDEBUG ( D_USBO , " reg write: 0x%02x 0x%02x 0x%02x " ,
req , index , value ) ;
if ( ret < 0 )
2010-09-13 12:19:58 +04:00
err ( " reg write: error %d " , ret ) ;
2008-06-30 22:50:11 +04:00
return ret ;
}
static int write_vector ( struct gspca_dev * gspca_dev ,
2008-07-04 18:16:16 +04:00
const __u16 data [ ] [ 3 ] )
2008-06-30 22:50:11 +04:00
{
struct usb_device * dev = gspca_dev - > dev ;
int ret , i = 0 ;
while ( data [ i ] [ 0 ] ! = 0 | | data [ i ] [ 1 ] ! = 0 | | data [ i ] [ 2 ] ! = 0 ) {
ret = reg_write ( dev , data [ i ] [ 0 ] , data [ i ] [ 2 ] , data [ i ] [ 1 ] ) ;
if ( ret < 0 ) {
PDEBUG ( D_ERR ,
" Reg write failed for 0x%02x,0x%02x,0x%02x " ,
data [ i ] [ 0 ] , data [ i ] [ 1 ] , data [ i ] [ 2 ] ) ;
return ret ;
}
i + + ;
}
return 0 ;
}
static void setbrightness ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
reg_write ( gspca_dev - > dev , SPCA501_REG_CCDSP , 0x12 , sd - > brightness ) ;
}
static void setcontrast ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
reg_write ( gspca_dev - > dev , 0x00 , 0x00 ,
( sd - > contrast > > 8 ) & 0xff ) ;
reg_write ( gspca_dev - > dev , 0x00 , 0x01 ,
sd - > contrast & 0xff ) ;
}
static void setcolors ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
reg_write ( gspca_dev - > dev , SPCA501_REG_CCDSP , 0x0c , sd - > colors ) ;
}
2008-11-17 21:03:03 +03:00
static void setblue_balance ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
reg_write ( gspca_dev - > dev , SPCA501_REG_CCDSP , 0x11 , sd - > blue_balance ) ;
}
static void setred_balance ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
reg_write ( gspca_dev - > dev , SPCA501_REG_CCDSP , 0x13 , sd - > red_balance ) ;
}
2008-06-30 22:50:11 +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 ;
2008-07-25 15:53:03 +04:00
2008-06-30 22:50:11 +04:00
cam = & gspca_dev - > cam ;
cam - > cam_mode = vga_mode ;
2009-07-22 07:02:29 +04:00
cam - > nmodes = ARRAY_SIZE ( vga_mode ) ;
2008-07-25 15:53:03 +04:00
sd - > subtype = id - > driver_info ;
2008-06-30 22:50:11 +04:00
sd - > brightness = sd_ctrls [ MY_BRIGHTNESS ] . qctrl . default_value ;
sd - > contrast = sd_ctrls [ MY_CONTRAST ] . qctrl . default_value ;
sd - > colors = sd_ctrls [ MY_COLOR ] . qctrl . default_value ;
2008-11-17 20:52:56 +03:00
return 0 ;
}
/* this function is called at probe and resume time */
static int sd_init ( struct gspca_dev * gspca_dev )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
2008-06-30 22:50:11 +04:00
switch ( sd - > subtype ) {
case Arowana300KCMOSCamera :
case SmileIntlCamera :
/* Arowana 300k CMOS Camera data */
if ( write_vector ( gspca_dev , spca501c_arowana_init_data ) )
goto error ;
break ;
case MystFromOriUnknownCamera :
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
/* Unknown Ori CMOS Camera data */
2008-06-30 22:50:11 +04:00
if ( write_vector ( gspca_dev , spca501c_mysterious_open_data ) )
goto error ;
break ;
default :
/* generic spca501 init data */
if ( write_vector ( gspca_dev , spca501_init_data ) )
goto error ;
break ;
}
2008-11-17 20:52:56 +03:00
PDEBUG ( D_STREAM , " Initializing SPCA501 finished " ) ;
2008-06-30 22:50:11 +04:00
return 0 ;
error :
return - EINVAL ;
}
2008-11-17 20:52:56 +03:00
static int sd_start ( struct gspca_dev * gspca_dev )
2008-06-30 22:50:11 +04:00
{
struct sd * sd = ( struct sd * ) gspca_dev ;
2008-11-17 20:52:56 +03:00
struct usb_device * dev = gspca_dev - > dev ;
int mode ;
2008-06-30 22:50:11 +04:00
switch ( sd - > subtype ) {
case ThreeComHomeConnectLite :
/* Special handling for 3com data */
write_vector ( gspca_dev , spca501_3com_open_data ) ;
break ;
case Arowana300KCMOSCamera :
case SmileIntlCamera :
/* Arowana 300k CMOS Camera data */
write_vector ( gspca_dev , spca501c_arowana_open_data ) ;
break ;
case MystFromOriUnknownCamera :
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
/* Unknown CMOS Camera data */
2008-06-30 22:50:11 +04:00
write_vector ( gspca_dev , spca501c_mysterious_init_data ) ;
break ;
default :
/* Generic 501 open data */
write_vector ( gspca_dev , spca501_open_data ) ;
}
/* memorize the wanted pixel format */
2008-07-05 18:49:20 +04:00
mode = gspca_dev - > cam . cam_mode [ ( int ) gspca_dev - > curr_mode ] . priv ;
2008-06-30 22:50:11 +04:00
/* Enable ISO packet machine CTRL reg=2,
* index = 1 bitmask = 0x2 ( bit ordinal 1 ) */
reg_write ( dev , SPCA50X_REG_USB , 0x6 , 0x94 ) ;
switch ( mode ) {
case 0 : /* 640x480 */
reg_write ( dev , SPCA50X_REG_USB , 0x07 , 0x004a ) ;
break ;
case 1 : /* 320x240 */
reg_write ( dev , SPCA50X_REG_USB , 0x07 , 0x104a ) ;
break ;
default :
/* case 2: * 160x120 */
reg_write ( dev , SPCA50X_REG_USB , 0x07 , 0x204a ) ;
break ;
}
reg_write ( dev , SPCA501_REG_CTLRL , 0x01 , 0x02 ) ;
/* HDG atleast the Intel CreateAndShare needs to have one of its
2008-07-04 18:16:16 +04:00
* brightness / contrast / color set otherwise it assumes what seems
2008-06-30 22:50:11 +04:00
* max contrast . Note that strange enough setting any of these is
* enough to fix the max contrast problem , to be sure we set all 3 */
setbrightness ( gspca_dev ) ;
setcontrast ( gspca_dev ) ;
setcolors ( gspca_dev ) ;
2008-09-20 13:39:08 +04:00
return 0 ;
2008-06-30 22:50:11 +04:00
}
static void sd_stopN ( struct gspca_dev * gspca_dev )
{
/* Disable ISO packet
* machine CTRL reg = 2 , index = 1 bitmask = 0x0 ( bit ordinal 1 ) */
reg_write ( gspca_dev - > dev , SPCA501_REG_CTLRL , 0x01 , 0x00 ) ;
}
2008-11-18 12:33:08 +03:00
/* called on streamoff with alt 0 and on disconnect */
2008-06-30 22:50:11 +04:00
static void sd_stop0 ( struct gspca_dev * gspca_dev )
{
2008-11-18 12:33:08 +03:00
if ( ! gspca_dev - > present )
return ;
2008-06-30 22:50:11 +04:00
reg_write ( gspca_dev - > dev , SPCA501_REG_CTLRL , 0x05 , 0x00 ) ;
}
static void sd_pkt_scan ( struct gspca_dev * gspca_dev ,
2009-11-13 15:21:03 +03:00
u8 * data , /* isoc packet */
2008-06-30 22:50:11 +04:00
int len ) /* iso packet length */
{
switch ( data [ 0 ] ) {
case 0 : /* start of frame */
2009-11-13 15:21:03 +03:00
gspca_frame_add ( gspca_dev , LAST_PACKET , NULL , 0 ) ;
2008-06-30 22:50:11 +04:00
data + = SPCA501_OFFSET_DATA ;
len - = SPCA501_OFFSET_DATA ;
2009-11-13 15:21:03 +03:00
gspca_frame_add ( gspca_dev , FIRST_PACKET , data , len ) ;
2008-06-30 22:50:11 +04:00
return ;
case 0xff : /* drop */
/* gspca_dev->last_packet_type = DISCARD_PACKET; */
return ;
}
data + + ;
len - - ;
2009-11-13 15:21:03 +03:00
gspca_frame_add ( gspca_dev , INTER_PACKET , data , len ) ;
2008-06-30 22:50:11 +04:00
}
static int sd_setbrightness ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > brightness = val ;
if ( gspca_dev - > streaming )
setbrightness ( gspca_dev ) ;
return 0 ;
}
static int sd_getbrightness ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > brightness ;
return 0 ;
}
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_setcolors ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > colors = val ;
if ( gspca_dev - > streaming )
setcolors ( gspca_dev ) ;
return 0 ;
}
static int sd_getcolors ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > colors ;
return 0 ;
}
2008-11-17 21:03:03 +03:00
static int sd_setblue_balance ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > blue_balance = val ;
if ( gspca_dev - > streaming )
setblue_balance ( gspca_dev ) ;
return 0 ;
}
static int sd_getblue_balance ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > blue_balance ;
return 0 ;
}
static int sd_setred_balance ( struct gspca_dev * gspca_dev , __s32 val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
sd - > red_balance = val ;
if ( gspca_dev - > streaming )
setred_balance ( gspca_dev ) ;
return 0 ;
}
static int sd_getred_balance ( struct gspca_dev * gspca_dev , __s32 * val )
{
struct sd * sd = ( struct sd * ) gspca_dev ;
* val = sd - > red_balance ;
return 0 ;
}
2008-06-30 22:50:11 +04:00
/* sub-driver description */
2008-07-04 18:16:16 +04:00
static const struct sd_desc sd_desc = {
2008-06-30 22:50:11 +04:00
. name = MODULE_NAME ,
. ctrls = sd_ctrls ,
. nctrls = ARRAY_SIZE ( sd_ctrls ) ,
. config = sd_config ,
2008-09-04 00:12:16 +04:00
. init = sd_init ,
2008-06-30 22:50:11 +04:00
. start = sd_start ,
. stopN = sd_stopN ,
. stop0 = sd_stop0 ,
. pkt_scan = sd_pkt_scan ,
} ;
/* -- module initialisation -- */
2011-01-13 11:20:29 +03:00
static const struct usb_device_id device_table [ ] = {
2008-07-26 21:30:01 +04:00
{ USB_DEVICE ( 0x040a , 0x0002 ) , . driver_info = KodakDVC325 } ,
{ USB_DEVICE ( 0x0497 , 0xc001 ) , . driver_info = SmileIntlCamera } ,
{ USB_DEVICE ( 0x0506 , 0x00df ) , . driver_info = ThreeComHomeConnectLite } ,
{ USB_DEVICE ( 0x0733 , 0x0401 ) , . driver_info = IntelCreateAndShare } ,
{ USB_DEVICE ( 0x0733 , 0x0402 ) , . driver_info = ViewQuestM318B } ,
{ USB_DEVICE ( 0x1776 , 0x501c ) , . driver_info = Arowana300KCMOSCamera } ,
{ USB_DEVICE ( 0x0000 , 0x0000 ) , . driver_info = MystFromOriUnknownCamera } ,
2008-06-30 22:50:11 +04:00
{ }
} ;
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 ) ;
}
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-30 22:50:11 +04:00
} ;
/* -- module insert / remove -- */
static int __init sd_mod_init ( void )
{
2010-09-13 11:53:03 +04:00
return usb_register ( & sd_driver ) ;
2008-06-30 22:50:11 +04:00
}
static void __exit sd_mod_exit ( void )
{
usb_deregister ( & sd_driver ) ;
}
module_init ( sd_mod_init ) ;
module_exit ( sd_mod_exit ) ;