1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * SPCA501 chip based cameras initialization data
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * V4L2 by Jean-Francois Moine <http://moinejf.free.fr>
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun #define MODULE_NAME "spca501"
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun #include "gspca.h"
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>");
15*4882a593Smuzhiyun MODULE_DESCRIPTION("GSPCA/SPCA501 USB Camera Driver");
16*4882a593Smuzhiyun MODULE_LICENSE("GPL");
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun /* specific webcam descriptor */
19*4882a593Smuzhiyun struct sd {
20*4882a593Smuzhiyun struct gspca_dev gspca_dev; /* !! must be the first item */
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun unsigned short contrast;
23*4882a593Smuzhiyun __u8 brightness;
24*4882a593Smuzhiyun __u8 colors;
25*4882a593Smuzhiyun __u8 blue_balance;
26*4882a593Smuzhiyun __u8 red_balance;
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun char subtype;
29*4882a593Smuzhiyun #define Arowana300KCMOSCamera 0
30*4882a593Smuzhiyun #define IntelCreateAndShare 1
31*4882a593Smuzhiyun #define KodakDVC325 2
32*4882a593Smuzhiyun #define MystFromOriUnknownCamera 3
33*4882a593Smuzhiyun #define SmileIntlCamera 4
34*4882a593Smuzhiyun #define ThreeComHomeConnectLite 5
35*4882a593Smuzhiyun #define ViewQuestM318B 6
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun static const struct v4l2_pix_format vga_mode[] = {
39*4882a593Smuzhiyun {160, 120, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE,
40*4882a593Smuzhiyun .bytesperline = 160,
41*4882a593Smuzhiyun .sizeimage = 160 * 120 * 3 / 2,
42*4882a593Smuzhiyun .colorspace = V4L2_COLORSPACE_SRGB,
43*4882a593Smuzhiyun .priv = 2},
44*4882a593Smuzhiyun {320, 240, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE,
45*4882a593Smuzhiyun .bytesperline = 320,
46*4882a593Smuzhiyun .sizeimage = 320 * 240 * 3 / 2,
47*4882a593Smuzhiyun .colorspace = V4L2_COLORSPACE_SRGB,
48*4882a593Smuzhiyun .priv = 1},
49*4882a593Smuzhiyun {640, 480, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE,
50*4882a593Smuzhiyun .bytesperline = 640,
51*4882a593Smuzhiyun .sizeimage = 640 * 480 * 3 / 2,
52*4882a593Smuzhiyun .colorspace = V4L2_COLORSPACE_SRGB,
53*4882a593Smuzhiyun .priv = 0},
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun #define SPCA50X_REG_USB 0x2 /* spca505 501 */
57*4882a593Smuzhiyun /*
58*4882a593Smuzhiyun * Data to initialize a SPCA501. From a capture file provided by Bill Roehl
59*4882a593Smuzhiyun * With SPCA501 chip description
60*4882a593Smuzhiyun */
61*4882a593Smuzhiyun #define CCDSP_SET /* set CCDSP parameters */
62*4882a593Smuzhiyun #define TG_SET /* set time generator set */
63*4882a593Smuzhiyun #undef DSPWIN_SET /* set DSP windows parameters */
64*4882a593Smuzhiyun #undef ALTER_GAMA /* Set alternate set to YUV transform coeffs. */
65*4882a593Smuzhiyun #define SPCA501_SNAPBIT 0x80
66*4882a593Smuzhiyun #define SPCA501_SNAPCTRL 0x10
67*4882a593Smuzhiyun /* Frame packet header offsets for the spca501 */
68*4882a593Smuzhiyun #define SPCA501_OFFSET_GPIO 1
69*4882a593Smuzhiyun #define SPCA501_OFFSET_TYPE 2
70*4882a593Smuzhiyun #define SPCA501_OFFSET_TURN3A 3
71*4882a593Smuzhiyun #define SPCA501_OFFSET_FRAMSEQ 4
72*4882a593Smuzhiyun #define SPCA501_OFFSET_COMPRESS 5
73*4882a593Smuzhiyun #define SPCA501_OFFSET_QUANT 6
74*4882a593Smuzhiyun #define SPCA501_OFFSET_QUANT2 7
75*4882a593Smuzhiyun #define SPCA501_OFFSET_DATA 8
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun #define SPCA501_PROP_COMP_ENABLE(d) ((d) & 1)
78*4882a593Smuzhiyun #define SPCA501_PROP_SNAP(d) ((d) & 0x40)
79*4882a593Smuzhiyun #define SPCA501_PROP_SNAP_CTRL(d) ((d) & 0x10)
80*4882a593Smuzhiyun #define SPCA501_PROP_COMP_THRESH(d) (((d) & 0x0e) >> 1)
81*4882a593Smuzhiyun #define SPCA501_PROP_COMP_QUANT(d) (((d) & 0x70) >> 4)
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun /* SPCA501 CCDSP control */
84*4882a593Smuzhiyun #define SPCA501_REG_CCDSP 0x01
85*4882a593Smuzhiyun /* SPCA501 control/status registers */
86*4882a593Smuzhiyun #define SPCA501_REG_CTLRL 0x02
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun /* registers for color correction and YUV transformation */
89*4882a593Smuzhiyun #define SPCA501_A11 0x08
90*4882a593Smuzhiyun #define SPCA501_A12 0x09
91*4882a593Smuzhiyun #define SPCA501_A13 0x0A
92*4882a593Smuzhiyun #define SPCA501_A21 0x0B
93*4882a593Smuzhiyun #define SPCA501_A22 0x0C
94*4882a593Smuzhiyun #define SPCA501_A23 0x0D
95*4882a593Smuzhiyun #define SPCA501_A31 0x0E
96*4882a593Smuzhiyun #define SPCA501_A32 0x0F
97*4882a593Smuzhiyun #define SPCA501_A33 0x10
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun /* Data for video camera initialization before capturing */
100*4882a593Smuzhiyun static const __u16 spca501_open_data[][3] = {
101*4882a593Smuzhiyun /* bmRequest,value,index */
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun {0x2, 0x50, 0x00}, /* C/S enable soft reset */
104*4882a593Smuzhiyun {0x2, 0x40, 0x00}, /* C/S disable soft reset */
105*4882a593Smuzhiyun {0x2, 0x02, 0x05}, /* C/S general purpose I/O data */
106*4882a593Smuzhiyun {0x2, 0x03, 0x05}, /* C/S general purpose I/O data */
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun #ifdef CCDSP_SET
109*4882a593Smuzhiyun {0x1, 0x38, 0x01}, /* CCDSP options */
110*4882a593Smuzhiyun {0x1, 0x05, 0x02}, /* CCDSP Optical black level for user settings */
111*4882a593Smuzhiyun {0x1, 0xC0, 0x03}, /* CCDSP Optical black settings */
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun {0x1, 0x67, 0x07},
114*4882a593Smuzhiyun {0x1, 0x63, 0x3f}, /* CCDSP CCD gamma enable */
115*4882a593Smuzhiyun {0x1, 0x03, 0x56}, /* Add gamma correction */
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun {0x1, 0xFF, 0x15}, /* CCDSP High luminance for white balance */
118*4882a593Smuzhiyun {0x1, 0x01, 0x16}, /* CCDSP Low luminance for white balance */
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun /* Color correction and RGB-to-YUV transformation coefficients changing */
121*4882a593Smuzhiyun #ifdef ALTER_GAMA
122*4882a593Smuzhiyun {0x0, 0x00, 0x08}, /* A11 */
123*4882a593Smuzhiyun {0x0, 0x00, 0x09}, /* A12 */
124*4882a593Smuzhiyun {0x0, 0x90, 0x0A}, /* A13 */
125*4882a593Smuzhiyun {0x0, 0x12, 0x0B}, /* A21 */
126*4882a593Smuzhiyun {0x0, 0x00, 0x0C}, /* A22 */
127*4882a593Smuzhiyun {0x0, 0x00, 0x0D}, /* A23 */
128*4882a593Smuzhiyun {0x0, 0x00, 0x0E}, /* A31 */
129*4882a593Smuzhiyun {0x0, 0x02, 0x0F}, /* A32 */
130*4882a593Smuzhiyun {0x0, 0x00, 0x10}, /* A33 */
131*4882a593Smuzhiyun #else
132*4882a593Smuzhiyun {0x1, 0x2a, 0x08}, /* A11 0x31 */
133*4882a593Smuzhiyun {0x1, 0xf8, 0x09}, /* A12 f8 */
134*4882a593Smuzhiyun {0x1, 0xf8, 0x0A}, /* A13 f8 */
135*4882a593Smuzhiyun {0x1, 0xf8, 0x0B}, /* A21 f8 */
136*4882a593Smuzhiyun {0x1, 0x14, 0x0C}, /* A22 0x14 */
137*4882a593Smuzhiyun {0x1, 0xf8, 0x0D}, /* A23 f8 */
138*4882a593Smuzhiyun {0x1, 0xf8, 0x0E}, /* A31 f8 */
139*4882a593Smuzhiyun {0x1, 0xf8, 0x0F}, /* A32 f8 */
140*4882a593Smuzhiyun {0x1, 0x20, 0x10}, /* A33 0x20 */
141*4882a593Smuzhiyun #endif
142*4882a593Smuzhiyun {0x1, 0x00, 0x11}, /* R offset */
143*4882a593Smuzhiyun {0x1, 0x00, 0x12}, /* G offset */
144*4882a593Smuzhiyun {0x1, 0x00, 0x13}, /* B offset */
145*4882a593Smuzhiyun {0x1, 0x00, 0x14}, /* GB offset */
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun #endif
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun #ifdef TG_SET
150*4882a593Smuzhiyun /* Time generator manipulations */
151*4882a593Smuzhiyun {0x0, 0xfc, 0x0}, /* Set up high bits of shutter speed */
152*4882a593Smuzhiyun {0x0, 0x01, 0x1}, /* Set up low bits of shutter speed */
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun {0x0, 0xe4, 0x04}, /* DCLK*2 clock phase adjustment */
155*4882a593Smuzhiyun {0x0, 0x08, 0x05}, /* ADCK phase adjustment, inv. ext. VB */
156*4882a593Smuzhiyun {0x0, 0x03, 0x06}, /* FR phase adjustment */
157*4882a593Smuzhiyun {0x0, 0x01, 0x07}, /* FCDS phase adjustment */
158*4882a593Smuzhiyun {0x0, 0x39, 0x08}, /* FS phase adjustment */
159*4882a593Smuzhiyun {0x0, 0x88, 0x0a}, /* FH1 phase and delay adjustment */
160*4882a593Smuzhiyun {0x0, 0x03, 0x0f}, /* pixel identification */
161*4882a593Smuzhiyun {0x0, 0x00, 0x11}, /* clock source selection (default) */
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun /*VERY strange manipulations with
164*4882a593Smuzhiyun * select DMCLP or OBPX to be ADCLP output (0x0C)
165*4882a593Smuzhiyun * OPB always toggle or not (0x0D) but they allow
166*4882a593Smuzhiyun * us to set up brightness
167*4882a593Smuzhiyun */
168*4882a593Smuzhiyun {0x0, 0x01, 0x0c},
169*4882a593Smuzhiyun {0x0, 0xe0, 0x0d},
170*4882a593Smuzhiyun /* Done */
171*4882a593Smuzhiyun #endif
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun #ifdef DSPWIN_SET
174*4882a593Smuzhiyun {0x1, 0xa0, 0x01}, /* Setting image processing parameters */
175*4882a593Smuzhiyun {0x1, 0x1c, 0x17}, /* Changing Windows positions X1 */
176*4882a593Smuzhiyun {0x1, 0xe2, 0x19}, /* X2 */
177*4882a593Smuzhiyun {0x1, 0x1c, 0x1b}, /* X3 */
178*4882a593Smuzhiyun {0x1, 0xe2, 0x1d}, /* X4 */
179*4882a593Smuzhiyun {0x1, 0x5f, 0x1f}, /* X5 */
180*4882a593Smuzhiyun {0x1, 0x32, 0x20}, /* Y5 */
181*4882a593Smuzhiyun {0x1, 0x01, 0x10}, /* Changing A33 */
182*4882a593Smuzhiyun #endif
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun {0x2, 0x204a, 0x07},/* Setting video compression & resolution 160x120 */
185*4882a593Smuzhiyun {0x2, 0x94, 0x06}, /* Setting video no compression */
186*4882a593Smuzhiyun {}
187*4882a593Smuzhiyun };
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun /*
190*4882a593Smuzhiyun The SPCAxxx docs from Sunplus document these values
191*4882a593Smuzhiyun in tables, one table per register number. In the data
192*4882a593Smuzhiyun below, dmRequest is the register number, index is the Addr,
193*4882a593Smuzhiyun and value is a combination of Bit values.
194*4882a593Smuzhiyun Bit Value (hex)
195*4882a593Smuzhiyun 0 01
196*4882a593Smuzhiyun 1 02
197*4882a593Smuzhiyun 2 04
198*4882a593Smuzhiyun 3 08
199*4882a593Smuzhiyun 4 10
200*4882a593Smuzhiyun 5 20
201*4882a593Smuzhiyun 6 40
202*4882a593Smuzhiyun 7 80
203*4882a593Smuzhiyun */
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun /* Data for chip initialization (set default values) */
206*4882a593Smuzhiyun static const __u16 spca501_init_data[][3] = {
207*4882a593Smuzhiyun /* Set all the values to powerup defaults */
208*4882a593Smuzhiyun /* bmRequest,value,index */
209*4882a593Smuzhiyun {0x0, 0xAA, 0x00},
210*4882a593Smuzhiyun {0x0, 0x02, 0x01},
211*4882a593Smuzhiyun {0x0, 0x01, 0x02},
212*4882a593Smuzhiyun {0x0, 0x02, 0x03},
213*4882a593Smuzhiyun {0x0, 0xCE, 0x04},
214*4882a593Smuzhiyun {0x0, 0x00, 0x05},
215*4882a593Smuzhiyun {0x0, 0x00, 0x06},
216*4882a593Smuzhiyun {0x0, 0x00, 0x07},
217*4882a593Smuzhiyun {0x0, 0x00, 0x08},
218*4882a593Smuzhiyun {0x0, 0x00, 0x09},
219*4882a593Smuzhiyun {0x0, 0x90, 0x0A},
220*4882a593Smuzhiyun {0x0, 0x12, 0x0B},
221*4882a593Smuzhiyun {0x0, 0x00, 0x0C},
222*4882a593Smuzhiyun {0x0, 0x00, 0x0D},
223*4882a593Smuzhiyun {0x0, 0x00, 0x0E},
224*4882a593Smuzhiyun {0x0, 0x02, 0x0F},
225*4882a593Smuzhiyun {0x0, 0x00, 0x10},
226*4882a593Smuzhiyun {0x0, 0x00, 0x11},
227*4882a593Smuzhiyun {0x0, 0x00, 0x12},
228*4882a593Smuzhiyun {0x0, 0x00, 0x13},
229*4882a593Smuzhiyun {0x0, 0x00, 0x14},
230*4882a593Smuzhiyun {0x0, 0x00, 0x15},
231*4882a593Smuzhiyun {0x0, 0x00, 0x16},
232*4882a593Smuzhiyun {0x0, 0x00, 0x17},
233*4882a593Smuzhiyun {0x0, 0x00, 0x18},
234*4882a593Smuzhiyun {0x0, 0x00, 0x19},
235*4882a593Smuzhiyun {0x0, 0x00, 0x1A},
236*4882a593Smuzhiyun {0x0, 0x00, 0x1B},
237*4882a593Smuzhiyun {0x0, 0x00, 0x1C},
238*4882a593Smuzhiyun {0x0, 0x00, 0x1D},
239*4882a593Smuzhiyun {0x0, 0x00, 0x1E},
240*4882a593Smuzhiyun {0x0, 0x00, 0x1F},
241*4882a593Smuzhiyun {0x0, 0x00, 0x20},
242*4882a593Smuzhiyun {0x0, 0x00, 0x21},
243*4882a593Smuzhiyun {0x0, 0x00, 0x22},
244*4882a593Smuzhiyun {0x0, 0x00, 0x23},
245*4882a593Smuzhiyun {0x0, 0x00, 0x24},
246*4882a593Smuzhiyun {0x0, 0x00, 0x25},
247*4882a593Smuzhiyun {0x0, 0x00, 0x26},
248*4882a593Smuzhiyun {0x0, 0x00, 0x27},
249*4882a593Smuzhiyun {0x0, 0x00, 0x28},
250*4882a593Smuzhiyun {0x0, 0x00, 0x29},
251*4882a593Smuzhiyun {0x0, 0x00, 0x2A},
252*4882a593Smuzhiyun {0x0, 0x00, 0x2B},
253*4882a593Smuzhiyun {0x0, 0x00, 0x2C},
254*4882a593Smuzhiyun {0x0, 0x00, 0x2D},
255*4882a593Smuzhiyun {0x0, 0x00, 0x2E},
256*4882a593Smuzhiyun {0x0, 0x00, 0x2F},
257*4882a593Smuzhiyun {0x0, 0x00, 0x30},
258*4882a593Smuzhiyun {0x0, 0x00, 0x31},
259*4882a593Smuzhiyun {0x0, 0x00, 0x32},
260*4882a593Smuzhiyun {0x0, 0x00, 0x33},
261*4882a593Smuzhiyun {0x0, 0x00, 0x34},
262*4882a593Smuzhiyun {0x0, 0x00, 0x35},
263*4882a593Smuzhiyun {0x0, 0x00, 0x36},
264*4882a593Smuzhiyun {0x0, 0x00, 0x37},
265*4882a593Smuzhiyun {0x0, 0x00, 0x38},
266*4882a593Smuzhiyun {0x0, 0x00, 0x39},
267*4882a593Smuzhiyun {0x0, 0x00, 0x3A},
268*4882a593Smuzhiyun {0x0, 0x00, 0x3B},
269*4882a593Smuzhiyun {0x0, 0x00, 0x3C},
270*4882a593Smuzhiyun {0x0, 0x00, 0x3D},
271*4882a593Smuzhiyun {0x0, 0x00, 0x3E},
272*4882a593Smuzhiyun {0x0, 0x00, 0x3F},
273*4882a593Smuzhiyun {0x0, 0x00, 0x40},
274*4882a593Smuzhiyun {0x0, 0x00, 0x41},
275*4882a593Smuzhiyun {0x0, 0x00, 0x42},
276*4882a593Smuzhiyun {0x0, 0x00, 0x43},
277*4882a593Smuzhiyun {0x0, 0x00, 0x44},
278*4882a593Smuzhiyun {0x0, 0x00, 0x45},
279*4882a593Smuzhiyun {0x0, 0x00, 0x46},
280*4882a593Smuzhiyun {0x0, 0x00, 0x47},
281*4882a593Smuzhiyun {0x0, 0x00, 0x48},
282*4882a593Smuzhiyun {0x0, 0x00, 0x49},
283*4882a593Smuzhiyun {0x0, 0x00, 0x4A},
284*4882a593Smuzhiyun {0x0, 0x00, 0x4B},
285*4882a593Smuzhiyun {0x0, 0x00, 0x4C},
286*4882a593Smuzhiyun {0x0, 0x00, 0x4D},
287*4882a593Smuzhiyun {0x0, 0x00, 0x4E},
288*4882a593Smuzhiyun {0x0, 0x00, 0x4F},
289*4882a593Smuzhiyun {0x0, 0x00, 0x50},
290*4882a593Smuzhiyun {0x0, 0x00, 0x51},
291*4882a593Smuzhiyun {0x0, 0x00, 0x52},
292*4882a593Smuzhiyun {0x0, 0x00, 0x53},
293*4882a593Smuzhiyun {0x0, 0x00, 0x54},
294*4882a593Smuzhiyun {0x0, 0x00, 0x55},
295*4882a593Smuzhiyun {0x0, 0x00, 0x56},
296*4882a593Smuzhiyun {0x0, 0x00, 0x57},
297*4882a593Smuzhiyun {0x0, 0x00, 0x58},
298*4882a593Smuzhiyun {0x0, 0x00, 0x59},
299*4882a593Smuzhiyun {0x0, 0x00, 0x5A},
300*4882a593Smuzhiyun {0x0, 0x00, 0x5B},
301*4882a593Smuzhiyun {0x0, 0x00, 0x5C},
302*4882a593Smuzhiyun {0x0, 0x00, 0x5D},
303*4882a593Smuzhiyun {0x0, 0x00, 0x5E},
304*4882a593Smuzhiyun {0x0, 0x00, 0x5F},
305*4882a593Smuzhiyun {0x0, 0x00, 0x60},
306*4882a593Smuzhiyun {0x0, 0x00, 0x61},
307*4882a593Smuzhiyun {0x0, 0x00, 0x62},
308*4882a593Smuzhiyun {0x0, 0x00, 0x63},
309*4882a593Smuzhiyun {0x0, 0x00, 0x64},
310*4882a593Smuzhiyun {0x0, 0x00, 0x65},
311*4882a593Smuzhiyun {0x0, 0x00, 0x66},
312*4882a593Smuzhiyun {0x0, 0x00, 0x67},
313*4882a593Smuzhiyun {0x0, 0x00, 0x68},
314*4882a593Smuzhiyun {0x0, 0x00, 0x69},
315*4882a593Smuzhiyun {0x0, 0x00, 0x6A},
316*4882a593Smuzhiyun {0x0, 0x00, 0x6B},
317*4882a593Smuzhiyun {0x0, 0x00, 0x6C},
318*4882a593Smuzhiyun {0x0, 0x00, 0x6D},
319*4882a593Smuzhiyun {0x0, 0x00, 0x6E},
320*4882a593Smuzhiyun {0x0, 0x00, 0x6F},
321*4882a593Smuzhiyun {0x0, 0x00, 0x70},
322*4882a593Smuzhiyun {0x0, 0x00, 0x71},
323*4882a593Smuzhiyun {0x0, 0x00, 0x72},
324*4882a593Smuzhiyun {0x0, 0x00, 0x73},
325*4882a593Smuzhiyun {0x0, 0x00, 0x74},
326*4882a593Smuzhiyun {0x0, 0x00, 0x75},
327*4882a593Smuzhiyun {0x0, 0x00, 0x76},
328*4882a593Smuzhiyun {0x0, 0x00, 0x77},
329*4882a593Smuzhiyun {0x0, 0x00, 0x78},
330*4882a593Smuzhiyun {0x0, 0x00, 0x79},
331*4882a593Smuzhiyun {0x0, 0x00, 0x7A},
332*4882a593Smuzhiyun {0x0, 0x00, 0x7B},
333*4882a593Smuzhiyun {0x0, 0x00, 0x7C},
334*4882a593Smuzhiyun {0x0, 0x00, 0x7D},
335*4882a593Smuzhiyun {0x0, 0x00, 0x7E},
336*4882a593Smuzhiyun {0x0, 0x00, 0x7F},
337*4882a593Smuzhiyun {0x0, 0x00, 0x80},
338*4882a593Smuzhiyun {0x0, 0x00, 0x81},
339*4882a593Smuzhiyun {0x0, 0x00, 0x82},
340*4882a593Smuzhiyun {0x0, 0x00, 0x83},
341*4882a593Smuzhiyun {0x0, 0x00, 0x84},
342*4882a593Smuzhiyun {0x0, 0x00, 0x85},
343*4882a593Smuzhiyun {0x0, 0x00, 0x86},
344*4882a593Smuzhiyun {0x0, 0x00, 0x87},
345*4882a593Smuzhiyun {0x0, 0x00, 0x88},
346*4882a593Smuzhiyun {0x0, 0x00, 0x89},
347*4882a593Smuzhiyun {0x0, 0x00, 0x8A},
348*4882a593Smuzhiyun {0x0, 0x00, 0x8B},
349*4882a593Smuzhiyun {0x0, 0x00, 0x8C},
350*4882a593Smuzhiyun {0x0, 0x00, 0x8D},
351*4882a593Smuzhiyun {0x0, 0x00, 0x8E},
352*4882a593Smuzhiyun {0x0, 0x00, 0x8F},
353*4882a593Smuzhiyun {0x0, 0x00, 0x90},
354*4882a593Smuzhiyun {0x0, 0x00, 0x91},
355*4882a593Smuzhiyun {0x0, 0x00, 0x92},
356*4882a593Smuzhiyun {0x0, 0x00, 0x93},
357*4882a593Smuzhiyun {0x0, 0x00, 0x94},
358*4882a593Smuzhiyun {0x0, 0x00, 0x95},
359*4882a593Smuzhiyun {0x0, 0x00, 0x96},
360*4882a593Smuzhiyun {0x0, 0x00, 0x97},
361*4882a593Smuzhiyun {0x0, 0x00, 0x98},
362*4882a593Smuzhiyun {0x0, 0x00, 0x99},
363*4882a593Smuzhiyun {0x0, 0x00, 0x9A},
364*4882a593Smuzhiyun {0x0, 0x00, 0x9B},
365*4882a593Smuzhiyun {0x0, 0x00, 0x9C},
366*4882a593Smuzhiyun {0x0, 0x00, 0x9D},
367*4882a593Smuzhiyun {0x0, 0x00, 0x9E},
368*4882a593Smuzhiyun {0x0, 0x00, 0x9F},
369*4882a593Smuzhiyun {0x0, 0x00, 0xA0},
370*4882a593Smuzhiyun {0x0, 0x00, 0xA1},
371*4882a593Smuzhiyun {0x0, 0x00, 0xA2},
372*4882a593Smuzhiyun {0x0, 0x00, 0xA3},
373*4882a593Smuzhiyun {0x0, 0x00, 0xA4},
374*4882a593Smuzhiyun {0x0, 0x00, 0xA5},
375*4882a593Smuzhiyun {0x0, 0x00, 0xA6},
376*4882a593Smuzhiyun {0x0, 0x00, 0xA7},
377*4882a593Smuzhiyun {0x0, 0x00, 0xA8},
378*4882a593Smuzhiyun {0x0, 0x00, 0xA9},
379*4882a593Smuzhiyun {0x0, 0x00, 0xAA},
380*4882a593Smuzhiyun {0x0, 0x00, 0xAB},
381*4882a593Smuzhiyun {0x0, 0x00, 0xAC},
382*4882a593Smuzhiyun {0x0, 0x00, 0xAD},
383*4882a593Smuzhiyun {0x0, 0x00, 0xAE},
384*4882a593Smuzhiyun {0x0, 0x00, 0xAF},
385*4882a593Smuzhiyun {0x0, 0x00, 0xB0},
386*4882a593Smuzhiyun {0x0, 0x00, 0xB1},
387*4882a593Smuzhiyun {0x0, 0x00, 0xB2},
388*4882a593Smuzhiyun {0x0, 0x00, 0xB3},
389*4882a593Smuzhiyun {0x0, 0x00, 0xB4},
390*4882a593Smuzhiyun {0x0, 0x00, 0xB5},
391*4882a593Smuzhiyun {0x0, 0x00, 0xB6},
392*4882a593Smuzhiyun {0x0, 0x00, 0xB7},
393*4882a593Smuzhiyun {0x0, 0x00, 0xB8},
394*4882a593Smuzhiyun {0x0, 0x00, 0xB9},
395*4882a593Smuzhiyun {0x0, 0x00, 0xBA},
396*4882a593Smuzhiyun {0x0, 0x00, 0xBB},
397*4882a593Smuzhiyun {0x0, 0x00, 0xBC},
398*4882a593Smuzhiyun {0x0, 0x00, 0xBD},
399*4882a593Smuzhiyun {0x0, 0x00, 0xBE},
400*4882a593Smuzhiyun {0x0, 0x00, 0xBF},
401*4882a593Smuzhiyun {0x0, 0x00, 0xC0},
402*4882a593Smuzhiyun {0x0, 0x00, 0xC1},
403*4882a593Smuzhiyun {0x0, 0x00, 0xC2},
404*4882a593Smuzhiyun {0x0, 0x00, 0xC3},
405*4882a593Smuzhiyun {0x0, 0x00, 0xC4},
406*4882a593Smuzhiyun {0x0, 0x00, 0xC5},
407*4882a593Smuzhiyun {0x0, 0x00, 0xC6},
408*4882a593Smuzhiyun {0x0, 0x00, 0xC7},
409*4882a593Smuzhiyun {0x0, 0x00, 0xC8},
410*4882a593Smuzhiyun {0x0, 0x00, 0xC9},
411*4882a593Smuzhiyun {0x0, 0x00, 0xCA},
412*4882a593Smuzhiyun {0x0, 0x00, 0xCB},
413*4882a593Smuzhiyun {0x0, 0x00, 0xCC},
414*4882a593Smuzhiyun {0x1, 0xF4, 0x00},
415*4882a593Smuzhiyun {0x1, 0x38, 0x01},
416*4882a593Smuzhiyun {0x1, 0x40, 0x02},
417*4882a593Smuzhiyun {0x1, 0x0A, 0x03},
418*4882a593Smuzhiyun {0x1, 0x40, 0x04},
419*4882a593Smuzhiyun {0x1, 0x40, 0x05},
420*4882a593Smuzhiyun {0x1, 0x40, 0x06},
421*4882a593Smuzhiyun {0x1, 0x67, 0x07},
422*4882a593Smuzhiyun {0x1, 0x31, 0x08},
423*4882a593Smuzhiyun {0x1, 0x00, 0x09},
424*4882a593Smuzhiyun {0x1, 0x00, 0x0A},
425*4882a593Smuzhiyun {0x1, 0x00, 0x0B},
426*4882a593Smuzhiyun {0x1, 0x14, 0x0C},
427*4882a593Smuzhiyun {0x1, 0x00, 0x0D},
428*4882a593Smuzhiyun {0x1, 0x00, 0x0E},
429*4882a593Smuzhiyun {0x1, 0x00, 0x0F},
430*4882a593Smuzhiyun {0x1, 0x1E, 0x10},
431*4882a593Smuzhiyun {0x1, 0x00, 0x11},
432*4882a593Smuzhiyun {0x1, 0x00, 0x12},
433*4882a593Smuzhiyun {0x1, 0x00, 0x13},
434*4882a593Smuzhiyun {0x1, 0x00, 0x14},
435*4882a593Smuzhiyun {0x1, 0xFF, 0x15},
436*4882a593Smuzhiyun {0x1, 0x01, 0x16},
437*4882a593Smuzhiyun {0x1, 0x32, 0x17},
438*4882a593Smuzhiyun {0x1, 0x23, 0x18},
439*4882a593Smuzhiyun {0x1, 0xCE, 0x19},
440*4882a593Smuzhiyun {0x1, 0x23, 0x1A},
441*4882a593Smuzhiyun {0x1, 0x32, 0x1B},
442*4882a593Smuzhiyun {0x1, 0x8D, 0x1C},
443*4882a593Smuzhiyun {0x1, 0xCE, 0x1D},
444*4882a593Smuzhiyun {0x1, 0x8D, 0x1E},
445*4882a593Smuzhiyun {0x1, 0x00, 0x1F},
446*4882a593Smuzhiyun {0x1, 0x00, 0x20},
447*4882a593Smuzhiyun {0x1, 0xFF, 0x3E},
448*4882a593Smuzhiyun {0x1, 0x02, 0x3F},
449*4882a593Smuzhiyun {0x1, 0x00, 0x40},
450*4882a593Smuzhiyun {0x1, 0x00, 0x41},
451*4882a593Smuzhiyun {0x1, 0x00, 0x42},
452*4882a593Smuzhiyun {0x1, 0x00, 0x43},
453*4882a593Smuzhiyun {0x1, 0x00, 0x44},
454*4882a593Smuzhiyun {0x1, 0x00, 0x45},
455*4882a593Smuzhiyun {0x1, 0x00, 0x46},
456*4882a593Smuzhiyun {0x1, 0x00, 0x47},
457*4882a593Smuzhiyun {0x1, 0x00, 0x48},
458*4882a593Smuzhiyun {0x1, 0x00, 0x49},
459*4882a593Smuzhiyun {0x1, 0x00, 0x4A},
460*4882a593Smuzhiyun {0x1, 0x00, 0x4B},
461*4882a593Smuzhiyun {0x1, 0x00, 0x4C},
462*4882a593Smuzhiyun {0x1, 0x00, 0x4D},
463*4882a593Smuzhiyun {0x1, 0x00, 0x4E},
464*4882a593Smuzhiyun {0x1, 0x00, 0x4F},
465*4882a593Smuzhiyun {0x1, 0x00, 0x50},
466*4882a593Smuzhiyun {0x1, 0x00, 0x51},
467*4882a593Smuzhiyun {0x1, 0x00, 0x52},
468*4882a593Smuzhiyun {0x1, 0x00, 0x53},
469*4882a593Smuzhiyun {0x1, 0x00, 0x54},
470*4882a593Smuzhiyun {0x1, 0x00, 0x55},
471*4882a593Smuzhiyun {0x1, 0x00, 0x56},
472*4882a593Smuzhiyun {0x1, 0x00, 0x57},
473*4882a593Smuzhiyun {0x1, 0x00, 0x58},
474*4882a593Smuzhiyun {0x1, 0x00, 0x59},
475*4882a593Smuzhiyun {0x1, 0x00, 0x5A},
476*4882a593Smuzhiyun {0x2, 0x03, 0x00},
477*4882a593Smuzhiyun {0x2, 0x00, 0x01},
478*4882a593Smuzhiyun {0x2, 0x00, 0x05},
479*4882a593Smuzhiyun {0x2, 0x00, 0x06},
480*4882a593Smuzhiyun {0x2, 0x00, 0x07},
481*4882a593Smuzhiyun {0x2, 0x00, 0x10},
482*4882a593Smuzhiyun {0x2, 0x00, 0x11},
483*4882a593Smuzhiyun /* Strange - looks like the 501 driver doesn't do anything
484*4882a593Smuzhiyun * at insert time except read the EEPROM
485*4882a593Smuzhiyun */
486*4882a593Smuzhiyun {}
487*4882a593Smuzhiyun };
488*4882a593Smuzhiyun
489*4882a593Smuzhiyun /* Data for video camera init before capture.
490*4882a593Smuzhiyun * Capture and decoding by Colin Peart.
491*4882a593Smuzhiyun * This is is for the 3com HomeConnect Lite which is spca501a based.
492*4882a593Smuzhiyun */
493*4882a593Smuzhiyun static const __u16 spca501_3com_open_data[][3] = {
494*4882a593Smuzhiyun /* bmRequest,value,index */
495*4882a593Smuzhiyun {0x2, 0x0050, 0x0000}, /* C/S Enable TG soft reset, timing mode=010 */
496*4882a593Smuzhiyun {0x2, 0x0043, 0x0000}, /* C/S Disable TG soft reset, timing mode=010 */
497*4882a593Smuzhiyun {0x2, 0x0002, 0x0005}, /* C/S GPIO */
498*4882a593Smuzhiyun {0x2, 0x0003, 0x0005}, /* C/S GPIO */
499*4882a593Smuzhiyun
500*4882a593Smuzhiyun #ifdef CCDSP_SET
501*4882a593Smuzhiyun {0x1, 0x0020, 0x0001}, /* CCDSP Options */
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun {0x1, 0x0020, 0x0002}, /* CCDSP Black Level */
504*4882a593Smuzhiyun {0x1, 0x006e, 0x0007}, /* CCDSP Gamma options */
505*4882a593Smuzhiyun {0x1, 0x0090, 0x0015}, /* CCDSP Luminance Low */
506*4882a593Smuzhiyun {0x1, 0x00ff, 0x0016}, /* CCDSP Luminance High */
507*4882a593Smuzhiyun {0x1, 0x0003, 0x003F}, /* CCDSP Gamma correction toggle */
508*4882a593Smuzhiyun
509*4882a593Smuzhiyun #ifdef ALTER_GAMMA
510*4882a593Smuzhiyun {0x1, 0x0010, 0x0008}, /* CCDSP YUV A11 */
511*4882a593Smuzhiyun {0x1, 0x0000, 0x0009}, /* CCDSP YUV A12 */
512*4882a593Smuzhiyun {0x1, 0x0000, 0x000a}, /* CCDSP YUV A13 */
513*4882a593Smuzhiyun {0x1, 0x0000, 0x000b}, /* CCDSP YUV A21 */
514*4882a593Smuzhiyun {0x1, 0x0010, 0x000c}, /* CCDSP YUV A22 */
515*4882a593Smuzhiyun {0x1, 0x0000, 0x000d}, /* CCDSP YUV A23 */
516*4882a593Smuzhiyun {0x1, 0x0000, 0x000e}, /* CCDSP YUV A31 */
517*4882a593Smuzhiyun {0x1, 0x0000, 0x000f}, /* CCDSP YUV A32 */
518*4882a593Smuzhiyun {0x1, 0x0010, 0x0010}, /* CCDSP YUV A33 */
519*4882a593Smuzhiyun {0x1, 0x0000, 0x0011}, /* CCDSP R Offset */
520*4882a593Smuzhiyun {0x1, 0x0000, 0x0012}, /* CCDSP G Offset */
521*4882a593Smuzhiyun {0x1, 0x0001, 0x0013}, /* CCDSP B Offset */
522*4882a593Smuzhiyun {0x1, 0x0001, 0x0014}, /* CCDSP BG Offset */
523*4882a593Smuzhiyun {0x1, 0x003f, 0x00C1}, /* CCDSP Gamma Correction Enable */
524*4882a593Smuzhiyun #endif
525*4882a593Smuzhiyun #endif
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun #ifdef TG_SET
528*4882a593Smuzhiyun {0x0, 0x00fc, 0x0000}, /* TG Shutter Speed High Bits */
529*4882a593Smuzhiyun {0x0, 0x0000, 0x0001}, /* TG Shutter Speed Low Bits */
530*4882a593Smuzhiyun {0x0, 0x00e4, 0x0004}, /* TG DCLK*2 Adjust */
531*4882a593Smuzhiyun {0x0, 0x0008, 0x0005}, /* TG ADCK Adjust */
532*4882a593Smuzhiyun {0x0, 0x0003, 0x0006}, /* TG FR Phase Adjust */
533*4882a593Smuzhiyun {0x0, 0x0001, 0x0007}, /* TG FCDS Phase Adjust */
534*4882a593Smuzhiyun {0x0, 0x0039, 0x0008}, /* TG FS Phase Adjust */
535*4882a593Smuzhiyun {0x0, 0x0088, 0x000a}, /* TG MH1 */
536*4882a593Smuzhiyun {0x0, 0x0003, 0x000f}, /* TG Pixel ID */
537*4882a593Smuzhiyun
538*4882a593Smuzhiyun /* Like below, unexplained toglleing */
539*4882a593Smuzhiyun {0x0, 0x0080, 0x000c},
540*4882a593Smuzhiyun {0x0, 0x0000, 0x000d},
541*4882a593Smuzhiyun {0x0, 0x0080, 0x000c},
542*4882a593Smuzhiyun {0x0, 0x0004, 0x000d},
543*4882a593Smuzhiyun {0x0, 0x0000, 0x000c},
544*4882a593Smuzhiyun {0x0, 0x0000, 0x000d},
545*4882a593Smuzhiyun {0x0, 0x0040, 0x000c},
546*4882a593Smuzhiyun {0x0, 0x0017, 0x000d},
547*4882a593Smuzhiyun {0x0, 0x00c0, 0x000c},
548*4882a593Smuzhiyun {0x0, 0x0000, 0x000d},
549*4882a593Smuzhiyun {0x0, 0x0080, 0x000c},
550*4882a593Smuzhiyun {0x0, 0x0006, 0x000d},
551*4882a593Smuzhiyun {0x0, 0x0080, 0x000c},
552*4882a593Smuzhiyun {0x0, 0x0004, 0x000d},
553*4882a593Smuzhiyun {0x0, 0x0002, 0x0003},
554*4882a593Smuzhiyun #endif
555*4882a593Smuzhiyun
556*4882a593Smuzhiyun #ifdef DSPWIN_SET
557*4882a593Smuzhiyun {0x1, 0x001c, 0x0017}, /* CCDSP W1 Start X */
558*4882a593Smuzhiyun {0x1, 0x00e2, 0x0019}, /* CCDSP W2 Start X */
559*4882a593Smuzhiyun {0x1, 0x001c, 0x001b}, /* CCDSP W3 Start X */
560*4882a593Smuzhiyun {0x1, 0x00e2, 0x001d}, /* CCDSP W4 Start X */
561*4882a593Smuzhiyun {0x1, 0x00aa, 0x001f}, /* CCDSP W5 Start X */
562*4882a593Smuzhiyun {0x1, 0x0070, 0x0020}, /* CCDSP W5 Start Y */
563*4882a593Smuzhiyun #endif
564*4882a593Smuzhiyun {0x0, 0x0001, 0x0010}, /* TG Start Clock */
565*4882a593Smuzhiyun
566*4882a593Smuzhiyun /* {0x2, 0x006a, 0x0001}, * C/S Enable ISOSYNCH Packet Engine */
567*4882a593Smuzhiyun {0x2, 0x0068, 0x0001}, /* C/S Disable ISOSYNCH Packet Engine */
568*4882a593Smuzhiyun {0x2, 0x0000, 0x0005},
569*4882a593Smuzhiyun {0x2, 0x0043, 0x0000}, /* C/S Set Timing Mode, Disable TG soft reset */
570*4882a593Smuzhiyun {0x2, 0x0043, 0x0000}, /* C/S Set Timing Mode, Disable TG soft reset */
571*4882a593Smuzhiyun {0x2, 0x0002, 0x0005}, /* C/S GPIO */
572*4882a593Smuzhiyun {0x2, 0x0003, 0x0005}, /* C/S GPIO */
573*4882a593Smuzhiyun
574*4882a593Smuzhiyun {0x2, 0x006a, 0x0001}, /* C/S Enable ISOSYNCH Packet Engine */
575*4882a593Smuzhiyun {}
576*4882a593Smuzhiyun };
577*4882a593Smuzhiyun
578*4882a593Smuzhiyun /*
579*4882a593Smuzhiyun * Data used to initialize a SPCA501C with HV7131B sensor.
580*4882a593Smuzhiyun * From a capture file taken with USBSnoop v 1.5
581*4882a593Smuzhiyun * I have a "SPCA501C pc camera chipset" manual by sunplus, but some
582*4882a593Smuzhiyun * of the value meanings are obscure or simply "reserved".
583*4882a593Smuzhiyun * to do list:
584*4882a593Smuzhiyun * 1) Understand what every value means
585*4882a593Smuzhiyun * 2) Understand why some values seem to appear more than once
586*4882a593Smuzhiyun * 3) Write a small comment for each line of the following arrays.
587*4882a593Smuzhiyun */
588*4882a593Smuzhiyun static const __u16 spca501c_arowana_open_data[][3] = {
589*4882a593Smuzhiyun /* bmRequest,value,index */
590*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
591*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
592*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
593*4882a593Smuzhiyun {0x01, 0x0006, 0x0011},
594*4882a593Smuzhiyun {0x01, 0x00ff, 0x0012},
595*4882a593Smuzhiyun {0x01, 0x0014, 0x0013},
596*4882a593Smuzhiyun {0x01, 0x0000, 0x0014},
597*4882a593Smuzhiyun {0x01, 0x0042, 0x0051},
598*4882a593Smuzhiyun {0x01, 0x0040, 0x0052},
599*4882a593Smuzhiyun {0x01, 0x0051, 0x0053},
600*4882a593Smuzhiyun {0x01, 0x0040, 0x0054},
601*4882a593Smuzhiyun {0x01, 0x0000, 0x0055},
602*4882a593Smuzhiyun {0x00, 0x0025, 0x0000},
603*4882a593Smuzhiyun {0x00, 0x0026, 0x0000},
604*4882a593Smuzhiyun {0x00, 0x0001, 0x0000},
605*4882a593Smuzhiyun {0x00, 0x0027, 0x0000},
606*4882a593Smuzhiyun {0x00, 0x008a, 0x0000},
607*4882a593Smuzhiyun {}
608*4882a593Smuzhiyun };
609*4882a593Smuzhiyun
610*4882a593Smuzhiyun static const __u16 spca501c_arowana_init_data[][3] = {
611*4882a593Smuzhiyun /* bmRequest,value,index */
612*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
613*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
614*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
615*4882a593Smuzhiyun {0x01, 0x0006, 0x0011},
616*4882a593Smuzhiyun {0x01, 0x00ff, 0x0012},
617*4882a593Smuzhiyun {0x01, 0x0014, 0x0013},
618*4882a593Smuzhiyun {0x01, 0x0000, 0x0014},
619*4882a593Smuzhiyun {0x01, 0x0042, 0x0051},
620*4882a593Smuzhiyun {0x01, 0x0040, 0x0052},
621*4882a593Smuzhiyun {0x01, 0x0051, 0x0053},
622*4882a593Smuzhiyun {0x01, 0x0040, 0x0054},
623*4882a593Smuzhiyun {0x01, 0x0000, 0x0055},
624*4882a593Smuzhiyun {0x00, 0x0025, 0x0000},
625*4882a593Smuzhiyun {0x00, 0x0026, 0x0000},
626*4882a593Smuzhiyun {0x00, 0x0001, 0x0000},
627*4882a593Smuzhiyun {0x00, 0x0027, 0x0000},
628*4882a593Smuzhiyun {0x00, 0x008a, 0x0000},
629*4882a593Smuzhiyun {0x02, 0x0000, 0x0005},
630*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
631*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
632*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
633*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
634*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
635*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
636*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
637*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
638*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
639*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
640*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
641*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
642*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
643*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
644*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
645*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
646*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
647*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
648*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
649*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
650*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
651*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
652*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
653*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
654*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
655*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
656*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
657*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
658*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
659*4882a593Smuzhiyun {0x00, 0x000c, 0x0003},
660*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
661*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
662*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
663*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
664*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
665*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
666*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
667*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
668*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
669*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
670*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
671*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
672*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
673*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
674*4882a593Smuzhiyun {0x00, 0x0000, 0x0012},
675*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
676*4882a593Smuzhiyun {0x00, 0x0080, 0x0021},
677*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
678*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023},
679*4882a593Smuzhiyun {0x00, 0x0000, 0x0024},
680*4882a593Smuzhiyun {0x00, 0x00d5, 0x0025},
681*4882a593Smuzhiyun {0x00, 0x0000, 0x0026},
682*4882a593Smuzhiyun {0x00, 0x000b, 0x0027},
683*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
684*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
685*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
686*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
687*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
688*4882a593Smuzhiyun {0xff, 0x0000, 0x00d0},
689*4882a593Smuzhiyun {0xff, 0x00d8, 0x00d1},
690*4882a593Smuzhiyun {0xff, 0x0000, 0x00d4},
691*4882a593Smuzhiyun {0xff, 0x0000, 0x00d5},
692*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
693*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
694*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
695*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
696*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
697*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
698*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
699*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
700*4882a593Smuzhiyun {0x01, 0x00fd, 0x000a},
701*4882a593Smuzhiyun {0x01, 0x0038, 0x000b},
702*4882a593Smuzhiyun {0x01, 0x00d1, 0x000c},
703*4882a593Smuzhiyun {0x01, 0x00f7, 0x000d},
704*4882a593Smuzhiyun {0x01, 0x00ed, 0x000e},
705*4882a593Smuzhiyun {0x01, 0x00d8, 0x000f},
706*4882a593Smuzhiyun {0x01, 0x0038, 0x0010},
707*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015},
708*4882a593Smuzhiyun {0x01, 0x0001, 0x0016},
709*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
710*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
711*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
712*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
713*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
714*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
715*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
716*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
717*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
718*4882a593Smuzhiyun {0x01, 0x0000, 0x0020},
719*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e},
720*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
721*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
722*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
723*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
724*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
725*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
726*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
727*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
728*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
729*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
730*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
731*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
732*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
733*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
734*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
735*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
736*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
737*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
738*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
739*4882a593Smuzhiyun {0x01, 0x0060, 0x0057},
740*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
741*4882a593Smuzhiyun {0x01, 0x0011, 0x0059},
742*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
743*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
744*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
745*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
746*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
747*4882a593Smuzhiyun {0x02, 0x100a, 0x0007},
748*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
749*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
750*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
751*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
752*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
753*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
754*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
755*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
756*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
757*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
758*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
759*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
760*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
761*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
762*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
763*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
764*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
765*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
766*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
767*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
768*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
769*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
770*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
771*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
772*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
773*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
774*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
775*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
776*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
777*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
778*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
779*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
780*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
781*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
782*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
783*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
784*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
785*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
786*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
787*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
788*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
789*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
790*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
791*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
792*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
793*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
794*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
795*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
796*4882a593Smuzhiyun {0x00, 0x000c, 0x0003},
797*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
798*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
799*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
800*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
801*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
802*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
803*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
804*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
805*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
806*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
807*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
808*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
809*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
810*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
811*4882a593Smuzhiyun {0x00, 0x0000, 0x0012},
812*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
813*4882a593Smuzhiyun {0x00, 0x0080, 0x0021},
814*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
815*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023},
816*4882a593Smuzhiyun {0x00, 0x0000, 0x0024},
817*4882a593Smuzhiyun {0x00, 0x00d5, 0x0025},
818*4882a593Smuzhiyun {0x00, 0x0000, 0x0026},
819*4882a593Smuzhiyun {0x00, 0x000b, 0x0027},
820*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
821*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
822*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
823*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
824*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
825*4882a593Smuzhiyun {0xff, 0x0000, 0x00d0},
826*4882a593Smuzhiyun {0xff, 0x00d8, 0x00d1},
827*4882a593Smuzhiyun {0xff, 0x0000, 0x00d4},
828*4882a593Smuzhiyun {0xff, 0x0000, 0x00d5},
829*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
830*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
831*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
832*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
833*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
834*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
835*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
836*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
837*4882a593Smuzhiyun {0x01, 0x00fd, 0x000a},
838*4882a593Smuzhiyun {0x01, 0x0038, 0x000b},
839*4882a593Smuzhiyun {0x01, 0x00d1, 0x000c},
840*4882a593Smuzhiyun {0x01, 0x00f7, 0x000d},
841*4882a593Smuzhiyun {0x01, 0x00ed, 0x000e},
842*4882a593Smuzhiyun {0x01, 0x00d8, 0x000f},
843*4882a593Smuzhiyun {0x01, 0x0038, 0x0010},
844*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015},
845*4882a593Smuzhiyun {0x01, 0x0001, 0x0016},
846*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
847*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
848*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
849*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
850*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
851*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
852*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
853*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
854*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
855*4882a593Smuzhiyun {0x01, 0x0000, 0x0020},
856*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e},
857*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
858*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
859*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
860*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
861*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
862*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
863*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
864*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
865*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
866*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
867*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
868*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
869*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
870*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
871*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
872*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
873*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
874*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
875*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
876*4882a593Smuzhiyun {0x01, 0x0060, 0x0057},
877*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
878*4882a593Smuzhiyun {0x01, 0x0011, 0x0059},
879*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
880*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
881*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
882*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
883*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
884*4882a593Smuzhiyun {0x02, 0x100a, 0x0007},
885*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
886*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
887*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
888*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
889*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
890*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
891*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
892*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
893*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
894*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
895*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
896*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
897*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
898*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
899*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
900*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
901*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
902*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
903*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
904*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
905*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
906*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
907*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
908*4882a593Smuzhiyun {0x01, 0xfffd, 0x000a},
909*4882a593Smuzhiyun {0x01, 0x0023, 0x000b},
910*4882a593Smuzhiyun {0x01, 0xffea, 0x000c},
911*4882a593Smuzhiyun {0x01, 0xfff4, 0x000d},
912*4882a593Smuzhiyun {0x01, 0xfffc, 0x000e},
913*4882a593Smuzhiyun {0x01, 0xffe3, 0x000f},
914*4882a593Smuzhiyun {0x01, 0x001f, 0x0010},
915*4882a593Smuzhiyun {0x01, 0x00a8, 0x0001},
916*4882a593Smuzhiyun {0x01, 0x0067, 0x0007},
917*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
918*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
919*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
920*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
921*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
922*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
923*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
924*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
925*4882a593Smuzhiyun {0x01, 0x00c8, 0x0015},
926*4882a593Smuzhiyun {0x01, 0x0032, 0x0016},
927*4882a593Smuzhiyun {0x01, 0x0000, 0x0011},
928*4882a593Smuzhiyun {0x01, 0x0000, 0x0012},
929*4882a593Smuzhiyun {0x01, 0x0000, 0x0013},
930*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
931*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
932*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
933*4882a593Smuzhiyun {0x02, 0xc000, 0x0001},
934*4882a593Smuzhiyun {0x02, 0x0000, 0x0005},
935*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
936*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
937*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
938*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
939*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
940*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
941*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
942*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
943*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
944*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
945*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
946*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
947*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
948*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
949*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
950*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
951*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
952*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
953*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
954*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
955*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
956*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
957*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
958*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
959*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
960*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
961*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
962*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
963*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
964*4882a593Smuzhiyun {0x00, 0x000c, 0x0003},
965*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
966*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
967*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
968*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
969*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
970*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
971*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
972*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
973*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
974*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
975*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
976*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
977*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
978*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
979*4882a593Smuzhiyun {0x00, 0x0000, 0x0012},
980*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
981*4882a593Smuzhiyun {0x00, 0x0080, 0x0021},
982*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
983*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023},
984*4882a593Smuzhiyun {0x00, 0x0000, 0x0024},
985*4882a593Smuzhiyun {0x00, 0x00d5, 0x0025},
986*4882a593Smuzhiyun {0x00, 0x0000, 0x0026},
987*4882a593Smuzhiyun {0x00, 0x000b, 0x0027},
988*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
989*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
990*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
991*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
992*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
993*4882a593Smuzhiyun {0xff, 0x0000, 0x00d0},
994*4882a593Smuzhiyun {0xff, 0x00d8, 0x00d1},
995*4882a593Smuzhiyun {0xff, 0x0000, 0x00d4},
996*4882a593Smuzhiyun {0xff, 0x0000, 0x00d5},
997*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
998*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
999*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
1000*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1001*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
1002*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
1003*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
1004*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
1005*4882a593Smuzhiyun {0x01, 0x00fd, 0x000a},
1006*4882a593Smuzhiyun {0x01, 0x0038, 0x000b},
1007*4882a593Smuzhiyun {0x01, 0x00d1, 0x000c},
1008*4882a593Smuzhiyun {0x01, 0x00f7, 0x000d},
1009*4882a593Smuzhiyun {0x01, 0x00ed, 0x000e},
1010*4882a593Smuzhiyun {0x01, 0x00d8, 0x000f},
1011*4882a593Smuzhiyun {0x01, 0x0038, 0x0010},
1012*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015},
1013*4882a593Smuzhiyun {0x01, 0x0001, 0x0016},
1014*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
1015*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
1016*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
1017*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
1018*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
1019*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
1020*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
1021*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
1022*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
1023*4882a593Smuzhiyun {0x01, 0x0000, 0x0020},
1024*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e},
1025*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1026*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
1027*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
1028*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
1029*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
1030*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
1031*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
1032*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
1033*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
1034*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
1035*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
1036*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
1037*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
1038*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
1039*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
1040*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
1041*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
1042*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
1043*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1044*4882a593Smuzhiyun {0x01, 0x0060, 0x0057},
1045*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
1046*4882a593Smuzhiyun {0x01, 0x0011, 0x0059},
1047*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
1048*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1049*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1050*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1051*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
1052*4882a593Smuzhiyun {0x02, 0x100a, 0x0007},
1053*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1054*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1055*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
1056*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1057*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1058*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
1059*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1060*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1061*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1062*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1063*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1064*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
1065*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1066*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1067*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1068*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
1069*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1070*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1071*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1072*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1073*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
1074*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1075*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
1076*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
1077*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1078*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1079*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
1080*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
1081*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
1082*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
1083*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
1084*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1085*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
1086*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1087*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
1088*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1089*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
1090*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
1091*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
1092*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1093*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
1094*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1095*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
1096*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1097*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
1098*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1099*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
1100*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
1101*4882a593Smuzhiyun {0x00, 0x000c, 0x0003},
1102*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
1103*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1104*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
1105*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
1106*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
1107*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
1108*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
1109*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
1110*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
1111*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
1112*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
1113*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
1114*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
1115*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
1116*4882a593Smuzhiyun {0x00, 0x0000, 0x0012},
1117*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
1118*4882a593Smuzhiyun {0x00, 0x0080, 0x0021},
1119*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
1120*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023},
1121*4882a593Smuzhiyun {0x00, 0x0000, 0x0024},
1122*4882a593Smuzhiyun {0x00, 0x00d5, 0x0025},
1123*4882a593Smuzhiyun {0x00, 0x0000, 0x0026},
1124*4882a593Smuzhiyun {0x00, 0x000b, 0x0027},
1125*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
1126*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
1127*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
1128*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
1129*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
1130*4882a593Smuzhiyun {0xff, 0x0000, 0x00d0},
1131*4882a593Smuzhiyun {0xff, 0x00d8, 0x00d1},
1132*4882a593Smuzhiyun {0xff, 0x0000, 0x00d4},
1133*4882a593Smuzhiyun {0xff, 0x0000, 0x00d5},
1134*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1135*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
1136*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
1137*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1138*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
1139*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
1140*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
1141*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
1142*4882a593Smuzhiyun {0x01, 0x00fd, 0x000a},
1143*4882a593Smuzhiyun {0x01, 0x0038, 0x000b},
1144*4882a593Smuzhiyun {0x01, 0x00d1, 0x000c},
1145*4882a593Smuzhiyun {0x01, 0x00f7, 0x000d},
1146*4882a593Smuzhiyun {0x01, 0x00ed, 0x000e},
1147*4882a593Smuzhiyun {0x01, 0x00d8, 0x000f},
1148*4882a593Smuzhiyun {0x01, 0x0038, 0x0010},
1149*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015},
1150*4882a593Smuzhiyun {0x01, 0x0001, 0x0016},
1151*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
1152*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
1153*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
1154*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
1155*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
1156*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
1157*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
1158*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
1159*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
1160*4882a593Smuzhiyun {0x01, 0x0000, 0x0020},
1161*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e},
1162*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1163*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
1164*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
1165*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
1166*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
1167*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
1168*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
1169*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
1170*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
1171*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
1172*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
1173*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
1174*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
1175*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
1176*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
1177*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
1178*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
1179*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
1180*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1181*4882a593Smuzhiyun {0x01, 0x0060, 0x0057},
1182*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
1183*4882a593Smuzhiyun {0x01, 0x0011, 0x0059},
1184*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
1185*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1186*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1187*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1188*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
1189*4882a593Smuzhiyun {0x02, 0x100a, 0x0007},
1190*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1191*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1192*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
1193*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1194*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1195*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
1196*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1197*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1198*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1199*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1200*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1201*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
1202*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1203*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1204*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1205*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
1206*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1207*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1208*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1209*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1210*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1211*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1212*4882a593Smuzhiyun {0x05, 0x000f, 0x0000},
1213*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1214*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1215*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
1216*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
1217*4882a593Smuzhiyun {0x01, 0xfffd, 0x000a},
1218*4882a593Smuzhiyun {0x01, 0x0023, 0x000b},
1219*4882a593Smuzhiyun {0x01, 0xffea, 0x000c},
1220*4882a593Smuzhiyun {0x01, 0xfff4, 0x000d},
1221*4882a593Smuzhiyun {0x01, 0xfffc, 0x000e},
1222*4882a593Smuzhiyun {0x01, 0xffe3, 0x000f},
1223*4882a593Smuzhiyun {0x01, 0x001f, 0x0010},
1224*4882a593Smuzhiyun {0x01, 0x00a8, 0x0001},
1225*4882a593Smuzhiyun {0x01, 0x0067, 0x0007},
1226*4882a593Smuzhiyun {0x01, 0x0042, 0x0051},
1227*4882a593Smuzhiyun {0x01, 0x0051, 0x0053},
1228*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1229*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1230*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1231*4882a593Smuzhiyun {0x02, 0xc000, 0x0001},
1232*4882a593Smuzhiyun {0x02, 0x0000, 0x0005},
1233*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1234*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
1235*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1236*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
1237*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
1238*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1239*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1240*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
1241*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
1242*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
1243*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
1244*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
1245*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1246*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
1247*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1248*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
1249*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1250*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
1251*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
1252*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
1253*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1254*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
1255*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1256*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
1257*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1258*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
1259*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1260*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
1261*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
1262*4882a593Smuzhiyun {0x00, 0x000c, 0x0003},
1263*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
1264*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1265*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
1266*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
1267*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
1268*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
1269*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
1270*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
1271*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
1272*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
1273*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
1274*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
1275*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
1276*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
1277*4882a593Smuzhiyun {0x00, 0x0000, 0x0012},
1278*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
1279*4882a593Smuzhiyun {0x00, 0x0080, 0x0021},
1280*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
1281*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023},
1282*4882a593Smuzhiyun {0x00, 0x0000, 0x0024},
1283*4882a593Smuzhiyun {0x00, 0x00d5, 0x0025},
1284*4882a593Smuzhiyun {0x00, 0x0000, 0x0026},
1285*4882a593Smuzhiyun {0x00, 0x000b, 0x0027},
1286*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
1287*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
1288*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
1289*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
1290*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
1291*4882a593Smuzhiyun {0xff, 0x0000, 0x00d0},
1292*4882a593Smuzhiyun {0xff, 0x00d8, 0x00d1},
1293*4882a593Smuzhiyun {0xff, 0x0000, 0x00d4},
1294*4882a593Smuzhiyun {0xff, 0x0000, 0x00d5},
1295*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1296*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
1297*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
1298*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1299*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
1300*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
1301*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
1302*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
1303*4882a593Smuzhiyun {0x01, 0x00fd, 0x000a},
1304*4882a593Smuzhiyun {0x01, 0x0038, 0x000b},
1305*4882a593Smuzhiyun {0x01, 0x00d1, 0x000c},
1306*4882a593Smuzhiyun {0x01, 0x00f7, 0x000d},
1307*4882a593Smuzhiyun {0x01, 0x00ed, 0x000e},
1308*4882a593Smuzhiyun {0x01, 0x00d8, 0x000f},
1309*4882a593Smuzhiyun {0x01, 0x0038, 0x0010},
1310*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015},
1311*4882a593Smuzhiyun {0x01, 0x0001, 0x0016},
1312*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
1313*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
1314*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
1315*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
1316*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
1317*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
1318*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
1319*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
1320*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
1321*4882a593Smuzhiyun {0x01, 0x0000, 0x0020},
1322*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e},
1323*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1324*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
1325*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
1326*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
1327*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
1328*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
1329*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
1330*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
1331*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
1332*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
1333*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
1334*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
1335*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
1336*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
1337*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
1338*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
1339*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
1340*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
1341*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1342*4882a593Smuzhiyun {0x01, 0x0060, 0x0057},
1343*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
1344*4882a593Smuzhiyun {0x01, 0x0011, 0x0059},
1345*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
1346*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1347*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1348*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1349*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
1350*4882a593Smuzhiyun {0x02, 0x100a, 0x0007},
1351*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1352*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1353*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
1354*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1355*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1356*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
1357*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1358*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1359*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1360*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1361*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1362*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
1363*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1364*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1365*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1366*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
1367*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1368*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1369*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1370*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1371*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
1372*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1373*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
1374*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
1375*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1376*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1377*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
1378*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
1379*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
1380*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
1381*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
1382*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1383*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
1384*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1385*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
1386*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1387*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
1388*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
1389*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
1390*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1391*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
1392*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1393*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
1394*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1395*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
1396*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1397*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
1398*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
1399*4882a593Smuzhiyun {0x00, 0x000c, 0x0003},
1400*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
1401*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1402*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
1403*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
1404*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
1405*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
1406*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
1407*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
1408*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
1409*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
1410*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
1411*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
1412*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
1413*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
1414*4882a593Smuzhiyun {0x00, 0x0000, 0x0012},
1415*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
1416*4882a593Smuzhiyun {0x00, 0x0080, 0x0021},
1417*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
1418*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023},
1419*4882a593Smuzhiyun {0x00, 0x0000, 0x0024},
1420*4882a593Smuzhiyun {0x00, 0x00d5, 0x0025},
1421*4882a593Smuzhiyun {0x00, 0x0000, 0x0026},
1422*4882a593Smuzhiyun {0x00, 0x000b, 0x0027},
1423*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
1424*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
1425*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
1426*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
1427*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
1428*4882a593Smuzhiyun {0xff, 0x0000, 0x00d0},
1429*4882a593Smuzhiyun {0xff, 0x00d8, 0x00d1},
1430*4882a593Smuzhiyun {0xff, 0x0000, 0x00d4},
1431*4882a593Smuzhiyun {0xff, 0x0000, 0x00d5},
1432*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1433*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
1434*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
1435*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1436*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
1437*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
1438*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
1439*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
1440*4882a593Smuzhiyun {0x01, 0x00fd, 0x000a},
1441*4882a593Smuzhiyun {0x01, 0x0038, 0x000b},
1442*4882a593Smuzhiyun {0x01, 0x00d1, 0x000c},
1443*4882a593Smuzhiyun {0x01, 0x00f7, 0x000d},
1444*4882a593Smuzhiyun {0x01, 0x00ed, 0x000e},
1445*4882a593Smuzhiyun {0x01, 0x00d8, 0x000f},
1446*4882a593Smuzhiyun {0x01, 0x0038, 0x0010},
1447*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015},
1448*4882a593Smuzhiyun {0x01, 0x0001, 0x0016},
1449*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
1450*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
1451*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
1452*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
1453*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
1454*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
1455*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
1456*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
1457*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
1458*4882a593Smuzhiyun {0x01, 0x0000, 0x0020},
1459*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e},
1460*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1461*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
1462*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
1463*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
1464*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
1465*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
1466*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
1467*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
1468*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
1469*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
1470*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
1471*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
1472*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
1473*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
1474*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
1475*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
1476*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
1477*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
1478*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1479*4882a593Smuzhiyun {0x01, 0x0060, 0x0057},
1480*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
1481*4882a593Smuzhiyun {0x01, 0x0011, 0x0059},
1482*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
1483*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1484*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1485*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1486*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
1487*4882a593Smuzhiyun {0x02, 0x100a, 0x0007},
1488*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1489*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1490*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
1491*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1492*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1493*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
1494*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1495*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1496*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1497*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1498*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1499*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
1500*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1501*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1502*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1503*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
1504*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1505*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1506*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1507*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1508*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1509*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1510*4882a593Smuzhiyun {0x05, 0x001e, 0x0000},
1511*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1512*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1513*4882a593Smuzhiyun {0x01, 0x0011, 0x0008},
1514*4882a593Smuzhiyun {0x01, 0x0032, 0x0009},
1515*4882a593Smuzhiyun {0x01, 0xfffd, 0x000a},
1516*4882a593Smuzhiyun {0x01, 0x0023, 0x000b},
1517*4882a593Smuzhiyun {0x01, 0xffea, 0x000c},
1518*4882a593Smuzhiyun {0x01, 0xfff4, 0x000d},
1519*4882a593Smuzhiyun {0x01, 0xfffc, 0x000e},
1520*4882a593Smuzhiyun {0x01, 0xffe3, 0x000f},
1521*4882a593Smuzhiyun {0x01, 0x001f, 0x0010},
1522*4882a593Smuzhiyun {0x01, 0x00a8, 0x0001},
1523*4882a593Smuzhiyun {0x01, 0x0067, 0x0007},
1524*4882a593Smuzhiyun {0x01, 0x0042, 0x0051},
1525*4882a593Smuzhiyun {0x01, 0x0051, 0x0053},
1526*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1527*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1528*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1529*4882a593Smuzhiyun {0x01, 0x0042, 0x0051},
1530*4882a593Smuzhiyun {0x01, 0x0051, 0x0053},
1531*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1532*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1533*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1534*4882a593Smuzhiyun {0x05, 0x002d, 0x0000},
1535*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1536*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1537*4882a593Smuzhiyun {0x02, 0xc000, 0x0001},
1538*4882a593Smuzhiyun {0x02, 0x0000, 0x0005},
1539*4882a593Smuzhiyun {}
1540*4882a593Smuzhiyun };
1541*4882a593Smuzhiyun
1542*4882a593Smuzhiyun /* Unknown camera from Ori Usbid 0x0000:0x0000 */
1543*4882a593Smuzhiyun /* Based on snoops from Ori Cohen */
1544*4882a593Smuzhiyun static const __u16 spca501c_mysterious_open_data[][3] = {
1545*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
1546*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1547*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1548*4882a593Smuzhiyun /* DSP Registers */
1549*4882a593Smuzhiyun {0x01, 0x0016, 0x0011}, /* RGB offset */
1550*4882a593Smuzhiyun {0x01, 0x0000, 0x0012},
1551*4882a593Smuzhiyun {0x01, 0x0006, 0x0013},
1552*4882a593Smuzhiyun {0x01, 0x0078, 0x0051},
1553*4882a593Smuzhiyun {0x01, 0x0040, 0x0052},
1554*4882a593Smuzhiyun {0x01, 0x0046, 0x0053},
1555*4882a593Smuzhiyun {0x01, 0x0040, 0x0054},
1556*4882a593Smuzhiyun {0x00, 0x0025, 0x0000},
1557*4882a593Smuzhiyun /* {0x00, 0x0000, 0x0000 }, */
1558*4882a593Smuzhiyun /* Part 2 */
1559*4882a593Smuzhiyun /* TG Registers */
1560*4882a593Smuzhiyun {0x00, 0x0026, 0x0000},
1561*4882a593Smuzhiyun {0x00, 0x0001, 0x0000},
1562*4882a593Smuzhiyun {0x00, 0x0027, 0x0000},
1563*4882a593Smuzhiyun {0x00, 0x008a, 0x0000},
1564*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1565*4882a593Smuzhiyun {0x02, 0x2000, 0x0000},
1566*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1567*4882a593Smuzhiyun {0x05, 0x0015, 0x0001},
1568*4882a593Smuzhiyun {0x05, 0x00ea, 0x0000},
1569*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1570*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1571*4882a593Smuzhiyun {0x05, 0x0023, 0x0001},
1572*4882a593Smuzhiyun {0x05, 0x0003, 0x0000},
1573*4882a593Smuzhiyun {0x05, 0x0030, 0x0001},
1574*4882a593Smuzhiyun {0x05, 0x002b, 0x0000},
1575*4882a593Smuzhiyun {0x05, 0x0031, 0x0001},
1576*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1577*4882a593Smuzhiyun {0x05, 0x0032, 0x0001},
1578*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1579*4882a593Smuzhiyun {0x05, 0x0033, 0x0001},
1580*4882a593Smuzhiyun {0x05, 0x0023, 0x0000},
1581*4882a593Smuzhiyun {0x05, 0x0034, 0x0001},
1582*4882a593Smuzhiyun {0x05, 0x0002, 0x0000},
1583*4882a593Smuzhiyun {0x05, 0x0050, 0x0001},
1584*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1585*4882a593Smuzhiyun {0x05, 0x0051, 0x0001},
1586*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1587*4882a593Smuzhiyun {0x05, 0x0052, 0x0001},
1588*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1589*4882a593Smuzhiyun {0x05, 0x0054, 0x0001},
1590*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1591*4882a593Smuzhiyun {}
1592*4882a593Smuzhiyun };
1593*4882a593Smuzhiyun
1594*4882a593Smuzhiyun /* Based on snoops from Ori Cohen */
1595*4882a593Smuzhiyun static const __u16 spca501c_mysterious_init_data[][3] = {
1596*4882a593Smuzhiyun /* Part 3 */
1597*4882a593Smuzhiyun /* TG registers */
1598*4882a593Smuzhiyun /* {0x00, 0x0000, 0x0000}, */
1599*4882a593Smuzhiyun {0x00, 0x0000, 0x0001},
1600*4882a593Smuzhiyun {0x00, 0x0000, 0x0002},
1601*4882a593Smuzhiyun {0x00, 0x0006, 0x0003},
1602*4882a593Smuzhiyun {0x00, 0x0000, 0x0004},
1603*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1604*4882a593Smuzhiyun {0x00, 0x0000, 0x0006},
1605*4882a593Smuzhiyun {0x00, 0x0040, 0x0007},
1606*4882a593Smuzhiyun {0x00, 0x00c0, 0x0008},
1607*4882a593Smuzhiyun {0x00, 0x004a, 0x0009},
1608*4882a593Smuzhiyun {0x00, 0x0000, 0x000a},
1609*4882a593Smuzhiyun {0x00, 0x0000, 0x000b},
1610*4882a593Smuzhiyun {0x00, 0x0001, 0x000c},
1611*4882a593Smuzhiyun {0x00, 0x0001, 0x000d},
1612*4882a593Smuzhiyun {0x00, 0x0000, 0x000e},
1613*4882a593Smuzhiyun {0x00, 0x0002, 0x000f},
1614*4882a593Smuzhiyun {0x00, 0x0001, 0x0010},
1615*4882a593Smuzhiyun {0x00, 0x0000, 0x0011},
1616*4882a593Smuzhiyun {0x00, 0x0001, 0x0012},
1617*4882a593Smuzhiyun {0x00, 0x0002, 0x0020},
1618*4882a593Smuzhiyun {0x00, 0x0080, 0x0021}, /* 640 */
1619*4882a593Smuzhiyun {0x00, 0x0001, 0x0022},
1620*4882a593Smuzhiyun {0x00, 0x00e0, 0x0023}, /* 480 */
1621*4882a593Smuzhiyun {0x00, 0x0000, 0x0024}, /* Offset H hight */
1622*4882a593Smuzhiyun {0x00, 0x00d3, 0x0025}, /* low */
1623*4882a593Smuzhiyun {0x00, 0x0000, 0x0026}, /* Offset V */
1624*4882a593Smuzhiyun {0x00, 0x000d, 0x0027}, /* low */
1625*4882a593Smuzhiyun {0x00, 0x0000, 0x0046},
1626*4882a593Smuzhiyun {0x00, 0x0000, 0x0047},
1627*4882a593Smuzhiyun {0x00, 0x0000, 0x0048},
1628*4882a593Smuzhiyun {0x00, 0x0000, 0x0049},
1629*4882a593Smuzhiyun {0x00, 0x0008, 0x004a},
1630*4882a593Smuzhiyun /* DSP Registers */
1631*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1632*4882a593Smuzhiyun {0x01, 0x0028, 0x0001},
1633*4882a593Smuzhiyun {0x01, 0x0000, 0x0002},
1634*4882a593Smuzhiyun {0x01, 0x000a, 0x0003}, /* Level Calc bit7 ->1 Auto */
1635*4882a593Smuzhiyun {0x01, 0x0040, 0x0004},
1636*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
1637*4882a593Smuzhiyun {0x01, 0x000f, 0x0008}, /* A11 Color correction coeff */
1638*4882a593Smuzhiyun {0x01, 0x002d, 0x0009}, /* A12 */
1639*4882a593Smuzhiyun {0x01, 0x0005, 0x000a}, /* A13 */
1640*4882a593Smuzhiyun {0x01, 0x0023, 0x000b}, /* A21 */
1641*4882a593Smuzhiyun {0x01, 0x00e0, 0x000c}, /* A22 */
1642*4882a593Smuzhiyun {0x01, 0x00fd, 0x000d}, /* A23 */
1643*4882a593Smuzhiyun {0x01, 0x00f4, 0x000e}, /* A31 */
1644*4882a593Smuzhiyun {0x01, 0x00e4, 0x000f}, /* A32 */
1645*4882a593Smuzhiyun {0x01, 0x0028, 0x0010}, /* A33 */
1646*4882a593Smuzhiyun {0x01, 0x00ff, 0x0015}, /* Reserved */
1647*4882a593Smuzhiyun {0x01, 0x0001, 0x0016}, /* Reserved */
1648*4882a593Smuzhiyun {0x01, 0x0032, 0x0017}, /* Win1 Start begin */
1649*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
1650*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
1651*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
1652*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
1653*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
1654*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
1655*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
1656*4882a593Smuzhiyun {0x01, 0x0000, 0x001f},
1657*4882a593Smuzhiyun {0x01, 0x0000, 0x0020}, /* Win1 Start end */
1658*4882a593Smuzhiyun {0x01, 0x00ff, 0x003e}, /* Reserved begin */
1659*4882a593Smuzhiyun {0x01, 0x0002, 0x003f},
1660*4882a593Smuzhiyun {0x01, 0x0000, 0x0040},
1661*4882a593Smuzhiyun {0x01, 0x0035, 0x0041},
1662*4882a593Smuzhiyun {0x01, 0x0053, 0x0042},
1663*4882a593Smuzhiyun {0x01, 0x0069, 0x0043},
1664*4882a593Smuzhiyun {0x01, 0x007c, 0x0044},
1665*4882a593Smuzhiyun {0x01, 0x008c, 0x0045},
1666*4882a593Smuzhiyun {0x01, 0x009a, 0x0046},
1667*4882a593Smuzhiyun {0x01, 0x00a8, 0x0047},
1668*4882a593Smuzhiyun {0x01, 0x00b4, 0x0048},
1669*4882a593Smuzhiyun {0x01, 0x00bf, 0x0049},
1670*4882a593Smuzhiyun {0x01, 0x00ca, 0x004a},
1671*4882a593Smuzhiyun {0x01, 0x00d4, 0x004b},
1672*4882a593Smuzhiyun {0x01, 0x00dd, 0x004c},
1673*4882a593Smuzhiyun {0x01, 0x00e7, 0x004d},
1674*4882a593Smuzhiyun {0x01, 0x00ef, 0x004e},
1675*4882a593Smuzhiyun {0x01, 0x00f8, 0x004f},
1676*4882a593Smuzhiyun {0x01, 0x00ff, 0x0050},
1677*4882a593Smuzhiyun {0x01, 0x0003, 0x0056}, /* Reserved end */
1678*4882a593Smuzhiyun {0x01, 0x0060, 0x0057}, /* Edge Gain */
1679*4882a593Smuzhiyun {0x01, 0x0040, 0x0058},
1680*4882a593Smuzhiyun {0x01, 0x0011, 0x0059}, /* Edge Bandwidth */
1681*4882a593Smuzhiyun {0x01, 0x0001, 0x005a},
1682*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1683*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1684*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1685*4882a593Smuzhiyun {0x02, 0x0015, 0x0006},
1686*4882a593Smuzhiyun {0x02, 0x200a, 0x0007},
1687*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1688*4882a593Smuzhiyun {0x02, 0xc000, 0x0001},
1689*4882a593Smuzhiyun {0x02, 0x000f, 0x0005},
1690*4882a593Smuzhiyun {0x02, 0xa048, 0x0000},
1691*4882a593Smuzhiyun {0x05, 0x0022, 0x0004},
1692*4882a593Smuzhiyun {0x05, 0x0025, 0x0001},
1693*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1694*4882a593Smuzhiyun /* Part 4 */
1695*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1696*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1697*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1698*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1699*4882a593Smuzhiyun {0x05, 0x0001, 0x0001},
1700*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1701*4882a593Smuzhiyun {0x05, 0x0021, 0x0001},
1702*4882a593Smuzhiyun {0x05, 0x00d2, 0x0000},
1703*4882a593Smuzhiyun {0x05, 0x0020, 0x0001},
1704*4882a593Smuzhiyun {0x05, 0x0000, 0x0000},
1705*4882a593Smuzhiyun {0x00, 0x0090, 0x0005},
1706*4882a593Smuzhiyun {0x01, 0x00a6, 0x0000},
1707*4882a593Smuzhiyun {0x02, 0x0000, 0x0005},
1708*4882a593Smuzhiyun {0x05, 0x0026, 0x0001},
1709*4882a593Smuzhiyun {0x05, 0x0001, 0x0000},
1710*4882a593Smuzhiyun {0x05, 0x0027, 0x0001},
1711*4882a593Smuzhiyun {0x05, 0x004e, 0x0000},
1712*4882a593Smuzhiyun /* Part 5 */
1713*4882a593Smuzhiyun {0x01, 0x0003, 0x003f},
1714*4882a593Smuzhiyun {0x01, 0x0001, 0x0056},
1715*4882a593Smuzhiyun {0x01, 0x000f, 0x0008},
1716*4882a593Smuzhiyun {0x01, 0x002d, 0x0009},
1717*4882a593Smuzhiyun {0x01, 0x0005, 0x000a},
1718*4882a593Smuzhiyun {0x01, 0x0023, 0x000b},
1719*4882a593Smuzhiyun {0x01, 0xffe0, 0x000c},
1720*4882a593Smuzhiyun {0x01, 0xfffd, 0x000d},
1721*4882a593Smuzhiyun {0x01, 0xfff4, 0x000e},
1722*4882a593Smuzhiyun {0x01, 0xffe4, 0x000f},
1723*4882a593Smuzhiyun {0x01, 0x0028, 0x0010},
1724*4882a593Smuzhiyun {0x01, 0x00a8, 0x0001},
1725*4882a593Smuzhiyun {0x01, 0x0066, 0x0007},
1726*4882a593Smuzhiyun {0x01, 0x0032, 0x0017},
1727*4882a593Smuzhiyun {0x01, 0x0023, 0x0018},
1728*4882a593Smuzhiyun {0x01, 0x00ce, 0x0019},
1729*4882a593Smuzhiyun {0x01, 0x0023, 0x001a},
1730*4882a593Smuzhiyun {0x01, 0x0032, 0x001b},
1731*4882a593Smuzhiyun {0x01, 0x008d, 0x001c},
1732*4882a593Smuzhiyun {0x01, 0x00ce, 0x001d},
1733*4882a593Smuzhiyun {0x01, 0x008d, 0x001e},
1734*4882a593Smuzhiyun {0x01, 0x00c8, 0x0015}, /* c8 Poids fort Luma */
1735*4882a593Smuzhiyun {0x01, 0x0032, 0x0016}, /* 32 */
1736*4882a593Smuzhiyun {0x01, 0x0016, 0x0011}, /* R 00 */
1737*4882a593Smuzhiyun {0x01, 0x0016, 0x0012}, /* G 00 */
1738*4882a593Smuzhiyun {0x01, 0x0016, 0x0013}, /* B 00 */
1739*4882a593Smuzhiyun {0x01, 0x000a, 0x0003},
1740*4882a593Smuzhiyun {0x02, 0xc002, 0x0001},
1741*4882a593Smuzhiyun {0x02, 0x0007, 0x0005},
1742*4882a593Smuzhiyun {}
1743*4882a593Smuzhiyun };
1744*4882a593Smuzhiyun
reg_write(struct gspca_dev * gspca_dev,__u16 req,__u16 index,__u16 value)1745*4882a593Smuzhiyun static int reg_write(struct gspca_dev *gspca_dev,
1746*4882a593Smuzhiyun __u16 req, __u16 index, __u16 value)
1747*4882a593Smuzhiyun {
1748*4882a593Smuzhiyun int ret;
1749*4882a593Smuzhiyun struct usb_device *dev = gspca_dev->dev;
1750*4882a593Smuzhiyun
1751*4882a593Smuzhiyun ret = usb_control_msg(dev,
1752*4882a593Smuzhiyun usb_sndctrlpipe(dev, 0),
1753*4882a593Smuzhiyun req,
1754*4882a593Smuzhiyun USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1755*4882a593Smuzhiyun value, index, NULL, 0, 500);
1756*4882a593Smuzhiyun gspca_dbg(gspca_dev, D_USBO, "reg write: 0x%02x 0x%02x 0x%02x\n",
1757*4882a593Smuzhiyun req, index, value);
1758*4882a593Smuzhiyun if (ret < 0)
1759*4882a593Smuzhiyun pr_err("reg write: error %d\n", ret);
1760*4882a593Smuzhiyun return ret;
1761*4882a593Smuzhiyun }
1762*4882a593Smuzhiyun
1763*4882a593Smuzhiyun
write_vector(struct gspca_dev * gspca_dev,const __u16 data[][3])1764*4882a593Smuzhiyun static int write_vector(struct gspca_dev *gspca_dev, const __u16 data[][3])
1765*4882a593Smuzhiyun {
1766*4882a593Smuzhiyun int ret, i = 0;
1767*4882a593Smuzhiyun
1768*4882a593Smuzhiyun while (data[i][0] != 0 || data[i][1] != 0 || data[i][2] != 0) {
1769*4882a593Smuzhiyun ret = reg_write(gspca_dev, data[i][0], data[i][2],
1770*4882a593Smuzhiyun data[i][1]);
1771*4882a593Smuzhiyun if (ret < 0) {
1772*4882a593Smuzhiyun gspca_err(gspca_dev, "Reg write failed for 0x%02x,0x%02x,0x%02x\n",
1773*4882a593Smuzhiyun data[i][0], data[i][1], data[i][2]);
1774*4882a593Smuzhiyun return ret;
1775*4882a593Smuzhiyun }
1776*4882a593Smuzhiyun i++;
1777*4882a593Smuzhiyun }
1778*4882a593Smuzhiyun return 0;
1779*4882a593Smuzhiyun }
1780*4882a593Smuzhiyun
setbrightness(struct gspca_dev * gspca_dev,s32 val)1781*4882a593Smuzhiyun static void setbrightness(struct gspca_dev *gspca_dev, s32 val)
1782*4882a593Smuzhiyun {
1783*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x12, val);
1784*4882a593Smuzhiyun }
1785*4882a593Smuzhiyun
setcontrast(struct gspca_dev * gspca_dev,s32 val)1786*4882a593Smuzhiyun static void setcontrast(struct gspca_dev *gspca_dev, s32 val)
1787*4882a593Smuzhiyun {
1788*4882a593Smuzhiyun reg_write(gspca_dev, 0x00, 0x00, (val >> 8) & 0xff);
1789*4882a593Smuzhiyun reg_write(gspca_dev, 0x00, 0x01, val & 0xff);
1790*4882a593Smuzhiyun }
1791*4882a593Smuzhiyun
setcolors(struct gspca_dev * gspca_dev,s32 val)1792*4882a593Smuzhiyun static void setcolors(struct gspca_dev *gspca_dev, s32 val)
1793*4882a593Smuzhiyun {
1794*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x0c, val);
1795*4882a593Smuzhiyun }
1796*4882a593Smuzhiyun
setblue_balance(struct gspca_dev * gspca_dev,s32 val)1797*4882a593Smuzhiyun static void setblue_balance(struct gspca_dev *gspca_dev, s32 val)
1798*4882a593Smuzhiyun {
1799*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x11, val);
1800*4882a593Smuzhiyun }
1801*4882a593Smuzhiyun
setred_balance(struct gspca_dev * gspca_dev,s32 val)1802*4882a593Smuzhiyun static void setred_balance(struct gspca_dev *gspca_dev, s32 val)
1803*4882a593Smuzhiyun {
1804*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x13, val);
1805*4882a593Smuzhiyun }
1806*4882a593Smuzhiyun
1807*4882a593Smuzhiyun /* this function is called at probe time */
sd_config(struct gspca_dev * gspca_dev,const struct usb_device_id * id)1808*4882a593Smuzhiyun static int sd_config(struct gspca_dev *gspca_dev,
1809*4882a593Smuzhiyun const struct usb_device_id *id)
1810*4882a593Smuzhiyun {
1811*4882a593Smuzhiyun struct sd *sd = (struct sd *) gspca_dev;
1812*4882a593Smuzhiyun struct cam *cam;
1813*4882a593Smuzhiyun
1814*4882a593Smuzhiyun cam = &gspca_dev->cam;
1815*4882a593Smuzhiyun cam->cam_mode = vga_mode;
1816*4882a593Smuzhiyun cam->nmodes = ARRAY_SIZE(vga_mode);
1817*4882a593Smuzhiyun sd->subtype = id->driver_info;
1818*4882a593Smuzhiyun
1819*4882a593Smuzhiyun return 0;
1820*4882a593Smuzhiyun }
1821*4882a593Smuzhiyun
1822*4882a593Smuzhiyun /* this function is called at probe and resume time */
sd_init(struct gspca_dev * gspca_dev)1823*4882a593Smuzhiyun static int sd_init(struct gspca_dev *gspca_dev)
1824*4882a593Smuzhiyun {
1825*4882a593Smuzhiyun struct sd *sd = (struct sd *) gspca_dev;
1826*4882a593Smuzhiyun
1827*4882a593Smuzhiyun switch (sd->subtype) {
1828*4882a593Smuzhiyun case Arowana300KCMOSCamera:
1829*4882a593Smuzhiyun case SmileIntlCamera:
1830*4882a593Smuzhiyun /* Arowana 300k CMOS Camera data */
1831*4882a593Smuzhiyun if (write_vector(gspca_dev, spca501c_arowana_init_data))
1832*4882a593Smuzhiyun goto error;
1833*4882a593Smuzhiyun break;
1834*4882a593Smuzhiyun case MystFromOriUnknownCamera:
1835*4882a593Smuzhiyun /* Unknown Ori CMOS Camera data */
1836*4882a593Smuzhiyun if (write_vector(gspca_dev, spca501c_mysterious_open_data))
1837*4882a593Smuzhiyun goto error;
1838*4882a593Smuzhiyun break;
1839*4882a593Smuzhiyun default:
1840*4882a593Smuzhiyun /* generic spca501 init data */
1841*4882a593Smuzhiyun if (write_vector(gspca_dev, spca501_init_data))
1842*4882a593Smuzhiyun goto error;
1843*4882a593Smuzhiyun break;
1844*4882a593Smuzhiyun }
1845*4882a593Smuzhiyun gspca_dbg(gspca_dev, D_STREAM, "Initializing SPCA501 finished\n");
1846*4882a593Smuzhiyun return 0;
1847*4882a593Smuzhiyun error:
1848*4882a593Smuzhiyun return -EINVAL;
1849*4882a593Smuzhiyun }
1850*4882a593Smuzhiyun
sd_start(struct gspca_dev * gspca_dev)1851*4882a593Smuzhiyun static int sd_start(struct gspca_dev *gspca_dev)
1852*4882a593Smuzhiyun {
1853*4882a593Smuzhiyun struct sd *sd = (struct sd *) gspca_dev;
1854*4882a593Smuzhiyun int mode;
1855*4882a593Smuzhiyun
1856*4882a593Smuzhiyun switch (sd->subtype) {
1857*4882a593Smuzhiyun case ThreeComHomeConnectLite:
1858*4882a593Smuzhiyun /* Special handling for 3com data */
1859*4882a593Smuzhiyun write_vector(gspca_dev, spca501_3com_open_data);
1860*4882a593Smuzhiyun break;
1861*4882a593Smuzhiyun case Arowana300KCMOSCamera:
1862*4882a593Smuzhiyun case SmileIntlCamera:
1863*4882a593Smuzhiyun /* Arowana 300k CMOS Camera data */
1864*4882a593Smuzhiyun write_vector(gspca_dev, spca501c_arowana_open_data);
1865*4882a593Smuzhiyun break;
1866*4882a593Smuzhiyun case MystFromOriUnknownCamera:
1867*4882a593Smuzhiyun /* Unknown CMOS Camera data */
1868*4882a593Smuzhiyun write_vector(gspca_dev, spca501c_mysterious_init_data);
1869*4882a593Smuzhiyun break;
1870*4882a593Smuzhiyun default:
1871*4882a593Smuzhiyun /* Generic 501 open data */
1872*4882a593Smuzhiyun write_vector(gspca_dev, spca501_open_data);
1873*4882a593Smuzhiyun }
1874*4882a593Smuzhiyun
1875*4882a593Smuzhiyun /* memorize the wanted pixel format */
1876*4882a593Smuzhiyun mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
1877*4882a593Smuzhiyun
1878*4882a593Smuzhiyun /* Enable ISO packet machine CTRL reg=2,
1879*4882a593Smuzhiyun * index=1 bitmask=0x2 (bit ordinal 1) */
1880*4882a593Smuzhiyun reg_write(gspca_dev, SPCA50X_REG_USB, 0x6, 0x94);
1881*4882a593Smuzhiyun switch (mode) {
1882*4882a593Smuzhiyun case 0: /* 640x480 */
1883*4882a593Smuzhiyun reg_write(gspca_dev, SPCA50X_REG_USB, 0x07, 0x004a);
1884*4882a593Smuzhiyun break;
1885*4882a593Smuzhiyun case 1: /* 320x240 */
1886*4882a593Smuzhiyun reg_write(gspca_dev, SPCA50X_REG_USB, 0x07, 0x104a);
1887*4882a593Smuzhiyun break;
1888*4882a593Smuzhiyun default:
1889*4882a593Smuzhiyun /* case 2: * 160x120 */
1890*4882a593Smuzhiyun reg_write(gspca_dev, SPCA50X_REG_USB, 0x07, 0x204a);
1891*4882a593Smuzhiyun break;
1892*4882a593Smuzhiyun }
1893*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CTLRL, 0x01, 0x02);
1894*4882a593Smuzhiyun
1895*4882a593Smuzhiyun return 0;
1896*4882a593Smuzhiyun }
1897*4882a593Smuzhiyun
sd_stopN(struct gspca_dev * gspca_dev)1898*4882a593Smuzhiyun static void sd_stopN(struct gspca_dev *gspca_dev)
1899*4882a593Smuzhiyun {
1900*4882a593Smuzhiyun /* Disable ISO packet
1901*4882a593Smuzhiyun * machine CTRL reg=2, index=1 bitmask=0x0 (bit ordinal 1) */
1902*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CTLRL, 0x01, 0x00);
1903*4882a593Smuzhiyun }
1904*4882a593Smuzhiyun
1905*4882a593Smuzhiyun /* called on streamoff with alt 0 and on disconnect */
sd_stop0(struct gspca_dev * gspca_dev)1906*4882a593Smuzhiyun static void sd_stop0(struct gspca_dev *gspca_dev)
1907*4882a593Smuzhiyun {
1908*4882a593Smuzhiyun if (!gspca_dev->present)
1909*4882a593Smuzhiyun return;
1910*4882a593Smuzhiyun reg_write(gspca_dev, SPCA501_REG_CTLRL, 0x05, 0x00);
1911*4882a593Smuzhiyun }
1912*4882a593Smuzhiyun
sd_pkt_scan(struct gspca_dev * gspca_dev,u8 * data,int len)1913*4882a593Smuzhiyun static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1914*4882a593Smuzhiyun u8 *data, /* isoc packet */
1915*4882a593Smuzhiyun int len) /* iso packet length */
1916*4882a593Smuzhiyun {
1917*4882a593Smuzhiyun switch (data[0]) {
1918*4882a593Smuzhiyun case 0: /* start of frame */
1919*4882a593Smuzhiyun gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1920*4882a593Smuzhiyun data += SPCA501_OFFSET_DATA;
1921*4882a593Smuzhiyun len -= SPCA501_OFFSET_DATA;
1922*4882a593Smuzhiyun gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
1923*4882a593Smuzhiyun return;
1924*4882a593Smuzhiyun case 0xff: /* drop */
1925*4882a593Smuzhiyun /* gspca_dev->last_packet_type = DISCARD_PACKET; */
1926*4882a593Smuzhiyun return;
1927*4882a593Smuzhiyun }
1928*4882a593Smuzhiyun data++;
1929*4882a593Smuzhiyun len--;
1930*4882a593Smuzhiyun gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1931*4882a593Smuzhiyun }
1932*4882a593Smuzhiyun
sd_s_ctrl(struct v4l2_ctrl * ctrl)1933*4882a593Smuzhiyun static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1934*4882a593Smuzhiyun {
1935*4882a593Smuzhiyun struct gspca_dev *gspca_dev =
1936*4882a593Smuzhiyun container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1937*4882a593Smuzhiyun
1938*4882a593Smuzhiyun gspca_dev->usb_err = 0;
1939*4882a593Smuzhiyun
1940*4882a593Smuzhiyun if (!gspca_dev->streaming)
1941*4882a593Smuzhiyun return 0;
1942*4882a593Smuzhiyun
1943*4882a593Smuzhiyun switch (ctrl->id) {
1944*4882a593Smuzhiyun case V4L2_CID_BRIGHTNESS:
1945*4882a593Smuzhiyun setbrightness(gspca_dev, ctrl->val);
1946*4882a593Smuzhiyun break;
1947*4882a593Smuzhiyun case V4L2_CID_CONTRAST:
1948*4882a593Smuzhiyun setcontrast(gspca_dev, ctrl->val);
1949*4882a593Smuzhiyun break;
1950*4882a593Smuzhiyun case V4L2_CID_SATURATION:
1951*4882a593Smuzhiyun setcolors(gspca_dev, ctrl->val);
1952*4882a593Smuzhiyun break;
1953*4882a593Smuzhiyun case V4L2_CID_BLUE_BALANCE:
1954*4882a593Smuzhiyun setblue_balance(gspca_dev, ctrl->val);
1955*4882a593Smuzhiyun break;
1956*4882a593Smuzhiyun case V4L2_CID_RED_BALANCE:
1957*4882a593Smuzhiyun setred_balance(gspca_dev, ctrl->val);
1958*4882a593Smuzhiyun break;
1959*4882a593Smuzhiyun }
1960*4882a593Smuzhiyun return gspca_dev->usb_err;
1961*4882a593Smuzhiyun }
1962*4882a593Smuzhiyun
1963*4882a593Smuzhiyun static const struct v4l2_ctrl_ops sd_ctrl_ops = {
1964*4882a593Smuzhiyun .s_ctrl = sd_s_ctrl,
1965*4882a593Smuzhiyun };
1966*4882a593Smuzhiyun
sd_init_controls(struct gspca_dev * gspca_dev)1967*4882a593Smuzhiyun static int sd_init_controls(struct gspca_dev *gspca_dev)
1968*4882a593Smuzhiyun {
1969*4882a593Smuzhiyun struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
1970*4882a593Smuzhiyun
1971*4882a593Smuzhiyun gspca_dev->vdev.ctrl_handler = hdl;
1972*4882a593Smuzhiyun v4l2_ctrl_handler_init(hdl, 5);
1973*4882a593Smuzhiyun v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1974*4882a593Smuzhiyun V4L2_CID_BRIGHTNESS, 0, 127, 1, 0);
1975*4882a593Smuzhiyun v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1976*4882a593Smuzhiyun V4L2_CID_CONTRAST, 0, 64725, 1, 64725);
1977*4882a593Smuzhiyun v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1978*4882a593Smuzhiyun V4L2_CID_SATURATION, 0, 63, 1, 20);
1979*4882a593Smuzhiyun v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1980*4882a593Smuzhiyun V4L2_CID_BLUE_BALANCE, 0, 127, 1, 0);
1981*4882a593Smuzhiyun v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1982*4882a593Smuzhiyun V4L2_CID_RED_BALANCE, 0, 127, 1, 0);
1983*4882a593Smuzhiyun
1984*4882a593Smuzhiyun if (hdl->error) {
1985*4882a593Smuzhiyun pr_err("Could not initialize controls\n");
1986*4882a593Smuzhiyun return hdl->error;
1987*4882a593Smuzhiyun }
1988*4882a593Smuzhiyun return 0;
1989*4882a593Smuzhiyun }
1990*4882a593Smuzhiyun
1991*4882a593Smuzhiyun /* sub-driver description */
1992*4882a593Smuzhiyun static const struct sd_desc sd_desc = {
1993*4882a593Smuzhiyun .name = MODULE_NAME,
1994*4882a593Smuzhiyun .config = sd_config,
1995*4882a593Smuzhiyun .init = sd_init,
1996*4882a593Smuzhiyun .init_controls = sd_init_controls,
1997*4882a593Smuzhiyun .start = sd_start,
1998*4882a593Smuzhiyun .stopN = sd_stopN,
1999*4882a593Smuzhiyun .stop0 = sd_stop0,
2000*4882a593Smuzhiyun .pkt_scan = sd_pkt_scan,
2001*4882a593Smuzhiyun };
2002*4882a593Smuzhiyun
2003*4882a593Smuzhiyun /* -- module initialisation -- */
2004*4882a593Smuzhiyun static const struct usb_device_id device_table[] = {
2005*4882a593Smuzhiyun {USB_DEVICE(0x040a, 0x0002), .driver_info = KodakDVC325},
2006*4882a593Smuzhiyun {USB_DEVICE(0x0497, 0xc001), .driver_info = SmileIntlCamera},
2007*4882a593Smuzhiyun {USB_DEVICE(0x0506, 0x00df), .driver_info = ThreeComHomeConnectLite},
2008*4882a593Smuzhiyun {USB_DEVICE(0x0733, 0x0401), .driver_info = IntelCreateAndShare},
2009*4882a593Smuzhiyun {USB_DEVICE(0x0733, 0x0402), .driver_info = ViewQuestM318B},
2010*4882a593Smuzhiyun {USB_DEVICE(0x1776, 0x501c), .driver_info = Arowana300KCMOSCamera},
2011*4882a593Smuzhiyun {USB_DEVICE(0x0000, 0x0000), .driver_info = MystFromOriUnknownCamera},
2012*4882a593Smuzhiyun {}
2013*4882a593Smuzhiyun };
2014*4882a593Smuzhiyun MODULE_DEVICE_TABLE(usb, device_table);
2015*4882a593Smuzhiyun
2016*4882a593Smuzhiyun /* -- device connect -- */
sd_probe(struct usb_interface * intf,const struct usb_device_id * id)2017*4882a593Smuzhiyun static int sd_probe(struct usb_interface *intf,
2018*4882a593Smuzhiyun const struct usb_device_id *id)
2019*4882a593Smuzhiyun {
2020*4882a593Smuzhiyun return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2021*4882a593Smuzhiyun THIS_MODULE);
2022*4882a593Smuzhiyun }
2023*4882a593Smuzhiyun
2024*4882a593Smuzhiyun static struct usb_driver sd_driver = {
2025*4882a593Smuzhiyun .name = MODULE_NAME,
2026*4882a593Smuzhiyun .id_table = device_table,
2027*4882a593Smuzhiyun .probe = sd_probe,
2028*4882a593Smuzhiyun .disconnect = gspca_disconnect,
2029*4882a593Smuzhiyun #ifdef CONFIG_PM
2030*4882a593Smuzhiyun .suspend = gspca_suspend,
2031*4882a593Smuzhiyun .resume = gspca_resume,
2032*4882a593Smuzhiyun .reset_resume = gspca_resume,
2033*4882a593Smuzhiyun #endif
2034*4882a593Smuzhiyun };
2035*4882a593Smuzhiyun
2036*4882a593Smuzhiyun module_usb_driver(sd_driver);
2037