Merge tag 'lsk-v3.10-android-14.12'
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / s5k6aa.c
1 /*
2  * Driver for OV5642 CMOS Image Sensor from OmniVision
3  *
4  * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #include <linux/videodev2.h>
12 #include <linux/slab.h>
13 #include <linux/i2c.h>
14 #include <linux/log2.h>
15 #include <linux/platform_device.h>
16 #include <linux/delay.h>
17 #include <linux/circ_buf.h>
18 #include <linux/miscdevice.h>
19 #include <media/v4l2-common.h>
20 #include <media/v4l2-chip-ident.h>
21 #include <media/soc_camera.h>
22 #include <plat/rk_camera.h>
23 #include <linux/delay.h>
24 #include "s5k6aa.h"
25 static int debug;
26 module_param(debug, int, S_IRUGO|S_IWUSR);
27
28 #define dprintk(level, fmt, arg...) do {                        \
29         if (debug >= level)                                     \
30         printk(KERN_WARNING fmt , ## arg); } while (0)
31
32 #define SENSOR_TR(format, ...) printk(KERN_ERR format, ## __VA_ARGS__)
33 #define SENSOR_DG(format, ...) dprintk(1, format, ## __VA_ARGS__)
34
35
36 #define _CONS(a,b) a##b
37 #define CONS(a,b) _CONS(a,b)
38
39 #define __STR(x) #x
40 #define _STR(x) __STR(x)
41 #define STR(x) _STR(x)
42
43 #define MIN(x,y)   ((x<y) ? x: y)
44 #define MAX(x,y)    ((x>y) ? x: y)
45
46 /* Sensor Driver Configuration */
47 #define SENSOR_NAME RK29_CAM_SENSOR_S5K6AA
48 #define SENSOR_V4L2_IDENT V4L2_IDENT_S5K66A 
49 #define SENSOR_ID 0x06aa
50 #define SENSOR_ID_REG SEQUENCE_END//0x015a
51 #define SENSOR_RESET_REG SEQUENCE_END
52 #define SENSOR_RESET_VAL 0x00
53 #define SENSOR_MIN_WIDTH    640
54 #define SENSOR_MIN_HEIGHT   480
55 #define SENSOR_MAX_WIDTH    1280
56 #define SENSOR_MAX_HEIGHT   1024
57 #define SENSOR_INIT_WIDTH       640                     /* Sensor pixel size for sensor_init_data array */
58 #define SENSOR_INIT_HEIGHT  480
59 #define SENSOR_INIT_WINSEQADR sensor_vga
60 #define SENSOR_INIT_PIXFMT V4L2_MBUS_FMT_YUYV8_2X8
61
62 #define CONFIG_SENSOR_WhiteBalance      0
63 #define CONFIG_SENSOR_Brightness        0
64 #define CONFIG_SENSOR_Contrast      0
65 #define CONFIG_SENSOR_Saturation    0
66 #define CONFIG_SENSOR_Effect        0
67 #define CONFIG_SENSOR_Scene         0
68 #define CONFIG_SENSOR_DigitalZoom   0
69 #define CONFIG_SENSOR_Focus         0
70 #define CONFIG_SENSOR_Exposure      0
71 #define CONFIG_SENSOR_Flash         0
72 #define CONFIG_SENSOR_Mirror        1
73 #define CONFIG_SENSOR_Flip          0
74 #define CONFIG_SENSOR_Focus         0
75
76
77 #define CONFIG_SENSOR_I2C_SPEED     250000       /* Hz */
78 /* Sensor write register continues by preempt_disable/preempt_enable for current process not be scheduled */
79 #define CONFIG_SENSOR_I2C_NOSCHED   0
80 #define CONFIG_SENSOR_I2C_RDWRCHK   0
81
82
83 #define SENSOR_BUS_PARAM  (SOCAM_MASTER | SOCAM_PCLK_SAMPLE_RISING |\
84                           SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_HIGH |\
85                           SOCAM_DATA_ACTIVE_HIGH | SOCAM_DATAWIDTH_8  |SOCAM_MCLK_24MHZ)
86
87 #define COLOR_TEMPERATURE_CLOUDY_DN  6500
88 #define COLOR_TEMPERATURE_CLOUDY_UP    8000
89 #define COLOR_TEMPERATURE_CLEARDAY_DN  5000
90 #define COLOR_TEMPERATURE_CLEARDAY_UP    6500
91 #define COLOR_TEMPERATURE_OFFICE_DN     3500
92 #define COLOR_TEMPERATURE_OFFICE_UP     5000
93 #define COLOR_TEMPERATURE_HOME_DN       2500
94 #define COLOR_TEMPERATURE_HOME_UP       3500
95
96 #define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a))
97 #define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a)
98
99 #define SENSOR_AF_IS_ERR    (0x00<<0)
100 #define SENSOR_AF_IS_OK         (0x01<<0)
101 #define SENSOR_INIT_IS_ERR   (0x00<<28)
102 #define SENSOR_INIT_IS_OK    (0x01<<28)
103
104 #if CONFIG_SENSOR_Focus
105 #define SENSOR_AF_MODE_INFINITY    0
106 #define SENSOR_AF_MODE_MACRO       1
107 #define SENSOR_AF_MODE_FIXED       2
108 #define SENSOR_AF_MODE_AUTO        3
109 #define SENSOR_AF_MODE_CONTINUOUS  4
110 #define SENSOR_AF_MODE_CLOSE       5
111 #endif
112
113 //flash off in fixed time to prevent from too hot , zyc
114 struct  flash_timer{
115     struct soc_camera_device *icd;
116         struct hrtimer timer;
117 };
118 #if CONFIG_SENSOR_Flash
119 static enum hrtimer_restart flash_off_func(struct hrtimer *timer);
120 #endif
121 static struct  flash_timer flash_off_timer;
122 //for user defined if user want to customize the series , zyc
123 #ifdef CONFIG_S5K6AA_USER_DEFINED_SERIES
124 #include "s5k6aa_user_series.c"
125 #else
126
127 /* init 640X480 SVGA */
128 static struct reginfo sensor_init_data[] =
129 {
130         {0x0010,0x0001},        // Reset
131         {0x1030,0x0000},        // Clear host interrupt so main will wait
132         {0x0014,0x0001},        // ARM go
133         // Wait100mSec
134         {SEQUENCE_WAIT_MS,50},
135         // Start TP part
136         {0x0028,0x7000},        // start add MSW
137         {0x002A,0x1d60},        // start add LSW
138         {0x0F12,0xb570},
139         {0x0F12,0x4928},
140         {0x0F12,0x4828},
141         {0x0F12,0x2205},
142         {0x0F12,0xf000},
143         {0x0F12,0xf922},
144         {0x0F12,0x4927},
145         {0x0F12,0x2002},
146         {0x0F12,0x83c8},
147         {0x0F12,0x2001},
148         {0x0F12,0x3120},
149         {0x0F12,0x8088},
150         {0x0F12,0x4925},
151         {0x0F12,0x4826},
152         {0x0F12,0x2204},
153         {0x0F12,0xf000},
154         {0x0F12,0xf917},
155         {0x0F12,0x4925},
156         {0x0F12,0x4825},
157         {0x0F12,0x2206},
158         {0x0F12,0xf000},
159         {0x0F12,0xf912},
160         {0x0F12,0x4924},
161         {0x0F12,0x4825},
162         {0x0F12,0x2207},
163         {0x0F12,0xf000},
164         {0x0F12,0xf90d},
165         {0x0F12,0x4924},
166         {0x0F12,0x4824},
167         {0x0F12,0x2208},
168         {0x0F12,0xf000},
169         {0x0F12,0xf908},
170         {0x0F12,0x4923},
171         {0x0F12,0x4824},
172         {0x0F12,0x2209},
173         {0x0F12,0xf000},
174         {0x0F12,0xf903},
175         {0x0F12,0x4923},
176         {0x0F12,0x4823},
177         {0x0F12,0x60c1},
178         {0x0F12,0x6882},
179         {0x0F12,0x1a51},
180         {0x0F12,0x8201},
181         {0x0F12,0x4c22},
182         {0x0F12,0x2607},
183         {0x0F12,0x6821},
184         {0x0F12,0x0736},
185         {0x0F12,0x42b1},
186         {0x0F12,0xda05},
187         {0x0F12,0x4820},
188         {0x0F12,0x22d8},
189         {0x0F12,0x1c05},
190         {0x0F12,0xf000},
191         {0x0F12,0xf8fa},
192         {0x0F12,0x6025},
193         {0x0F12,0x68a1},
194         {0x0F12,0x42b1},
195         {0x0F12,0xda07},
196         {0x0F12,0x481b},
197         {0x0F12,0x2224},
198         {0x0F12,0x3824},
199         {0x0F12,0xf000},
200         {0x0F12,0xf8f1},
201         {0x0F12,0x4819},
202         {0x0F12,0x3824},
203         {0x0F12,0x60a0},
204         {0x0F12,0x4d18},
205         {0x0F12,0x6d29},
206         {0x0F12,0x42b1},
207         {0x0F12,0xda07},
208         {0x0F12,0x4815},
209         {0x0F12,0x228f},
210         {0x0F12,0x00d2},
211         {0x0F12,0x30d8},
212         {0x0F12,0x1c04},
213         {0x0F12,0xf000},
214         {0x0F12,0xf8e3},
215         {0x0F12,0x652c},
216         {0x0F12,0xbc70},
217         {0x0F12,0xbc08},
218         {0x0F12,0x4718},
219         {0x0F12,0x0000},
220         {0x0F12,0x1f53},
221         {0x0F12,0x7000},
222         {0x0F12,0x127b},
223         {0x0F12,0x0000},
224         {0x0F12,0x0398},
225         {0x0F12,0x7000},
226         {0x0F12,0x1e4d},
227         {0x0F12,0x7000},
228         {0x0F12,0x890d},
229         {0x0F12,0x0000},
230         {0x0F12,0x1e73},
231         {0x0F12,0x7000},
232         {0x0F12,0x27a9},
233         {0x0F12,0x0000},
234         {0x0F12,0x1e91},
235         {0x0F12,0x7000},
236         {0x0F12,0x27c5},
237         {0x0F12,0x0000},
238         {0x0F12,0x1ef7},
239         {0x0F12,0x7000},
240         {0x0F12,0x285f},
241         {0x0F12,0x0000},
242         {0x0F12,0x1eb3},
243         {0x0F12,0x7000},
244         {0x0F12,0x28ff},
245         {0x0F12,0x0000},
246         {0x0F12,0x206c},
247         {0x0F12,0x7000},
248         {0x0F12,0x04ac},
249         {0x0F12,0x7000},
250         {0x0F12,0x06cc},
251         {0x0F12,0x7000},
252         {0x0F12,0x23a4},
253         {0x0F12,0x7000},
254         {0x0F12,0x0704},
255         {0x0F12,0x7000},
256         {0x0F12,0xb510},
257         {0x0F12,0x1c04},
258         {0x0F12,0x484d},
259         {0x0F12,0xf000},
260         {0x0F12,0xf8bb},
261         {0x0F12,0x4a4d},
262         {0x0F12,0x4b4d},
263         {0x0F12,0x8811},
264         {0x0F12,0x885b},
265         {0x0F12,0x8852},
266         {0x0F12,0x4359},
267         {0x0F12,0x1889},
268         {0x0F12,0x4288},
269         {0x0F12,0xd800},
270         {0x0F12,0x1c08},
271         {0x0F12,0x6020},
272         {0x0F12,0xbc10},
273         {0x0F12,0xbc08},
274         {0x0F12,0x4718},
275         {0x0F12,0xb510},
276         {0x0F12,0x1c04},
277         {0x0F12,0xf000},
278         {0x0F12,0xf8b1},
279         {0x0F12,0x4944},
280         {0x0F12,0x8989},
281         {0x0F12,0x4348},
282         {0x0F12,0x0200},
283         {0x0F12,0x0c00},
284         {0x0F12,0x2101},
285         {0x0F12,0x0349},
286         {0x0F12,0xf000},
287         {0x0F12,0xf8b0},
288         {0x0F12,0x6020},
289         {0x0F12,0xe7ed},
290         {0x0F12,0xb510},
291         {0x0F12,0x1c04},
292         {0x0F12,0xf000},
293         {0x0F12,0xf8b2},
294         {0x0F12,0x6821},
295         {0x0F12,0x0409},
296         {0x0F12,0x0c09},
297         {0x0F12,0x1a40},
298         {0x0F12,0x493a},
299         {0x0F12,0x6849},
300         {0x0F12,0x4281},
301         {0x0F12,0xd800},
302         {0x0F12,0x1c08},
303         {0x0F12,0xf000},
304         {0x0F12,0xf8af},
305         {0x0F12,0x6020},
306         {0x0F12,0xe7dc},
307         {0x0F12,0xb570},
308         {0x0F12,0x6801},
309         {0x0F12,0x040d},
310         {0x0F12,0x0c2d},
311         {0x0F12,0x6844},
312         {0x0F12,0x4833},
313         {0x0F12,0x8981},
314         {0x0F12,0x1c28},
315         {0x0F12,0xf000},
316         {0x0F12,0xf893},
317         {0x0F12,0x8060},
318         {0x0F12,0x4932},
319         {0x0F12,0x69c9},
320         {0x0F12,0xf000},
321         {0x0F12,0xf8a6},
322         {0x0F12,0x1c01},
323         {0x0F12,0x80a0},
324         {0x0F12,0x0228},
325         {0x0F12,0xf000},
326         {0x0F12,0xf8a9},
327         {0x0F12,0x0400},
328         {0x0F12,0x0c00},
329         {0x0F12,0x8020},
330         {0x0F12,0x492d},
331         {0x0F12,0x2300},
332         {0x0F12,0x5ec9},
333         {0x0F12,0x4288},
334         {0x0F12,0xda02},
335         {0x0F12,0x20ff},
336         {0x0F12,0x3001},
337         {0x0F12,0x8020},
338         {0x0F12,0xbc70},
339         {0x0F12,0xbc08},
340         {0x0F12,0x4718},
341         {0x0F12,0xb570},
342         {0x0F12,0x1c04},
343         {0x0F12,0x4828},
344         {0x0F12,0x4926},
345         {0x0F12,0x7803},
346         {0x0F12,0x6a8a},
347         {0x0F12,0x2b00},
348         {0x0F12,0xd100},
349         {0x0F12,0x6a0a},
350         {0x0F12,0x4d20},
351         {0x0F12,0x2b00},
352         {0x0F12,0x68a8},
353         {0x0F12,0xd100},
354         {0x0F12,0x6868},
355         {0x0F12,0x6823},
356         {0x0F12,0x8dc9},
357         {0x0F12,0x434a},
358         {0x0F12,0x0a12},
359         {0x0F12,0x429a},
360         {0x0F12,0xd30d},
361         {0x0F12,0x4d20},
362         {0x0F12,0x26ff},
363         {0x0F12,0x8828},
364         {0x0F12,0x3601},
365         {0x0F12,0x43b0},
366         {0x0F12,0x8028},
367         {0x0F12,0x6820},
368         {0x0F12,0xf000},
369         {0x0F12,0xf884},
370         {0x0F12,0x6020},
371         {0x0F12,0x8828},
372         {0x0F12,0x4330},
373         {0x0F12,0x8028},
374         {0x0F12,0xe7da},
375         {0x0F12,0x1c0a},
376         {0x0F12,0x4342},
377         {0x0F12,0x0a12},
378         {0x0F12,0x429a},
379         {0x0F12,0xd304},
380         {0x0F12,0x0218},
381         {0x0F12,0xf000},
382         {0x0F12,0xf871},
383         {0x0F12,0x6020},
384         {0x0F12,0xe7f4},
385         {0x0F12,0x6020},
386         {0x0F12,0xe7f2},
387         {0x0F12,0xb510},
388         {0x0F12,0x4913},
389         {0x0F12,0x8fc8},
390         {0x0F12,0x2800},
391         {0x0F12,0xd007},
392         {0x0F12,0x2000},
393         {0x0F12,0x87c8},
394         {0x0F12,0x8f88},
395         {0x0F12,0x4c11},
396         {0x0F12,0x2800},
397         {0x0F12,0xd002},
398         {0x0F12,0x2008},
399         {0x0F12,0x8020},
400         {0x0F12,0xe77e},
401         {0x0F12,0x480d},
402         {0x0F12,0x3060},
403         {0x0F12,0x8900},
404         {0x0F12,0x2800},
405         {0x0F12,0xd103},
406         {0x0F12,0x480c},
407         {0x0F12,0x2101},
408         {0x0F12,0xf000},
409         {0x0F12,0xf864},
410         {0x0F12,0x2010},
411         {0x0F12,0x8020},
412         {0x0F12,0xe7f2},
413         {0x0F12,0x0000},
414         {0x0F12,0xf4b0},
415         {0x0F12,0x0000},
416         {0x0F12,0x2058},
417         {0x0F12,0x7000},
418         {0x0F12,0x1554},
419         {0x0F12,0x7000},
420         {0x0F12,0x0080},
421         {0x0F12,0x7000},
422         {0x0F12,0x046c},
423         {0x0F12,0x7000},
424         {0x0F12,0x0468},
425         {0x0F12,0x7000},
426         {0x0F12,0x1100},
427         {0x0F12,0xd000},
428         {0x0F12,0x01b8},
429         {0x0F12,0x7000},
430         {0x0F12,0x044e},
431         {0x0F12,0x7000},
432         {0x0F12,0x0450},
433         {0x0F12,0x7000},
434         {0x0F12,0x4778},
435         {0x0F12,0x46c0},
436         {0x0F12,0xc000},
437         {0x0F12,0xe59f},
438         {0x0F12,0xff1c},
439         {0x0F12,0xe12f},
440         {0x0F12,0x9ce7},
441         {0x0F12,0x0000},
442         {0x0F12,0x4778},
443         {0x0F12,0x46c0},
444         {0x0F12,0xf004},
445         {0x0F12,0xe51f},
446         {0x0F12,0x9fb8},
447         {0x0F12,0x0000},
448         {0x0F12,0x4778},
449         {0x0F12,0x46c0},
450         {0x0F12,0xc000},
451         {0x0F12,0xe59f},
452         {0x0F12,0xff1c},
453         {0x0F12,0xe12f},
454         {0x0F12,0x88df},
455         {0x0F12,0x0000},
456         {0x0F12,0x4778},
457         {0x0F12,0x46c0},
458         {0x0F12,0xc000},
459         {0x0F12,0xe59f},
460         {0x0F12,0xff1c},
461         {0x0F12,0xe12f},
462         {0x0F12,0x275d},
463         {0x0F12,0x0000},
464         {0x0F12,0x4778},
465         {0x0F12,0x46c0},
466         {0x0F12,0xc000},
467         {0x0F12,0xe59f},
468         {0x0F12,0xff1c},
469         {0x0F12,0xe12f},
470         {0x0F12,0x1ed3},
471         {0x0F12,0x0000},
472         {0x0F12,0x4778},
473         {0x0F12,0x46c0},
474         {0x0F12,0xc000},
475         {0x0F12,0xe59f},
476         {0x0F12,0xff1c},
477         {0x0F12,0xe12f},
478         {0x0F12,0x26f9},
479         {0x0F12,0x0000},
480         {0x0F12,0x4778},
481         {0x0F12,0x46c0},
482         {0x0F12,0xc000},
483         {0x0F12,0xe59f},
484         {0x0F12,0xff1c},
485         {0x0F12,0xe12f},
486         {0x0F12,0x4027},
487         {0x0F12,0x0000},
488         {0x0F12,0x4778},
489         {0x0F12,0x46c0},
490         {0x0F12,0xc000},
491         {0x0F12,0xe59f},
492         {0x0F12,0xff1c},
493         {0x0F12,0xe12f},
494         {0x0F12,0x9f03},
495         {0x0F12,0x0000},
496         {0x0F12,0x4778},
497         {0x0F12,0x46c0},
498         {0x0F12,0xf004},
499         {0x0F12,0xe51f},
500         {0x0F12,0xa144},
501         {0x0F12,0x0000},
502         {0x0F12,0x4778},
503         {0x0F12,0x46c0},
504         {0x0F12,0xc000},
505         {0x0F12,0xe59f},
506         {0x0F12,0xff1c},
507         {0x0F12,0xe12f},
508         {0x0F12,0x285f},
509         {0x0F12,0x0000},
510         {0x0F12,0x4778},
511         {0x0F12,0x46c0},
512         {0x0F12,0xc000},
513         {0x0F12,0xe59f},
514         {0x0F12,0xff1c},
515         {0x0F12,0xe12f},
516         {0x0F12,0x2001},
517         {0x0F12,0x0000},
518         {0x0F12,0x0000},
519         {0x0F12,0x0000},
520         {0x0F12,0xe848},
521         {0x0F12,0x0001},
522         {0x0F12,0xe848},
523         {0x0F12,0x0001},
524         {0x0F12,0x0500},
525         {0x0F12,0x0000},
526         {0x0F12,0x0000},
527         {0x0F12,0x0000},
528         // End TP part
529
530
531         // Start tuning part
532
533         //      Write memory example:
534         //      m70003000 10CE
535         //      Write HW register example:
536         //      1004 5678
537
538         {0x002A,0x0e3a},  // #awbb_Alpha_Comp_Mode
539         {0x0F12,0x02C2},
540
541         // Analog Settings
542         {0x002A,0x112a},  //#senHal_SenRegsModes3_pSenModesRegsArray3[8]
543         {0x0F12,0x0000},
544         {0x002A,0x1132},  //#senHal_SenRegsModes3_pSenModesRegsArray3[12]
545         {0x0F12,0x0000},
546         {0x002A,0x113e},  //#senHal_SenRegsModes3_pSenModesRegsArray3[18]
547         {0x0F12,0x0000},
548         {0x002A,0x115c},  //#senHal_SenRegsModes3_pSenModesRegsArray3[33]
549         {0x0F12,0x0000},
550         {0x002A,0x1164},  //#senHal_SenRegsModes3_pSenModesRegsArray3[37]
551         {0x0F12,0x0000},
552         {0x002A,0x1174},  //#senHal_SenRegsModes3_pSenModesRegsArray3[45]
553         {0x0F12,0x0000},
554         {0x002A,0x1178},  //#senHal_SenRegsModes3_pSenModesRegsArray3[47]
555         {0x0F12,0x0000},
556
557         {0x002A,0x077a},  //#msm_uOffsetNoBin[0][0]
558         {0x0F12,0x0000},  //#msm_uOffsetNoBin[0][1]
559         {0x0F12,0x0000},        //#msm_uOffsetNoBin[1][0]
560         {0x0F12,0x0000},        //#msm_uOffsetNoBin[1][1]
561         {0x0F12,0x0000},        //#msm_uOffsetNoBin[2][0]
562         {0x0F12,0x0000},        //#msm_uOffsetNoBin[2][1]
563         {0x0F12,0x0000},        //#msm_uOffsetNoBin[3][0]
564         {0x0F12,0x0000},        //#msm_uOffsetNoBin[3][1]
565         {0x0F12,0x0000},
566
567         {0x002A,0x07a2},  //#msm_sAnalogOffset[0]
568         {0x0F12,0x0000},         //#msm_sAnalogOffset[1]
569         {0x0F12,0x0000},         //#msm_sAnalogOffset[2]
570         {0x0F12,0x0000},         //#msm_sAnalogOffset[3]
571         {0x0F12,0x0000},
572
573         {0x002A,0x07b6},  //#msm_NonLinearOfsOutput[0]
574         {0x0F12,0x0000},         //#msm_NonLinearOfsOutput[1]
575         {0x0F12,0x0002},         //#msm_NonLinearOfsOutput[2]
576         {0x0F12,0x0004},         //#msm_NonLinearOfsOutput[3]
577         {0x0F12,0x0004},         //#msm_NonLinearOfsOutput[4]
578         {0x0F12,0x0005},         //#msm_NonLinearOfsOutput[5]
579         {0x0F12,0x0005},
580
581         //      param_start     TVAR_ash_GASAlpha
582         {0x002A,0x0712},
583         {0x0F12,0x0149},
584         {0x0F12,0x011B},
585         {0x0F12,0x0120},
586         {0x0F12,0x00EF},
587         {0x0F12,0x00C3},
588         {0x0F12,0x00D2},
589         {0x0F12,0x00DC},
590         {0x0F12,0x00B8},
591         {0x0F12,0x0106},
592         {0x0F12,0x00DE},
593         {0x0F12,0x00E3},
594         {0x0F12,0x00CC},
595         {0x0F12,0x00BD},
596         {0x0F12,0x00E1},
597         {0x0F12,0x00D8},
598         {0x0F12,0x00D0},
599         {0x0F12,0x00BE},
600         {0x0F12,0x00EC},
601         {0x0F12,0x00EA},
602         {0x0F12,0x00F2},
603         {0x0F12,0x00BE},
604         {0x0F12,0x00EB},
605         {0x0F12,0x00E5},
606         {0x0F12,0x00F9},
607         {0x0F12,0x0100},  //0x00BE
608         {0x0F12,0x00D5},
609         {0x0F12,0x00D8},
610         {0x0F12,0x00E6},
611
612         //      param_end       TVAR_ash_GASAlpha
613         //      param_start     TVAR_ash_GASOutdoorAlpha
614         {0x0F12,0x00FD},
615         {0x0F12,0x00F7},
616         {0x0F12,0x00F3},
617         {0x0F12,0x00FF},
618         //      param_end       TVAR_ash_GASOutdoorAlpha
619         {0x002A,0x075A},
620         {0x0F12,0x0001},
621         {0x0F12,0x02A1},
622         {0x0F12,0x0225},
623         {0x0F12,0x000D},
624         {0x0F12,0x000D},
625         //      param_start     TVAR_ash_pGAS
626         {0x002A,0x247C},
627         {0x0F12,0x0164},        //TVAR_ash_pGAS[0]   0128  //018C
628         {0x0F12,0x0122},        //TVAR_ash_pGAS[1]   00F6  //0147
629         {0x0F12,0x00E4},        //TVAR_ash_pGAS[2]   00C7  //010E
630         {0x0F12,0x00B8},        //TVAR_ash_pGAS[3]   00B7  //00E5
631         {0x0F12,0x009D},        //TVAR_ash_pGAS[4]   00AA  //00C5
632         {0x0F12,0x008D},        //TVAR_ash_pGAS[5]   009D  //00B0
633         {0x0F12,0x0083},        //TVAR_ash_pGAS[6]   0097  //00A7
634         {0x0F12,0x0088},        //TVAR_ash_pGAS[7]   0097  //00AA
635         {0x0F12,0x009C},        //TVAR_ash_pGAS[8]   009E  //00B8
636         {0x0F12,0x00BB},        //TVAR_ash_pGAS[9]   00A9  //00D1
637         {0x0F12,0x00E5},        //TVAR_ash_pGAS[10]  00B4  //00F7
638         {0x0F12,0x0121},        //TVAR_ash_pGAS[11]  00CA  //0130
639         {0x0F12,0x0169},        //TVAR_ash_pGAS[12]  0105  //016F
640         {0x0F12,0x0138},        //TVAR_ash_pGAS[13]  00DA  //0148
641         {0x0F12,0x00FB},        //TVAR_ash_pGAS[14]  00B4  //010A
642         {0x0F12,0x00B9},        //TVAR_ash_pGAS[15]  0099  //00D2
643         {0x0F12,0x008C},        //TVAR_ash_pGAS[16]  0089  //00AB
644         {0x0F12,0x006E},        //TVAR_ash_pGAS[17]  0077  //008F
645         {0x0F12,0x005B},        //TVAR_ash_pGAS[18]  006A  //007B
646         {0x0F12,0x0053},        //TVAR_ash_pGAS[19]  0063  //0073
647         {0x0F12,0x0059},        //TVAR_ash_pGAS[20]  0064  //0075
648         {0x0F12,0x006B},        //TVAR_ash_pGAS[21]  006D  //0085
649         {0x0F12,0x0086},        //TVAR_ash_pGAS[22]  007B  //009D
650         {0x0F12,0x00B1},        //TVAR_ash_pGAS[23]  008B  //00C1
651         {0x0F12,0x00E9},        //TVAR_ash_pGAS[24]  009C  //00F7
652         {0x0F12,0x012F},        //TVAR_ash_pGAS[25]  00BD  //0134
653         {0x0F12,0x0111},        //TVAR_ash_pGAS[26]  00A4  //0111
654         {0x0F12,0x00D1},        //TVAR_ash_pGAS[27]  0093  //00D5
655         {0x0F12,0x0094},        //TVAR_ash_pGAS[28]  0079  //00A1
656         {0x0F12,0x0069},        //TVAR_ash_pGAS[29]  0063  //007B
657         {0x0F12,0x004A},        //TVAR_ash_pGAS[30]  004F  //005F
658         {0x0F12,0x0036},        //TVAR_ash_pGAS[31]  0040  //004B
659         {0x0F12,0x002C},        //TVAR_ash_pGAS[32]  0039  //0043
660         {0x0F12,0x0032},        //TVAR_ash_pGAS[33]  003B  //0046
661         {0x0F12,0x0042},        //TVAR_ash_pGAS[34]  0044  //0057
662         {0x0F12,0x0060},        //TVAR_ash_pGAS[35]  0054  //0072
663         {0x0F12,0x008A},        //TVAR_ash_pGAS[36]  006A  //0093
664         {0x0F12,0x00C0},        //TVAR_ash_pGAS[37]  0081  //00C7
665         {0x0F12,0x0103},        //TVAR_ash_pGAS[38]  009B  //00FD
666         {0x0F12,0x00F9},        //TVAR_ash_pGAS[39]  008D  //00EA
667         {0x0F12,0x00B7},        //TVAR_ash_pGAS[40]  007E  //00B1
668         {0x0F12,0x007E},        //TVAR_ash_pGAS[41]  005F  //0080
669         {0x0F12,0x0054},        //TVAR_ash_pGAS[42]  0046  //005A
670         {0x0F12,0x0033},        //TVAR_ash_pGAS[43]  0032  //003D
671         {0x0F12,0x001B},        //TVAR_ash_pGAS[44]  0023  //0029
672         {0x0F12,0x0013},        //TVAR_ash_pGAS[45]  001C  //0021
673         {0x0F12,0x0018},        //TVAR_ash_pGAS[46]  001E  //0025
674         {0x0F12,0x002A},        //TVAR_ash_pGAS[47]  0026  //0036
675         {0x0F12,0x004A},        //TVAR_ash_pGAS[48]  0038  //0051
676         {0x0F12,0x0075},        //TVAR_ash_pGAS[49]  004F  //0074
677         {0x0F12,0x00AC},        //TVAR_ash_pGAS[50]  006A  //00A3
678         {0x0F12,0x00F0},        //TVAR_ash_pGAS[51]  0088  //00DA
679         {0x0F12,0x00EF},        //TVAR_ash_pGAS[52]  0081  //00D2
680         {0x0F12,0x00AE},        //TVAR_ash_pGAS[53]  0070  //009B
681         {0x0F12,0x0076},        //TVAR_ash_pGAS[54]  004F  //006B
682         {0x0F12,0x004A},        //TVAR_ash_pGAS[55]  0034  //0043
683         {0x0F12,0x0025},        //TVAR_ash_pGAS[56]  001F  //0027
684         {0x0F12,0x000D},        //TVAR_ash_pGAS[57]  0010  //0013
685         {0x0F12,0x0004},        //TVAR_ash_pGAS[58]  0009  //000A
686         {0x0F12,0x000A},        //TVAR_ash_pGAS[59]  000B  //000F
687         {0x0F12,0x001E},        //TVAR_ash_pGAS[60]  0015  //0021
688         {0x0F12,0x003F},        //TVAR_ash_pGAS[61]  0026  //003D
689         {0x0F12,0x006C},        //TVAR_ash_pGAS[62]  0040  //0060
690         {0x0F12,0x00A7},        //TVAR_ash_pGAS[63]  005D  //0091
691         {0x0F12,0x00EA},        //TVAR_ash_pGAS[64]  007E  //00C2
692         {0x0F12,0x00F6},        //TVAR_ash_pGAS[65]  007C  //00C6
693         {0x0F12,0x00B3},        //TVAR_ash_pGAS[66]  0068  //0094
694         {0x0F12,0x007B},        //TVAR_ash_pGAS[67]  0047  //0063
695         {0x0F12,0x004C},        //TVAR_ash_pGAS[68]  002C  //003B
696         {0x0F12,0x0024},        //TVAR_ash_pGAS[69]  0017  //001E
697         {0x0F12,0x000B},        //TVAR_ash_pGAS[70]  0007  //0009
698         {0x0F12,0x0000},        //TVAR_ash_pGAS[71]  0000  //0000
699         {0x0F12,0x0007},        //TVAR_ash_pGAS[72]  0002  //0006
700         {0x0F12,0x001E},        //TVAR_ash_pGAS[73]  000D  //0019
701         {0x0F12,0x0041},        //TVAR_ash_pGAS[74]  0020  //0035
702         {0x0F12,0x0071},        //TVAR_ash_pGAS[75]  003A  //005A
703         {0x0F12,0x00AD},        //TVAR_ash_pGAS[76]  0059  //0089
704         {0x0F12,0x00F3},        //TVAR_ash_pGAS[77]  007E  //00BA
705         {0x0F12,0x010B},        //TVAR_ash_pGAS[78]  007E  //00C8
706         {0x0F12,0x00C6},        //TVAR_ash_pGAS[79]  006A  //0095
707         {0x0F12,0x0089},        //TVAR_ash_pGAS[80]  0048  //0063
708         {0x0F12,0x0058},        //TVAR_ash_pGAS[81]  002D  //003D
709         {0x0F12,0x0032},        //TVAR_ash_pGAS[82]  0018  //0020
710         {0x0F12,0x0017},        //TVAR_ash_pGAS[83]  0008  //000D
711         {0x0F12,0x000D},        //TVAR_ash_pGAS[84]  0001  //0004
712         {0x0F12,0x0015},        //TVAR_ash_pGAS[85]  0003  //0009
713         {0x0F12,0x002D},        //TVAR_ash_pGAS[86]  000E  //001C
714         {0x0F12,0x0053},        //TVAR_ash_pGAS[87]  0021  //0038
715         {0x0F12,0x0085},        //TVAR_ash_pGAS[88]  003D  //005F
716         {0x0F12,0x00C4},        //TVAR_ash_pGAS[89]  0060  //008E
717         {0x0F12,0x010B},        //TVAR_ash_pGAS[90]  0086  //00BE
718         {0x0F12,0x012F},        //TVAR_ash_pGAS[91]  0087  //00D7
719         {0x0F12,0x00E7},        //TVAR_ash_pGAS[92]  0073  //00A1
720         {0x0F12,0x00A7},        //TVAR_ash_pGAS[93]  0051  //006E
721         {0x0F12,0x0073},        //TVAR_ash_pGAS[94]  0036  //0049
722         {0x0F12,0x004E},        //TVAR_ash_pGAS[95]  0022  //002D
723         {0x0F12,0x0033},        //TVAR_ash_pGAS[96]  0013  //001B
724         {0x0F12,0x002A},        //TVAR_ash_pGAS[97]  000B  //0014
725         {0x0F12,0x0032},        //TVAR_ash_pGAS[98]  000D  //001A
726         {0x0F12,0x004B},        //TVAR_ash_pGAS[99]  0019  //002C
727         {0x0F12,0x0072},        //TVAR_ash_pGAS[100] 002C  //0048
728         {0x0F12,0x00A7},        //TVAR_ash_pGAS[101] 004A  //006C
729         {0x0F12,0x00E9},        //TVAR_ash_pGAS[102] 006F  //009D
730         {0x0F12,0x0133},        //TVAR_ash_pGAS[103] 0093  //00D1
731         {0x0F12,0x0162},        //TVAR_ash_pGAS[104] 0099  //00F3
732         {0x0F12,0x0110},        //TVAR_ash_pGAS[105] 0086  //00B9
733         {0x0F12,0x00CE},        //TVAR_ash_pGAS[106] 0066  //0086
734         {0x0F12,0x009B},        //TVAR_ash_pGAS[107] 004A  //0063
735         {0x0F12,0x0078},        //TVAR_ash_pGAS[108] 0035  //0047
736         {0x0F12,0x0060},        //TVAR_ash_pGAS[109] 0025  //0034
737         {0x0F12,0x0057},        //TVAR_ash_pGAS[110] 001E  //002E
738         {0x0F12,0x0061},        //TVAR_ash_pGAS[111] 0021  //0034
739         {0x0F12,0x0079},        //TVAR_ash_pGAS[112] 002C  //0046
740         {0x0F12,0x00A2},        //TVAR_ash_pGAS[113] 0041  //0062
741         {0x0F12,0x00D8},        //TVAR_ash_pGAS[114] 0061  //0087
742         {0x0F12,0x011E},        //TVAR_ash_pGAS[115] 0087  //00B8
743         {0x0F12,0x016E},        //TVAR_ash_pGAS[116] 00A8  //00F2
744         {0x0F12,0x01A8},        //TVAR_ash_pGAS[117] 00B8  //011D
745         {0x0F12,0x014D},        //TVAR_ash_pGAS[118] 00A1  //00E5
746         {0x0F12,0x0104},        //TVAR_ash_pGAS[119] 0084  //00B0
747         {0x0F12,0x00D5},        //TVAR_ash_pGAS[120] 0069  //0089
748         {0x0F12,0x00B3},        //TVAR_ash_pGAS[121] 0054  //006F
749         {0x0F12,0x009B},        //TVAR_ash_pGAS[122] 0044  //005D
750         {0x0F12,0x0095},        //TVAR_ash_pGAS[123] 003E  //0057
751         {0x0F12,0x009E},        //TVAR_ash_pGAS[124] 0040  //005D
752         {0x0F12,0x00B7},        //TVAR_ash_pGAS[125] 004C  //006E
753         {0x0F12,0x00E1},        //TVAR_ash_pGAS[126] 0063  //008B
754         {0x0F12,0x0119},        //TVAR_ash_pGAS[127] 0083  //00B3
755         {0x0F12,0x0166},        //TVAR_ash_pGAS[128] 00A8  //00E6
756         {0x0F12,0x01C6},        //TVAR_ash_pGAS[129] 00C9  //0129
757         {0x0F12,0x01F1},        //TVAR_ash_pGAS[130] 00EE  //013E
758         {0x0F12,0x0199},        //TVAR_ash_pGAS[131] 00C4  //010D
759         {0x0F12,0x014D},        //TVAR_ash_pGAS[132] 00AB  //00D8
760         {0x0F12,0x011A},        //TVAR_ash_pGAS[133] 0091  //00B2
761         {0x0F12,0x00F5},        //TVAR_ash_pGAS[134] 007B  //0096
762         {0x0F12,0x00DD},        //TVAR_ash_pGAS[135] 006D  //0084
763         {0x0F12,0x00D8},        //TVAR_ash_pGAS[136] 0066  //007E
764         {0x0F12,0x00E4},        //TVAR_ash_pGAS[137] 0068  //0083
765         {0x0F12,0x00FB},        //TVAR_ash_pGAS[138] 0075  //0096
766         {0x0F12,0x0128},        //TVAR_ash_pGAS[139] 008E  //00B3
767         {0x0F12,0x0166},        //TVAR_ash_pGAS[140] 00AF  //00DB
768         {0x0F12,0x01BC},        //TVAR_ash_pGAS[141] 00D0  //0117
769         {0x0F12,0x0228},        //TVAR_ash_pGAS[142] 00F7  //0151
770         {0x0F12,0x0133},        //TVAR_ash_pGAS[143] 00E3  //014A
771         {0x0F12,0x00F7},        //TVAR_ash_pGAS[144] 00AB  //0108
772         {0x0F12,0x00BF},        //TVAR_ash_pGAS[145] 0086  //00D7
773         {0x0F12,0x0097},        //TVAR_ash_pGAS[146] 0081  //00B5
774         {0x0F12,0x0081},        //TVAR_ash_pGAS[147] 0078  //009E
775         {0x0F12,0x0074},        //TVAR_ash_pGAS[148] 0071  //0090
776         {0x0F12,0x006A},        //TVAR_ash_pGAS[149] 006B  //0089
777         {0x0F12,0x006B},        //TVAR_ash_pGAS[150] 0069  //0089
778         {0x0F12,0x007B},        //TVAR_ash_pGAS[151] 006A  //0090
779         {0x0F12,0x008F},        //TVAR_ash_pGAS[152] 006E  //00A0
780         {0x0F12,0x00B1},        //TVAR_ash_pGAS[153] 0071  //00B8
781         {0x0F12,0x00E4},        //TVAR_ash_pGAS[154] 007D  //00E6
782         {0x0F12,0x0128},        //TVAR_ash_pGAS[155] 00B0  //011F
783         {0x0F12,0x010B},        //TVAR_ash_pGAS[156] 0096  //010B
784         {0x0F12,0x00D4},        //TVAR_ash_pGAS[157] 0071  //00CE
785         {0x0F12,0x0098},        //TVAR_ash_pGAS[158] 0061  //00A4
786         {0x0F12,0x006F},        //TVAR_ash_pGAS[159] 005B  //0085
787         {0x0F12,0x0056},        //TVAR_ash_pGAS[160] 0051  //0073
788         {0x0F12,0x0045},        //TVAR_ash_pGAS[161] 0049  //0064
789         {0x0F12,0x003D},        //TVAR_ash_pGAS[162] 0043  //005D
790         {0x0F12,0x0040},        //TVAR_ash_pGAS[163] 0042  //005E
791         {0x0F12,0x004D},        //TVAR_ash_pGAS[164] 0044  //0066
792         {0x0F12,0x0060},        //TVAR_ash_pGAS[165] 004C  //0076
793         {0x0F12,0x0081},        //TVAR_ash_pGAS[166] 0051  //008F
794         {0x0F12,0x00B0},        //TVAR_ash_pGAS[167] 0056  //00B7
795         {0x0F12,0x00EB},        //TVAR_ash_pGAS[168] 006F  //00EB
796         {0x0F12,0x00EC},        //TVAR_ash_pGAS[169] 006B  //00D7
797         {0x0F12,0x00B0},        //TVAR_ash_pGAS[170] 005B  //00A3
798         {0x0F12,0x007C},        //TVAR_ash_pGAS[171] 004E  //007C
799         {0x0F12,0x0054},        //TVAR_ash_pGAS[172] 0043  //0061
800         {0x0F12,0x0039},        //TVAR_ash_pGAS[173] 0037  //004C
801         {0x0F12,0x0029},        //TVAR_ash_pGAS[174] 002E  //003F
802         {0x0F12,0x001E},        //TVAR_ash_pGAS[175] 0029  //0038
803         {0x0F12,0x0021},        //TVAR_ash_pGAS[176] 0028  //003A
804         {0x0F12,0x002D},        //TVAR_ash_pGAS[177] 002B  //0044
805         {0x0F12,0x0044},        //TVAR_ash_pGAS[178] 0033  //0056
806         {0x0F12,0x0064},        //TVAR_ash_pGAS[179] 003D  //006D
807         {0x0F12,0x008F},        //TVAR_ash_pGAS[180] 0046  //0091
808         {0x0F12,0x00C8},        //TVAR_ash_pGAS[181] 0056  //00BD
809         {0x0F12,0x00D6},        //TVAR_ash_pGAS[182] 0058  //00B7
810         {0x0F12,0x009B},        //TVAR_ash_pGAS[183] 004C  //0086
811         {0x0F12,0x0068},        //TVAR_ash_pGAS[184] 003B  //0062
812         {0x0F12,0x0043},        //TVAR_ash_pGAS[185] 002E  //0046
813         {0x0F12,0x0026},        //TVAR_ash_pGAS[186] 0022  //0031
814         {0x0F12,0x0013},        //TVAR_ash_pGAS[187] 0019  //0022
815         {0x0F12,0x000B},        //TVAR_ash_pGAS[188] 0014  //001C
816         {0x0F12,0x000E},        //TVAR_ash_pGAS[189] 0014  //001E
817         {0x0F12,0x001C},        //TVAR_ash_pGAS[190] 0017  //0029
818         {0x0F12,0x0033},        //TVAR_ash_pGAS[191] 0020  //003B
819         {0x0F12,0x0054},        //TVAR_ash_pGAS[192] 002C  //0055
820         {0x0F12,0x0080},        //TVAR_ash_pGAS[193] 0039  //0076
821         {0x0F12,0x00B9},        //TVAR_ash_pGAS[194] 004A  //00A0
822         {0x0F12,0x00D1},        //TVAR_ash_pGAS[195] 004F  //00A1
823         {0x0F12,0x0094},        //TVAR_ash_pGAS[196] 0043  //0074
824         {0x0F12,0x0061},        //TVAR_ash_pGAS[197] 002F  //0050
825         {0x0F12,0x003B},        //TVAR_ash_pGAS[198] 0022  //0033
826         {0x0F12,0x001C},        //TVAR_ash_pGAS[199] 0015  //001E
827         {0x0F12,0x0008},        //TVAR_ash_pGAS[200] 000C  //000F
828         {0x0F12,0x0001},        //TVAR_ash_pGAS[201] 0007  //0009
829         {0x0F12,0x0004},        //TVAR_ash_pGAS[202] 0007  //000B
830         {0x0F12,0x0012},        //TVAR_ash_pGAS[203] 000B  //0017
831         {0x0F12,0x002B},        //TVAR_ash_pGAS[204] 0016  //002A
832         {0x0F12,0x0050},        //TVAR_ash_pGAS[205] 0023  //0044
833         {0x0F12,0x007E},        //TVAR_ash_pGAS[206] 0032  //0066
834         {0x0F12,0x00B6},        //TVAR_ash_pGAS[207] 0046  //008C
835         {0x0F12,0x00D6},        //TVAR_ash_pGAS[208] 004C  //0098
836         {0x0F12,0x0098},        //TVAR_ash_pGAS[209] 003E  //006D
837         {0x0F12,0x0067},        //TVAR_ash_pGAS[210] 002a  //0049
838         {0x0F12,0x003D},        //TVAR_ash_pGAS[211] 001C  //002B
839         {0x0F12,0x001D},        //TVAR_ash_pGAS[212] 000F  //0016
840         {0x0F12,0x0009},        //TVAR_ash_pGAS[213] 0006  //0006
841         {0x0F12,0x0000},        //TVAR_ash_pGAS[214] 0001  //0000
842         {0x0F12,0x0004},        //TVAR_ash_pGAS[215] 0002  //0004
843         {0x0F12,0x0014},        //TVAR_ash_pGAS[216] 0007  //0010
844         {0x0F12,0x002F},        //TVAR_ash_pGAS[217] 0013  //0023
845         {0x0F12,0x0057},        //TVAR_ash_pGAS[218] 0021  //003E
846         {0x0F12,0x0085},        //TVAR_ash_pGAS[219] 0032  //0060
847         {0x0F12,0x00C1},        //TVAR_ash_pGAS[220] 0048  //0085
848         {0x0F12,0x00EA},        //TVAR_ash_pGAS[221] 004D  //0098
849         {0x0F12,0x00AA},        //TVAR_ash_pGAS[222] 0040  //006E
850         {0x0F12,0x0076},        //TVAR_ash_pGAS[223] 002C  //0048
851         {0x0F12,0x004B},        //TVAR_ash_pGAS[224] 001E  //002C
852         {0x0F12,0x002A},        //TVAR_ash_pGAS[225] 0011  //0018
853         {0x0F12,0x0015},        //TVAR_ash_pGAS[226] 0008  //0009
854         {0x0F12,0x000C},        //TVAR_ash_pGAS[227] 0004  //0003
855         {0x0F12,0x0012},        //TVAR_ash_pGAS[228] 0004  //0006
856         {0x0F12,0x0024},        //TVAR_ash_pGAS[229] 000A  //0012
857         {0x0F12,0x0041},        //TVAR_ash_pGAS[230] 0017  //0026
858         {0x0F12,0x006A},        //TVAR_ash_pGAS[231] 0026  //0042
859         {0x0F12,0x009C},        //TVAR_ash_pGAS[232] 0039  //0063
860         {0x0F12,0x00D9},        //TVAR_ash_pGAS[233] 0051  //0089
861         {0x0F12,0x010A},        //TVAR_ash_pGAS[234] 0054  //00A3
862         {0x0F12,0x00C9},        //TVAR_ash_pGAS[235] 0048  //0076
863         {0x0F12,0x0092},        //TVAR_ash_pGAS[236] 0034  //0051
864         {0x0F12,0x0065},        //TVAR_ash_pGAS[237] 0026  //0035
865         {0x0F12,0x0045},        //TVAR_ash_pGAS[238] 001A  //0021
866         {0x0F12,0x002E},        //TVAR_ash_pGAS[239] 0012  //0013
867         {0x0F12,0x0027},        //TVAR_ash_pGAS[240] 000D  //000E
868         {0x0F12,0x002E},        //TVAR_ash_pGAS[241] 000E  //0012
869         {0x0F12,0x0041},        //TVAR_ash_pGAS[242] 0014  //001E
870         {0x0F12,0x005F},        //TVAR_ash_pGAS[243] 0021  //0032
871         {0x0F12,0x008A},        //TVAR_ash_pGAS[244] 0033  //004D
872         {0x0F12,0x00BF},        //TVAR_ash_pGAS[245] 0048  //006F
873         {0x0F12,0x00FE},        //TVAR_ash_pGAS[246] 005C  //0097
874         {0x0F12,0x0137},        //TVAR_ash_pGAS[247] 0063  //00B7
875         {0x0F12,0x00EF},        //TVAR_ash_pGAS[248] 0057  //0089
876         {0x0F12,0x00B4},        //TVAR_ash_pGAS[249] 0045  //0062
877         {0x0F12,0x0089},        //TVAR_ash_pGAS[250] 0036  //0048
878         {0x0F12,0x006C},        //TVAR_ash_pGAS[251] 002B  //0034
879         {0x0F12,0x0058},        //TVAR_ash_pGAS[252] 0022  //0028
880         {0x0F12,0x0051},        //TVAR_ash_pGAS[253] 001E  //0023
881         {0x0F12,0x0059},        //TVAR_ash_pGAS[254] 001F  //0027
882         {0x0F12,0x006B},        //TVAR_ash_pGAS[255] 0026  //0033
883         {0x0F12,0x008B},        //TVAR_ash_pGAS[256] 0034  //0047
884         {0x0F12,0x00B7},        //TVAR_ash_pGAS[257] 0047  //0061
885         {0x0F12,0x00EE},        //TVAR_ash_pGAS[258] 005D  //0085
886         {0x0F12,0x0135},        //TVAR_ash_pGAS[259] 0070  //00B1
887         {0x0F12,0x0175},        //TVAR_ash_pGAS[260] 007C  //00DE
888         {0x0F12,0x0123},        //TVAR_ash_pGAS[261] 006B  //00AA
889         {0x0F12,0x00E3},        //TVAR_ash_pGAS[262] 005C  //0082
890         {0x0F12,0x00BB},        //TVAR_ash_pGAS[263] 004E  //0067
891         {0x0F12,0x00A0},        //TVAR_ash_pGAS[264] 0043  //0055
892         {0x0F12,0x008E},        //TVAR_ash_pGAS[265] 003B  //0049
893         {0x0F12,0x008A},        //TVAR_ash_pGAS[266] 0037  //0044
894         {0x0F12,0x0091},        //TVAR_ash_pGAS[267] 0039  //0048
895         {0x0F12,0x00A5},        //TVAR_ash_pGAS[268] 0040  //0054
896         {0x0F12,0x00C4},        //TVAR_ash_pGAS[269] 0050  //0066
897         {0x0F12,0x00F1},        //TVAR_ash_pGAS[270] 0064  //0083
898         {0x0F12,0x012F},        //TVAR_ash_pGAS[271] 007A  //00A8
899         {0x0F12,0x0183},        //TVAR_ash_pGAS[272] 008D  //00E0
900         {0x0F12,0x01B5},        //TVAR_ash_pGAS[273] 00AD  //00FE
901         {0x0F12,0x0163},        //TVAR_ash_pGAS[274] 0088  //00CC
902         {0x0F12,0x0124},        //TVAR_ash_pGAS[275] 007B  //00A2
903         {0x0F12,0x00F8},        //TVAR_ash_pGAS[276] 006D  //0085
904         {0x0F12,0x00DA},        //TVAR_ash_pGAS[277] 0062  //0072
905         {0x0F12,0x00C9},        //TVAR_ash_pGAS[278] 005B  //0066
906         {0x0F12,0x00C4},        //TVAR_ash_pGAS[279] 0057  //0062
907         {0x0F12,0x00CE},        //TVAR_ash_pGAS[280] 005A  //0065
908         {0x0F12,0x00E1},        //TVAR_ash_pGAS[281] 0061  //0072
909         {0x0F12,0x0103},        //TVAR_ash_pGAS[282] 0073  //0085
910         {0x0F12,0x0136},        //TVAR_ash_pGAS[283] 0088  //00A2
911         {0x0F12,0x017F},        //TVAR_ash_pGAS[284] 009E  //00D0
912         {0x0F12,0x01E0},        //TVAR_ash_pGAS[285] 00BB  //0103
913         {0x0F12,0x0148},        //TVAR_ash_pGAS[286] 00F3  //0153
914         {0x0F12,0x0108},        //TVAR_ash_pGAS[287] 00B8  //010D
915         {0x0F12,0x00C8},        //TVAR_ash_pGAS[288] 008D  //00D8
916         {0x0F12,0x009F},        //TVAR_ash_pGAS[289] 0082  //00B3
917         {0x0F12,0x0082},        //TVAR_ash_pGAS[290] 0077  //009A
918         {0x0F12,0x0073},        //TVAR_ash_pGAS[291] 006E  //008A
919         {0x0F12,0x0068},        //TVAR_ash_pGAS[292] 0069  //0083
920         {0x0F12,0x006C},        //TVAR_ash_pGAS[293] 006A  //0087
921         {0x0F12,0x007E},        //TVAR_ash_pGAS[294] 0071  //0095
922         {0x0F12,0x009B},        //TVAR_ash_pGAS[295] 007B  //00AC
923         {0x0F12,0x00C2},        //TVAR_ash_pGAS[296] 0086  //00CF
924         {0x0F12,0x0100},        //TVAR_ash_pGAS[297] 0098  //0106
925         {0x0F12,0x014D},        //TVAR_ash_pGAS[298] 00D3  //0149
926         {0x0F12,0x0121},        //TVAR_ash_pGAS[299] 00A4  //0116
927         {0x0F12,0x00E6},        //TVAR_ash_pGAS[300] 007E  //00D6
928         {0x0F12,0x00A4},        //TVAR_ash_pGAS[301] 006A  //00A8
929         {0x0F12,0x0078},        //TVAR_ash_pGAS[302] 0060  //0087
930         {0x0F12,0x005A},        //TVAR_ash_pGAS[303] 0053  //0071
931         {0x0F12,0x0046},        //TVAR_ash_pGAS[304] 0048  //0061
932         {0x0F12,0x003E},        //TVAR_ash_pGAS[305] 0044  //005B
933         {0x0F12,0x0043},        //TVAR_ash_pGAS[306] 0045  //005E
934         {0x0F12,0x0052},        //TVAR_ash_pGAS[307] 004C  //006D
935         {0x0F12,0x006B},        //TVAR_ash_pGAS[308] 0059  //0083
936         {0x0F12,0x0093},        //TVAR_ash_pGAS[309] 0066  //00A4
937         {0x0F12,0x00C9},        //TVAR_ash_pGAS[310] 006F  //00D5
938         {0x0F12,0x010D},        //TVAR_ash_pGAS[311] 008C  //0113
939         {0x0F12,0x0103},        //TVAR_ash_pGAS[312] 007A  //00E6
940         {0x0F12,0x00C3},        //TVAR_ash_pGAS[313] 0069  //00AE
941         {0x0F12,0x0089},        //TVAR_ash_pGAS[314] 0058  //0084
942         {0x0F12,0x005E},        //TVAR_ash_pGAS[315] 004A  //0065
943         {0x0F12,0x003E},        //TVAR_ash_pGAS[316] 003A  //004D
944         {0x0F12,0x002A},        //TVAR_ash_pGAS[317] 002F  //003D
945         {0x0F12,0x001F},        //TVAR_ash_pGAS[318] 0029  //0037
946         {0x0F12,0x0023},        //TVAR_ash_pGAS[319] 002a  //003B
947         {0x0F12,0x0032},        //TVAR_ash_pGAS[320] 0031  //004B
948         {0x0F12,0x004E},        //TVAR_ash_pGAS[321] 003F  //0063
949         {0x0F12,0x0074},        //TVAR_ash_pGAS[322] 004F  //0080
950         {0x0F12,0x00A5},        //TVAR_ash_pGAS[323] 005C  //00AB
951         {0x0F12,0x00E6},        //TVAR_ash_pGAS[324] 006F  //00DF
952         {0x0F12,0x00EF},        //TVAR_ash_pGAS[325] 0068  //00C5
953         {0x0F12,0x00AD},        //TVAR_ash_pGAS[326] 005C  //0092
954         {0x0F12,0x0076},        //TVAR_ash_pGAS[327] 0047  //006B
955         {0x0F12,0x004D},        //TVAR_ash_pGAS[328] 0037  //004B
956         {0x0F12,0x002C},        //TVAR_ash_pGAS[329] 0027  //0034
957         {0x0F12,0x0015},        //TVAR_ash_pGAS[330] 001B  //0023
958         {0x0F12,0x000C},        //TVAR_ash_pGAS[331] 0015  //001C
959         {0x0F12,0x0010},        //TVAR_ash_pGAS[332] 0016  //0020
960         {0x0F12,0x001F},        //TVAR_ash_pGAS[333] 001C  //002E
961         {0x0F12,0x003B},        //TVAR_ash_pGAS[334] 0029  //0047
962         {0x0F12,0x0061},        //TVAR_ash_pGAS[335] 003A  //0066
963         {0x0F12,0x0092},        //TVAR_ash_pGAS[336] 004B  //008C
964         {0x0F12,0x00D2},        //TVAR_ash_pGAS[337] 005E  //00BB
965         {0x0F12,0x00E8},        //TVAR_ash_pGAS[338] 0060  //00B0
966         {0x0F12,0x00A8},        //TVAR_ash_pGAS[339] 0053  //0081
967         {0x0F12,0x0071},        //TVAR_ash_pGAS[340] 003B  //005A
968         {0x0F12,0x0046},        //TVAR_ash_pGAS[341] 002a  //0039
969         {0x0F12,0x0023},        //TVAR_ash_pGAS[342] 001A  //0021
970         {0x0F12,0x000B},        //TVAR_ash_pGAS[343] 000D  //0010
971         {0x0F12,0x0002},        //TVAR_ash_pGAS[344] 0007  //0009
972         {0x0F12,0x0005},        //TVAR_ash_pGAS[345] 0007  //000C
973         {0x0F12,0x0014},        //TVAR_ash_pGAS[346] 000D  //001B
974         {0x0F12,0x0030},        //TVAR_ash_pGAS[347] 001A  //0033
975         {0x0F12,0x0058},        //TVAR_ash_pGAS[348] 002B  //0050
976         {0x0F12,0x008A},        //TVAR_ash_pGAS[349] 003D  //0078
977         {0x0F12,0x00C8},        //TVAR_ash_pGAS[350] 0053  //00A1
978         {0x0F12,0x00EF},        //TVAR_ash_pGAS[351] 005C  //00A8
979         {0x0F12,0x00AD},        //TVAR_ash_pGAS[352] 004E  //007B
980         {0x0F12,0x0077},        //TVAR_ash_pGAS[353] 0036  //0054
981         {0x0F12,0x0048},        //TVAR_ash_pGAS[354] 0023  //0032
982         {0x0F12,0x0023},        //TVAR_ash_pGAS[355] 0014  //0019
983         {0x0F12,0x000B},        //TVAR_ash_pGAS[356] 0007  //0008
984         {0x0F12,0x0000},        //TVAR_ash_pGAS[357] 0000  //0000
985         {0x0F12,0x0003},        //TVAR_ash_pGAS[358] 0000  //0004
986         {0x0F12,0x0013},        //TVAR_ash_pGAS[359] 0006  //0012
987         {0x0F12,0x0030},        //TVAR_ash_pGAS[360] 0012  //0028
988         {0x0F12,0x0059},        //TVAR_ash_pGAS[361] 0023  //0046
989         {0x0F12,0x008A},        //TVAR_ash_pGAS[362] 0034  //006B
990         {0x0F12,0x00CA},        //TVAR_ash_pGAS[363] 004C  //0093
991         {0x0F12,0x0104},        //TVAR_ash_pGAS[364] 005E  //00A9
992         {0x0F12,0x00C0},        //TVAR_ash_pGAS[365] 004F  //007C
993         {0x0F12,0x0087},        //TVAR_ash_pGAS[366] 0037  //0054
994         {0x0F12,0x0057},        //TVAR_ash_pGAS[367] 0024  //0034
995         {0x0F12,0x0031},        //TVAR_ash_pGAS[368] 0015  //001B
996         {0x0F12,0x0018},        //TVAR_ash_pGAS[369] 0008  //000A
997         {0x0F12,0x000C},        //TVAR_ash_pGAS[370] 0001  //0002
998         {0x0F12,0x0010},        //TVAR_ash_pGAS[371] 0000  //0004
999         {0x0F12,0x0020},        //TVAR_ash_pGAS[372] 0005  //0012
1000         {0x0F12,0x003D},        //TVAR_ash_pGAS[373] 0010  //0027
1001         {0x0F12,0x0067},        //TVAR_ash_pGAS[374] 0021  //0045
1002         {0x0F12,0x009A},        //TVAR_ash_pGAS[375] 0033  //0069
1003         {0x0F12,0x00D9},        //TVAR_ash_pGAS[376] 004A  //0090
1004         {0x0F12,0x0126},        //TVAR_ash_pGAS[377] 0064  //00B4
1005         {0x0F12,0x00E1},        //TVAR_ash_pGAS[378] 0056  //0086
1006         {0x0F12,0x00A3},        //TVAR_ash_pGAS[379] 003F  //005C
1007         {0x0F12,0x0071},        //TVAR_ash_pGAS[380] 002C  //003C
1008         {0x0F12,0x004C},        //TVAR_ash_pGAS[381] 001D  //0024
1009         {0x0F12,0x0031},        //TVAR_ash_pGAS[382] 0011  //0014
1010         {0x0F12,0x0025},        //TVAR_ash_pGAS[383] 0008  //000D
1011         {0x0F12,0x0029},        //TVAR_ash_pGAS[384] 0006  //000F
1012         {0x0F12,0x003A},        //TVAR_ash_pGAS[385] 000B  //001B
1013         {0x0F12,0x0057},        //TVAR_ash_pGAS[386] 0015  //002F
1014         {0x0F12,0x0081},        //TVAR_ash_pGAS[387] 0025  //004B
1015         {0x0F12,0x00B4},        //TVAR_ash_pGAS[388] 0038  //006E
1016         {0x0F12,0x00F4},        //TVAR_ash_pGAS[389] 004B  //0097
1017         {0x0F12,0x0154},        //TVAR_ash_pGAS[390] 0072  //00CA
1018         {0x0F12,0x0107},        //TVAR_ash_pGAS[391] 0064  //0098
1019         {0x0F12,0x00C6},        //TVAR_ash_pGAS[392] 004E  //006E
1020         {0x0F12,0x0095},        //TVAR_ash_pGAS[393] 003B  //0050
1021         {0x0F12,0x0074},        //TVAR_ash_pGAS[394] 002C  //0037
1022         {0x0F12,0x005A},        //TVAR_ash_pGAS[395] 001F  //0027
1023         {0x0F12,0x004F},        //TVAR_ash_pGAS[396] 0018  //0020
1024         {0x0F12,0x0053},        //TVAR_ash_pGAS[397] 0015  //0022
1025         {0x0F12,0x0062},        //TVAR_ash_pGAS[398] 0018  //002D
1026         {0x0F12,0x007F},        //TVAR_ash_pGAS[399] 0022  //0042
1027         {0x0F12,0x00A8},        //TVAR_ash_pGAS[400] 0032  //005B
1028         {0x0F12,0x00DC},        //TVAR_ash_pGAS[401] 0044  //0080
1029         {0x0F12,0x0120},        //TVAR_ash_pGAS[402] 0054  //00AA
1030         {0x0F12,0x0193},        //TVAR_ash_pGAS[403] 0089  //00F0
1031         {0x0F12,0x013B},        //TVAR_ash_pGAS[404] 0077  //00BA
1032         {0x0F12,0x00F6},        //TVAR_ash_pGAS[405] 0065  //008E
1033         {0x0F12,0x00C9},        //TVAR_ash_pGAS[406] 0052  //006F
1034         {0x0F12,0x00A8},        //TVAR_ash_pGAS[407] 0043  //0058
1035         {0x0F12,0x0090},        //TVAR_ash_pGAS[408] 0037  //0048
1036         {0x0F12,0x0086},        //TVAR_ash_pGAS[409] 002F  //0041
1037         {0x0F12,0x008A},        //TVAR_ash_pGAS[410] 002C  //0042
1038         {0x0F12,0x0099},        //TVAR_ash_pGAS[411] 002F  //004C
1039         {0x0F12,0x00B5},        //TVAR_ash_pGAS[412] 0038  //005F
1040         {0x0F12,0x00DD},        //TVAR_ash_pGAS[413] 0048  //007A
1041         {0x0F12,0x0117},        //TVAR_ash_pGAS[414] 0058  //009D
1042         {0x0F12,0x0166},        //TVAR_ash_pGAS[415] 0068  //00D2
1043         {0x0F12,0x01D6},        //TVAR_ash_pGAS[416] 00BC  //0112
1044         {0x0F12,0x017D},        //TVAR_ash_pGAS[417] 0092  //00DD
1045         {0x0F12,0x0138},        //TVAR_ash_pGAS[418] 0082  //00AF
1046         {0x0F12,0x0108},        //TVAR_ash_pGAS[419] 006F  //008F
1047         {0x0F12,0x00E3},        //TVAR_ash_pGAS[420] 0061  //0077
1048         {0x0F12,0x00CD},        //TVAR_ash_pGAS[421] 0055  //0066
1049         {0x0F12,0x00C2},        //TVAR_ash_pGAS[422] 004E  //005F
1050         {0x0F12,0x00C7},        //TVAR_ash_pGAS[423] 004A  //005F
1051         {0x0F12,0x00D4},        //TVAR_ash_pGAS[424] 004C  //006A
1052         {0x0F12,0x00F1},        //TVAR_ash_pGAS[425] 0056  //007C
1053         {0x0F12,0x011F},        //TVAR_ash_pGAS[426] 0066  //0097
1054         {0x0F12,0x015F},        //TVAR_ash_pGAS[427] 0073  //00C2
1055         {0x0F12,0x01B7},        //TVAR_ash_pGAS[428] 008B  //00F2
1056         {0x0F12,0x00D1},        //TVAR_ash_pGAS[429] 0087  //00EE
1057         {0x0F12,0x00A9},        //TVAR_ash_pGAS[430] 0069  //00C2
1058         {0x0F12,0x0080},        //TVAR_ash_pGAS[431] 0053  //009B
1059         {0x0F12,0x0064},        //TVAR_ash_pGAS[432] 0052  //0085
1060         {0x0F12,0x0055},        //TVAR_ash_pGAS[433] 0050  //0074
1061         {0x0F12,0x004E},        //TVAR_ash_pGAS[434] 0050  //006A
1062         {0x0F12,0x0047},        //TVAR_ash_pGAS[435] 004F  //0067
1063         {0x0F12,0x004B},        //TVAR_ash_pGAS[436] 0052  //006B
1064         {0x0F12,0x005E},        //TVAR_ash_pGAS[437] 0057  //0076
1065         {0x0F12,0x0077},        //TVAR_ash_pGAS[438] 005D  //0089
1066         {0x0F12,0x0094},        //TVAR_ash_pGAS[439] 0060  //00A3
1067         {0x0F12,0x00BF},        //TVAR_ash_pGAS[440] 0068  //00CE
1068         {0x0F12,0x00F1},        //TVAR_ash_pGAS[441] 0090  //0102
1069         {0x0F12,0x00BB},        //TVAR_ash_pGAS[442] 0050  //00C2
1070         {0x0F12,0x0095},        //TVAR_ash_pGAS[443] 003F  //0097
1071         {0x0F12,0x0067},        //TVAR_ash_pGAS[444] 003A  //0076
1072         {0x0F12,0x0049},        //TVAR_ash_pGAS[445] 003A  //0062
1073         {0x0F12,0x0036},        //TVAR_ash_pGAS[446] 0035  //0054
1074         {0x0F12,0x002C},        //TVAR_ash_pGAS[447] 0033  //004B
1075         {0x0F12,0x0027},        //TVAR_ash_pGAS[448] 0033  //0047
1076         {0x0F12,0x002E},        //TVAR_ash_pGAS[449] 0036  //004C
1077         {0x0F12,0x003C},        //TVAR_ash_pGAS[450] 003B  //0057
1078         {0x0F12,0x004F},        //TVAR_ash_pGAS[451] 0043  //006A
1079         {0x0F12,0x006F},        //TVAR_ash_pGAS[452] 0048  //0084
1080         {0x0F12,0x0097},        //TVAR_ash_pGAS[453] 004A  //00AE
1081         {0x0F12,0x00C7},        //TVAR_ash_pGAS[454] 005D  //00DF
1082         {0x0F12,0x00A5},        //TVAR_ash_pGAS[455] 002D  //009A
1083         {0x0F12,0x0079},        //TVAR_ash_pGAS[456] 002D  //0075
1084         {0x0F12,0x0052},        //TVAR_ash_pGAS[457] 002B  //0058
1085         {0x0F12,0x0036},        //TVAR_ash_pGAS[458] 0029  //0045
1086         {0x0F12,0x0023},        //TVAR_ash_pGAS[459] 0023  //0039
1087         {0x0F12,0x0017},        //TVAR_ash_pGAS[460] 0020  //002F
1088         {0x0F12,0x0012},        //TVAR_ash_pGAS[461] 001F  //002C
1089         {0x0F12,0x0017},        //TVAR_ash_pGAS[462] 0023  //0030
1090         {0x0F12,0x0024},        //TVAR_ash_pGAS[463] 0027  //003D
1091         {0x0F12,0x0039},        //TVAR_ash_pGAS[464] 002F  //0050
1092         {0x0F12,0x0055},        //TVAR_ash_pGAS[465] 0036  //0067
1093         {0x0F12,0x007A},        //TVAR_ash_pGAS[466] 003A  //008B
1094         {0x0F12,0x00A8},        //TVAR_ash_pGAS[467] 0043  //00B4
1095         {0x0F12,0x0097},        //TVAR_ash_pGAS[468] 001F  //0080
1096         {0x0F12,0x0069},        //TVAR_ash_pGAS[469] 0023  //005E
1097         {0x0F12,0x0045},        //TVAR_ash_pGAS[470] 001D  //0044
1098         {0x0F12,0x002B},        //TVAR_ash_pGAS[471] 001A  //0032
1099         {0x0F12,0x0018},        //TVAR_ash_pGAS[472] 0015  //0024
1100         {0x0F12,0x000B},        //TVAR_ash_pGAS[473] 0012  //001A
1101         {0x0F12,0x0006},        //TVAR_ash_pGAS[474] 0010  //0017
1102         {0x0F12,0x000A},        //TVAR_ash_pGAS[475] 0013  //001B
1103         {0x0F12,0x0017},        //TVAR_ash_pGAS[476] 0017  //0027
1104         {0x0F12,0x002B},        //TVAR_ash_pGAS[477] 001E  //0039
1105         {0x0F12,0x0047},        //TVAR_ash_pGAS[478] 0025  //004F
1106         {0x0F12,0x006B},        //TVAR_ash_pGAS[479] 002B  //006E
1107         {0x0F12,0x0097},        //TVAR_ash_pGAS[480] 0034  //0092
1108         {0x0F12,0x0092},        //TVAR_ash_pGAS[481] 0017  //006E
1109         {0x0F12,0x0065},        //TVAR_ash_pGAS[482] 001B  //004F
1110         {0x0F12,0x0042},        //TVAR_ash_pGAS[483] 0015  //0037
1111         {0x0F12,0x0028},        //TVAR_ash_pGAS[484] 0011  //0023
1112         {0x0F12,0x0013},        //TVAR_ash_pGAS[485] 000B  //0016
1113         {0x0F12,0x0005},        //TVAR_ash_pGAS[486] 0008  //000C
1114         {0x0F12,0x0000},        //TVAR_ash_pGAS[487] 0006  //0008
1115         {0x0F12,0x0004},        //TVAR_ash_pGAS[488] 0008  //000C
1116         {0x0F12,0x000F},        //TVAR_ash_pGAS[489] 000B  //0017
1117         {0x0F12,0x0025},        //TVAR_ash_pGAS[490] 0012  //0028
1118         {0x0F12,0x0040},        //TVAR_ash_pGAS[491] 0018  //003D
1119         {0x0F12,0x0064},        //TVAR_ash_pGAS[492] 001E  //005B
1120         {0x0F12,0x008F},        //TVAR_ash_pGAS[493] 0028  //007A
1121         {0x0F12,0x0098},        //TVAR_ash_pGAS[494] 0014  //0068
1122         {0x0F12,0x006A},        //TVAR_ash_pGAS[495] 0016  //004A
1123         {0x0F12,0x004A},        //TVAR_ash_pGAS[496] 0011  //0032
1124         {0x0F12,0x002E},        //TVAR_ash_pGAS[497] 000C  //001D
1125         {0x0F12,0x0016},        //TVAR_ash_pGAS[498] 0007  //0011
1126         {0x0F12,0x0007},        //TVAR_ash_pGAS[499] 0002  //0005
1127         {0x0F12,0x0000},        //TVAR_ash_pGAS[500] 0000  //0000
1128         {0x0F12,0x0004},        //TVAR_ash_pGAS[501] 0001  //0005
1129         {0x0F12,0x0011},        //TVAR_ash_pGAS[502] 0005  //000F
1130         {0x0F12,0x0026},        //TVAR_ash_pGAS[503] 000A  //001E
1131         {0x0F12,0x0042},        //TVAR_ash_pGAS[504] 000F  //0033
1132         {0x0F12,0x0064},        //TVAR_ash_pGAS[505] 0014  //004E
1133         {0x0F12,0x008F},        //TVAR_ash_pGAS[506] 001E  //006C
1134         {0x0F12,0x00A9},        //TVAR_ash_pGAS[507] 0015  //006C
1135         {0x0F12,0x007B},        //TVAR_ash_pGAS[508] 0016  //004C
1136         {0x0F12,0x0057},        //TVAR_ash_pGAS[509] 0011  //0033
1137         {0x0F12,0x0039},        //TVAR_ash_pGAS[510] 000D  //0020
1138         {0x0F12,0x0021},        //TVAR_ash_pGAS[511] 0007  //0013
1139         {0x0F12,0x0012},        //TVAR_ash_pGAS[512] 0003  //0008
1140         {0x0F12,0x000C},        //TVAR_ash_pGAS[513] 0000  //0003
1141         {0x0F12,0x0010},        //TVAR_ash_pGAS[514] 0000  //0006
1142         {0x0F12,0x001D},        //TVAR_ash_pGAS[515] 0002  //000E
1143         {0x0F12,0x0031},        //TVAR_ash_pGAS[516] 0007  //001C
1144         {0x0F12,0x004E},        //TVAR_ash_pGAS[517] 000C  //0032
1145         {0x0F12,0x0071},        //TVAR_ash_pGAS[518] 0010  //004B
1146         {0x0F12,0x009C},        //TVAR_ash_pGAS[519] 0019  //0067
1147         {0x0F12,0x00C6},        //TVAR_ash_pGAS[520] 0019  //0076
1148         {0x0F12,0x0097},        //TVAR_ash_pGAS[521] 001C  //0055
1149         {0x0F12,0x006E},        //TVAR_ash_pGAS[522] 0016  //003A
1150         {0x0F12,0x004E},        //TVAR_ash_pGAS[523] 0012  //0028
1151         {0x0F12,0x0038},        //TVAR_ash_pGAS[524] 000D  //001A
1152         {0x0F12,0x0028},        //TVAR_ash_pGAS[525] 0009  //0010
1153         {0x0F12,0x0022},        //TVAR_ash_pGAS[526] 0005  //000C
1154         {0x0F12,0x0027},        //TVAR_ash_pGAS[527] 0003  //000E
1155         {0x0F12,0x0034},        //TVAR_ash_pGAS[528] 0005  //0016
1156         {0x0F12,0x0047},        //TVAR_ash_pGAS[529] 0009  //0022
1157         {0x0F12,0x0064},        //TVAR_ash_pGAS[530] 000D  //0035
1158         {0x0F12,0x0088},        //TVAR_ash_pGAS[531] 0011  //004F
1159         {0x0F12,0x00B3},        //TVAR_ash_pGAS[532] 0017  //006C
1160         {0x0F12,0x00EB},        //TVAR_ash_pGAS[533] 0024  //0089
1161         {0x0F12,0x00B3},        //TVAR_ash_pGAS[534] 0026  //0066
1162         {0x0F12,0x008A},        //TVAR_ash_pGAS[535] 0021  //0049
1163         {0x0F12,0x006C},        //TVAR_ash_pGAS[536] 001D  //0037
1164         {0x0F12,0x005A},        //TVAR_ash_pGAS[537] 0018  //002A
1165         {0x0F12,0x004B},        //TVAR_ash_pGAS[538] 0014  //0020
1166         {0x0F12,0x0047},        //TVAR_ash_pGAS[539] 000F  //001C
1167         {0x0F12,0x004C},        //TVAR_ash_pGAS[540] 000D  //001E
1168         {0x0F12,0x0057},        //TVAR_ash_pGAS[541] 000E  //0024
1169         {0x0F12,0x006A},        //TVAR_ash_pGAS[542] 0012  //0030
1170         {0x0F12,0x0086},        //TVAR_ash_pGAS[543] 0016  //0042
1171         {0x0F12,0x00A9},        //TVAR_ash_pGAS[544] 0019  //005D
1172         {0x0F12,0x00D9},        //TVAR_ash_pGAS[545] 001B  //007D
1173         {0x0F12,0x011D},        //TVAR_ash_pGAS[546] 0036  //00A9
1174         {0x0F12,0x00DE},        //TVAR_ash_pGAS[547] 0035  //0084
1175         {0x0F12,0x00B2},        //TVAR_ash_pGAS[548] 0032  //0066
1176         {0x0F12,0x0097},        //TVAR_ash_pGAS[549] 002E  //0052
1177         {0x0F12,0x0087},        //TVAR_ash_pGAS[550] 002a  //0045
1178         {0x0F12,0x007A},        //TVAR_ash_pGAS[551] 0026  //003B
1179         {0x0F12,0x0077},        //TVAR_ash_pGAS[552] 0021  //0036
1180         {0x0F12,0x007A},        //TVAR_ash_pGAS[553] 001F  //0038
1181         {0x0F12,0x0086},        //TVAR_ash_pGAS[554] 001F  //003E
1182         {0x0F12,0x0098},        //TVAR_ash_pGAS[555] 0024  //004A
1183         {0x0F12,0x00B3},        //TVAR_ash_pGAS[556] 0027  //005E
1184         {0x0F12,0x00DA},        //TVAR_ash_pGAS[557] 002a  //0077
1185         {0x0F12,0x0112},        //TVAR_ash_pGAS[558] 0028  //009E
1186         {0x0F12,0x0149},        //TVAR_ash_pGAS[559] 005C  //00BC
1187         {0x0F12,0x0114},        //TVAR_ash_pGAS[560] 004A  //009C
1188         {0x0F12,0x00EB},        //TVAR_ash_pGAS[561] 0049  //007D
1189         {0x0F12,0x00CE},        //TVAR_ash_pGAS[562] 0046  //0069
1190         {0x0F12,0x00B9},        //TVAR_ash_pGAS[563] 0041  //005A
1191         {0x0F12,0x00AD},        //TVAR_ash_pGAS[564] 003E  //0052
1192         {0x0F12,0x00A8},        //TVAR_ash_pGAS[565] 003A  //004C
1193         {0x0F12,0x00AF},        //TVAR_ash_pGAS[566] 0037  //004D
1194         {0x0F12,0x00B8},        //TVAR_ash_pGAS[567] 0037  //0054
1195         {0x0F12,0x00CB},        //TVAR_ash_pGAS[568] 003B  //0060
1196         {0x0F12,0x00EC},        //TVAR_ash_pGAS[569] 003F  //0072
1197         {0x0F12,0x0119},        //TVAR_ash_pGAS[570] 0040  //0093
1198         {0x0F12,0x0153},        //TVAR_ash_pGAS[571] 0041  //00B6
1199         //      param_end       TVAR_ash_pGAS
1200         {0x002A,0x0F12},
1201         {0x0F12,0x02BC},
1202         {0x0F12,0x0347},
1203         //      param_start     TVAR_ash_AwbAshCord
1204         {0x002A,0x0704},
1205         {0x0F12,0x00BF},
1206         {0x0F12,0x00E6},
1207         {0x0F12,0x00F2},
1208         {0x0F12,0x0143},
1209         {0x0F12,0x0178},
1210         {0x0F12,0x01A3},
1211         {0x0F12,0x01B5},
1212         //      param_end       TVAR_ash_AwbAshCord
1213
1214         {0x002A,0x0754},  //#TVAR_ash_pGAS
1215         {0x0F12,0x247C},
1216         {0x0F12,0x7000},
1217
1218         //
1219         //      param_start     awbb_IndoorGrZones_m_BGrid
1220         {0x002A,0x0C50},
1221         {0x0F12,0x03AE},  //03BE        //awbb_IndoorGrZones_m_BGrid[0]            03C6
1222         {0x0F12,0x03DB},  //03EB        //awbb_IndoorGrZones_m_BGrid[1]            03F3
1223         {0x0F12,0x0399},  //03A9        //awbb_IndoorGrZones_m_BGrid[2]            03B1
1224         {0x0F12,0x03DB},  //03EB        //awbb_IndoorGrZones_m_BGrid[3]            03F3
1225         {0x0F12,0x0382},  //0392        //awbb_IndoorGrZones_m_BGrid[4]            039A
1226         {0x0F12,0x03DB},  //03EB        //awbb_IndoorGrZones_m_BGrid[5]            03F3
1227         {0x0F12,0x036B},  //037B        //awbb_IndoorGrZones_m_BGrid[6]            0383
1228         {0x0F12,0x03CE},  //03DE        //awbb_IndoorGrZones_m_BGrid[7]            03E6
1229         {0x0F12,0x034E},  //035E        //awbb_IndoorGrZones_m_BGrid[8]            0366
1230         {0x0F12,0x03BD},  //03CD        //awbb_IndoorGrZones_m_BGrid[9]            03D5
1231         {0x0F12,0x0330},  //0340        //awbb_IndoorGrZones_m_BGrid[10]           0348
1232         {0x0F12,0x03A8},  //03B8        //awbb_IndoorGrZones_m_BGrid[11]           03C0
1233         {0x0F12,0x0316},  //0326        //awbb_IndoorGrZones_m_BGrid[12]           032E
1234         {0x0F12,0x0391},  //03A1        //awbb_IndoorGrZones_m_BGrid[13]           03A9
1235         {0x0F12,0x02FA},  //030A        //awbb_IndoorGrZones_m_BGrid[14]           0312
1236         {0x0F12,0x0376},  //0386        //awbb_IndoorGrZones_m_BGrid[15]           038E
1237         {0x0F12,0x02E0},  //02F0        //awbb_IndoorGrZones_m_BGrid[16]           02F8
1238         {0x0F12,0x035D},  //036D        //awbb_IndoorGrZones_m_BGrid[17]           0375
1239         {0x0F12,0x02CC},  //02DC        //awbb_IndoorGrZones_m_BGrid[18]           02E4
1240         {0x0F12,0x0344},  //0354        //awbb_IndoorGrZones_m_BGrid[19]           035C
1241         {0x0F12,0x02B7},  //02C7        //awbb_IndoorGrZones_m_BGrid[20]           02CF
1242         {0x0F12,0x032F},  //033F        //awbb_IndoorGrZones_m_BGrid[21]           0347
1243         {0x0F12,0x02A7},  //02B7        //awbb_IndoorGrZones_m_BGrid[22]           02BF
1244         {0x0F12,0x0318},  //0328        //awbb_IndoorGrZones_m_BGrid[23]           0330
1245         {0x0F12,0x0296},  //02A6        //awbb_IndoorGrZones_m_BGrid[24]           02AE
1246         {0x0F12,0x0301},  //0311        //awbb_IndoorGrZones_m_BGrid[25]           0319
1247         {0x0F12,0x0286},  //0296        //awbb_IndoorGrZones_m_BGrid[26]           029E
1248         {0x0F12,0x02ED},  //02FD        //awbb_IndoorGrZones_m_BGrid[27]           0305
1249         {0x0F12,0x0279},  //0289        //awbb_IndoorGrZones_m_BGrid[28]           0291
1250         {0x0F12,0x02DB},  //02EB        //awbb_IndoorGrZones_m_BGrid[29]           02F3
1251         {0x0F12,0x026C},  //027C        //awbb_IndoorGrZones_m_BGrid[30]           0284
1252         {0x0F12,0x02CD},  //02DD        //awbb_IndoorGrZones_m_BGrid[31]           02E5
1253         {0x0F12,0x025E},  //026E        //awbb_IndoorGrZones_m_BGrid[32]           0276
1254         {0x0F12,0x02BF},  //02CF        //awbb_IndoorGrZones_m_BGrid[33]           02D7
1255         {0x0F12,0x0252},  //0262        //awbb_IndoorGrZones_m_BGrid[34]           026A
1256         {0x0F12,0x02B2},  //02C2        //awbb_IndoorGrZones_m_BGrid[35]           02CA
1257         {0x0F12,0x0249},  //0259        //awbb_IndoorGrZones_m_BGrid[36]           0261
1258         {0x0F12,0x02A7},  //02B7        //awbb_IndoorGrZones_m_BGrid[37]           02BF
1259         {0x0F12,0x023B},  //024B        //awbb_IndoorGrZones_m_BGrid[38]           0253
1260         {0x0F12,0x029B},  //02AB        //awbb_IndoorGrZones_m_BGrid[39]           02B3
1261         {0x0F12,0x0231},  //0241        //awbb_IndoorGrZones_m_BGrid[40]           0249
1262         {0x0F12,0x028D},  //029D        //awbb_IndoorGrZones_m_BGrid[41]           02A5
1263         {0x0F12,0x0227},  //0237        //awbb_IndoorGrZones_m_BGrid[42]           023F
1264         {0x0F12,0x0281},  //0291        //awbb_IndoorGrZones_m_BGrid[43]           0299
1265         {0x0F12,0x021D},  //022D        //awbb_IndoorGrZones_m_BGrid[44]           0235
1266         {0x0F12,0x0277},  //0287        //awbb_IndoorGrZones_m_BGrid[45]           028F
1267         {0x0F12,0x0216},  //0226        //awbb_IndoorGrZones_m_BGrid[46]           022E
1268         {0x0F12,0x026E},  //027E        //awbb_IndoorGrZones_m_BGrid[47]           0286
1269         {0x0F12,0x020C},  //021C        //awbb_IndoorGrZones_m_BGrid[48]           0224
1270         {0x0F12,0x0263},  //0273        //awbb_IndoorGrZones_m_BGrid[49]           027B
1271         {0x0F12,0x0204},  //0214        //awbb_IndoorGrZones_m_BGrid[50]           021C
1272         {0x0F12,0x0257},  //0267        //awbb_IndoorGrZones_m_BGrid[51]           026F
1273         {0x0F12,0x01F7},  //0207        //awbb_IndoorGrZones_m_BGrid[52]           020F
1274         {0x0F12,0x024A},  //025A        //awbb_IndoorGrZones_m_BGrid[53]           0262
1275         {0x0F12,0x01E4},  //01F4        //awbb_IndoorGrZones_m_BGrid[54]           01FC
1276         {0x0F12,0x023D},  //024D        //awbb_IndoorGrZones_m_BGrid[55]           0255
1277         {0x0F12,0x01CC},  //01DC        //awbb_IndoorGrZones_m_BGrid[56]           01F3
1278         {0x0F12,0x022A},  //023A        //awbb_IndoorGrZones_m_BGrid[57]           0242
1279         {0x0F12,0x01E5},  //01F5        //awbb_IndoorGrZones_m_BGrid[58]           01FD
1280         {0x0F12,0x020E},  //021E        //awbb_IndoorGrZones_m_BGrid[59]           0226
1281         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[60]           0000
1282         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[61]           0000
1283         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[62]           0000
1284         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[63]           0000
1285         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[64]           0000
1286         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[65]           0000
1287         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[66]           0000
1288         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[67]           0000
1289         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[68]           0000
1290         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[69]           0000
1291         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[70]           0000
1292         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[71]           0000
1293         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[72]           0000
1294         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[73]           0000
1295         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[74]           0000
1296         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[75]           0000
1297         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[76]           0000
1298         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[77]           0000
1299         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[78]           0000
1300         {0x0F12,0x0000},  //0000        //awbb_IndoorGrZones_m_BGrid[79]           0000
1301         //      param_end       awbb_IndoorGrZones_m_BGrid      0cf0 //#awbb_IndoorGrZones_m_GridStep
1302         {0x002a,0x0cf0},
1303         {0x0F12,0x0004},
1304         {0x0F12,0x0000},
1305         {0x002A,0x0cf8},  //#awbb_IndoorGrZones_m_Boffs
1306         {0x0F12,0x00f7}, //EC
1307         {0x0F12,0x0000},
1308         //      param_start     awbb_LowBrGrZones_m_BGrid
1309         {0x002A,0x0D84},
1310         {0x0F12,0x0406},  //0406        //awbb_LowBrGrZones_m_BGrid[0] 0406
1311         {0x0F12,0x0467},  //0467        //awbb_LowBrGrZones_m_BGrid[1] 0467
1312         {0x0F12,0x0371},  //0371        //awbb_LowBrGrZones_m_BGrid[2] 0371
1313         {0x0F12,0x04B0},  //04B0        //awbb_LowBrGrZones_m_BGrid[3] 04B0
1314         {0x0F12,0x02E5},  //02E5        //awbb_LowBrGrZones_m_BGrid[4] 02E5
1315         {0x0F12,0x0481},  //0481        //awbb_LowBrGrZones_m_BGrid[5] 0481
1316         {0x0F12,0x0298},  //0298        //awbb_LowBrGrZones_m_BGrid[6] 0298
1317         {0x0F12,0x042E},  //042E        //awbb_LowBrGrZones_m_BGrid[7] 042E
1318         {0x0F12,0x0260},  //0260        //awbb_LowBrGrZones_m_BGrid[8] 0260
1319         {0x0F12,0x03DE},  //03DE        //awbb_LowBrGrZones_m_BGrid[9] 03DE
1320         {0x0F12,0x022F},  //022F        //awbb_LowBrGrZones_m_BGrid[10]022F
1321         {0x0F12,0x0391},  //0391        //awbb_LowBrGrZones_m_BGrid[11]0391
1322         {0x0F12,0x0201},  //0201        //awbb_LowBrGrZones_m_BGrid[12]0201
1323         {0x0F12,0x034D},  //034D        //awbb_LowBrGrZones_m_BGrid[13]034D
1324         {0x0F12,0x01DA},  //01DA        //awbb_LowBrGrZones_m_BGrid[14]01DA
1325         {0x0F12,0x0310},  //0310        //awbb_LowBrGrZones_m_BGrid[15]0310
1326         {0x0F12,0x01B3},  //01B3        //awbb_LowBrGrZones_m_BGrid[16]01B3
1327         {0x0F12,0x02D4},  //02D4        //awbb_LowBrGrZones_m_BGrid[17]02D4
1328         {0x0F12,0x018F},  //018F        //awbb_LowBrGrZones_m_BGrid[18]018F
1329         {0x0F12,0x0297},  //0297        //awbb_LowBrGrZones_m_BGrid[19]0297
1330         {0x0F12,0x0181},  //0181        //awbb_LowBrGrZones_m_BGrid[20]0181
1331         {0x0F12,0x0271},  //0271        //awbb_LowBrGrZones_m_BGrid[21]0271
1332         {0x0F12,0x0181},  //0181        //awbb_LowBrGrZones_m_BGrid[22]0181
1333         {0x0F12,0x022A},  //022A        //awbb_LowBrGrZones_m_BGrid[23]022A
1334         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[24]0000
1335         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[25]0000
1336         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[26]0000
1337         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[27]0000
1338         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[28]0000
1339         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[29]0000
1340         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[30]0000
1341         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[31]0000
1342         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[32]0000
1343         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[33]0000
1344         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[34]0000
1345         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[35]0000
1346         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[36]0000
1347         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[37]0000
1348         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[38]0000
1349         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[39]0000
1350         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[40]0000
1351         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[41]0000
1352         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[42]0000
1353         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[43]0000
1354         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[44]0000
1355         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[45]0000
1356         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[46]0000
1357         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[47]0000
1358         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[48]0000
1359         {0x0F12,0x0000},  //0000        //awbb_LowBrGrZones_m_BGrid[49]0000
1360         //      param_end       awbb_LowBrGrZones_m_BGrid
1361         {0x002A,0x0de8},  //#awbb_LowBrGrZones_m_GridStep
1362         {0x0F12,0x0006},
1363         {0x0F12,0x0000},
1364         {0x002A,0x0df0},  //#awbb_LowBrGrZones_m_Boffs
1365         {0x0F12,0x0081},
1366         {0x0F12,0x0000},
1367         //      param_start     awbb_OutdoorGrZones_m_BGrid
1368         {0x002A,0x0D08},
1369         {0x0F12,0x0257},  //02C5  //0349  //035E        //awbb_OutdoorGrZones_m_BGrid[0] 036B
1370         {0x0F12,0x0287},  //032D  //0363  //0378        //awbb_OutdoorGrZones_m_BGrid[1] 0385
1371         {0x0F12,0x0245},  //02B2  //032C  //0341        //awbb_OutdoorGrZones_m_BGrid[2] 034E
1372         {0x0F12,0x0287},  //0315  //036E  //0383        //awbb_OutdoorGrZones_m_BGrid[3] 0390
1373         {0x0F12,0x0237},  //02A0  //030F  //0324        //awbb_OutdoorGrZones_m_BGrid[4] 0331
1374         {0x0F12,0x027D},  //02FE  //036E  //0383        //awbb_OutdoorGrZones_m_BGrid[5] 0390
1375         {0x0F12,0x022A},  //0290  //02F3  //0308        //awbb_OutdoorGrZones_m_BGrid[6] 0315
1376         {0x0F12,0x0270},  //02E9  //035C  //0371        //awbb_OutdoorGrZones_m_BGrid[7] 037E
1377         {0x0F12,0x0220},  //0280  //02D8  //02ED        //awbb_OutdoorGrZones_m_BGrid[8] 02FA
1378         {0x0F12,0x0263},  //02D7  //0343  //0358        //awbb_OutdoorGrZones_m_BGrid[9] 0365
1379         {0x0F12,0x0217},  //0274  //02C5  //02DA        //awbb_OutdoorGrZones_m_BGrid[10]02E7
1380         {0x0F12,0x0256},  //02C7  //032D  //0342        //awbb_OutdoorGrZones_m_BGrid[11]034F
1381         {0x0F12,0x020F},  //0266  //02B2  //02C7        //awbb_OutdoorGrZones_m_BGrid[12]02D4
1382         {0x0F12,0x024A},  //02B9  //0315  //032A        //awbb_OutdoorGrZones_m_BGrid[13]0337
1383         {0x0F12,0x020F},  //0259  //02A0  //02B5        //awbb_OutdoorGrZones_m_BGrid[14]02C2
1384         {0x0F12,0x023E},  //02AF  //02FE  //0313        //awbb_OutdoorGrZones_m_BGrid[15]0320
1385         {0x0F12,0x0000},  //024F  //0290  //02A5        //awbb_OutdoorGrZones_m_BGrid[16]02B2
1386         {0x0F12,0x0000},  //02A3  //02E9  //02FB        //awbb_OutdoorGrZones_m_BGrid[17]0308
1387         {0x0F12,0x0000},  //0241  //0280  //0295        //awbb_OutdoorGrZones_m_BGrid[18]02A2
1388         {0x0F12,0x0000},  //0297  //02D7  //02EB        //awbb_OutdoorGrZones_m_BGrid[19]02F8
1389         {0x0F12,0x0000},  //0235  //0274  //0289        //awbb_OutdoorGrZones_m_BGrid[20]0296
1390         {0x0F12,0x0000},  //0287  //02C7  //02DB        //awbb_OutdoorGrZones_m_BGrid[21]02E8
1391         {0x0F12,0x0000},  //022C  //0266  //027B        //awbb_OutdoorGrZones_m_BGrid[22]0288
1392         {0x0F12,0x0000},  //027C  //02B9  //02CC        //awbb_OutdoorGrZones_m_BGrid[23]02D9
1393         {0x0F12,0x0000},  //0222  //0259  //026E        //awbb_OutdoorGrZones_m_BGrid[24]027B
1394         {0x0F12,0x0000},  //0271  //02AF  //02C0        //awbb_OutdoorGrZones_m_BGrid[25]02CD
1395         {0x0F12,0x0000},  //021A  //024F  //0260        //awbb_OutdoorGrZones_m_BGrid[26]026D
1396         {0x0F12,0x0000},  //026A  //02A3  //02B3        //awbb_OutdoorGrZones_m_BGrid[27]02C0
1397         {0x0F12,0x0000},  //0213  //0241  //0256        //awbb_OutdoorGrZones_m_BGrid[28]0263
1398         {0x0F12,0x0000},  //0261  //0297  //02A7        //awbb_OutdoorGrZones_m_BGrid[29]02B4
1399         {0x0F12,0x0000},  //0209  //0235  //024A        //awbb_OutdoorGrZones_m_BGrid[30]0257
1400         {0x0F12,0x0000},  //0254  //0287  //029C        //awbb_OutdoorGrZones_m_BGrid[31]02A9
1401         {0x0F12,0x0000},  //01FE  //022C  //023F        //awbb_OutdoorGrZones_m_BGrid[32]024C
1402         {0x0F12,0x0000},  //0248  //027C  //028D        //awbb_OutdoorGrZones_m_BGrid[33]029A
1403         {0x0F12,0x0000},  //01F0  //0222  //0234        //awbb_OutdoorGrZones_m_BGrid[34]0241
1404         {0x0F12,0x0000},  //023A  //0271  //0283        //awbb_OutdoorGrZones_m_BGrid[35]0290
1405         {0x0F12,0x0000},  //01D4  //021A  //022C        //awbb_OutdoorGrZones_m_BGrid[36]0239
1406         {0x0F12,0x0000},  //0228  //026A  //0279        //awbb_OutdoorGrZones_m_BGrid[37]0286
1407         {0x0F12,0x0000},  //01EB  //0213  //0225        //awbb_OutdoorGrZones_m_BGrid[38]0232
1408         {0x0F12,0x0000},  //0209  //0261  //0271        //awbb_OutdoorGrZones_m_BGrid[39]027E
1409         {0x0F12,0x0000},  //0000  //0209  //021A        //awbb_OutdoorGrZones_m_BGrid[40]0227
1410         {0x0F12,0x0000},  //0000  //0254  //0266        //awbb_OutdoorGrZones_m_BGrid[41]0273
1411         {0x0F12,0x0000},  //0000  //01FE  //0210        //awbb_OutdoorGrZones_m_BGrid[42]021D
1412         {0x0F12,0x0000},  //0000  //0248  //0259        //awbb_OutdoorGrZones_m_BGrid[43]0266
1413         {0x0F12,0x0000},  //0000  //01F0  //0205        //awbb_OutdoorGrZones_m_BGrid[44]0212
1414         {0x0F12,0x0000},  //0000  //023A  //024A        //awbb_OutdoorGrZones_m_BGrid[45]0257
1415         {0x0F12,0x0000},  //0000  //01D4  //01E9        //awbb_OutdoorGrZones_m_BGrid[46]0202
1416         {0x0F12,0x0000},  //0000  //0228  //0239        //awbb_OutdoorGrZones_m_BGrid[47]0246
1417         {0x0F12,0x0000},  //0000  //01EB  //01F8        //awbb_OutdoorGrZones_m_BGrid[48]0209
1418         {0x0F12,0x0000},  //0000  //0209  //021E        //awbb_OutdoorGrZones_m_BGrid[49]022B
1419         //      param_end       awbb_OutdoorGrZones_m_BGrid
1420         {0x002A,0x0d6c},  //#awbb_OutdoorGrZones_m_GridStep
1421         {0x0F12,0x0004},
1422         {0x0F12,0x0000},
1423         {0x002A,0x0d74},  //#awbb_OutdoorGrZones_m_Boffs
1424         {0x0F12,0x0222}, //0195 //0145 //013d //0131
1425         {0x0F12,0x0000},
1426         {0x002A,0x0e00},  //#awbb_CrclLowT_R_c
1427         {0x0F12,0x03cf}, //034A
1428         {0x0F12,0x0000},
1429         {0x002A,0x0e04},  //#awbb_CrclLowT_B_c
1430         {0x0F12,0x012e}, //0176
1431         {0x0F12,0x0000},
1432         {0x002A,0x0e08},  //#awbb_CrclLowT_Rad_c
1433         {0x0F12,0xdf21}, //67C3 //6fc3 //71B8
1434         {0x0F12,0x0000},
1435         {0x002A,0x0E1A},
1436         {0x0F12,0x0135}, //012F
1437         {0x0F12,0x0120},
1438
1439         //// awbb_LowTempRB
1440         //002A 0E68
1441         //0F12 04F2
1442
1443         //      param_start     SARR_usGammaLutRGBIndoor
1444         {0x002A,0x04C8},
1445         {0x0F12,0x0000},
1446         {0x0F12,0x0004},
1447         {0x0F12,0x0009},
1448         {0x0F12,0x0015},
1449         {0x0F12,0x0034},
1450         {0x0F12,0x0088},
1451         {0x0F12,0x00ED},
1452         {0x0F12,0x0155},
1453         {0x0F12,0x0201},
1454         {0x0F12,0x0276},
1455         {0x0F12,0x0307},
1456         {0x0F12,0x0362},
1457         {0x0F12,0x03A9},
1458         {0x0F12,0x03D5},
1459         {0x0F12,0x03F4},
1460         {0x0F12,0x03FF},
1461         {0x0F12,0x0000},
1462         {0x0F12,0x0004},
1463         {0x0F12,0x0009},
1464         {0x0F12,0x0015},
1465         {0x0F12,0x0034},
1466         {0x0F12,0x0088},
1467         {0x0F12,0x00ED},
1468         {0x0F12,0x0155},
1469         {0x0F12,0x0201},
1470         {0x0F12,0x0276},
1471         {0x0F12,0x0307},
1472         {0x0F12,0x0362},
1473         {0x0F12,0x03A9},
1474         {0x0F12,0x03D5},
1475         {0x0F12,0x03F4},
1476         {0x0F12,0x03FF},
1477         {0x0F12,0x0000},
1478         {0x0F12,0x0004},
1479         {0x0F12,0x0009},
1480         {0x0F12,0x0015},
1481         {0x0F12,0x0034},
1482         {0x0F12,0x0088},
1483         {0x0F12,0x00ED},
1484         {0x0F12,0x0155},
1485         {0x0F12,0x0201},
1486         {0x0F12,0x0276},
1487         {0x0F12,0x0307},
1488         {0x0F12,0x0362},
1489         {0x0F12,0x03A9},
1490         {0x0F12,0x03D5},
1491         {0x0F12,0x03F4},
1492         {0x0F12,0x03FF},
1493         //      param_end       SARR_usGammaLutRGBIndoor
1494
1495
1496         {0x002A,0x1000},
1497         {0x0F12,0x003e}, // AE Target
1498
1499         // SAAR_IllumType
1500         {0x002A,0x108E},
1501         {0x0F12,0x00C0},
1502         {0x0F12,0x00E7},
1503         {0x0F12,0x00F9},
1504         {0x0F12,0x0142},
1505         {0x0F12,0x0179},
1506         {0x0F12,0x01A4},
1507         {0x0F12,0x01B8},   //SAAR_IllumF
1508         {0x0F12,0x0112},
1509         {0x0F12,0x0122},
1510         {0x0F12,0x0136},
1511         {0x0F12,0x00F6},
1512         {0x0F12,0x0100},
1513         {0x0F12,0x00FE},
1514         {0x0F12,0x0100},
1515
1516         {0x002A,0x1AC8},
1517         {0x0F12,0x0000},   //   param_start     TVAR_wbt_pBaseCcms
1518         {0x002A,0x23A4},
1519         {0x0F12,0x0213},
1520         {0x0F12,0xFF95},
1521         {0x0F12,0xFFF6},
1522         {0x0F12,0x0067},
1523         {0x0F12,0x0118},
1524         {0x0F12,0xFF1F},
1525         {0x0F12,0xFF0A},
1526         {0x0F12,0x01A9},
1527         {0x0F12,0xFF6E},
1528         {0x0F12,0xFECE},
1529         {0x0F12,0x01C7},
1530         {0x0F12,0x012E},
1531         {0x0F12,0xFFE9},
1532         {0x0F12,0x0009},
1533         {0x0F12,0x01FD},
1534         {0x0F12,0x015B},
1535         {0x0F12,0xFF0C},
1536         {0x0F12,0x014F},
1537         {0x0F12,0x0213},
1538         {0x0F12,0xFF95},
1539         {0x0F12,0xFFF6},
1540         {0x0F12,0x0067},
1541         {0x0F12,0x0118},
1542         {0x0F12,0xFF1F},
1543         {0x0F12,0xFF0A},
1544         {0x0F12,0x01A9},
1545         {0x0F12,0xFF6E},
1546         {0x0F12,0xFECE},
1547         {0x0F12,0x01C7},
1548         {0x0F12,0x012E},
1549         {0x0F12,0xFFE9},
1550         {0x0F12,0x0009},
1551         {0x0F12,0x01FD},
1552         {0x0F12,0x015B},
1553         {0x0F12,0xFF0C},
1554         {0x0F12,0x014F},
1555         {0x0F12,0x0213},
1556         {0x0F12,0xFF95},
1557         {0x0F12,0xFFF6},
1558         {0x0F12,0x0067},
1559         {0x0F12,0x0118},
1560         {0x0F12,0xFF1F},
1561         {0x0F12,0xFF0A},
1562         {0x0F12,0x01A9},
1563         {0x0F12,0xFF6E},
1564         {0x0F12,0xFECE},
1565         {0x0F12,0x01C7},
1566         {0x0F12,0x012E},
1567         {0x0F12,0xFFE9},
1568         {0x0F12,0x0009},
1569         {0x0F12,0x01FD},
1570         {0x0F12,0x015B},
1571         {0x0F12,0xFF0C},
1572         {0x0F12,0x014F},
1573         {0x0F12,0x0213},
1574         {0x0F12,0xFF95},
1575         {0x0F12,0xFFF6},
1576         {0x0F12,0x0067},
1577         {0x0F12,0x0118},
1578         {0x0F12,0xFF1F},
1579         {0x0F12,0xFF0A},
1580         {0x0F12,0x01A9},
1581         {0x0F12,0xFF6E},
1582         {0x0F12,0xFECE},
1583         {0x0F12,0x01C7},
1584         {0x0F12,0x012E},
1585         {0x0F12,0xFFE9},
1586         {0x0F12,0x0009},
1587         {0x0F12,0x01FD},
1588         {0x0F12,0x015B},
1589         {0x0F12,0xFF0C},
1590         {0x0F12,0x014F},
1591         {0x0F12,0x0213},
1592         {0x0F12,0xFF95},
1593         {0x0F12,0xFFF6},
1594         {0x0F12,0x0067},
1595         {0x0F12,0x0118},
1596         {0x0F12,0xFF1F},
1597         {0x0F12,0xFF0A},
1598         {0x0F12,0x01A9},
1599         {0x0F12,0xFF6E},
1600         {0x0F12,0xFECE},
1601         {0x0F12,0x01C7},
1602         {0x0F12,0x012E},
1603         {0x0F12,0xFFE9},
1604         {0x0F12,0x0009},
1605         {0x0F12,0x01FD},
1606         {0x0F12,0x015B},
1607         {0x0F12,0xFF0C},
1608         {0x0F12,0x014F},
1609         {0x0F12,0x0213},
1610         {0x0F12,0xFF95},
1611         {0x0F12,0xFFF6},
1612         {0x0F12,0x0067},
1613         {0x0F12,0x0118},
1614         {0x0F12,0xFF1F},
1615         {0x0F12,0xFF0A},
1616         {0x0F12,0x01A9},
1617         {0x0F12,0xFF6E},
1618         {0x0F12,0xFECE},
1619         {0x0F12,0x01C7},
1620         {0x0F12,0x012E},
1621         {0x0F12,0xFFE9},
1622         {0x0F12,0x0009},
1623         {0x0F12,0x01FD},
1624         {0x0F12,0x015B},
1625         {0x0F12,0xFF0C},
1626         {0x0F12,0x014F},
1627         //      param_end       TVAR_wbt_pBaseCcms
1628         //      param_start     TVAR_wbt_pOutdoorCcm
1629         {0x002A,0x2380},
1630         {0x0F12,0x01AF},
1631         {0x0F12,0xFFD5},
1632         {0x0F12,0x001D},
1633         {0x0F12,0x0080},
1634         {0x0F12,0x00BA},
1635         {0x0F12,0xFF61},
1636         {0x0F12,0xFF21},
1637         {0x0F12,0x0164},
1638         {0x0F12,0xFF96},
1639         {0x0F12,0xFF0F},
1640         {0x0F12,0x019A},
1641         {0x0F12,0x0117},
1642         {0x0F12,0xFFE8},
1643         {0x0F12,0x0041},
1644         {0x0F12,0x01C8},
1645         {0x0F12,0x0173},
1646         {0x0F12,0xFF35},
1647         {0x0F12,0x013C},   //   param_end       TVAR_wbt_pOutdoorCcm
1648
1649         {0x002A,0x06DA},
1650         {0x0F12,0x00BF},
1651         {0x0F12,0x00E6},
1652         {0x0F12,0x00F2},
1653         {0x0F12,0x0143},
1654         {0x0F12,0x0178},
1655         {0x0F12,0x01A3},  //    param_start     SARR_uNormBrInDoor
1656         {0x002A,0x07E8},
1657         {0x0F12,0x000A},
1658         {0x0F12,0x0019},
1659         {0x0F12,0x007D},
1660         {0x0F12,0x01F4},
1661         {0x0F12,0x1388},
1662         //      param_end       SARR_uNormBrInDoor
1663         //      param_start     afit_uNoiseIndInDoor
1664         {0x002A,0x07D0},
1665         {0x0F12,0x0030},
1666         {0x0F12,0x0046},
1667         {0x0F12,0x0088},
1668         {0x0F12,0x0205},
1669         {0x0F12,0x02BC},
1670         //      param_end       afit_uNoiseIndInDoor
1671         {0x002A,0x07E6},
1672         {0x0F12,0x0001},
1673         //      param_start     TVAR_afit_pBaseVals
1674         {0x002A,0x0828},
1675         {0x0F12,0x000B},   //TVAR_afit_pBaseVals[0]
1676         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[1]
1677         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[2]
1678         {0x0F12,0xFFAA},         //TVAR_afit_pBaseVals[3]
1679         {0x0F12,0x0019},         //TVAR_afit_pBaseVals[4]
1680         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[5]
1681         {0x0F12,0x0032},         //TVAR_afit_pBaseVals[6]
1682         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[7]
1683         {0x0F12,0x00FF},         //TVAR_afit_pBaseVals[8]
1684         {0x0F12,0x000A},         //TVAR_afit_pBaseVals[9]
1685         {0x0F12,0x0004},         //TVAR_afit_pBaseVals[10]
1686         {0x0F12,0x000A},         //TVAR_afit_pBaseVals[11]
1687         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[12]
1688         {0x0F12,0x0064},         //TVAR_afit_pBaseVals[13]
1689         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[14]
1690         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[15]
1691         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[16]
1692         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[17]
1693         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[18]
1694         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[19]
1695         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[20]
1696         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[21]
1697         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[22]
1698         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[23]
1699         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[24]
1700         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[25]
1701         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[26]
1702         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[27]
1703         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[28]
1704         {0x0F12,0x0106},         //TVAR_afit_pBaseVals[29]
1705         {0x0F12,0x006F},         //TVAR_afit_pBaseVals[30]
1706         {0x0F12,0x054C},         //TVAR_afit_pBaseVals[31]
1707         {0x0F12,0x0A4C},         //TVAR_afit_pBaseVals[32]
1708         {0x0F12,0x0203},         //TVAR_afit_pBaseVals[33]
1709         {0x0F12,0x0203},         //TVAR_afit_pBaseVals[34]
1710         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[35]
1711         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[36]
1712         {0x0F12,0x2828},         //TVAR_afit_pBaseVals[37]
1713         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[38]
1714         {0x0F12,0x0230},         //TVAR_afit_pBaseVals[39]
1715         {0x0F12,0x0480},         //TVAR_afit_pBaseVals[40]
1716         {0x0F12,0x0804},         //TVAR_afit_pBaseVals[41]
1717         {0x0F12,0x030A},         //TVAR_afit_pBaseVals[42]
1718         {0x0F12,0x1403},         //TVAR_afit_pBaseVals[43]
1719         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[44]
1720         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[45]
1721         {0x0F12,0x0500},         //TVAR_afit_pBaseVals[46]
1722         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[47]
1723         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[48]
1724         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[49]
1725         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[50]
1726         {0x0F12,0x0200},         //TVAR_afit_pBaseVals[51]
1727         {0x0F12,0x0400},         //TVAR_afit_pBaseVals[52]
1728         {0x0F12,0x0200},         //TVAR_afit_pBaseVals[53]
1729         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[54]
1730         {0x0F12,0x0A00},         //TVAR_afit_pBaseVals[55]
1731         {0x0F12,0x100A},         //TVAR_afit_pBaseVals[56]
1732         {0x0F12,0x0150},         //TVAR_afit_pBaseVals[57]
1733         {0x0F12,0x0130},         //TVAR_afit_pBaseVals[58]
1734         {0x0F12,0x0100},         //TVAR_afit_pBaseVals[59]
1735         {0x0F12,0x8032},   //805A        //TVAR_afit_pBaseVals[60]
1736         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[61]
1737         {0x0F12,0x001C},         //TVAR_afit_pBaseVals[62]
1738         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[63]
1739         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[64]
1740         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[65]
1741         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[66]
1742         {0x0F12,0x000C},         //TVAR_afit_pBaseVals[67]
1743         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[68]
1744         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[69]
1745         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[70]
1746         {0x0F12,0x00A0},         //TVAR_afit_pBaseVals[71]
1747         {0x0F12,0x000A},         //TVAR_afit_pBaseVals[72]
1748         {0x0F12,0x0004},         //TVAR_afit_pBaseVals[73]
1749         {0x0F12,0x0012},         //TVAR_afit_pBaseVals[74]
1750         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[75]
1751         {0x0F12,0x0064},         //TVAR_afit_pBaseVals[76]
1752         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[77]
1753         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[78]
1754         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[79]
1755         {0x0F12,0x0200},         //TVAR_afit_pBaseVals[80]
1756         {0x0F12,0x0200},         //TVAR_afit_pBaseVals[81]
1757         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[82]
1758         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[83]
1759         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[84]
1760         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[85]
1761         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[86]
1762         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[87]
1763         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[88]
1764         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[89]
1765         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[90]
1766         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[91]
1767         {0x0F12,0x0106},         //TVAR_afit_pBaseVals[92]
1768         {0x0F12,0x006F},         //TVAR_afit_pBaseVals[93]
1769         {0x0F12,0x053D},         //TVAR_afit_pBaseVals[94]
1770         {0x0F12,0x0A3D},         //TVAR_afit_pBaseVals[95]
1771         {0x0F12,0x0203},         //TVAR_afit_pBaseVals[96]
1772         {0x0F12,0x0203},         //TVAR_afit_pBaseVals[97]
1773         {0x0F12,0x0C23},         //TVAR_afit_pBaseVals[98]
1774         {0x0F12,0x230C},         //TVAR_afit_pBaseVals[99]
1775         {0x0F12,0x1919},         //TVAR_afit_pBaseVals[100]
1776         {0x0F12,0x0303},         //TVAR_afit_pBaseVals[101]
1777         {0x0F12,0x0220},         //TVAR_afit_pBaseVals[102]
1778         {0x0F12,0x0480},         //TVAR_afit_pBaseVals[103]
1779         {0x0F12,0x0804},         //TVAR_afit_pBaseVals[104]
1780         {0x0F12,0x030A},         //TVAR_afit_pBaseVals[105]
1781         {0x0F12,0x1403},         //TVAR_afit_pBaseVals[106]
1782         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[107]
1783         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[108]
1784         {0x0F12,0x0500},         //TVAR_afit_pBaseVals[109]
1785         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[110]
1786         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[111]
1787         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[112]
1788         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[113]
1789         {0x0F12,0x0200},         //TVAR_afit_pBaseVals[114]
1790         {0x0F12,0x0400},         //TVAR_afit_pBaseVals[115]
1791         {0x0F12,0x0200},         //TVAR_afit_pBaseVals[116]
1792         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[117]
1793         {0x0F12,0x0500},         //TVAR_afit_pBaseVals[118]
1794         {0x0F12,0x1008},         //TVAR_afit_pBaseVals[119]
1795         {0x0F12,0x0160},         //TVAR_afit_pBaseVals[120]
1796         {0x0F12,0x0150},         //TVAR_afit_pBaseVals[121]
1797         {0x0F12,0x0100},         //TVAR_afit_pBaseVals[122]
1798         {0x0F12,0x803C},   //8064        //TVAR_afit_pBaseVals[123]
1799         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[124]
1800         {0x0F12,0x0016},         //TVAR_afit_pBaseVals[125]
1801         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[126]
1802         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[127]
1803         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[128]
1804         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[129]
1805         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[130]
1806         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[131]
1807         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[132]
1808         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[133]
1809         {0x0F12,0x0050},         //TVAR_afit_pBaseVals[134]
1810         {0x0F12,0x000A},         //TVAR_afit_pBaseVals[135]
1811         {0x0F12,0x0003},         //TVAR_afit_pBaseVals[136]
1812         {0x0F12,0x0019},         //TVAR_afit_pBaseVals[137]
1813         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[138]
1814         {0x0F12,0x0064},         //TVAR_afit_pBaseVals[139]
1815         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[140]
1816         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[141]
1817         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[142]
1818         {0x0F12,0x0002},         //TVAR_afit_pBaseVals[143]
1819         {0x0F12,0x0002},         //TVAR_afit_pBaseVals[144]
1820         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[145]
1821         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[146]
1822         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[147]
1823         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[148]
1824         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[149]
1825         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[150]
1826         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[151]
1827         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[152]
1828         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[153]
1829         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[154]
1830         {0x0F12,0x0106},         //TVAR_afit_pBaseVals[155]
1831         {0x0F12,0x006F},         //TVAR_afit_pBaseVals[156]
1832         {0x0F12,0x050A},         //TVAR_afit_pBaseVals[157]
1833         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[158]
1834         {0x0F12,0x0203},         //TVAR_afit_pBaseVals[159]
1835         {0x0F12,0x0203},         //TVAR_afit_pBaseVals[160]
1836         {0x0F12,0x1946},         //TVAR_afit_pBaseVals[161]
1837         {0x0F12,0x4619},         //TVAR_afit_pBaseVals[162]
1838         {0x0F12,0x0F0F},         //TVAR_afit_pBaseVals[163]
1839         {0x0F12,0x0606},         //TVAR_afit_pBaseVals[164]
1840         {0x0F12,0x020F},         //TVAR_afit_pBaseVals[165]
1841         {0x0F12,0x0480},         //TVAR_afit_pBaseVals[166]
1842         {0x0F12,0x0804},         //TVAR_afit_pBaseVals[167]
1843         {0x0F12,0x030A},         //TVAR_afit_pBaseVals[168]
1844         {0x0F12,0x1403},         //TVAR_afit_pBaseVals[169]
1845         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[170]
1846         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[171]
1847         {0x0F12,0x0500},         //TVAR_afit_pBaseVals[172]
1848         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[173]
1849         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[174]
1850         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[175]
1851         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[176]
1852         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[177]
1853         {0x0F12,0x0404},         //TVAR_afit_pBaseVals[178]
1854         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[179]
1855         {0x0F12,0x0402},         //TVAR_afit_pBaseVals[180]
1856         {0x0F12,0x0002},         //TVAR_afit_pBaseVals[181]
1857         {0x0F12,0x1006},         //TVAR_afit_pBaseVals[182]
1858         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[183]
1859         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[184]
1860         {0x0F12,0x0100},         //TVAR_afit_pBaseVals[185]
1861         {0x0F12,0x8046},  //0x8067       //TVAR_afit_pBaseVals[186]
1862         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[187]
1863         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[188]
1864         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[189]
1865         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[190]
1866         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[191]
1867         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[192]
1868         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[193]
1869         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[194]
1870         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[195]
1871         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[196]
1872         {0x0F12,0x000A},         //TVAR_afit_pBaseVals[197]
1873         {0x0F12,0x000A},         //TVAR_afit_pBaseVals[198]
1874         {0x0F12,0x0003},         //TVAR_afit_pBaseVals[199]
1875         {0x0F12,0x0019},         //TVAR_afit_pBaseVals[200]
1876         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[201]
1877         {0x0F12,0x0064},         //TVAR_afit_pBaseVals[202]
1878         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[203]
1879         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[204]
1880         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[205]
1881         {0x0F12,0x0002},         //TVAR_afit_pBaseVals[206]
1882         {0x0F12,0x0002},         //TVAR_afit_pBaseVals[207]
1883         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[208]
1884         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[209]
1885         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[210]
1886         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[211]
1887         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[212]
1888         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[213]
1889         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[214]
1890         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[215]
1891         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[216]
1892         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[217]
1893         {0x0F12,0x0106},         //TVAR_afit_pBaseVals[218]
1894         {0x0F12,0x006F},         //TVAR_afit_pBaseVals[219]
1895         {0x0F12,0x0505},         //TVAR_afit_pBaseVals[220]
1896         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[221]
1897         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[222]
1898         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[223]
1899         {0x0F12,0x1946},         //TVAR_afit_pBaseVals[224]
1900         {0x0F12,0x4619},         //TVAR_afit_pBaseVals[225]
1901         {0x0F12,0x0F0F},         //TVAR_afit_pBaseVals[226]
1902         {0x0F12,0x0606},         //TVAR_afit_pBaseVals[227]
1903         {0x0F12,0x020F},         //TVAR_afit_pBaseVals[228]
1904         {0x0F12,0x0480},         //TVAR_afit_pBaseVals[229]
1905         {0x0F12,0x0804},         //TVAR_afit_pBaseVals[230]
1906         {0x0F12,0x030A},         //TVAR_afit_pBaseVals[231]
1907         {0x0F12,0x1403},         //TVAR_afit_pBaseVals[232]
1908         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[233]
1909         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[234]
1910         {0x0F12,0x0500},         //TVAR_afit_pBaseVals[235]
1911         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[236]
1912         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[237]
1913         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[238]
1914         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[239]
1915         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[240]
1916         {0x0F12,0x0404},         //TVAR_afit_pBaseVals[241]
1917         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[242]
1918         {0x0F12,0x0402},         //TVAR_afit_pBaseVals[243]
1919         {0x0F12,0x0002},         //TVAR_afit_pBaseVals[244]
1920         {0x0F12,0x1006},         //TVAR_afit_pBaseVals[245]
1921         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[246]
1922         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[247]
1923         {0x0F12,0x0100},         //TVAR_afit_pBaseVals[248]
1924         {0x0F12,0x8046}, //5A  //0x806B  //TVAR_afit_pBaseVals[249]
1925         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[250]
1926         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[251]
1927         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[252]
1928         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[253]
1929         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[254]
1930         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[255]
1931         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[256]
1932         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[257]
1933         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[258]
1934         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[259]
1935         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[260]
1936         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[261]
1937         {0x0F12,0x0003},         //TVAR_afit_pBaseVals[262]
1938         {0x0F12,0x0019},         //TVAR_afit_pBaseVals[263]
1939         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[264]
1940         {0x0F12,0x0064},         //TVAR_afit_pBaseVals[265]
1941         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[266]
1942         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[267]
1943         {0x0F12,0x0000},         //TVAR_afit_pBaseVals[268]
1944         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[269]
1945         {0x0F12,0x000F},         //TVAR_afit_pBaseVals[270]
1946         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[271]
1947         {0x0F12,0x03FF},         //TVAR_afit_pBaseVals[272]
1948         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[273]
1949         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[274]
1950         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[275]
1951         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[276]
1952         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[277]
1953         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[278]
1954         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[279]
1955         {0x0F12,0x0028},         //TVAR_afit_pBaseVals[280]
1956         {0x0F12,0x0106},         //TVAR_afit_pBaseVals[281]
1957         {0x0F12,0x006F},         //TVAR_afit_pBaseVals[282]
1958         {0x0F12,0x0505},         //TVAR_afit_pBaseVals[283]
1959         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[284]
1960         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[285]
1961         {0x0F12,0x0202},         //TVAR_afit_pBaseVals[286]
1962         {0x0F12,0x1946},         //TVAR_afit_pBaseVals[287]
1963         {0x0F12,0x4619},         //TVAR_afit_pBaseVals[288]
1964         {0x0F12,0x0F0F},         //TVAR_afit_pBaseVals[289]
1965         {0x0F12,0x0606},         //TVAR_afit_pBaseVals[290]
1966         {0x0F12,0x020F},         //TVAR_afit_pBaseVals[291]
1967         {0x0F12,0x0480},         //TVAR_afit_pBaseVals[292]
1968         {0x0F12,0x0804},         //TVAR_afit_pBaseVals[293]
1969         {0x0F12,0x030A},         //TVAR_afit_pBaseVals[294]
1970         {0x0F12,0x1403},         //TVAR_afit_pBaseVals[295]
1971         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[296]
1972         {0x0F12,0x0014},         //TVAR_afit_pBaseVals[297]
1973         {0x0F12,0x0500},         //TVAR_afit_pBaseVals[298]
1974         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[299]
1975         {0x0F12,0x1414},         //TVAR_afit_pBaseVals[300]
1976         {0x0F12,0x0A0A},         //TVAR_afit_pBaseVals[301]
1977         {0x0F12,0x0005},         //TVAR_afit_pBaseVals[302]
1978         {0x0F12,0x0303},         //TVAR_afit_pBaseVals[303]
1979         {0x0F12,0x0707},         //TVAR_afit_pBaseVals[304]
1980         {0x0F12,0x0303},         //TVAR_afit_pBaseVals[305]
1981         {0x0F12,0x0806},         //TVAR_afit_pBaseVals[306]
1982         {0x0F12,0x0004},         //TVAR_afit_pBaseVals[307]
1983         {0x0F12,0x1006},         //TVAR_afit_pBaseVals[308]
1984         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[309]
1985         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[310]
1986         {0x0F12,0x0100},         //TVAR_afit_pBaseVals[311]
1987         {0x0F12,0x8046}, //5A   //0x806B //TVAR_afit_pBaseVals[312]
1988         {0x0F12,0x0180},         //TVAR_afit_pBaseVals[313]
1989         {0x0F12,0x0000},      ////TVAR_afit_pBaseVals[314]      param_end       TVAR_afit_pBaseVals
1990                           //    param_sta afit_pConstBaseVals
1991         {0x0F12,0x03FC},
1992         {0x0F12,0x03FF},
1993         {0x0F12,0x0500},
1994         {0x0F12,0x0400},
1995         {0x0F12,0x0000},
1996         {0x0F12,0x0000},
1997         {0x0F12,0x0000},
1998         {0x0F12,0x0300},
1999         {0x0F12,0x0002},
2000         {0x0F12,0x0300},
2001         {0x0F12,0x0203},
2002         {0x0F12,0x0003},
2003         {0x0F12,0x0000},
2004         {0x0F12,0x0204},
2005         {0x0F12,0x0000},
2006         {0x0F12,0xFDD6},
2007         {0x0F12,0x43C1},
2008         {0x0F12,0xF0FA},
2009         {0x0F12,0x0001},  //    param_end       afit_pConstBaseVals
2010
2011         {0x002A,0x06d4},  //#TVAR_wbt_pOutdoorCcm
2012         {0x0F12,0x2380},
2013         {0x0F12,0x7000},
2014         {0x002A,0x06cc},  //#TVAR_wbt_pBaseCcms
2015         {0x0F12,0x23A4},
2016         {0x0F12,0x7000},
2017         {0x002A,0x06e8},  //#TVAR_wbt_pBaseCcmsAddr[0]
2018         {0x0F12,0x23A4},
2019         {0x0F12,0x7000},
2020         {0x002A,0x06EC},  //#TVAR_wbt_pBaseCcmsAddr[1]
2021         {0x0F12,0x23C8},
2022         {0x0F12,0x7000},
2023         {0x002A,0x06f0},  //#TVAR_wbt_pBaseCcmsAddr[2]
2024         {0x0F12,0x23EC},
2025         {0x0F12,0x7000},
2026         {0x002A,0x06f4},  //#TVAR_wbt_pBaseCcmsAddr[3]
2027         {0x0F12,0x2410},
2028         {0x0F12,0x7000},
2029         {0x002A,0x06f8},  //#TVAR_wbt_pBaseCcmsAddr[4]
2030         {0x0F12,0x2434},
2031         {0x0F12,0x7000},
2032         {0x002A,0x06fc},  //#TVAR_wbt_pBaseCcmsAddr[5]
2033         {0x0F12,0x2458},
2034         {0x0F12,0x7000},  // End tuning part
2035         {0x1000,0x0001},
2036         //1000  0001    // Set host interrupt so main start run
2037         //p10   // Wait10mSec
2038         {SEQUENCE_WAIT_MS,20},
2039
2040
2041
2042         // Set Flicker
2043
2044         //=================================================================================================
2045         // Set Flicker
2046         //=================================================================================================
2047
2048         ////1. Auto Flicker 60Hz Start
2049         //{0x002A, AFC_Default60Hz},
2050         //{0x0F12, 0x0001},  // #AFC_Default60Hz  1: Auto Flicker 60Hz start 0: Auto Flicker 50Hz start
2051         //{0x002A, REG_TC_DBG_AutoAlgEnBits},
2052         //{0x0F12, 0x007F},  // #REG_TC_DBG_AutoAlgEnBits  //default : 007F
2053
2054         ////2. Auto Flicker 50Hz Start
2055         //{0x002A, 0xAFC_Default60Hz},
2056         //{0x0F12, 0x0000},     //1: Auto Flicker 60Hz start 0: Auto Flicker 50Hz start
2057         //{0x002A, 0xREG_TC_DBG_AutoAlgEnBits},
2058         //{0x0F12, 0x007F},     //default : 007F
2059
2060         //3. Manual Flicker 60Hz
2061         //{0x002A, 0xREG_TC_DBG_AutoAlgEnBits},  //default : 007F
2062         //{0x0F12, 0x005F},
2063         //{0x002A, 0xREG_SF_USER_FlickerQuant},  //Flicker 50Hz:0001/60Hz:0002/off:0000
2064         //{0x0F12, 0x0002},
2065         //{0x002A, 0xREG_SF_USER_FlickerQuantChanged}, //if change 0001 write
2066         //{0x0F12, 0x0001},
2067
2068         //4. Manual Flicker 50Hz
2069         {0x002A, REG_TC_DBG_AutoAlgEnBits}, //default : 007F
2070         {0x0F12, 0x005F},
2071         {0x002A, REG_SF_USER_FlickerQuant},  //Flicker 50Hz:0001/60Hz:0002/off:0000
2072         {0x0F12, 0x0001},
2073         {0x002A, REG_SF_USER_FlickerQuantChanged}, //if change 0001 write
2074         {0x0F12, 0x0001},
2075
2076         //5. Flicker Off
2077         //{0x002A, 0xREG_TC_DBG_AutoAlgEnBits},  //default : 007F
2078         //{0x0F12, 0x005F},
2079         //{0x002A, 0xREG_SF_USER_FlickerQuant},  //Flicker 50Hz:0001/60Hz:0002/off:0000
2080         //{0x0F12, 0x0000},
2081         //{0x002A, 0xREG_SF_USER_FlickerQuantChanged}, //if change 0001 write
2082         //{0x0F12, 0x0001},
2083
2084         //{0x002A, 0xAFC_ManualQuant},
2085         //{0x0F12, 0x0001},
2086
2087
2088         {0x002A,lt_uMaxExp1},
2089         {0x0F12,0xC350},        // #lt_uMaxExp1         : 66.6ms                //30fps:  30fps-> 33.3ms->410A
2090         {0x0F12,0x0000},
2091         {0x002A,lt_uMaxExp2},
2092         {0x0F12,0x8488},        // #lt_uMaxExp2         : 250ms
2093         {0x0F12,0x0002},
2094         {0x002A,lt_uCapMaxExp1},
2095         {0x0F12,0xE848},        // #lt_uCapMaxExp1      : 133.3ms = 0x1045a  //edison : 10fps = 100ms=0xc350
2096         {0x0F12,0x0001},
2097         {0x002A,lt_uCapMaxExp2},
2098         {0x0F12,0x8488},        // #lt_uCapMaxExp2      : 250ms
2099         {0x0F12,0x0002},
2100         {0x002A,lt_uMaxAnGain1},
2101         {0x0F12,0x0280}, //0280         // #lt_uMaxAnGain1      : X 2.51¡§¡§
2102         {0x002A,lt_uMaxAnGain2},
2103         {0x0F12,0x0600}, //0500         // #lt_uMaxAnGain2      : X 6.01¡§¡§
2104         {0x002A,lt_uMaxDigGain},
2105         {0x0F12,0x0100}, //0200         // #lt_uMaxDigGain
2106         //{0x0F12  0007         // #ae_StatMode
2107
2108         //clk Settings
2109         {0x002A,0x01b8},   // input=24MHz
2110         {0x0F12,0x5dc0},   // #REG_TC_IPRM_InClockLSBs
2111         {0x002A,0x01ba},
2112         {0x0F12,0x0000},
2113         {0x002A,0x01c6},   // #REG_TC_IPRM_UseNPviClocks 1 PLL configurations
2114         {0x0F12,0x0002},
2115         {0x002A,0x01cc},   // 1st system CLK
2116         {0x0F12,0x0bb8}, //1964   //#REG_TC_IPRM_sysClocks[0]
2117         {0x0F12,0x0bb8},   //#REG_TC_IPRM_MinOutRate4KHz_0
2118         {0x0F12,0x0bb8},   //#REG_TC_IPRM_MaxOutRate4KHz_0
2119
2120         {0x0F12,0x1770},   //#REG_TC_IPRM_sysClocks[1]
2121         {0x0F12,0x1770}, //2ee0   //#REG_TC_IPRM_MinOutRate4KHz_1
2122         {0x0F12,0x1770}, //2ee0   //#REG_TC_IPRM_MaxOutRate4KHz_1
2123         {0x002A,0x01e0},   //#REG_TC_IPRM_InitParamsUpdated
2124         {0x0F12,0x0001},
2125         //p10
2126
2127
2128         //PREVIEW CONFIGURATION 0 (VGA, YUV, 6.5~12fps)
2129         {0x002A,0x0242},
2130         {0x0F12,0x0280}, //0500         //Width
2131         {0x0F12,0x01e0}, //0400   //Height
2132         {0x0F12,0x0005},   //Format, 5:YUV422
2133         {0x0F12,0x1770},   //MaxOut4KHzRate, 1770 = 24M
2134         {0x0F12,0x1770},   //MinOut4KHzRate, 1770 = 24M
2135         {0x0F12,0x0052},   //PVIMask, default = 42
2136         {0x0F12,0x0001},   //ClockInd, 0-2
2137         {0x0F12,0x0000},   //FrTimeType, 0:Dynamic, 1:Fix for not accuarte, 2:Fix for accuarte
2138         {0x0F12,0x0000},   //FrRateQualityType, 1:Binning enable, 2:Binning disable
2139         {0x0F12,0x0600}, //0535 //04E2   //MaxFrTime, 14d = 33.3ms(333-6500) //7.5FPS
2140         {0x0F12,0x0320}, //03E8 //04E2   //MinFrTime, 14d = 33.3ms(333-6500) //15 FPS
2141
2142         //=================================================================================================
2143         // Set Preview Config 1 --- For Night Mode     //  4~12fps
2144         //=================================================================================================
2145         {0x002A, REG_1TC_PCFG_usWidth},
2146         {0x0F12, 0x0280},   // #REG_0TC_PCFG_usWidth
2147         {0x002A, REG_1TC_PCFG_usHeight},
2148         {0x0F12, 0x01e0},   // #REG_0TC_PCFG_usHeight
2149         {0x002A, REG_1TC_PCFG_Format},
2150         {0x0F12, 0x0005},   // #REG_0TC_PCFG_Format  : YUV
2151         {0x002A, REG_1TC_PCFG_usMaxOut4KHzRate},
2152         {0x0F12, 0x1770},   // #REG_0TC_PCFG_usMaxOut4KHzRate
2153         {0x002A, REG_1TC_PCFG_usMinOut4KHzRate},
2154         {0x0F12, 0x1770},   // #REG_0TC_PCFG_usMinOut4KHzRate
2155         {0x002A, REG_1TC_PCFG_PVIMask},
2156         {0x0F12, 0x0052},   // #REG_0TC_PCFG_PVIMask (x2: PCLK rising  # x0: PCLK Falling)
2157         {0x002A, REG_1TC_PCFG_uClockInd},
2158         {0x0F12, 0x0001},    // #REG_0TC_PCFG_uClockInd
2159         {0x002A, REG_1TC_PCFG_usFrTimeType},
2160         {0x0F12, 0x0000},   // #REG_0TC_PCFG_usFrTimeType
2161         {0x002A, REG_1TC_PCFG_FrRateQualityType},
2162         {0x0F12, 0x0000},   // #REG_0TC_PCFG_FrRateQualityType
2163         {0x002A, REG_1TC_PCFG_usMaxFrTimeMsecMult10},
2164         {0x0F12, 0x0CE4},  //09C4 // 4FPS 029A  // #REG_0TC_PCFG_usMaxFrTimeMsecMult10 : 5fps
2165         {0x002A, REG_1TC_PCFG_usMinFrTimeMsecMult10},
2166         {0x0F12, 0x0320},  //  // #REG_0TC_PCFG_usMinFrTimeMsecMult10 : 10fps
2167         //WRITE 70000262 0003 // #REG_0TC_PCFG_uPrevMirror
2168         //WRITE 70000264 0003 // #REG_0TC_PCFG_uCaptureMirror
2169    /*lzg@rock-chips.com, FIH:image to be mirrored*/
2170 #if  CONFIG_SENSOR_NONE_FLIP_MIRROR
2171         {0x002A, 0x0262},
2172         {0x0F12, 0x0000},  
2173         {0x002A, 0x0264},
2174         {0x0F12, 0x0000}, 
2175 #elif CONFIG_SENSOR_MIRROR
2176         {0x002A, 0x0262},
2177         {0x0F12, 0x0001},  
2178         {0x002A, 0x0264},
2179         {0x0F12, 0x0001}, 
2180 #elif CONFIG_SENSOR_FLIPE
2181         {0x002A, 0x0262},
2182         {0x0F12, 0x0002},  
2183         {0x002A, 0x0264},
2184         {0x0F12, 0x0002}, 
2185 #elif CONFIG_SENSOR_NONE_FLIP_MIRROR
2186         {0x002A, 0x0262},
2187         {0x0F12, 0x0003},  
2188         {0x002A, 0x0264},
2189         {0x0F12, 0x0003}, 
2190 #endif
2191    //=================================================================================================
2192         // Set Preview Config 2 --- For Video record(normal)     // 12fps
2193         //=================================================================================================
2194         {0x002A,  REG_2TC_PCFG_usWidth},
2195         {0x0F12,  0x0280},  // #REG_0TC_PCFG_usWidth
2196         {0x002A,  REG_2TC_PCFG_usHeight},
2197         {0x0F12,  0x01e0},  // #REG_0TC_PCFG_usHeight
2198         {0x002A,  REG_2TC_PCFG_Format},
2199         {0x0F12,  0x0005},  // #REG_0TC_PCFG_Format  : YUV
2200         {0x002A,  REG_2TC_PCFG_usMaxOut4KHzRate},
2201         {0x0F12,  0x0BB8}, //1770  // #REG_0TC_PCFG_usMaxOut4KHzRate
2202         {0x002A,  REG_2TC_PCFG_usMinOut4KHzRate},
2203         {0x0F12,  0x0BB8}, //1770  // #REG_0TC_PCFG_usMinOut4KHzRate
2204         {0x002A,  REG_2TC_PCFG_PVIMask},
2205         {0x0F12,  0x0052},  // #REG_0TC_PCFG_PVIMask (x2: PCLK rising  # x0: PCLK Falling)
2206         {0x002A,  REG_2TC_PCFG_uClockInd},
2207         {0x0F12,  0x0001},   // #REG_0TC_PCFG_uClockInd
2208         {0x002A,  REG_2TC_PCFG_usFrTimeType},
2209         {0x0F12,  0x0002}, //0  // #REG_0TC_PCFG_usFrTimeType
2210         {0x002A,  REG_2TC_PCFG_FrRateQualityType},
2211         {0x0F12,  0x0000},  // #REG_0TC_PCFG_FrRateQualityType
2212         {0x002A,  REG_2TC_PCFG_usMaxFrTimeMsecMult10},
2213         {0x0F12,  0x0320}, //07D0 //029A  // #REG_0TC_PCFG_usMaxFrTimeMsecMult10 : 5fps
2214         {0x002A,  REG_2TC_PCFG_usMinFrTimeMsecMult10},
2215         {0x0F12,  0x0000},//0320 //03E8 // #REG_0TC_PCFG_usMinFrTimeMsecMult10 : 10fps
2216
2217
2218         //=================================================================================================
2219         // Set Preview Config 3 --- For Video Record(Night Mode)    //  12fps
2220         //=================================================================================================
2221         {0x002A, REG_3TC_PCFG_usWidth},
2222         {0x0F12, 0x0280},  // #REG_0TC_PCFG_usWidth
2223         {0x002A, REG_3TC_PCFG_usHeight},
2224         {0x0F12, 0x01e0},  // #REG_0TC_PCFG_usHeight
2225         {0x002A, REG_3TC_PCFG_Format},
2226         {0x0F12, 0x0005},  // #REG_0TC_PCFG_Format  : YUV
2227         {0x002A, REG_3TC_PCFG_usMaxOut4KHzRate},
2228         {0x0F12, 0x0BB8}, //1770  // #REG_0TC_PCFG_usMaxOut4KHzRate
2229         {0x002A, REG_3TC_PCFG_usMinOut4KHzRate},
2230         {0x0F12, 0x0BB8}, //1770  // #REG_0TC_PCFG_usMinOut4KHzRate
2231         {0x002A, REG_3TC_PCFG_PVIMask},
2232         {0x0F12, 0x0052},  // #REG_0TC_PCFG_PVIMask (x2: PCLK rising  # x0: PCLK Falling)
2233         {0x002A, REG_3TC_PCFG_uClockInd},
2234         {0x0F12, 0x0001},   // #REG_0TC_PCFG_uClockInd
2235         {0x002A, REG_3TC_PCFG_usFrTimeType},
2236         {0x0F12, 0x0002}, //0  // #REG_0TC_PCFG_usFrTimeType
2237         {0x002A, REG_3TC_PCFG_FrRateQualityType},
2238         {0x0F12, 0x0000},  // #REG_0TC_PCFG_FrRateQualityType
2239         {0x002A, REG_3TC_PCFG_usMaxFrTimeMsecMult10},
2240         {0x0F12, 0x03e8}, //029A  // #REG_0TC_PCFG_usMaxFrTimeMsecMult10 : 5fps
2241         {0x002A, REG_3TC_PCFG_usMinFrTimeMsecMult10},
2242         {0x0F12, 0x0000},//0320 //03E8 // #REG_0TC_PCFG_usMinFrTimeMsecMult10 : 10fps
2243
2244         //Preview
2245         {0x002A,0x021c},   //REG_TC_GP_ActivePrevConfig
2246         {0x0F12,0x0000},
2247         {0x002A,0x0220},   //REG_TC_GP_PrevOpenAfterChange
2248         {0x0F12,0x0001},
2249         {0x002A,0x01f8},   //REG_TC_GP_NewConfigSync
2250         {0x0F12,0x0001},
2251         {0x002A,0x021e},   //REG_TC_GP_PrevConfigChanged
2252         {0x0F12,0x0001},
2253         {0x002A,0x01f0},   //REG_TC_GP_EnablePreview
2254         {0x0F12,0x0001},
2255         {0x002A,0x01f2},   //REG_TC_GP_EnablePreviewChanged
2256         {0x0F12,0x0001},
2257
2258
2259          //=================================================================================================
2260          // Set Capture Config   // normal mode
2261          //=================================================================================================
2262          {0x002A,REG_0TC_CCFG_uCaptureMode},
2263          {0x0F12,0x0000},  // #REG_0TC_CCFG_uCaptureMode : AE/AWB off when caputre
2264          {0x002A,REG_0TC_CCFG_usWidth},
2265          {0x0F12,0x0500},
2266          {0x002A,REG_0TC_CCFG_usHeight},
2267          {0x0F12,0x0400},
2268          {0x002A,REG_0TC_CCFG_Format},
2269          {0x0F12,0x0005},  // #REG_0TC_CCFG_Format  : YUV
2270          {0x002A,REG_0TC_CCFG_usMaxOut4KHzRate},
2271          {0x0F12,0x0bb8}, //05DC //0BC8 //1964 //0BB8  // #REG_0TC_CCFG_usMaxOut4KHzRate
2272          {0x002A,REG_0TC_CCFG_usMinOut4KHzRate},
2273          {0x0F12,0x0bb8}, //05DC //0BA8 //1964 //0BB8   // #REG_0TC_CCFG_usMinOut4KHzRate
2274          {0x002A,REG_0TC_CCFG_PVIMask},
2275          {0x0F12,0x0052},  // #REG_0TC_CCFG_PVIMask (x2: PCLK rising  # x0: PCLK Falling)
2276          {0x002A,REG_0TC_CCFG_uClockInd},
2277          {0x0F12,0x0000},  // #REG_0TC_CCFG_uClockInd
2278          {0x002A,REG_0TC_CCFG_usFrTimeType},
2279          {0x0F12,0x0002}, //0  // #REG_0TC_CCFG_usFrTimeType
2280          {0x002A,REG_0TC_CCFG_FrRateQualityType},
2281          {0x0F12,0x0002},  // #REG_0TC_CCFG_FrRateQualityType
2282          {0x002A,REG_0TC_CCFG_usMaxFrTimeMsecMult10},
2283          {0x0F12,0x09C4}, //0x09C4  // #REG_0TC_CCFG_usMaxFrTimeMsecMult10 : 4fps
2284          {0x002A,REG_0TC_CCFG_usMinFrTimeMsecMult10},
2285          {0x0F12,0x0000}, //03e8  // #REG_0TC_CCFG_usMinFrTimeMsecMult10 :
2286         {SEQUENCE_END, 0x00}
2287 };
2288
2289
2290
2291
2292 static struct reginfo sensor_720p[]=
2293 {
2294         {SEQUENCE_END, 0x00}
2295 };
2296 #if 0
2297 static struct reginfo sensor_1080p[]=
2298 {
2299         {SEQUENCE_END, 0x00}
2300 };
2301 #endif
2302
2303 /* 2592X1944 QSXGA */
2304 static struct reginfo sensor_qsxga[] =
2305 {
2306         {SEQUENCE_END, 0x00}
2307 };
2308 /* 2048*1536 QXGA */
2309 static struct reginfo sensor_qxga[] =
2310 {
2311         {SEQUENCE_END, 0x00}
2312 };
2313
2314 /* 1600X1200 UXGA */
2315 static struct reginfo sensor_uxga[] =
2316 {
2317         {SEQUENCE_END, 0x00}
2318 };
2319
2320 /* 1280X1024 SXGA */
2321 static struct reginfo sensor_sxga[] =
2322 {
2323         {0x0028, 0x7000},
2324         //002A 03F8
2325         ////0F12 0079 // #REG_TC_DBG_AutoAlgEnBits, default : 007F0028 7000
2326         //002A 0496
2327         //0F12 0300 //0220 //0330       // #lt_uMaxAnGain2
2328         {0x002A, REG_TC_GP_ActiveCapConfig},
2329         {0x0F12, 0x0000},
2330         {0x002A, REG_TC_GP_NewConfigSync},
2331         {0x0F12, 0x0001},
2332         {0x002A, REG_TC_GP_CapConfigChanged},
2333         {0x0F12, 0x0001},
2334         {0x002A, REG_TC_GP_EnableCapture},
2335         {0x0F12, 0x0001},
2336         {0x002A, REG_TC_GP_EnableCaptureChanged},
2337         {0x0F12, 0x0001},
2338         {SEQUENCE_END, 0x00}
2339 };
2340 /*  1024X768 XGA */
2341 static struct reginfo sensor_xga[] =
2342 {
2343         {SEQUENCE_END, 0x00}
2344 };
2345 #if 0
2346 /* 800X600 SVGA*/
2347 static struct reginfo sensor_svga[] =
2348 {
2349     {SEQUENCE_END, 0x0},
2350 };
2351 #endif
2352 /* 640X480 VGA */
2353 static struct reginfo sensor_vga[] =
2354 {
2355         {0x0028, 0x7000},
2356         {0x002A, REG_TC_GP_ActivePrevConfig},
2357         {0x0F12, 0x0000},
2358
2359         {0x002A, REG_TC_GP_PrevOpenAfterChange},
2360         {0x0F12, 0x0001},
2361         {0x002A, REG_TC_GP_NewConfigSync},
2362         {0x0F12, 0x0001},
2363         {0x002A, REG_TC_GP_PrevConfigChanged},
2364         {0x0F12, 0x0001},
2365     {SEQUENCE_END, 0x0},
2366 };
2367
2368 /* 352X288 CIF */
2369 static struct reginfo sensor_cif[] =
2370 {
2371     {SEQUENCE_END, 0x0},
2372 };
2373
2374 /* 320*240 QVGA */
2375 static  struct reginfo sensor_qvga[] =
2376 {
2377     {SEQUENCE_END, 0x0},
2378 };
2379
2380 /* 176X144 QCIF*/
2381 static struct reginfo sensor_qcif[] =
2382 {
2383     {SEQUENCE_END, 0x0},
2384 };
2385 #endif
2386 #if 0
2387 /* 160X120 QQVGA*/
2388 static struct reginfo s5k6aa_qqvga[] =
2389 {
2390
2391     {0x300E, 0x34},
2392     {0x3011, 0x01},
2393     {0x3012, 0x10},
2394     {0x302a, 0x02},
2395     {0x302b, 0xE6},
2396     {0x306f, 0x14},
2397     {0x3362, 0x90},
2398
2399     {0x3070, 0x5d},
2400     {0x3072, 0x5d},
2401     {0x301c, 0x07},
2402     {0x301d, 0x07},
2403
2404     {0x3020, 0x01},
2405     {0x3021, 0x18},
2406     {0x3022, 0x00},
2407     {0x3023, 0x06},
2408     {0x3024, 0x06},
2409     {0x3025, 0x58},
2410     {0x3026, 0x02},
2411     {0x3027, 0x61},
2412     {0x3088, 0x00},
2413     {0x3089, 0xa0},
2414     {0x308a, 0x00},
2415     {0x308b, 0x78},
2416     {0x3316, 0x64},
2417     {0x3317, 0x25},
2418     {0x3318, 0x80},
2419     {0x3319, 0x08},
2420     {0x331a, 0x0a},
2421     {0x331b, 0x07},
2422     {0x331c, 0x80},
2423     {0x331d, 0x38},
2424     {0x3100, 0x00},
2425     {0x3302, 0x11},
2426
2427     {SEQUENCE_END, 0x0},
2428 };
2429
2430
2431
2432 static  struct reginfo s5k6aa_Sharpness_auto[] =
2433 {
2434     {SEQUENCE_END, 0x00},
2435 };
2436
2437 static  struct reginfo s5k6aa_Sharpness1[] =
2438 {
2439     {0x3306, 0x08},
2440     {0x3371, 0x00}
2441 };
2442
2443 static  struct reginfo s5k6aa_Sharpness2[][3] =
2444 {
2445     //Sharpness 2
2446     {0x3306, 0x08},
2447     {0x3371, 0x01},
2448 };
2449
2450 static  struct reginfo s5k6aa_Sharpness3[] =
2451 {
2452     //default
2453     {0x3306, 0x08},
2454     {0x332d, 0x02},
2455 };
2456 static  struct reginfo s5k6aa_Sharpness4[]=
2457 {
2458     //Sharpness 4
2459     {0x3306, 0x08},
2460     {0x332d, 0x03},
2461 };
2462
2463 static  struct reginfo s5k6aa_Sharpness5[] =
2464 {
2465     //Sharpness 5
2466     {0x3306, 0x08},
2467     {0x332d, 0x04},
2468 };
2469 #endif
2470
2471 static  struct reginfo sensor_ClrFmt_YUYV[]=
2472 {
2473     {SEQUENCE_END, 0x00}
2474 };
2475
2476 static  struct reginfo sensor_ClrFmt_UYVY[]=
2477 {
2478     {SEQUENCE_END, 0x00}
2479 };
2480
2481 #if CONFIG_SENSOR_WhiteBalance
2482 static  struct reginfo sensor_WhiteB_Auto[]=
2483 {
2484     {SEQUENCE_END, 0x00}
2485 };
2486 /* Cloudy Colour Temperature : 6500K - 8000K  */
2487 static  struct reginfo sensor_WhiteB_Cloudy[]=
2488 {
2489     {SEQUENCE_END, 0x00}
2490 };
2491 /* ClearDay Colour Temperature : 5000K - 6500K  */
2492 static  struct reginfo sensor_WhiteB_ClearDay[]=
2493 {
2494     {SEQUENCE_END, 0x00}
2495 };
2496 /* Office Colour Temperature : 3500K - 5000K  */
2497 static  struct reginfo sensor_WhiteB_TungstenLamp1[]=
2498 {
2499     {SEQUENCE_END, 0x00}
2500
2501 };
2502 /* Home Colour Temperature : 2500K - 3500K  */
2503 static  struct reginfo sensor_WhiteB_TungstenLamp2[]=
2504 {
2505     {SEQUENCE_END, 0x00}
2506 };
2507 static struct reginfo *sensor_WhiteBalanceSeqe[] = {sensor_WhiteB_Auto, sensor_WhiteB_TungstenLamp1,sensor_WhiteB_TungstenLamp2,
2508     sensor_WhiteB_ClearDay, sensor_WhiteB_Cloudy,NULL,
2509 };
2510 #endif
2511
2512 #if CONFIG_SENSOR_Brightness
2513 static  struct reginfo sensor_Brightness0[]=
2514 {
2515     {SEQUENCE_END, 0x00}
2516 };
2517
2518 static  struct reginfo sensor_Brightness1[]=
2519 {
2520     {SEQUENCE_END, 0x00}
2521 };
2522
2523 static  struct reginfo sensor_Brightness2[]=
2524 {
2525     {SEQUENCE_END, 0x00}
2526 };
2527
2528 static  struct reginfo sensor_Brightness3[]=
2529 {
2530     {SEQUENCE_END, 0x00}
2531 };
2532
2533 static  struct reginfo sensor_Brightness4[]=
2534 {
2535     {SEQUENCE_END, 0x00}
2536 };
2537
2538 static  struct reginfo sensor_Brightness5[]=
2539 {
2540     {SEQUENCE_END, 0x00}
2541 };
2542 static struct reginfo *sensor_BrightnessSeqe[] = {sensor_Brightness0, sensor_Brightness1, sensor_Brightness2, sensor_Brightness3,
2543     sensor_Brightness4, sensor_Brightness5,NULL,
2544 };
2545
2546 #endif
2547
2548 #if CONFIG_SENSOR_Effect
2549 static  struct reginfo sensor_Effect_Normal[] =
2550 {
2551     {SEQUENCE_END, 0x00}
2552 };
2553
2554 static  struct reginfo sensor_Effect_WandB[] =
2555 {
2556     {SEQUENCE_END, 0x00}
2557 };
2558
2559 static  struct reginfo sensor_Effect_Sepia[] =
2560 {
2561     {SEQUENCE_END, 0x00}
2562 };
2563
2564 static  struct reginfo sensor_Effect_Negative[] =
2565 {
2566     {SEQUENCE_END, 0x00}
2567 };
2568 static  struct reginfo sensor_Effect_Bluish[] =
2569 {
2570     {SEQUENCE_END, 0x00}
2571 };
2572
2573 static  struct reginfo sensor_Effect_Green[] =
2574 {
2575     {SEQUENCE_END, 0x00}
2576 };
2577 static struct reginfo *sensor_EffectSeqe[] = {sensor_Effect_Normal, sensor_Effect_WandB, sensor_Effect_Negative,sensor_Effect_Sepia,
2578     sensor_Effect_Bluish, sensor_Effect_Green,NULL,
2579 };
2580 #endif
2581 #if CONFIG_SENSOR_Exposure
2582 static  struct reginfo sensor_Exposure0[]=
2583 {
2584     {SEQUENCE_END, 0x00}
2585 };
2586
2587 static  struct reginfo sensor_Exposure1[]=
2588 {
2589     {SEQUENCE_END, 0x00}
2590 };
2591
2592 static  struct reginfo sensor_Exposure2[]=
2593 {
2594     {SEQUENCE_END, 0x00}
2595 };
2596
2597 static  struct reginfo sensor_Exposure3[]=
2598 {
2599     {SEQUENCE_END, 0x00}
2600 };
2601
2602 static  struct reginfo sensor_Exposure4[]=
2603 {
2604     {SEQUENCE_END, 0x00}
2605 };
2606
2607 static  struct reginfo sensor_Exposure5[]=
2608 {
2609     {SEQUENCE_END, 0x00}
2610 };
2611
2612 static  struct reginfo sensor_Exposure6[]=
2613 {
2614     {SEQUENCE_END, 0x00}
2615 };
2616
2617 static struct reginfo *sensor_ExposureSeqe[] = {sensor_Exposure0, sensor_Exposure1, sensor_Exposure2, sensor_Exposure3,
2618     sensor_Exposure4, sensor_Exposure5,sensor_Exposure6,NULL,
2619 };
2620 #endif
2621 #if CONFIG_SENSOR_Saturation
2622 static  struct reginfo sensor_Saturation0[]=
2623 {
2624     {SEQUENCE_END, 0x00}
2625 };
2626
2627 static  struct reginfo sensor_Saturation1[]=
2628 {
2629     {SEQUENCE_END, 0x00}
2630 };
2631
2632 static  struct reginfo sensor_Saturation2[]=
2633 {
2634     {SEQUENCE_END, 0x00}
2635 };
2636 static struct reginfo *sensor_SaturationSeqe[] = {sensor_Saturation0, sensor_Saturation1, sensor_Saturation2, NULL,};
2637
2638 #endif
2639 #if CONFIG_SENSOR_Contrast
2640 static  struct reginfo sensor_Contrast0[]=
2641 {
2642     {SEQUENCE_END, 0x00}
2643 };
2644
2645 static  struct reginfo sensor_Contrast1[]=
2646 {
2647     {SEQUENCE_END, 0x00}
2648 };
2649
2650 static  struct reginfo sensor_Contrast2[]=
2651 {
2652     {SEQUENCE_END, 0x00}
2653 };
2654
2655 static  struct reginfo sensor_Contrast3[]=
2656 {
2657     {SEQUENCE_END, 0x00}
2658 };
2659
2660 static  struct reginfo sensor_Contrast4[]=
2661 {
2662     {SEQUENCE_END, 0x00}
2663 };
2664
2665
2666 static  struct reginfo sensor_Contrast5[]=
2667 {
2668     {SEQUENCE_END, 0x00}
2669 };
2670
2671 static  struct reginfo sensor_Contrast6[]=
2672 {
2673     {SEQUENCE_END, 0x00}
2674 };
2675 static struct reginfo *sensor_ContrastSeqe[] = {sensor_Contrast0, sensor_Contrast1, sensor_Contrast2, sensor_Contrast3,
2676     sensor_Contrast4, sensor_Contrast5, sensor_Contrast6, NULL,
2677 };
2678
2679 #endif
2680 #if CONFIG_SENSOR_Mirror
2681 static  struct reginfo sensor_MirrorOn[]=
2682 {
2683     {SEQUENCE_END, 0x00}
2684 };
2685
2686 static  struct reginfo sensor_MirrorOff[]=
2687 {
2688     {SEQUENCE_END, 0x00}
2689 };
2690 static struct reginfo *sensor_MirrorSeqe[] = {sensor_MirrorOff, sensor_MirrorOn,NULL,};
2691 #endif
2692 #if CONFIG_SENSOR_Flip
2693 static  struct reginfo sensor_FlipOn[]=
2694 {
2695     {SEQUENCE_END, 0x00}
2696 };
2697
2698 static  struct reginfo sensor_FlipOff[]=
2699 {
2700     {SEQUENCE_END, 0x00}
2701 };
2702 static struct reginfo *sensor_FlipSeqe[] = {sensor_FlipOff, sensor_FlipOn,NULL,};
2703
2704 #endif
2705 #if CONFIG_SENSOR_Scene
2706 static  struct reginfo sensor_SceneAuto[] =
2707 {
2708     {SEQUENCE_END, 0x00}
2709 };
2710
2711 static  struct reginfo sensor_SceneNight[] =
2712 {
2713     {SEQUENCE_END, 0x00}
2714 };
2715 static struct reginfo *sensor_SceneSeqe[] = {sensor_SceneAuto, sensor_SceneNight,NULL,};
2716
2717 #endif
2718 #if CONFIG_SENSOR_DigitalZoom
2719 static struct reginfo sensor_Zoom0[] =
2720 {
2721     {SEQUENCE_END, 0x0},
2722 };
2723
2724 static struct reginfo sensor_Zoom1[] =
2725 {
2726      {SEQUENCE_END, 0x0},
2727 };
2728
2729 static struct reginfo sensor_Zoom2[] =
2730 {
2731     {SEQUENCE_END, 0x0},
2732 };
2733
2734
2735 static struct reginfo sensor_Zoom3[] =
2736 {
2737     {SEQUENCE_END, 0x0},
2738 };
2739 static struct reginfo *sensor_ZoomSeqe[] = {sensor_Zoom0, sensor_Zoom1, sensor_Zoom2, sensor_Zoom3, NULL,};
2740 #endif
2741 static struct v4l2_querymenu sensor_menus[] =
2742 {
2743         #if CONFIG_SENSOR_WhiteBalance
2744     { .id = V4L2_CID_DO_WHITE_BALANCE,  .index = 0,  .name = "auto",  .reserved = 0, }, {  .id = V4L2_CID_DO_WHITE_BALANCE,  .index = 1, .name = "incandescent",  .reserved = 0,},
2745     { .id = V4L2_CID_DO_WHITE_BALANCE,  .index = 2,  .name = "fluorescent", .reserved = 0,}, {  .id = V4L2_CID_DO_WHITE_BALANCE, .index = 3,  .name = "daylight", .reserved = 0,},
2746     { .id = V4L2_CID_DO_WHITE_BALANCE,  .index = 4,  .name = "cloudy-daylight", .reserved = 0,},
2747     #endif
2748
2749         #if CONFIG_SENSOR_Effect
2750     { .id = V4L2_CID_EFFECT,  .index = 0,  .name = "none",  .reserved = 0, }, {  .id = V4L2_CID_EFFECT,  .index = 1, .name = "mono",  .reserved = 0,},
2751     { .id = V4L2_CID_EFFECT,  .index = 2,  .name = "negative", .reserved = 0,}, {  .id = V4L2_CID_EFFECT, .index = 3,  .name = "sepia", .reserved = 0,},
2752     { .id = V4L2_CID_EFFECT,  .index = 4, .name = "posterize", .reserved = 0,} ,{ .id = V4L2_CID_EFFECT,  .index = 5,  .name = "aqua", .reserved = 0,},
2753     #endif
2754
2755         #if CONFIG_SENSOR_Scene
2756     { .id = V4L2_CID_SCENE,  .index = 0, .name = "auto", .reserved = 0,} ,{ .id = V4L2_CID_SCENE,  .index = 1,  .name = "night", .reserved = 0,},
2757     #endif
2758
2759         #if CONFIG_SENSOR_Flash
2760     { .id = V4L2_CID_FLASH,  .index = 0,  .name = "off",  .reserved = 0, }, {  .id = V4L2_CID_FLASH,  .index = 1, .name = "auto",  .reserved = 0,},
2761     { .id = V4L2_CID_FLASH,  .index = 2,  .name = "on", .reserved = 0,}, {  .id = V4L2_CID_FLASH, .index = 3,  .name = "torch", .reserved = 0,},
2762     #endif
2763 };
2764
2765 static  struct v4l2_queryctrl sensor_controls[] =
2766 {
2767         #if CONFIG_SENSOR_WhiteBalance
2768     {
2769         .id             = V4L2_CID_DO_WHITE_BALANCE,
2770         .type           = V4L2_CTRL_TYPE_MENU,
2771         .name           = "White Balance Control",
2772         .minimum        = 0,
2773         .maximum        = 4,
2774         .step           = 1,
2775         .default_value = 0,
2776     },
2777     #endif
2778
2779         #if CONFIG_SENSOR_Brightness
2780         {
2781         .id             = V4L2_CID_BRIGHTNESS,
2782         .type           = V4L2_CTRL_TYPE_INTEGER,
2783         .name           = "Brightness Control",
2784         .minimum        = -3,
2785         .maximum        = 2,
2786         .step           = 1,
2787         .default_value = 0,
2788     },
2789     #endif
2790
2791         #if CONFIG_SENSOR_Effect
2792         {
2793         .id             = V4L2_CID_EFFECT,
2794         .type           = V4L2_CTRL_TYPE_MENU,
2795         .name           = "Effect Control",
2796         .minimum        = 0,
2797         .maximum        = 5,
2798         .step           = 1,
2799         .default_value = 0,
2800     },
2801         #endif
2802
2803         #if CONFIG_SENSOR_Exposure
2804         {
2805         .id             = V4L2_CID_EXPOSURE,
2806         .type           = V4L2_CTRL_TYPE_INTEGER,
2807         .name           = "Exposure Control",
2808         .minimum        = 0,
2809         .maximum        = 6,
2810         .step           = 1,
2811         .default_value = 0,
2812     },
2813         #endif
2814
2815         #if CONFIG_SENSOR_Saturation
2816         {
2817         .id             = V4L2_CID_SATURATION,
2818         .type           = V4L2_CTRL_TYPE_INTEGER,
2819         .name           = "Saturation Control",
2820         .minimum        = 0,
2821         .maximum        = 2,
2822         .step           = 1,
2823         .default_value = 0,
2824     },
2825     #endif
2826
2827         #if CONFIG_SENSOR_Contrast
2828         {
2829         .id             = V4L2_CID_CONTRAST,
2830         .type           = V4L2_CTRL_TYPE_INTEGER,
2831         .name           = "Contrast Control",
2832         .minimum        = -3,
2833         .maximum        = 3,
2834         .step           = 1,
2835         .default_value = 0,
2836     },
2837         #endif
2838
2839         #if CONFIG_SENSOR_Mirror
2840         {
2841         .id             = V4L2_CID_HFLIP,
2842         .type           = V4L2_CTRL_TYPE_BOOLEAN,
2843         .name           = "Mirror Control",
2844         .minimum        = 0,
2845         .maximum        = 1,
2846         .step           = 1,
2847         .default_value = 1,
2848     },
2849     #endif
2850
2851         #if CONFIG_SENSOR_Flip
2852         {
2853         .id             = V4L2_CID_VFLIP,
2854         .type           = V4L2_CTRL_TYPE_BOOLEAN,
2855         .name           = "Flip Control",
2856         .minimum        = 0,
2857         .maximum        = 1,
2858         .step           = 1,
2859         .default_value = 1,
2860     },
2861     #endif
2862
2863         #if CONFIG_SENSOR_Scene
2864     {
2865         .id             = V4L2_CID_SCENE,
2866         .type           = V4L2_CTRL_TYPE_MENU,
2867         .name           = "Scene Control",
2868         .minimum        = 0,
2869         .maximum        = 1,
2870         .step           = 1,
2871         .default_value = 0,
2872     },
2873     #endif
2874
2875         #if CONFIG_SENSOR_DigitalZoom
2876     {
2877         .id             = V4L2_CID_ZOOM_RELATIVE,
2878         .type           = V4L2_CTRL_TYPE_INTEGER,
2879         .name           = "DigitalZoom Control",
2880         .minimum        = -1,
2881         .maximum        = 1,
2882         .step           = 1,
2883         .default_value = 0,
2884     }, {
2885         .id             = V4L2_CID_ZOOM_ABSOLUTE,
2886         .type           = V4L2_CTRL_TYPE_INTEGER,
2887         .name           = "DigitalZoom Control",
2888         .minimum        = 0,
2889         .maximum        = 3,
2890         .step           = 1,
2891         .default_value = 0,
2892     },
2893     #endif
2894
2895         #if CONFIG_SENSOR_Focus
2896         {
2897         .id             = V4L2_CID_FOCUS_RELATIVE,
2898         .type           = V4L2_CTRL_TYPE_INTEGER,
2899         .name           = "Focus Control",
2900         .minimum        = -1,
2901         .maximum        = 1,
2902         .step           = 1,
2903         .default_value = 0,
2904     }, {
2905         .id             = V4L2_CID_FOCUS_ABSOLUTE,
2906         .type           = V4L2_CTRL_TYPE_INTEGER,
2907         .name           = "Focus Control",
2908         .minimum        = 0,
2909         .maximum        = 255,
2910         .step           = 1,
2911         .default_value = 125,
2912     },
2913     #endif
2914
2915         #if CONFIG_SENSOR_Flash
2916         {
2917         .id             = V4L2_CID_FLASH,
2918         .type           = V4L2_CTRL_TYPE_MENU,
2919         .name           = "Flash Control",
2920         .minimum        = 0,
2921         .maximum        = 3,
2922         .step           = 1,
2923         .default_value = 0,
2924     },
2925         #endif
2926 };
2927
2928 static int sensor_probe(struct i2c_client *client, const struct i2c_device_id *did);
2929 static int sensor_video_probe(struct soc_camera_device *icd, struct i2c_client *client);
2930 static int sensor_g_control(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
2931 static int sensor_s_control(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
2932 static int sensor_g_ext_controls(struct v4l2_subdev *sd,  struct v4l2_ext_controls *ext_ctrl);
2933 static int sensor_s_ext_controls(struct v4l2_subdev *sd,  struct v4l2_ext_controls *ext_ctrl);
2934 static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg);
2935 static int sensor_resume(struct soc_camera_device *icd);
2936 static int sensor_set_bus_param(struct soc_camera_device *icd,unsigned long flags);
2937 static unsigned long sensor_query_bus_param(struct soc_camera_device *icd);
2938 //static int sensor_set_effect(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value);
2939 //static int sensor_set_whiteBalance(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value);
2940 static int sensor_deactivate(struct i2c_client *client);
2941
2942 static struct soc_camera_ops sensor_ops =
2943 {
2944     .suspend                     = sensor_suspend,
2945     .resume                       = sensor_resume,
2946     .set_bus_param              = sensor_set_bus_param,
2947     .query_bus_param    = sensor_query_bus_param,
2948     .controls           = sensor_controls,
2949     .menus                         = sensor_menus,
2950     .num_controls               = ARRAY_SIZE(sensor_controls),
2951     .num_menus          = ARRAY_SIZE(sensor_menus),
2952 };
2953
2954
2955 /* only one fixed colorspace per pixelcode */
2956 struct sensor_datafmt {
2957         enum v4l2_mbus_pixelcode code;
2958         enum v4l2_colorspace colorspace;
2959 };
2960
2961 /* Find a data format by a pixel code in an array */
2962 static const struct sensor_datafmt *sensor_find_datafmt(
2963         enum v4l2_mbus_pixelcode code, const struct sensor_datafmt *fmt,
2964         int n)
2965 {
2966         int i;
2967         for (i = 0; i < n; i++)
2968                 if (fmt[i].code == code)
2969                         return fmt + i;
2970
2971         return NULL;
2972 }
2973
2974 static const struct sensor_datafmt sensor_colour_fmts[] = {
2975     {V4L2_MBUS_FMT_UYVY8_2X8, V4L2_COLORSPACE_JPEG}
2976 };
2977 enum sensor_work_state
2978 {
2979         sensor_work_ready = 0,
2980         sensor_working,
2981 };
2982 struct sensor_work
2983 {
2984         struct i2c_client *client;
2985         struct delayed_work dwork;
2986         enum sensor_work_state state;
2987 };
2988
2989 typedef struct sensor_info_priv_s
2990 {
2991     int whiteBalance;
2992     int brightness;
2993     int contrast;
2994     int saturation;
2995     int effect;
2996     int scene;
2997     int digitalzoom;
2998     int focus;
2999         int auto_focus;
3000         int affm_reinit;
3001     int flash;
3002     int exposure;
3003     unsigned char mirror;                                        /* HFLIP */
3004     unsigned char flip;                                          /* VFLIP */
3005         bool snap2preview;
3006         bool video2preview;
3007         int capture_w;
3008         int capture_h;
3009         int preview_w;
3010         int preview_h;
3011     struct reginfo *winseqe_cur_addr;
3012         struct sensor_datafmt fmt;
3013         unsigned int enable;
3014         unsigned int funmodule_state;
3015 } sensor_info_priv_t;
3016
3017
3018
3019 struct sensor_parameter
3020 {
3021         unsigned short int preview_maxlines;
3022         unsigned short int preview_exposure;
3023         unsigned short int preview_line_width;
3024         unsigned short int preview_gain;
3025
3026         unsigned short int capture_framerate;
3027         unsigned short int preview_framerate;
3028 };
3029
3030 struct sensor
3031 {
3032     struct v4l2_subdev subdev;
3033     struct i2c_client *client;
3034     sensor_info_priv_t info_priv;
3035         struct sensor_parameter parameter;
3036         struct workqueue_struct *sensor_wq;
3037         struct sensor_work sensor_wk;
3038         struct mutex wq_lock;
3039     int model;  /* V4L2_IDENT_OV* codes from v4l2-chip-ident.h */
3040 #if CONFIG_SENSOR_I2C_NOSCHED
3041         atomic_t tasklock_cnt;
3042 #endif
3043         struct rk29camera_platform_data *sensor_io_request;
3044     struct rk29camera_gpio_res *sensor_gpio_res;
3045 };
3046
3047 static struct sensor* to_sensor(const struct i2c_client *client)
3048 {
3049     return container_of(i2c_get_clientdata(client), struct sensor, subdev);
3050 }
3051
3052 static int sensor_task_lock(struct i2c_client *client, int lock)
3053 {
3054 #if CONFIG_SENSOR_I2C_NOSCHED
3055         int cnt = 3;
3056     struct sensor *sensor = to_sensor(client);
3057
3058         if (lock) {
3059                 if (atomic_read(&sensor->tasklock_cnt) == 0) {
3060                         while ((atomic_read(&client->adapter->bus_lock.count) < 1) && (cnt>0)) {
3061                                 SENSOR_TR("\n %s will obtain i2c in atomic, but i2c bus is locked! Wait...\n",SENSOR_NAME_STRING());
3062                                 msleep(35);
3063                                 cnt--;
3064                         }
3065                         if ((atomic_read(&client->adapter->bus_lock.count) < 1) && (cnt<=0)) {
3066                                 SENSOR_TR("\n %s obtain i2c fail in atomic!!\n",SENSOR_NAME_STRING());
3067                                 goto sensor_task_lock_err;
3068                         }
3069                         preempt_disable();
3070                 }
3071
3072                 atomic_add(1, &sensor->tasklock_cnt);
3073         } else {
3074                 if (atomic_read(&sensor->tasklock_cnt) > 0) {
3075                         atomic_sub(1, &sensor->tasklock_cnt);
3076
3077                         if (atomic_read(&sensor->tasklock_cnt) == 0)
3078                                 preempt_enable();
3079                 }
3080         }
3081         return 0;
3082 sensor_task_lock_err:
3083         return -1;
3084 #else
3085     return 0;
3086 #endif
3087
3088 }
3089
3090 /* sensor register write */
3091 static int sensor_write(struct i2c_client *client, u16 reg, u16 val)
3092 {
3093     int err=0,cnt;
3094     u8 buf[4];
3095     struct i2c_msg msg[1];
3096
3097         switch (reg)
3098         {
3099                 case SEQUENCE_WAIT_MS:
3100                 {
3101                         msleep(val);
3102                         break;
3103                 }
3104
3105                 case SEQUENCE_WAIT_US:
3106                 {
3107                         udelay(val);
3108                         break;
3109                 }
3110
3111                 case SEQUENCE_PROPERTY:
3112                 {
3113                         break;
3114                 }
3115                 default:
3116                 {
3117                     buf[0] = reg >> 8;
3118                     buf[1] = reg & 0xFF;
3119                     buf[2] = val >> 8;
3120                         buf[3] = val & 0xFF;
3121
3122                     msg->addr = client->addr;
3123                     msg->flags = client->flags;
3124                     msg->buf = buf;
3125                     msg->len = sizeof(buf);
3126                     msg->scl_rate = CONFIG_SENSOR_I2C_SPEED;         /* ddl@rock-chips.com : 100kHz */
3127                     msg->read_type = 0;               /* fpga i2c:0==I2C_NORMAL : direct use number not enum for don't want include spi_fpga.h */
3128
3129                     cnt = 3;
3130                     err = -EAGAIN;
3131
3132                     while ((cnt-- > 0) && (err < 0)) {                       /* ddl@rock-chips.com :  Transfer again if transent is failed   */
3133                         err = i2c_transfer(client->adapter, msg, 1);
3134
3135                         if (err >= 0) {
3136                             return 0;
3137                         } else {
3138                             SENSOR_TR("\n %s write reg(0x%x, val:0x%x) failed, try to write again!\n",SENSOR_NAME_STRING(),reg, val);
3139                             udelay(10);
3140                         }
3141                     }
3142                 }
3143         }
3144     return err;
3145 }
3146 #if 0
3147 /* sensor register read */
3148 static int sensor_read(struct i2c_client *client, u16 reg, u16 *val)
3149 {
3150         u8 buf[2];
3151         struct i2c_msg msg[2];
3152         int err = 0;
3153
3154         buf[0] = (u8)reg >> 8;
3155         buf[1] = (u8)reg & 0xFF;
3156
3157         msg[0].addr = client->addr;
3158         msg[0].flags = client->flags;
3159         msg[0].buf = buf;
3160         msg[0].len = sizeof(buf);
3161         msg[0].scl_rate = CONFIG_SENSOR_I2C_SPEED;       /* ddl@rock-chips.com : 100kHz */
3162         msg[0].read_type = 2;   /* fpga i2c:0==I2C_NO_STOP : direct use number not enum for don't want include spi_fpga.h */
3163
3164         msg[1].addr = client->addr;
3165         msg[1].flags = client->flags|I2C_M_RD;
3166         msg[1].buf = buf;
3167         msg[1].len = sizeof(buf);
3168         msg[1].scl_rate = CONFIG_SENSOR_I2C_SPEED;                       /* ddl@rock-chips.com : 100kHz */
3169         msg[1].read_type = 2;                             /* fpga i2c:0==I2C_NO_STOP : direct use number not enum for don't want include spi_fpga.h */
3170
3171         err = i2c_transfer(client->adapter, msg, 2);
3172
3173         if(err >= 0) {
3174                 *val = (buf[0] << 8)|(buf[1] & 0xFF);
3175                 SENSOR_DG("%s read reg(0x%x val:0x%x) success\n",SENSOR_NAME_STRING(),reg,*val);
3176                 return 0;
3177         } else {
3178                 SENSOR_TR("%s read reg(0x%x) failed!",SENSOR_NAME_STRING(),reg);
3179         }
3180
3181         return err;
3182 }
3183 #endif
3184 /* write a array of registers  */
3185 static int sensor_write_array(struct i2c_client *client, struct reginfo *regarray)
3186 {
3187     int err = 0, cnt;
3188     int i = 0;
3189 #if CONFIG_SENSOR_I2C_RDWRCHK
3190         char valchk;
3191 #endif
3192
3193         cnt = 0;
3194         if (sensor_task_lock(client, 1) < 0)
3195                 goto sensor_write_array_end;
3196     while (regarray[i].reg != SEQUENCE_END)
3197     {
3198
3199         err = sensor_write(client, regarray[i].reg, regarray[i].val);
3200         if (err < 0)
3201         {
3202             if (cnt-- > 0) {
3203                             SENSOR_TR("%s..write failed current reg:0x%x, Write array again !\n", SENSOR_NAME_STRING(),regarray[i].reg);
3204                                 i = 0;
3205                                 continue;
3206             } else {
3207                 SENSOR_TR("%s..write array failed!!!\n", SENSOR_NAME_STRING());
3208                 err = -EPERM;
3209                                 goto sensor_write_array_end;
3210             }
3211         } else {
3212         #if CONFIG_SENSOR_I2C_RDWRCHK
3213                         sensor_read(client, regarray[i].reg, &valchk);
3214                         if (valchk != regarray[i].val)
3215                                 SENSOR_TR("%s Reg:0x%x write(0x%x, 0x%x) fail\n",SENSOR_NAME_STRING(), regarray[i].reg, regarray[i].val, valchk);
3216                 #endif
3217         }
3218
3219         i++;
3220     }
3221
3222 sensor_write_array_end:
3223         sensor_task_lock(client,0);
3224     return err;
3225 }
3226
3227 #if CONFIG_SENSOR_I2C_RDWRCHK
3228 static int sensor_readchk_array(struct i2c_client *client, struct reginfo *regarray)
3229 {
3230     int cnt;
3231     int i = 0;
3232         char valchk;
3233
3234         cnt = 0;
3235         valchk = 0;
3236     while (regarray[i].reg != SEQUENCE_END)
3237     {
3238                 sensor_read(client, regarray[i].reg, &valchk);
3239                 if (valchk != regarray[i].val)
3240                         SENSOR_TR("%s Reg:0x%x read(0x%x, 0x%x) error\n",SENSOR_NAME_STRING(), regarray[i].reg, regarray[i].val, valchk);
3241
3242         i++;
3243     }
3244     return 0;
3245 }
3246 #endif
3247 #if CONFIG_SENSOR_Focus
3248
3249 static int sensor_af_single(struct i2c_client *client)
3250 {
3251         int ret = 0;
3252
3253
3254 sensor_af_single_end:
3255         return ret;
3256 }
3257
3258 static int sensor_af_const(struct i2c_client *client)
3259 {
3260         int ret = 0;
3261
3262 sensor_af_const_end:
3263         return ret;
3264 }
3265
3266 static int sensor_af_zoneupdate(struct i2c_client *client)
3267 {
3268         int ret = 0;
3269
3270 sensor_af_zoneupdate_end:
3271         return ret;
3272 }
3273
3274 static int sensor_af_init(struct i2c_client *client)
3275 {
3276         int ret = 0;
3277
3278         return ret;
3279 }
3280 #endif
3281
3282 static int sensor_ioctrl(struct soc_camera_device *icd,enum rk29sensor_power_cmd cmd, int on)
3283 {
3284         struct soc_camera_link *icl = to_soc_camera_link(icd);
3285         struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3286     struct sensor *sensor = to_sensor(client);
3287         int ret = 0;
3288
3289         switch (cmd)
3290         {
3291                 case Sensor_Reset:
3292                 {
3293                         if (sensor->sensor_io_request && sensor->sensor_io_request->sensor_ioctrl) {
3294                                 sensor->sensor_io_request->sensor_ioctrl(icd->pdev,Cam_Reset, on);
3295                         }
3296                         break;
3297                 }
3298                 case Sensor_PowerDown:
3299                 {
3300                         if (icl->powerdown) {
3301                                 ret = icl->powerdown(icd->pdev, on);
3302                                 if (ret == RK29_CAM_IO_SUCCESS) {
3303                                         if (on == 0) {
3304                                                 mdelay(2);
3305                                                 if (icl->reset)
3306                                                         icl->reset(icd->pdev);
3307                                         }
3308                                 } else if (ret == RK29_CAM_EIO_REQUESTFAIL) {
3309                                         ret = -ENODEV;
3310                                         goto sensor_power_end;
3311                                 }
3312                         }
3313                         break;
3314                 }
3315                 case Sensor_Flash:
3316                 {
3317                         if (sensor->sensor_io_request && sensor->sensor_io_request->sensor_ioctrl) {
3318                                 sensor->sensor_io_request->sensor_ioctrl(icd->pdev,Cam_Flash, on);
3319                 if(on){
3320                     //flash off after 2 secs
3321                         hrtimer_cancel(&(flash_off_timer.timer));
3322                         hrtimer_start(&(flash_off_timer.timer),ktime_set(0, 800*1000*1000),HRTIMER_MODE_REL);
3323                     }
3324                         }
3325                         break;
3326                 }
3327                 default:
3328                 {
3329                         SENSOR_TR("%s cmd(0x%x) is unknown!",SENSOR_NAME_STRING(),cmd);
3330                         break;
3331                 }
3332         }
3333
3334 sensor_power_end:
3335         return ret;
3336 }
3337 #if CONFIG_SENSOR_Flash
3338 static enum hrtimer_restart flash_off_func(struct hrtimer *timer){
3339         struct flash_timer *fps_timer = container_of(timer, struct flash_timer, timer);
3340     sensor_ioctrl(fps_timer->icd,Sensor_Flash,0);
3341         SENSOR_DG("%s %s !!!!!!",SENSOR_NAME_STRING(),__FUNCTION__);
3342     return 0;
3343     
3344 }
3345 #endif
3346 static int sensor_init(struct v4l2_subdev *sd, u32 val)
3347 {
3348     struct i2c_client *client = v4l2_get_subdevdata(sd);
3349     struct soc_camera_device *icd = client->dev.platform_data;
3350     struct sensor *sensor = to_sensor(client);
3351         const struct v4l2_queryctrl *qctrl;
3352     const struct sensor_datafmt *fmt;
3353     int ret;
3354     u16 pid = 0;
3355
3356     SENSOR_DG("\n%s..%s.. \n",SENSOR_NAME_STRING(),__FUNCTION__);
3357
3358         sensor_ioctrl(icd,Sensor_Reset, 1);
3359         if (sensor_ioctrl(icd, Sensor_PowerDown, 0) < 0) {
3360                 ret = -ENODEV;
3361                 goto sensor_INIT_ERR;
3362         }
3363
3364         udelay(50);
3365         sensor_ioctrl(icd,Sensor_Reset, 0);
3366         mdelay(1);
3367     /* soft reset */
3368         if (sensor_task_lock(client,1)<0)
3369                 goto sensor_INIT_ERR;
3370
3371 #if (SENSOR_RESET_REG != SEQUENCE_END)
3372     ret = sensor_write(client, SENSOR_RESET_REG, SENSOR_RESET_VAL);
3373     if (ret != 0) {
3374         SENSOR_TR("%s soft reset sensor failed\n",SENSOR_NAME_STRING());
3375         ret = -ENODEV;
3376                 goto sensor_INIT_ERR;
3377     }
3378
3379     mdelay(5);  //delay 5 microseconds
3380 #endif
3381
3382         /* check if it is an sensor sensor */
3383 #if (SENSOR_ID_REG != SEQUENCE_END)
3384     ret = sensor_read(client, SENSOR_ID_REG, &pid);
3385     if (ret != 0) {
3386         SENSOR_TR("read chip id failed\n");
3387         ret = -ENODEV;
3388         goto sensor_INIT_ERR;
3389     }
3390
3391     SENSOR_DG("\n %s  pid = 0x%x \n", SENSOR_NAME_STRING(), pid);
3392 #else
3393         pid = SENSOR_ID;
3394 #endif
3395     if (pid == SENSOR_ID) {
3396         sensor->model = SENSOR_V4L2_IDENT;
3397     } else {
3398         SENSOR_TR("error: %s mismatched   pid = 0x%x\n", SENSOR_NAME_STRING(), pid);
3399         ret = -ENODEV;
3400         goto sensor_INIT_ERR;
3401     }
3402
3403     ret = sensor_write_array(client, sensor_init_data);
3404     if (ret != 0)
3405     {
3406         SENSOR_TR("error: %s initial failed\n",SENSOR_NAME_STRING());
3407         goto sensor_INIT_ERR;
3408     }
3409         sensor_task_lock(client,0);
3410     sensor->info_priv.winseqe_cur_addr  = SENSOR_INIT_WINSEQADR;
3411         fmt = sensor_find_datafmt(SENSOR_INIT_PIXFMT,sensor_colour_fmts, ARRAY_SIZE(sensor_colour_fmts));
3412     if (!fmt) {
3413         SENSOR_TR("error: %s initial array colour fmts is not support!!",SENSOR_NAME_STRING());
3414         ret = -EINVAL;
3415         goto sensor_INIT_ERR;
3416     }
3417         sensor->info_priv.fmt = *fmt;
3418
3419     /* sensor sensor information for initialization  */
3420         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_DO_WHITE_BALANCE);
3421         if (qctrl)
3422         sensor->info_priv.whiteBalance = qctrl->default_value;
3423         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_BRIGHTNESS);
3424         if (qctrl)
3425         sensor->info_priv.brightness = qctrl->default_value;
3426         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_EFFECT);
3427         if (qctrl)
3428         sensor->info_priv.effect = qctrl->default_value;
3429         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_EXPOSURE);
3430         if (qctrl)
3431         sensor->info_priv.exposure = qctrl->default_value;
3432
3433         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_SATURATION);
3434         if (qctrl)
3435         sensor->info_priv.saturation = qctrl->default_value;
3436         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_CONTRAST);
3437         if (qctrl)
3438         sensor->info_priv.contrast = qctrl->default_value;
3439         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_HFLIP);
3440         if (qctrl)
3441         sensor->info_priv.mirror = qctrl->default_value;
3442         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_VFLIP);
3443         if (qctrl)
3444         sensor->info_priv.flip = qctrl->default_value;
3445         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_SCENE);
3446         if (qctrl)
3447         sensor->info_priv.scene = qctrl->default_value;
3448         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_ZOOM_ABSOLUTE);
3449         if (qctrl)
3450         sensor->info_priv.digitalzoom = qctrl->default_value;
3451
3452     /* ddl@rock-chips.com : if sensor support auto focus and flash, programer must run focus and flash code  */
3453         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_FOCUS_ABSOLUTE);
3454         if (qctrl)
3455         sensor->info_priv.focus = qctrl->default_value;
3456
3457         #if CONFIG_SENSOR_Flash
3458         qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_FLASH);
3459         if (qctrl)
3460         sensor->info_priv.flash = qctrl->default_value;
3461
3462     flash_off_timer.icd = icd;
3463         flash_off_timer.timer.function = flash_off_func;
3464
3465     #endif
3466     SENSOR_DG("\n%s..%s.. icd->width = %d.. icd->height %d\n",SENSOR_NAME_STRING(),((val == 0)?__FUNCTION__:"sensor_reinit"),icd->user_width,icd->user_height);
3467     sensor->info_priv.funmodule_state |= SENSOR_INIT_IS_OK;
3468     return 0;
3469 sensor_INIT_ERR:
3470     sensor->info_priv.funmodule_state |= SENSOR_INIT_IS_OK;
3471         sensor_task_lock(client,0);
3472         sensor_deactivate(client);
3473     return ret;
3474 }
3475
3476 static int sensor_deactivate(struct i2c_client *client)
3477 {
3478         struct soc_camera_device *icd = client->dev.platform_data;
3479     struct sensor *sensor = to_sensor(client);
3480
3481         SENSOR_DG("\n%s..%s.. Enter\n",SENSOR_NAME_STRING(),__FUNCTION__);
3482
3483         /* ddl@rock-chips.com : all sensor output pin must change to input for other sensor */
3484         //sensor_task_lock(client, 1);
3485         sensor_ioctrl(icd, Sensor_PowerDown, 1);
3486     msleep(100); 
3487
3488         /* ddl@rock-chips.com : sensor config init width , because next open sensor quickly(soc_camera_open -> Try to configure with default parameters) */
3489         icd->user_width = SENSOR_INIT_WIDTH;
3490     icd->user_height = SENSOR_INIT_HEIGHT;
3491     sensor->info_priv.funmodule_state &= ~SENSOR_INIT_IS_OK;
3492
3493         return 0;
3494 }
3495
3496 static  struct reginfo sensor_suspend_sequence[]=
3497 {
3498         {0x0028, 0x7000},
3499         {0x002A, setot_usForceClocksSettings},
3500         {0x0F12, 0x001E},
3501         {0x002A, setot_usConfigClocksSettings},
3502         {0x0F12, 0x001E},
3503         {0x002A, REG_TC_GP_EnablePreview},
3504         {0x0F12, 0x0000},
3505         {0x002A, REG_TC_GP_EnablePreviewChanged},
3506         {0x0F12, 0x0001},
3507         {SEQUENCE_WAIT_MS, 100},
3508         {0x0028, 0xD000},
3509         {0x002A, 0xB0B0},
3510         {0x0F12, 0x0001},
3511         {SEQUENCE_WAIT_MS, 100},
3512         {0x002A, 0xB0B4},
3513         {0x0F12, 0x0000},
3514         {0x002A, 0xB0A0},
3515         {0x0F12, 0x0031},
3516         {0x002A, 0xB0A0},
3517         {0x0F12, 0x0010},
3518         {0x002A, 0xB0A0},
3519         {0x0F12, 0x0000},
3520         {0x0028, 0x7000},
3521         {0x002A, REG_TC_GP_SleepMode},
3522         {0x0F12, 0x0001},
3523         {0x002A, REG_TC_GP_SleepModeChanged},
3524         {0x0F12, 0x0001},
3525
3526     {SEQUENCE_END,0x00}
3527 };
3528
3529 static struct reginfo sensor_resume_sequence[]=
3530 {
3531         {0x0028, 0x7000},
3532         {0x002A, REG_TC_GP_SleepMode},
3533         {0x0F12, 0x0000},
3534         {0x002A, REG_TC_GP_SleepModeChanged},
3535         {0x0F12, 0x0001},
3536         {0x0028, 0xD000},
3537         {0x002A, 0x1000},
3538         {0x0F12, 0x0001},
3539         {0x002A, 0x003A},
3540         {0x0F12, 0x0000},
3541         {SEQUENCE_WAIT_MS, 200},
3542         {0x002A, 0xB0B0},
3543         {0x0F12, 0x0000},
3544         {0x002A, 0xB0A0},
3545         {0x0F12, 0x003B},
3546         {0x002A, 0xB0B4},
3547         {0x0F12, 0x0800},
3548         {SEQUENCE_WAIT_MS, 10},
3549         {0x0028, 0x7000},
3550         {0x002A, REG_TC_GP_EnablePreview},
3551         {0x0F12, 0x0001},
3552         {0x002A, REG_TC_GP_EnablePreviewChanged},
3553         {0x0F12, 0x0001},
3554
3555     {SEQUENCE_END,0x00}
3556 };
3557 static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg)
3558 {
3559     int ret;
3560     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3561
3562     if (pm_msg.event == PM_EVENT_SUSPEND) {
3563         SENSOR_DG("\n %s Enter Suspend.. \n", SENSOR_NAME_STRING());
3564         ret = sensor_write_array(client, sensor_suspend_sequence) ;
3565         if (ret != 0) {
3566             SENSOR_TR("\n %s..%s WriteReg Fail.. \n", SENSOR_NAME_STRING(),__FUNCTION__);
3567             return ret;
3568         } else {
3569                 mdelay(100);
3570             ret = sensor_ioctrl(icd, Sensor_PowerDown, 1);
3571             if (ret < 0) {
3572                             SENSOR_TR("\n %s suspend fail for turn on power!\n", SENSOR_NAME_STRING());
3573                 return -EINVAL;
3574             }
3575         }
3576     } else {
3577         SENSOR_TR("\n %s cann't suppout Suspend..\n",SENSOR_NAME_STRING());
3578         return -EINVAL;
3579     }
3580
3581     return 0;
3582 }
3583
3584 static int sensor_resume(struct soc_camera_device *icd)
3585 {
3586         int ret;
3587         struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3588
3589     ret = sensor_ioctrl(icd, Sensor_PowerDown, 0);
3590     if (ret < 0) {
3591                 SENSOR_TR("\n %s resume fail for turn on power!\n", SENSOR_NAME_STRING());
3592         return -EINVAL;
3593     } else {
3594         udelay(5);
3595                 ret = sensor_write_array(client, sensor_resume_sequence) ;
3596             if (ret != 0) {
3597                 SENSOR_TR("\n %s..%s WriteReg Fail.. \n", SENSOR_NAME_STRING(),__FUNCTION__);
3598                         return -EINVAL;
3599             }
3600     }
3601
3602         SENSOR_DG("\n %s Enter Resume.. \n", SENSOR_NAME_STRING());
3603
3604         return 0;
3605 }
3606
3607 static int sensor_set_bus_param(struct soc_camera_device *icd,
3608                                 unsigned long flags)
3609 {
3610     return 0;
3611 }
3612
3613 static unsigned long sensor_query_bus_param(struct soc_camera_device *icd)
3614 {
3615     struct soc_camera_link *icl = to_soc_camera_link(icd);
3616     unsigned long flags = SENSOR_BUS_PARAM;
3617
3618     return soc_camera_apply_sensor_flags(icl, flags);
3619 }
3620
3621 static int sensor_g_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
3622 {
3623     struct i2c_client *client = v4l2_get_subdevdata(sd);
3624     struct soc_camera_device *icd = client->dev.platform_data;
3625     struct sensor *sensor = to_sensor(client);
3626
3627     mf->width   = icd->user_width;
3628         mf->height      = icd->user_height;
3629         mf->code        = sensor->info_priv.fmt.code;
3630         mf->colorspace  = sensor->info_priv.fmt.colorspace;
3631         mf->field       = V4L2_FIELD_NONE;
3632
3633     return 0;
3634 }
3635 #if 0
3636 static bool sensor_fmt_capturechk(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
3637 {
3638     bool ret = false;
3639
3640         if ((mf->width == 1024) && (mf->height == 768)) {
3641                 ret = true;
3642         } else if ((mf->width == 1280) && (mf->height == 1024)) {
3643                 ret = true;
3644         } else if ((mf->width == 1600) && (mf->height == 1200)) {
3645                 ret = true;
3646         } else if ((mf->width == 2048) && (mf->height == 1536)) {
3647                 ret = true;
3648         } else if ((mf->width == 2592) && (mf->height == 1944)) {
3649                 ret = true;
3650         }
3651
3652         if (ret == true)
3653                 SENSOR_DG("%s %dx%d is capture format\n", __FUNCTION__, mf->width, mf->height);
3654         return ret;
3655 }
3656
3657 static bool sensor_fmt_videochk(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
3658 {
3659     bool ret = false;
3660
3661         if ((mf->width == 1280) && (mf->height == 720)) {
3662                 ret = true;
3663         } else if ((mf->width == 1920) && (mf->height == 1080)) {
3664                 ret = true;
3665         }
3666
3667         if (ret == true)
3668                 SENSOR_DG("%s %dx%d is video format\n", __FUNCTION__, mf->width, mf->height);
3669         return ret;
3670 }
3671 #endif
3672 static struct reginfo* sensor_fmt_catch(int set_w, int set_h, int *ret_w, int *ret_h)
3673 {
3674         struct reginfo *winseqe_set_addr = NULL;
3675
3676         if (((set_w <= 176) && (set_h <= 144)) && (sensor_qcif[0].reg!=SEQUENCE_END)) {
3677                 winseqe_set_addr = sensor_qcif;
3678         *ret_w = 176;
3679         *ret_h = 144;
3680         } else if (((set_w <= 320) && (set_h <= 240)) && (sensor_qvga[0].reg!=SEQUENCE_END)) {
3681         winseqe_set_addr = sensor_qvga;
3682         *ret_w = 320;
3683         *ret_h = 240;
3684         } else if (((set_w <= 352) && (set_h<= 288)) && (sensor_cif[0].reg!=SEQUENCE_END)) {
3685         winseqe_set_addr = sensor_cif;
3686         *ret_w = 352;
3687         *ret_h = 288;
3688     } else if (((set_w <= 640) && (set_h <= 480)) && (sensor_vga[0].reg!=SEQUENCE_END)) {
3689         winseqe_set_addr = sensor_vga;
3690         *ret_w = 640;
3691         *ret_h = 480;
3692     }  
3693 #if CONFIG_SENSOR_FOR_CTS
3694    /**lzg@rockchip.com: forbid to preview with resolution 1280*1024*/
3695     else if (((set_w <= 800) && (set_h <= 600)) && (sensor_vga[0].reg!=SEQUENCE_END)) {
3696             winseqe_set_addr = sensor_vga;
3697             *ret_w = 640;
3698             *ret_h = 480;
3699         } 
3700 #else
3701     else if (((set_w <= 800) && (set_h <= 600)) && (sensor_svga[0].reg!=SEQUENCE_END)) {
3702         winseqe_set_addr = sensor_svga;
3703         *ret_w = 800;
3704         *ret_h = 600;       
3705     } 
3706 #endif
3707     else if (((set_w <= 1024) && (set_h <= 768)) && (sensor_xga[0].reg!=SEQUENCE_END)) {
3708         winseqe_set_addr = sensor_xga;
3709         *ret_w = 1024;
3710         *ret_h = 768;
3711         } else if (((set_w <= 1280) && (set_h <= 720)) && (sensor_720p[0].reg!=SEQUENCE_END)) {
3712         winseqe_set_addr = sensor_720p;
3713         *ret_w = 1280;
3714         *ret_h = 720;
3715     } else if (((set_w <= 1280) && (set_h <= 1024)) && (sensor_sxga[0].reg!=SEQUENCE_END)) {
3716         winseqe_set_addr = sensor_sxga;
3717         *ret_w = 1280;
3718         *ret_h = 1024;
3719     } else if (((set_w <= 1600) && (set_h <= 1200)) && (sensor_uxga[0].reg!=SEQUENCE_END)) {
3720         winseqe_set_addr = sensor_uxga;
3721         *ret_w = 1600;
3722         *ret_h = 1200;
3723         } 
3724 #if CONFIG_SENSOR_FOR_CTS
3725    /**lzg@rockchip.com: forbid to preview with resolution 1280*1024*/
3726     else if (((set_w <= 1920) && (set_h <= 1080)) && (sensor_vga[0].reg!=SEQUENCE_END)) {
3727         winseqe_set_addr = sensor_vga;
3728         *ret_w = 640;
3729         *ret_h = 480;
3730     }     
3731 #else
3732     else if (((set_w <= 1920) && (set_h <= 1080)) && (sensor_1080p[0].reg!=SEQUENCE_END)) {
3733         winseqe_set_addr = sensor_1080p;
3734         *ret_w = 1920;
3735         *ret_h = 1080;
3736     } 
3737 #endif
3738     else if (((set_w <= 2048) && (set_h <= 1536)) && (sensor_qxga[0].reg!=SEQUENCE_END)) {
3739         winseqe_set_addr = sensor_qxga;
3740         *ret_w = 2048;
3741         *ret_h = 1536;
3742     } else if (((set_w <= 2592) && (set_h <= 1944)) && (sensor_qsxga[0].reg!=SEQUENCE_END)) {
3743         winseqe_set_addr = sensor_qsxga;
3744         *ret_w = 2592;
3745         *ret_h = 1944;
3746     }
3747
3748         return winseqe_set_addr;
3749 }
3750
3751 static int sensor_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
3752 {
3753     struct i2c_client *client = v4l2_get_subdevdata(sd);
3754     const struct sensor_datafmt *fmt;
3755     struct sensor *sensor = to_sensor(client);    
3756     struct reginfo *winseqe_set_addr=NULL;
3757     int ret=0, set_w,set_h;
3758
3759         fmt = sensor_find_datafmt(mf->code, sensor_colour_fmts,
3760                                    ARRAY_SIZE(sensor_colour_fmts));
3761         if (!fmt) {
3762         ret = -EINVAL;
3763         goto sensor_s_fmt_end;
3764     }
3765
3766         if (sensor->info_priv.fmt.code != mf->code) {
3767                 switch (mf->code)
3768                 {
3769                         case V4L2_MBUS_FMT_YUYV8_2X8:
3770                         {
3771                                 winseqe_set_addr = sensor_ClrFmt_YUYV;
3772                                 break;
3773                         }
3774                         case V4L2_MBUS_FMT_UYVY8_2X8:
3775                         {
3776                                 winseqe_set_addr = sensor_ClrFmt_UYVY;
3777                                 break;
3778                         }
3779                         default:
3780                                 break;
3781                 }
3782                 if (winseqe_set_addr != NULL) {
3783             sensor_write_array(client, winseqe_set_addr);
3784                         sensor->info_priv.fmt.code = mf->code;
3785             sensor->info_priv.fmt.colorspace= mf->colorspace;            
3786                         SENSOR_DG("%s v4l2_mbus_code:%d set success!\n", SENSOR_NAME_STRING(),mf->code);
3787                 } else {
3788                         SENSOR_TR("%s v4l2_mbus_code:%d is invalidate!\n", SENSOR_NAME_STRING(),mf->code);
3789                 }
3790         }
3791
3792     set_w = mf->width;
3793     set_h = mf->height;
3794
3795         winseqe_set_addr = sensor_fmt_catch(set_w, set_h, &set_w, &set_h);
3796
3797     if ((winseqe_set_addr  != sensor->info_priv.winseqe_cur_addr) && winseqe_set_addr) {
3798         #if CONFIG_SENSOR_Flash
3799         if (sensor_fmt_capturechk(sd,mf) == true) {      /* ddl@rock-chips.com : Capture */
3800             if ((sensor->info_priv.flash == 1) || (sensor->info_priv.flash == 2)) {
3801                 sensor_ioctrl(icd, Sensor_Flash, Flash_On);
3802                 SENSOR_DG("%s flash on in capture!\n", SENSOR_NAME_STRING());
3803             }           
3804         } else {                                        /* ddl@rock-chips.com : Video */
3805             if ((sensor->info_priv.flash == 1) || (sensor->info_priv.flash == 2)) {
3806                 sensor_ioctrl(icd, Sensor_Flash, Flash_Off);
3807                 SENSOR_DG("%s flash off in preivew!\n", SENSOR_NAME_STRING());
3808             }
3809         }
3810         #endif
3811         ret |= sensor_write_array(client, winseqe_set_addr);
3812         if (ret != 0) {
3813             SENSOR_TR("%s set format capability failed\n", SENSOR_NAME_STRING());
3814             #if CONFIG_SENSOR_Flash
3815             if (sensor_fmt_capturechk(sd,mf) == true) {
3816                 if ((sensor->info_priv.flash == 1) || (sensor->info_priv.flash == 2)) {
3817                     sensor_ioctrl(icd, Sensor_Flash, Flash_Off);
3818                     SENSOR_TR("%s Capture format set fail, flash off !\n", SENSOR_NAME_STRING());
3819                 }
3820             }
3821             #endif
3822             goto sensor_s_fmt_end;
3823         }
3824
3825         sensor->info_priv.winseqe_cur_addr  = (struct reginfo*)winseqe_set_addr;
3826
3827
3828         SENSOR_DG("\n%s..%s.. icd->width = %d.. icd->height %d\n",SENSOR_NAME_STRING(),__FUNCTION__,set_w,set_h);
3829     } else {
3830         SENSOR_TR("\n %s .. Current Format is validate. icd->width = %d.. icd->height %d\n",SENSOR_NAME_STRING(),set_w,set_h);
3831     }
3832
3833         mf->width = set_w;
3834     mf->height = set_h;
3835
3836 sensor_s_fmt_end:
3837     return ret;
3838 }
3839
3840 static int sensor_try_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
3841 {
3842     struct i2c_client *client = v4l2_get_subdevdata(sd);
3843     struct sensor *sensor = to_sensor(client);
3844     const struct sensor_datafmt *fmt;
3845     int ret = 0;
3846    
3847         fmt = sensor_find_datafmt(mf->code, sensor_colour_fmts,
3848                                    ARRAY_SIZE(sensor_colour_fmts));
3849         if (fmt == NULL) {
3850                 fmt = &sensor->info_priv.fmt;
3851         mf->code = fmt->code;
3852         } 
3853
3854     if (mf->height > SENSOR_MAX_HEIGHT)
3855         mf->height = SENSOR_MAX_HEIGHT;
3856     else if (mf->height < SENSOR_MIN_HEIGHT)
3857         mf->height = SENSOR_MIN_HEIGHT;
3858
3859     if (mf->width > SENSOR_MAX_WIDTH)
3860         mf->width = SENSOR_MAX_WIDTH;
3861     else if (mf->width < SENSOR_MIN_WIDTH)
3862         mf->width = SENSOR_MIN_WIDTH;
3863
3864     mf->colorspace = fmt->colorspace;
3865     
3866     return ret;
3867 }
3868
3869  static int sensor_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *id)
3870 {
3871     struct i2c_client *client = v4l2_get_subdevdata(sd);
3872
3873     if (id->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
3874         return -EINVAL;
3875
3876     if (id->match.addr != client->addr)
3877         return -ENODEV;
3878
3879     id->ident = SENSOR_V4L2_IDENT;      /* ddl@rock-chips.com :  Return s5k6aa  identifier */
3880     id->revision = 0;
3881
3882     return 0;
3883 }
3884 #if CONFIG_SENSOR_Brightness
3885 static int sensor_set_brightness(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
3886 {
3887     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3888
3889     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
3890     {
3891         if (sensor_BrightnessSeqe[value - qctrl->minimum] != NULL)
3892         {
3893             if (sensor_write_array(client, sensor_BrightnessSeqe[value - qctrl->minimum]) != 0)
3894             {
3895                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
3896                 return -EINVAL;
3897             }
3898             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
3899             return 0;
3900         }
3901     }
3902         SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
3903     return -EINVAL;
3904 }
3905 #endif
3906 #if CONFIG_SENSOR_Effect
3907 static int sensor_set_effect(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
3908 {
3909     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3910
3911     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
3912     {
3913         if (sensor_EffectSeqe[value - qctrl->minimum] != NULL)
3914         {
3915             if (sensor_write_array(client, sensor_EffectSeqe[value - qctrl->minimum]) != 0)
3916             {
3917                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
3918                 return -EINVAL;
3919             }
3920             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
3921             return 0;
3922         }
3923     }
3924         SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
3925     return -EINVAL;
3926 }
3927 #endif
3928 #if CONFIG_SENSOR_Exposure
3929 static int sensor_set_exposure(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
3930 {
3931     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3932
3933     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
3934     {
3935         if (sensor_ExposureSeqe[value - qctrl->minimum] != NULL)
3936         {
3937             if (sensor_write_array(client, sensor_ExposureSeqe[value - qctrl->minimum]) != 0)
3938             {
3939                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
3940                 return -EINVAL;
3941             }
3942             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
3943             return 0;
3944         }
3945     }
3946         SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
3947     return -EINVAL;
3948 }
3949 #endif
3950 #if CONFIG_SENSOR_Saturation
3951 static int sensor_set_saturation(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
3952 {
3953     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3954
3955     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
3956     {
3957         if (sensor_SaturationSeqe[value - qctrl->minimum] != NULL)
3958         {
3959             if (sensor_write_array(client, sensor_SaturationSeqe[value - qctrl->minimum]) != 0)
3960             {
3961                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
3962                 return -EINVAL;
3963             }
3964             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
3965             return 0;
3966         }
3967     }
3968     SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
3969     return -EINVAL;
3970 }
3971 #endif
3972 #if CONFIG_SENSOR_Contrast
3973 static int sensor_set_contrast(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
3974 {
3975     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3976
3977     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
3978     {
3979         if (sensor_ContrastSeqe[value - qctrl->minimum] != NULL)
3980         {
3981             if (sensor_write_array(client, sensor_ContrastSeqe[value - qctrl->minimum]) != 0)
3982             {
3983                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
3984                 return -EINVAL;
3985             }
3986             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
3987             return 0;
3988         }
3989     }
3990     SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
3991     return -EINVAL;
3992 }
3993 #endif
3994 #if CONFIG_SENSOR_Mirror
3995 static int sensor_set_mirror(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
3996 {
3997     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
3998
3999     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
4000     {
4001         if (sensor_MirrorSeqe[value - qctrl->minimum] != NULL)
4002         {
4003             if (sensor_write_array(client, sensor_MirrorSeqe[value - qctrl->minimum]) != 0)
4004             {
4005                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
4006                 return -EINVAL;
4007             }
4008             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
4009             return 0;
4010         }
4011     }
4012     SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
4013     return -EINVAL;
4014 }
4015 #endif
4016 #if CONFIG_SENSOR_Flip
4017 static int sensor_set_flip(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
4018 {
4019     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4020
4021     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
4022     {
4023         if (sensor_FlipSeqe[value - qctrl->minimum] != NULL)
4024         {
4025             if (sensor_write_array(client, sensor_FlipSeqe[value - qctrl->minimum]) != 0)
4026             {
4027                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
4028                 return -EINVAL;
4029             }
4030             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
4031             return 0;
4032         }
4033     }
4034     SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
4035     return -EINVAL;
4036 }
4037 #endif
4038 #if CONFIG_SENSOR_Scene
4039 static int sensor_set_scene(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
4040 {
4041     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4042
4043     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
4044     {
4045         if (sensor_SceneSeqe[value - qctrl->minimum] != NULL)
4046         {
4047             if (sensor_write_array(client, sensor_SceneSeqe[value - qctrl->minimum]) != 0)
4048             {
4049                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
4050                 return -EINVAL;
4051             }
4052             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
4053             return 0;
4054         }
4055     }
4056     SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
4057     return -EINVAL;
4058 }
4059 #endif
4060 #if CONFIG_SENSOR_WhiteBalance
4061 static int sensor_set_whiteBalance(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
4062 {
4063     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4064
4065     if ((value >= qctrl->minimum) && (value <= qctrl->maximum))
4066     {
4067         if (sensor_WhiteBalanceSeqe[value - qctrl->minimum] != NULL)
4068         {
4069             if (sensor_write_array(client, sensor_WhiteBalanceSeqe[value - qctrl->minimum]) != 0)
4070             {
4071                 SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
4072                 return -EINVAL;
4073             }
4074             SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
4075             return 0;
4076         }
4077     }
4078         SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
4079     return -EINVAL;
4080 }
4081 #endif
4082 #if CONFIG_SENSOR_DigitalZoom
4083 static int sensor_set_digitalzoom(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int *value)
4084 {
4085     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4086     struct sensor *sensor = to_sensor(client);
4087         const struct v4l2_queryctrl *qctrl_info;
4088     int digitalzoom_cur, digitalzoom_total;
4089
4090         qctrl_info = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_ZOOM_ABSOLUTE);
4091         if (qctrl_info)
4092                 return -EINVAL;
4093
4094     digitalzoom_cur = sensor->info_priv.digitalzoom;
4095     digitalzoom_total = qctrl_info->maximum;
4096
4097     if ((*value > 0) && (digitalzoom_cur >= digitalzoom_total))
4098     {
4099         SENSOR_TR("%s digitalzoom is maximum - %x\n", SENSOR_NAME_STRING(), digitalzoom_cur);
4100         return -EINVAL;
4101     }
4102
4103     if  ((*value < 0) && (digitalzoom_cur <= qctrl_info->minimum))
4104     {
4105         SENSOR_TR("%s digitalzoom is minimum - %x\n", SENSOR_NAME_STRING(), digitalzoom_cur);
4106         return -EINVAL;
4107     }
4108
4109     if ((*value > 0) && ((digitalzoom_cur + *value) > digitalzoom_total))
4110     {
4111         *value = digitalzoom_total - digitalzoom_cur;
4112     }
4113
4114     if ((*value < 0) && ((digitalzoom_cur + *value) < 0))
4115     {
4116         *value = 0 - digitalzoom_cur;
4117     }
4118
4119     digitalzoom_cur += *value;
4120
4121     if (sensor_ZoomSeqe[digitalzoom_cur] != NULL)
4122     {
4123         if (sensor_write_array(client, sensor_ZoomSeqe[digitalzoom_cur]) != 0)
4124         {
4125             SENSOR_TR("%s..%s WriteReg Fail.. \n",SENSOR_NAME_STRING(), __FUNCTION__);
4126             return -EINVAL;
4127         }
4128         SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, *value);
4129         return 0;
4130     }
4131
4132     return -EINVAL;
4133 }
4134 #endif
4135 #if CONFIG_SENSOR_Flash
4136 static int sensor_set_flash(struct soc_camera_device *icd, const struct v4l2_queryctrl *qctrl, int value)
4137 {
4138     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4139     struct sensor *sensor = to_sensor(client);
4140         const struct v4l2_queryctrl *qctrl_info;
4141     
4142     if ((value >= qctrl->minimum) && (value <= qctrl->maximum)) {
4143         if (value == 3) {       /* ddl@rock-chips.com: torch */
4144             sensor_ioctrl(icd, Sensor_Flash, Flash_Torch);   /* Flash On */
4145         } else {
4146             sensor_ioctrl(icd, Sensor_Flash, Flash_Off);
4147         }
4148         SENSOR_DG("%s..%s : %x\n",SENSOR_NAME_STRING(),__FUNCTION__, value);
4149         return 0;
4150     }
4151     
4152         SENSOR_TR("\n %s..%s valure = %d is invalidate..    \n",SENSOR_NAME_STRING(),__FUNCTION__,value);
4153     return -EINVAL;
4154 }
4155 #endif
4156 static int sensor_g_control(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
4157 {
4158     struct i2c_client *client = v4l2_get_subdevdata(sd);
4159     struct sensor *sensor = to_sensor(client);
4160     const struct v4l2_queryctrl *qctrl;
4161
4162     qctrl = soc_camera_find_qctrl(&sensor_ops, ctrl->id);
4163
4164     if (!qctrl)
4165     {
4166         SENSOR_TR("\n %s ioctrl id = %d  is invalidate \n", SENSOR_NAME_STRING(), ctrl->id);
4167         return -EINVAL;
4168     }
4169
4170     switch (ctrl->id)
4171     {
4172         case V4L2_CID_BRIGHTNESS:
4173             {
4174                 ctrl->value = sensor->info_priv.brightness;
4175                 break;
4176             }
4177         case V4L2_CID_SATURATION:
4178             {
4179                 ctrl->value = sensor->info_priv.saturation;
4180                 break;
4181             }
4182         case V4L2_CID_CONTRAST:
4183             {
4184                 ctrl->value = sensor->info_priv.contrast;
4185                 break;
4186             }
4187         case V4L2_CID_DO_WHITE_BALANCE:
4188             {
4189                 ctrl->value = sensor->info_priv.whiteBalance;
4190                 break;
4191             }
4192         case V4L2_CID_EXPOSURE:
4193             {
4194                 ctrl->value = sensor->info_priv.exposure;
4195                 break;
4196             }
4197         case V4L2_CID_HFLIP:
4198             {
4199                 ctrl->value = sensor->info_priv.mirror;
4200                 break;
4201             }
4202         case V4L2_CID_VFLIP:
4203             {
4204                 ctrl->value = sensor->info_priv.flip;
4205                 break;
4206             }
4207         default :
4208                 break;
4209     }
4210     return 0;
4211 }
4212
4213
4214
4215 static int sensor_s_control(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
4216 {
4217     struct i2c_client *client = v4l2_get_subdevdata(sd);
4218     struct sensor *sensor = to_sensor(client);
4219     struct soc_camera_device *icd = client->dev.platform_data;
4220     const struct v4l2_queryctrl *qctrl;
4221
4222
4223     qctrl = soc_camera_find_qctrl(&sensor_ops, ctrl->id);
4224
4225     if (!qctrl)
4226     {
4227         SENSOR_TR("\n %s ioctrl id = %d  is invalidate \n", SENSOR_NAME_STRING(), ctrl->id);
4228         return -EINVAL;
4229     }
4230
4231     switch (ctrl->id)
4232     {
4233 #if CONFIG_SENSOR_Brightness
4234         case V4L2_CID_BRIGHTNESS:
4235             {
4236                 if (ctrl->value != sensor->info_priv.brightness)
4237                 {
4238                     if (sensor_set_brightness(icd, qctrl,ctrl->value) != 0)
4239                     {
4240                         return -EINVAL;
4241                     }
4242                     sensor->info_priv.brightness = ctrl->value;
4243                 }
4244                 break;
4245             }
4246 #endif
4247 #if CONFIG_SENSOR_Exposure
4248         case V4L2_CID_EXPOSURE:
4249             {
4250                 if (ctrl->value != sensor->info_priv.exposure)
4251                 {
4252                     if (sensor_set_exposure(icd, qctrl,ctrl->value) != 0)
4253                     {
4254                         return -EINVAL;
4255                     }
4256                     sensor->info_priv.exposure = ctrl->value;
4257                 }
4258                 break;
4259             }
4260 #endif
4261 #if CONFIG_SENSOR_Saturation
4262         case V4L2_CID_SATURATION:
4263             {
4264                 if (ctrl->value != sensor->info_priv.saturation)
4265                 {
4266                     if (sensor_set_saturation(icd, qctrl,ctrl->value) != 0)
4267                     {
4268                         return -EINVAL;
4269                     }
4270                     sensor->info_priv.saturation = ctrl->value;
4271                 }
4272                 break;
4273             }
4274 #endif
4275 #if CONFIG_SENSOR_Contrast
4276         case V4L2_CID_CONTRAST:
4277             {
4278                 if (ctrl->value != sensor->info_priv.contrast)
4279                 {
4280                     if (sensor_set_contrast(icd, qctrl,ctrl->value) != 0)
4281                     {
4282                         return -EINVAL;
4283                     }
4284                     sensor->info_priv.contrast = ctrl->value;
4285                 }
4286                 break;
4287             }
4288 #endif
4289 #if CONFIG_SENSOR_WhiteBalance
4290         case V4L2_CID_DO_WHITE_BALANCE:
4291             {
4292                 if (ctrl->value != sensor->info_priv.whiteBalance)
4293                 {
4294                     if (sensor_set_whiteBalance(icd, qctrl,ctrl->value) != 0)
4295                     {
4296                         return -EINVAL;
4297                     }
4298                     sensor->info_priv.whiteBalance = ctrl->value;
4299                 }
4300                 break;
4301             }
4302 #endif
4303 #if CONFIG_SENSOR_Mirror
4304         case V4L2_CID_HFLIP:
4305             {
4306                 if (ctrl->value != sensor->info_priv.mirror)
4307                 {
4308                     if (sensor_set_mirror(icd, qctrl,ctrl->value) != 0)
4309                         return -EINVAL;
4310                     sensor->info_priv.mirror = ctrl->value;
4311                 }
4312                 break;
4313             }
4314 #endif
4315 #if CONFIG_SENSOR_Flip
4316         case V4L2_CID_VFLIP:
4317             {
4318                 if (ctrl->value != sensor->info_priv.flip)
4319                 {
4320                     if (sensor_set_flip(icd, qctrl,ctrl->value) != 0)
4321                         return -EINVAL;
4322                     sensor->info_priv.flip = ctrl->value;
4323                 }
4324                 break;
4325             }
4326 #endif
4327         default:
4328             break;
4329     }
4330
4331     return 0;
4332 }
4333 static int sensor_g_ext_control(struct soc_camera_device *icd , struct v4l2_ext_control *ext_ctrl)
4334 {
4335     const struct v4l2_queryctrl *qctrl;
4336     struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4337     struct sensor *sensor = to_sensor(client);
4338
4339     qctrl = soc_camera_find_qctrl(&sensor_ops, ext_ctrl->id);
4340
4341     if (!qctrl)
4342     {
4343         SENSOR_TR("\n %s ioctrl id = %d  is invalidate \n", SENSOR_NAME_STRING(), ext_ctrl->id);
4344         return -EINVAL;
4345     }
4346
4347     switch (ext_ctrl->id)
4348     {
4349         case V4L2_CID_SCENE:
4350             {
4351                 ext_ctrl->value = sensor->info_priv.scene;
4352                 break;
4353             }
4354         case V4L2_CID_EFFECT:
4355             {
4356                 ext_ctrl->value = sensor->info_priv.effect;
4357                 break;
4358             }
4359         case V4L2_CID_ZOOM_ABSOLUTE:
4360             {
4361                 ext_ctrl->value = sensor->info_priv.digitalzoom;
4362                 break;
4363             }
4364         case V4L2_CID_ZOOM_RELATIVE:
4365             {
4366                 return -EINVAL;
4367             }
4368         case V4L2_CID_FOCUS_ABSOLUTE:
4369             {
4370                 ext_ctrl->value = sensor->info_priv.focus;
4371                 break;
4372             }
4373         case V4L2_CID_FOCUS_RELATIVE:
4374             {
4375                 return -EINVAL;
4376             }
4377         case V4L2_CID_FLASH:
4378             {
4379                 ext_ctrl->value = sensor->info_priv.flash;
4380                 break;
4381             }
4382         default :
4383             break;
4384     }
4385     return 0;
4386 }
4387 static int sensor_s_ext_control(struct soc_camera_device *icd, struct v4l2_ext_control *ext_ctrl)
4388 {
4389     const struct v4l2_queryctrl *qctrl;
4390     //struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));
4391     //struct sensor *sensor = to_sensor(client);
4392     int val_offset;
4393
4394     qctrl = soc_camera_find_qctrl(&sensor_ops, ext_ctrl->id);
4395
4396     if (!qctrl)
4397     {
4398         SENSOR_TR("\n %s ioctrl id = %d  is invalidate \n", SENSOR_NAME_STRING(), ext_ctrl->id);
4399         return -EINVAL;
4400     }
4401
4402         val_offset = 0;
4403     switch (ext_ctrl->id)
4404     {
4405 #if CONFIG_SENSOR_Scene
4406         case V4L2_CID_SCENE:
4407             {
4408                 if (ext_ctrl->value != sensor->info_priv.scene)
4409                 {
4410                     if (sensor_set_scene(icd, qctrl,ext_ctrl->value) != 0)
4411                         return -EINVAL;
4412                     sensor->info_priv.scene = ext_ctrl->value;
4413                 }
4414                 break;
4415             }
4416 #endif
4417 #if CONFIG_SENSOR_Effect
4418         case V4L2_CID_EFFECT:
4419             {
4420                 if (ext_ctrl->value != sensor->info_priv.effect)
4421                 {
4422                     if (sensor_set_effect(icd, qctrl,ext_ctrl->value) != 0)
4423                         return -EINVAL;
4424                     sensor->info_priv.effect= ext_ctrl->value;
4425                 }
4426                 break;
4427             }
4428 #endif
4429 #if CONFIG_SENSOR_DigitalZoom
4430         case V4L2_CID_ZOOM_ABSOLUTE:
4431             {
4432                 if ((ext_ctrl->value < qctrl->minimum) || (ext_ctrl->value > qctrl->maximum))
4433                     return -EINVAL;
4434
4435                 if (ext_ctrl->value != sensor->info_priv.digitalzoom)
4436                 {
4437                     val_offset = ext_ctrl->value -sensor->info_priv.digitalzoom;
4438
4439                     if (sensor_set_digitalzoom(icd, qctrl,&val_offset) != 0)
4440                         return -EINVAL;
4441                     sensor->info_priv.digitalzoom += val_offset;
4442
4443                     SENSOR_DG("%s digitalzoom is %x\n",SENSOR_NAME_STRING(),  sensor->info_priv.digitalzoom);
4444                 }
4445
4446                 break;
4447             }
4448         case V4L2_CID_ZOOM_RELATIVE:
4449             {
4450                 if (ext_ctrl->value)
4451                 {
4452                     if (sensor_set_digitalzoom(icd, qctrl,&ext_ctrl->value) != 0)
4453                         return -EINVAL;
4454                     sensor->info_priv.digitalzoom += ext_ctrl->value;
4455
4456                     SENSOR_DG("%s digitalzoom is %x\n", SENSOR_NAME_STRING(), sensor->info_priv.digitalzoom);
4457                 }
4458                 break;
4459             }
4460 #endif
4461 #if CONFIG_SENSOR_Focus
4462         case V4L2_CID_FOCUS_ABSOLUTE:
4463             {
4464                 if ((ext_ctrl->value < qctrl->minimum) || (ext_ctrl->value > qctrl->maximum))
4465                     return -EINVAL;
4466
4467                 if (ext_ctrl->value != sensor->info_priv.focus)
4468                 {
4469                     val_offset = ext_ctrl->value -sensor->info_priv.focus;
4470
4471                     sensor->info_priv.focus += val_offset;
4472                 }
4473
4474                 break;
4475             }
4476         case V4L2_CID_FOCUS_RELATIVE:
4477             {
4478                 if (ext_ctrl->value)
4479                 {
4480                     sensor->info_priv.focus += ext_ctrl->value;
4481
4482                     SENSOR_DG("%s focus is %x\n", SENSOR_NAME_STRING(), sensor->info_priv.focus);
4483                 }
4484                 break;
4485             }
4486 #endif
4487 #if CONFIG_SENSOR_Flash
4488         case V4L2_CID_FLASH:
4489             {
4490                 if (sensor_set_flash(icd, qctrl,ext_ctrl->value) != 0)
4491                     return -EINVAL;
4492                 sensor->info_priv.flash = ext_ctrl->value;
4493
4494                 SENSOR_DG("%s flash is %x\n",SENSOR_NAME_STRING(), sensor->info_priv.flash);
4495                 break;
4496             }
4497 #endif
4498         default:
4499             break;
4500     }
4501
4502     return 0;
4503 }
4504
4505 static int sensor_g_ext_controls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ext_ctrl)
4506 {
4507     struct i2c_client *client = v4l2_get_subdevdata(sd);
4508     struct soc_camera_device *icd = client->dev.platform_data;
4509     int i, error_cnt=0, error_idx=-1;
4510
4511
4512     for (i=0; i<ext_ctrl->count; i++) {
4513         if (sensor_g_ext_control(icd, &ext_ctrl->controls[i]) != 0) {
4514             error_cnt++;
4515             error_idx = i;
4516         }
4517     }
4518
4519     if (error_cnt > 1)
4520         error_idx = ext_ctrl->count;
4521
4522     if (error_idx != -1) {
4523         ext_ctrl->error_idx = error_idx;
4524         return -EINVAL;
4525     } else {
4526         return 0;
4527     }
4528 }
4529
4530 static int sensor_s_ext_controls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ext_ctrl)
4531 {
4532     struct i2c_client *client = v4l2_get_subdevdata(sd);
4533     struct soc_camera_device *icd = client->dev.platform_data;
4534     int i, error_cnt=0, error_idx=-1;
4535
4536
4537     for (i=0; i<ext_ctrl->count; i++) {
4538         if (sensor_s_ext_control(icd, &ext_ctrl->controls[i]) != 0) {
4539             error_cnt++;
4540             error_idx = i;
4541         }
4542     }
4543
4544     if (error_cnt > 1)
4545         error_idx = ext_ctrl->count;
4546
4547     if (error_idx != -1) {
4548         ext_ctrl->error_idx = error_idx;
4549         return -EINVAL;
4550     } else {
4551         return 0;
4552     }
4553 }
4554 static int sensor_s_stream(struct v4l2_subdev *sd, int enable)
4555 {
4556         struct i2c_client *client = v4l2_get_subdevdata(sd);
4557     struct sensor *sensor = to_sensor(client);
4558
4559         if (enable == 1) {
4560                 sensor->info_priv.enable = 1;
4561         } else if (enable == 0) {
4562                 sensor->info_priv.enable = 0;
4563         }
4564
4565         return 0;
4566 }
4567 /* Interface active, can use i2c. If it fails, it can indeed mean, that
4568  * this wasn't our capture interface, so, we wait for the right one */
4569 static int sensor_video_probe(struct soc_camera_device *icd,
4570                                struct i2c_client *client)
4571 {
4572     int ret,pid = 0;
4573     struct sensor *sensor = to_sensor(client);
4574
4575     /* We must have a parent by now. And it cannot be a wrong one.
4576      * So this entire test is completely redundant. */
4577     if (!icd->dev.parent ||
4578             to_soc_camera_host(icd->dev.parent)->nr != icd->iface)
4579                 return -ENODEV;
4580
4581         if (sensor_ioctrl(icd, Sensor_PowerDown, 0) < 0) {
4582                 ret = -ENODEV;
4583                 goto sensor_video_probe_err;
4584         }
4585
4586     /* soft reset */
4587 #if (SENSOR_RESET_REG != SEQUENCE_END)
4588     ret = sensor_write(client, SENSOR_RESET_REG, SENSOR_RESET_VAL);
4589     if (ret != 0) {
4590         SENSOR_TR("%s soft reset sensor failed\n",SENSOR_NAME_STRING());
4591         ret = -ENODEV;
4592                 goto sensor_video_probe_err;
4593     }
4594
4595     mdelay(5);  //delay 5 microseconds
4596 #endif
4597
4598         /* check if it is an sensor sensor */
4599 #if (SENSOR_ID_REG != SEQUENCE_END)
4600     ret = sensor_read(client, SENSOR_ID_REG, &pid);
4601     if (ret != 0) {
4602         SENSOR_TR("read chip id failed\n");
4603         ret = -ENODEV;
4604         goto sensor_video_probe_err;
4605     }
4606
4607     SENSOR_DG("\n %s  pid = 0x%x \n", SENSOR_NAME_STRING(), pid);
4608 #else
4609         pid = SENSOR_ID;
4610 #endif
4611
4612     if (pid == SENSOR_ID) {
4613         sensor->model = SENSOR_V4L2_IDENT;
4614     } else {
4615         SENSOR_TR("error: %s mismatched   pid = 0x%x\n", SENSOR_NAME_STRING(), pid);
4616         ret = -ENODEV;
4617         goto sensor_video_probe_err;
4618     }
4619
4620     return 0;
4621
4622 sensor_video_probe_err:
4623
4624     return ret;
4625 }
4626 static long sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
4627 {
4628         struct i2c_client *client = v4l2_get_subdevdata(sd);
4629     struct soc_camera_device *icd = client->dev.platform_data;
4630     struct sensor *sensor = to_sensor(client);
4631     int ret = 0;
4632 #if CONFIG_SENSOR_Flash 
4633     int i;
4634 #endif
4635
4636         SENSOR_DG("\n%s..%s..cmd:%x \n",SENSOR_NAME_STRING(),__FUNCTION__,cmd);
4637         switch (cmd)
4638         {
4639                 case RK29_CAM_SUBDEV_DEACTIVATE:
4640                 {
4641                         sensor_deactivate(client);
4642                         break;
4643                 }
4644                 case RK29_CAM_SUBDEV_IOREQUEST:
4645                 {
4646                         sensor->sensor_io_request = (struct rk29camera_platform_data*)arg;           
4647             if (sensor->sensor_io_request != NULL) { 
4648                 if (sensor->sensor_io_request->gpio_res[0].dev_name && 
4649                     (strcmp(sensor->sensor_io_request->gpio_res[0].dev_name, dev_name(icd->pdev)) == 0)) {
4650                     sensor->sensor_gpio_res = (struct rk29camera_gpio_res*)&sensor->sensor_io_request->gpio_res[0];
4651                 } else if (sensor->sensor_io_request->gpio_res[1].dev_name && 
4652                     (strcmp(sensor->sensor_io_request->gpio_res[1].dev_name, dev_name(icd->pdev)) == 0)) {
4653                     sensor->sensor_gpio_res = (struct rk29camera_gpio_res*)&sensor->sensor_io_request->gpio_res[1];
4654                 }
4655             } else {
4656                 SENSOR_TR("%s %s RK29_CAM_SUBDEV_IOREQUEST fail\n",SENSOR_NAME_STRING(),__FUNCTION__);
4657                 ret = -EINVAL;
4658                 goto sensor_ioctl_end;
4659             }
4660             /* ddl@rock-chips.com : if gpio_flash havn't been set in board-xxx.c, sensor driver must notify is not support flash control 
4661                for this project */
4662             #if CONFIG_SENSOR_Flash     
4663                 if (sensor->sensor_gpio_res) {
4664                 if (sensor->sensor_gpio_res->gpio_flash == INVALID_GPIO) {
4665                     for (i = 0; i < icd->ops->num_controls; i++) {
4666                                 if (V4L2_CID_FLASH == icd->ops->controls[i].id) {
4667                                         //memset((char*)&icd->ops->controls[i],0x00,sizeof(struct v4l2_queryctrl));  
4668                               sensor_controls[i].id=0xffff;                             
4669                                 }
4670                     }
4671                     sensor->info_priv.flash = 0xff;
4672                     SENSOR_DG("%s flash gpio is invalidate!\n",SENSOR_NAME_STRING());
4673                 }else{ //two cameras are the same,need to deal diffrently ,zyc
4674                     for (i = 0; i < icd->ops->num_controls; i++) {
4675                            if(0xffff == icd->ops->controls[i].id){
4676                               sensor_controls[i].id=V4L2_CID_FLASH;
4677                            }               
4678                     }
4679                 }
4680                 }
4681             #endif
4682                         break;
4683                 }
4684                 default:
4685                 {
4686                         SENSOR_TR("%s %s cmd(0x%x) is unknown !\n",SENSOR_NAME_STRING(),__FUNCTION__,cmd);
4687                         break;
4688                 }
4689         }
4690 sensor_ioctl_end:
4691         return ret;
4692
4693 }
4694 static int sensor_enum_fmt(struct v4l2_subdev *sd, unsigned int index,
4695                             enum v4l2_mbus_pixelcode *code)
4696 {
4697         if (index >= ARRAY_SIZE(sensor_colour_fmts))
4698                 return -EINVAL;
4699
4700         *code = sensor_colour_fmts[index].code;
4701         return 0;
4702 }
4703 static struct v4l2_subdev_core_ops sensor_subdev_core_ops = {
4704         .init           = sensor_init,
4705         .g_ctrl         = sensor_g_control,
4706         .s_ctrl         = sensor_s_control,
4707         .g_ext_ctrls          = sensor_g_ext_controls,
4708         .s_ext_ctrls          = sensor_s_ext_controls,
4709         .g_chip_ident   = sensor_g_chip_ident,
4710         .ioctl = sensor_ioctl,
4711 };
4712
4713 static struct v4l2_subdev_video_ops sensor_subdev_video_ops = {
4714         .s_mbus_fmt     = sensor_s_fmt,
4715         .g_mbus_fmt     = sensor_g_fmt,
4716         .try_mbus_fmt   = sensor_try_fmt,
4717         .enum_mbus_fmt  = sensor_enum_fmt,
4718     .s_stream   = sensor_s_stream,      
4719 };
4720 static struct v4l2_subdev_ops sensor_subdev_ops = {
4721         .core   = &sensor_subdev_core_ops,
4722         .video = &sensor_subdev_video_ops,
4723 };
4724
4725 static int sensor_probe(struct i2c_client *client,
4726                          const struct i2c_device_id *did)
4727 {
4728     struct sensor *sensor;
4729     struct soc_camera_device *icd = client->dev.platform_data;
4730     struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
4731     struct soc_camera_link *icl;
4732     int ret;
4733
4734     SENSOR_DG("\n%s..%s..%d..\n",__FUNCTION__,__FILE__,__LINE__);
4735     if (!icd) {
4736         dev_err(&client->dev, "%s: missing soc-camera data!\n",SENSOR_NAME_STRING());
4737         return -EINVAL;
4738     }
4739
4740     icl = to_soc_camera_link(icd);
4741     if (!icl) {
4742         dev_err(&client->dev, "%s driver needs platform data\n", SENSOR_NAME_STRING());
4743         return -EINVAL;
4744     }
4745
4746     if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
4747         dev_warn(&adapter->dev,
4748                  "I2C-Adapter doesn't support I2C_FUNC_I2C\n");
4749         return -EIO;
4750     }
4751
4752     sensor = kzalloc(sizeof(struct sensor), GFP_KERNEL);
4753     if (!sensor)
4754         return -ENOMEM;
4755
4756     v4l2_i2c_subdev_init(&sensor->subdev, client, &sensor_subdev_ops);
4757
4758     /* Second stage probe - when a capture adapter is there */
4759     icd->ops            = &sensor_ops;
4760     sensor->info_priv.fmt = sensor_colour_fmts[0];
4761
4762     ret = sensor_video_probe(icd, client);
4763     if (ret) {
4764         icd->ops = NULL;
4765         i2c_set_clientdata(client, NULL);
4766         kfree(sensor);
4767     }
4768         hrtimer_init(&(flash_off_timer.timer), CLOCK_MONOTONIC, HRTIMER_MODE_REL);
4769     SENSOR_DG("\n%s..%s..%d  ret = %x \n",__FUNCTION__,__FILE__,__LINE__,ret);
4770     return ret;
4771 }
4772
4773 static int sensor_remove(struct i2c_client *client)
4774 {
4775     struct sensor *sensor = to_sensor(client);
4776     struct soc_camera_device *icd = client->dev.platform_data;
4777
4778     icd->ops = NULL;
4779     i2c_set_clientdata(client, NULL);
4780     client->driver = NULL;
4781     kfree(sensor);
4782
4783     return 0;
4784 }
4785
4786 static const struct i2c_device_id sensor_id[] = {
4787         {SENSOR_NAME_STRING(), 0 },
4788         { }
4789 };
4790 MODULE_DEVICE_TABLE(i2c, sensor_id);
4791
4792 static struct i2c_driver sensor_i2c_driver = {
4793         .driver = {
4794                 .name = SENSOR_NAME_STRING(),
4795         },
4796         .probe          = sensor_probe,
4797         .remove         = sensor_remove,
4798         .id_table       = sensor_id,
4799 };
4800
4801 static int __init sensor_mod_init(void)
4802 {
4803     SENSOR_DG("\n%s..%s.. \n",__FUNCTION__,SENSOR_NAME_STRING());
4804     return i2c_add_driver(&sensor_i2c_driver);
4805 }
4806
4807 static void __exit sensor_mod_exit(void)
4808 {
4809     i2c_del_driver(&sensor_i2c_driver);
4810 }
4811
4812 device_initcall_sync(sensor_mod_init);
4813 module_exit(sensor_mod_exit);
4814
4815 MODULE_DESCRIPTION(SENSOR_NAME_STRING(Camera sensor driver));
4816 MODULE_AUTHOR("ddl <kernel@rock-chips>");
4817 MODULE_LICENSE("GPL");
4818