camera(v0.4.1): cif:v0.4.1 generic_sensor:v0.1.0 rk_camera:v0.1.0
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / nt99252_3way.c
1 \r
2 #include "generic_sensor.h"\r
3 \r
4 static int version = KERNEL_VERSION(0,1,0);\r
5 module_param(version, int, S_IRUGO);\r
6 \r
7 static int debug =1;\r
8 module_param(debug, int, S_IRUGO|S_IWUSR);\r
9 \r
10 #define dprintk(level, fmt, arg...) do {                        \\r
11         if (debug >= level)                                     \\r
12         printk(KERN_WARNING fmt , ## arg); } while (0)\r
13 \r
14 /* Sensor Driver Configuration Begin */\r
15 #define SENSOR_NAME RK29_CAM_SENSOR_NT99252\r
16 #define SENSOR_V4L2_IDENT V4L2_IDENT_NT99252\r
17 #define SENSOR_ID 0x2520\r
18 #define SENSOR_BUS_PARAM                     (SOCAM_MASTER |\\r
19                                              SOCAM_PCLK_SAMPLE_RISING|SOCAM_HSYNC_ACTIVE_HIGH| SOCAM_VSYNC_ACTIVE_HIGH|\\r
20                                              SOCAM_DATA_ACTIVE_HIGH | SOCAM_DATAWIDTH_8  |SOCAM_MCLK_24MHZ)\r
21 #define SENSOR_PREVIEW_W                     800\r
22 #define SENSOR_PREVIEW_H                     600\r
23 #define SENSOR_PREVIEW_FPS                   15000     // 15fps \r
24 #define SENSOR_FULLRES_L_FPS                 5000      // 7.5fps\r
25 #define SENSOR_FULLRES_H_FPS                 10000      // 7.5fps\r
26 #define SENSOR_720P_FPS                      1\r
27 #define SENSOR_1080P_FPS                     0\r
28 \r
29 #define SENSOR_REGISTER_LEN                  2         // sensor register address bytes\r
30 #define SENSOR_VALUE_LEN                     1         // sensor register value bytes\r
31                                     \r
32 static unsigned int SensorConfiguration = 0;\r
33 static unsigned int SensorChipID[] = {SENSOR_ID};\r
34 /* Sensor Driver Configuration End */\r
35 \r
36 \r
37 #define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a))\r
38 #define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a)\r
39 \r
40 #define SensorRegVal(a,b) CONS4(SensorReg,SENSOR_REGISTER_LEN,Val,SENSOR_VALUE_LEN)(a,b)\r
41 #define sensor_write(client,reg,v) CONS4(sensor_write_reg,SENSOR_REGISTER_LEN,val,SENSOR_VALUE_LEN)(client,(reg),(v))\r
42 #define sensor_read(client,reg,v) CONS4(sensor_read_reg,SENSOR_REGISTER_LEN,val,SENSOR_VALUE_LEN)(client,(reg),(v))\r
43 #define sensor_write_array generic_sensor_write_array\r
44 \r
45 struct sensor_parameter\r
46 {\r
47         unsigned int PreviewDummyPixels;\r
48         unsigned int CaptureDummyPixels;\r
49         unsigned int preview_exposure;\r
50         unsigned short int preview_line_width;\r
51         unsigned short int preview_gain;\r
52 \r
53         unsigned short int PreviewPclk;\r
54         unsigned short int CapturePclk;\r
55         char awb[6];\r
56 };\r
57 \r
58 struct specific_sensor{\r
59         struct generic_sensor common_sensor;\r
60         //define user data below\r
61         struct sensor_parameter parameter;\r
62 \r
63 };\r
64 \r
65 /*\r
66 *  The follow setting need been filled.\r
67 *  \r
68 *  Must Filled:\r
69 *  sensor_init_data :               Sensor initial setting;\r
70 *  sensor_fullres_lowfps_data :     Sensor full resolution setting with best auality, recommand for video;\r
71 *  sensor_preview_data :            Sensor preview resolution setting, recommand it is vga or svga;\r
72 *  sensor_softreset_data :          Sensor software reset register;\r
73 *  sensor_check_id_data :           Sensir chip id register;\r
74 *\r
75 *  Optional filled:\r
76 *  sensor_fullres_highfps_data:     Sensor full resolution setting with high framerate, recommand for video;\r
77 *  sensor_720p:                     Sensor 720p setting, it is for video;\r
78 *  sensor_1080p:                    Sensor 1080p setting, it is for video;\r
79 *\r
80 *  :::::WARNING:::::\r
81 *  The SensorEnd which is the setting end flag must be filled int the last of each setting;\r
82 */\r
83 \r
84 /* Sensor initial setting */\r
85 static struct rk_sensor_reg sensor_init_data[] ={\r
86         {0x302A, 0x00},\r
87         {0x301F, 0x80},\r
88         {0x303f, 0x0e},\r
89         {0x3051, 0xE8},\r
90         {0x320A, 0x00},\r
91         {0x302E, 0x01},\r
92         {0x3069, 0x04},\r
93         {0x306a, 0x04},\r
94         {0x3101, 0x80},\r
95         {0x3104, 0x03},\r
96         {0x3105, 0x03},\r
97         {0x3106, 0x0D},\r
98         {0x310A, 0x62},\r
99         {0x310D, 0x60},\r
100         {0x3111, 0x5B},\r
101         {0x3131, 0x58},\r
102         {0x3127, 0x01},\r
103         {0x3210, 0x1E},\r
104         {0x3211, 0x1E},\r
105         {0x3212, 0x1E},\r
106         {0x3213, 0x1E},\r
107         {0x3214, 0x17},\r
108         {0x3215, 0x17},\r
109         {0x3216, 0x17},\r
110         {0x3217, 0x17},\r
111         {0x3218, 0x17},\r
112         {0x3219, 0x17},\r
113         {0x321A, 0x17},\r
114         {0x321B, 0x17},\r
115         {0x321C, 0x0F},\r
116         {0x321D, 0x10},\r
117         {0x321E, 0x0F},\r
118         {0x321F, 0x0F},\r
119         {0x3230, 0x00},\r
120         {0x3231, 0x00},\r
121         {0x3232, 0x00},\r
122         {0x3233, 0x00},\r
123         {0x3234, 0x00},\r
124         {0x3235, 0x00},\r
125         {0x3236, 0x00},\r
126         {0x3237, 0x08},\r
127         {0x3238, 0x20},\r
128         {0x3239, 0x20},\r
129         {0x323A, 0x20},\r
130         {0x3243, 0xC3},\r
131         {0x3244, 0x00},\r
132         {0x3245, 0x00},\r
133         {0x3302, 0x00},\r
134         {0x3303, 0x54},\r
135         {0x3304, 0x00},\r
136         {0x3305, 0x91},\r
137         {0x3306, 0x00},\r
138         {0x3307, 0x1A},\r
139         {0x3308, 0x07},\r
140         {0x3309, 0xCD},\r
141         {0x330A, 0x07},\r
142         {0x330B, 0x51},\r
143         {0x330C, 0x00},\r
144         {0x330D, 0xE3},\r
145         {0x330E, 0x00},\r
146         {0x330F, 0xC6},\r
147         {0x3310, 0x07},\r
148         {0x3311, 0x4A},\r
149         {0x3312, 0x07},\r
150         {0x3313, 0xF1},\r
151         {0x3270, 0x00},\r
152         {0x3271, 0x0B},\r
153         {0x3272, 0x16},\r
154         {0x3273, 0x2B},\r
155         {0x3274, 0x3F},\r
156         {0x3275, 0x51},\r
157         {0x3276, 0x72},\r
158         {0x3277, 0x8F},\r
159         {0x3278, 0xA7},\r
160         {0x3279, 0xBC},\r
161         {0x327A, 0xDC},\r
162         {0x327B, 0xF0},\r
163         {0x327C, 0xFA},\r
164         {0x327D, 0xFE},\r
165         {0x327E, 0xFF},\r
166         {0x3327, 0x00},\r
167         {0x3326, 0x1F},\r
168         {0x3360, 0x08},\r
169         {0x3361, 0x0E},\r
170         {0x3362, 0x14},\r
171         {0x3363, 0xB3},\r
172         {0x3331, 0x0C},\r
173         {0x3332, 0x60},\r
174         {0x3365, 0x10},\r
175         {0x3366, 0x10},\r
176         {0x3368, 0x08},\r
177         {0x3369, 0x08},\r
178         {0x336A, 0x06},\r
179         {0x336B, 0x00},\r
180         {0x336d, 0x14},\r
181         {0x336e, 0x14},\r
182         {0x336f, 0x00},\r
183         {0x3370, 0x00},\r
184         {0x3379, 0x0A},\r
185         {0x337A, 0x0A},\r
186         {0x337B, 0x0A},\r
187         {0x337C, 0x0A},\r
188         {0x3371, 0x38},\r
189         {0x3372, 0x38},\r
190         {0x3373, 0x3F},\r
191         {0x3374, 0x3F},\r
192         {0x33A2, 0x00},\r
193         {0x33A3, 0x30},\r
194         {0x33A4, 0x01},\r
195         {0x33c0, 0x03},\r
196         {0x33c9, 0xCF},\r
197         {0x33ca, 0x36},\r
198         SensorEnd\r
199 };\r
200 /* Senor full resolution setting: recommand for capture */\r
201 static struct rk_sensor_reg sensor_fullres_lowfps_data[] ={\r
202         {0x32BF, 0x60},\r
203         {0x32C0, 0x84},\r
204         {0x32C1, 0x84},\r
205         {0x32C2, 0x84},\r
206         {0x32C3, 0x00},\r
207         {0x32C4, 0x20},\r
208         {0x32C5, 0x10},\r
209         {0x32C6, 0x18},\r
210         {0x32C7, 0x00},\r
211         {0x32C8, 0x7E},\r
212         {0x32C9, 0x84},\r
213         {0x32CA, 0x94},\r
214         {0x32CB, 0x94},\r
215         {0x32CC, 0x9C},\r
216         {0x32CD, 0x9C},\r
217         {0x32DB, 0x6F},\r
218         {0x3241, 0x89},\r
219         {0x33A0, 0xAF},\r
220         {0x33A1, 0x64},\r
221         {0x3200, 0x3E},\r
222         {0x3201, 0x3F},\r
223         {0x302A, 0x00},\r
224         {0x302C, 0x0C},\r
225         {0x302C, 0x0B},\r
226         {0x302D, 0x02},\r
227         {0x3022, 0x24},\r
228         {0x3023, 0x24},\r
229         {0x3002, 0x00},\r
230         {0x3003, 0x04},\r
231         {0x3004, 0x00},\r
232         {0x3005, 0x04},\r
233         {0x3006, 0x06},\r
234         {0x3007, 0x43},\r
235         {0x3008, 0x04},\r
236         {0x3009, 0xCC},\r
237         {0x300A, 0x07},\r
238         {0x300B, 0x6C},\r
239         {0x300C, 0x09},\r
240         {0x300D, 0xDE},\r
241         {0x300E, 0x06},\r
242         {0x300F, 0x40},\r
243         {0x3010, 0x04},\r
244         {0x3011, 0xB0},\r
245         {0x32BB, 0x87},\r
246         {0x32B8, 0x36},\r
247         {0x32B9, 0x2A},\r
248         {0x32BC, 0x30},\r
249         {0x32BD, 0x33},\r
250         {0x32BE, 0x2D},\r
251         {0x325C, 0x03},\r
252         {0x320A, 0x00},\r
253         {0x3021, 0x06},\r
254         {0x334A, 0x34},\r
255         {0x334B, 0x14},\r
256         {0x334C, 0x10},\r
257         {0x3060, 0x01},\r
258         SensorEnd\r
259 };\r
260 /* Senor full resolution setting: recommand for video */\r
261 static struct rk_sensor_reg sensor_fullres_highfps_data[] ={\r
262         {0x32BF, 0x60},\r
263         {0x32C0, 0x74},\r
264         {0x32C1, 0x74},\r
265         {0x32C2, 0x74},\r
266         {0x32C3, 0x00},\r
267         {0x32C4, 0x20},\r
268         {0x32C5, 0x10},\r
269         {0x32C6, 0x18},\r
270         {0x32C7, 0x00},\r
271         {0x32C8, 0x7E},\r
272         {0x32C9, 0x74},\r
273         {0x32CA, 0x84},\r
274         {0x32CB, 0x84},\r
275         {0x32CC, 0x8C},\r
276         {0x32CD, 0x8C},\r
277         {0x32DB, 0x6F},\r
278         {0x3241, 0x81},\r
279         {0x33A0, 0xAF},\r
280         {0x33A1, 0x54},\r
281         {0x3200, 0x3E},\r
282         {0x3201, 0x3F},\r
283         {0x302A, 0x00},\r
284         {0x302C, 0x0C},\r
285         {0x302C, 0x0B},\r
286         {0x302D, 0x02},\r
287         {0x3022, 0x24},\r
288         {0x3023, 0x24},\r
289         {0x3002, 0x00},\r
290         {0x3003, 0x04},\r
291         {0x3004, 0x00},\r
292         {0x3005, 0x04},\r
293         {0x3006, 0x06},\r
294         {0x3007, 0x43},\r
295         {0x3008, 0x04},\r
296         {0x3009, 0xCC},\r
297         {0x300A, 0x07},\r
298         {0x300B, 0x6C},\r
299         {0x300C, 0x04},\r
300         {0x300D, 0xEF},\r
301         {0x300E, 0x06},\r
302         {0x300F, 0x40},\r
303         {0x3010, 0x04},\r
304         {0x3011, 0xB0},\r
305         {0x32BB, 0x87},\r
306         {0x32B8, 0x36},\r
307         {0x32B9, 0x2A},\r
308         {0x32BC, 0x30},\r
309         {0x32BD, 0x33},\r
310         {0x32BE, 0x2D},\r
311         {0x325C, 0x03},\r
312         {0x320A, 0x00},\r
313         {0x3021, 0x06},\r
314         {0x334A, 0x34},\r
315         {0x334B, 0x14},\r
316         {0x334C, 0x10},\r
317         {0x3060, 0x01},\r
318         SensorEnd\r
319 };\r
320 /* Preview resolution setting*/\r
321 static struct rk_sensor_reg sensor_preview_data[] ={\r
322         {0x32BF, 0x60},\r
323         {0x32C0, 0x6A},\r
324         {0x32C1, 0x6A},\r
325         {0x32C2, 0x6A},\r
326         {0x32C3, 0x00},\r
327         {0x32C4, 0x20},\r
328         {0x32C5, 0x20},\r
329         {0x32C6, 0x20},\r
330         {0x32C7, 0x00},\r
331         {0x32C8, 0xB9},\r
332         {0x32C9, 0x6A},\r
333         {0x32CA, 0x8A},\r
334         {0x32CB, 0x8A},\r
335         {0x32CC, 0x8A},\r
336         {0x32CD, 0x8A},\r
337         {0x32DB, 0x77},\r
338         {0x3241, 0x80},\r
339         {0x33A0, 0xB7},\r
340         {0x33A1, 0x4A},\r
341         {0x32E0, 0x03},\r
342         {0x32E1, 0x20},\r
343         {0x32E2, 0x02},\r
344         {0x32E3, 0x58},\r
345         {0x32E4, 0x00},\r
346         {0x32E5, 0x00},\r
347         {0x32E6, 0x00},\r
348         {0x32E7, 0x00},\r
349         {0x3200, 0x3E},\r
350         {0x3201, 0x7F},\r
351         {0x302A, 0x00},\r
352         {0x302C, 0x0C},\r
353         {0x302C, 0x0B},\r
354         {0x302D, 0x02},\r
355         {0x3022, 0x24},\r
356         {0x3023, 0x6E},\r
357         {0x3002, 0x00},\r
358         {0x3003, 0x04},//x_start=4\r
359         {0x3004, 0x00},\r
360         {0x3005, 0x04},//y_start=4\r
361         {0x3006, 0x06},\r
362         {0x3007, 0x43},//x_end=1603\r
363         {0x3008, 0x04},\r
364         {0x3009, 0xCC},//y_end=1228\r
365         {0x300A, 0x05},\r
366         {0x300B, 0x14},//pixel=1300\r
367         {0x300C, 0x02},\r
368         {0x300D, 0x67},//line=615\r
369         {0x300E, 0x03},\r
370         {0x300F, 0x20},//x_width=800\r
371         {0x3010, 0x02},\r
372         {0x3011, 0x58},//y_width=600\r
373         {0x32BB, 0x87},\r
374         {0x32B8, 0x36},\r
375         {0x32B9, 0x2A},\r
376         {0x32BC, 0x30},\r
377         {0x32BD, 0x33},\r
378         {0x32BE, 0x2D},\r
379         {0x325C, 0x02},\r
380         {0x320A, 0x00},\r
381         {0x3021, 0x06},\r
382         {0x334A, 0x00},\r
383         {0x334B, 0x7F},\r
384         {0x334C, 0x1F},\r
385         {0x3060, 0x01},\r
386         SensorEnd\r
387 };\r
388 /* 1280x720 */\r
389 static struct rk_sensor_reg sensor_720p[]={\r
390         {0x32BF, 0x60},\r
391         {0x32C0, 0x6A},  \r
392         {0x32C1, 0x6A},\r
393         {0x32C2, 0x6A},\r
394         {0x32C3, 0x00},\r
395         {0x32C4, 0x20},\r
396         {0x32C5, 0x20},\r
397         {0x32C6, 0x20},\r
398         {0x32C7, 0x00},\r
399         {0x32C8, 0x98},\r
400         {0x32C9, 0x6A},\r
401         {0x32CA, 0x8A},\r
402         {0x32CB, 0x8A},\r
403         {0x32CC, 0x8A},\r
404         {0x32CD, 0x8A},\r
405         {0x32DB, 0x73},\r
406         {0x3241, 0x7E},\r
407         {0x33A0, 0xB3},\r
408         {0x33A1, 0x4A},\r
409         {0x3200, 0x3E},\r
410         {0x3201, 0x3F},\r
411         {0x302A, 0x00},\r
412         {0x302C, 0x0C},\r
413         {0x302C, 0x0B},\r
414         {0x302D, 0x02},\r
415         {0x3022, 0x24},\r
416         {0x3023, 0x24},\r
417         {0x3002, 0x00},\r
418         {0x3003, 0xA4},\r
419         {0x3004, 0x00},\r
420         {0x3005, 0xF4},\r
421         {0x3006, 0x05},\r
422         {0x3007, 0xA3},\r
423         {0x3008, 0x04},\r
424         {0x3009, 0xCC},\r
425         {0x300A, 0x06},\r
426         {0x300B, 0x2C},\r
427         {0x300C, 0x02},\r
428         {0x300D, 0xDC},\r
429         {0x300E, 0x05},\r
430         {0x300F, 0x00},\r
431         {0x3010, 0x02},\r
432         {0x3011, 0xD0},\r
433         {0x32BB, 0x87},\r
434         {0x32B8, 0x36},\r
435         {0x32B9, 0x2A},\r
436         {0x32BC, 0x30},\r
437         {0x32BD, 0x33},\r
438         {0x32BE, 0x2D},\r
439         {0x325C, 0x03},\r
440         {0x320A, 0x00},\r
441         {0x3021, 0x06},\r
442         {0x334A, 0x00},\r
443         {0x334B, 0x7F},\r
444         {0x334C, 0x1F},\r
445         {0x3060, 0x01},\r
446         SensorEnd\r
447 };\r
448 \r
449 /* 1920x1080 */\r
450 static struct rk_sensor_reg sensor_1080p[]={\r
451         SensorEnd\r
452 };\r
453 \r
454 \r
455 static struct rk_sensor_reg sensor_softreset_data[]={\r
456     SensorRegVal(0x3021,0x61),\r
457         SensorEnd\r
458 };\r
459 \r
460 static struct rk_sensor_reg sensor_check_id_data[]={\r
461     SensorRegVal(0x3000,0),\r
462     SensorRegVal(0x3001,0),\r
463         SensorEnd\r
464 };\r
465 /*\r
466 *  The following setting must been filled, if the function is turn on by CONFIG_SENSOR_xxxx\r
467 */\r
468 static struct rk_sensor_reg sensor_WhiteB_Auto[]=\r
469 {\r
470         //[WB-AUTO]\r
471         {0x3201, 0x7F},  //AWB auto, bit[4]:1,auto\r
472         SensorEnd\r
473 };\r
474 /* Cloudy Colour Temperature : 6500K - 8000K  */\r
475 static  struct rk_sensor_reg sensor_WhiteB_Cloudy[]=\r
476 {\r
477         //[WB-CLOUDY]\r
478         {0x3201, 0x6F},\r
479         {0x3290, 0x01},\r
480         {0x3291, 0x51},\r
481         {0x3296, 0x01},\r
482         {0x3297, 0x00},\r
483         SensorEnd\r
484 };\r
485 /* ClearDay Colour Temperature : 5000K - 6500K  */\r
486 static  struct rk_sensor_reg sensor_WhiteB_ClearDay[]=\r
487 {\r
488         //[WB-DAYLIGHT]\r
489         {0x3201, 0x6F},\r
490         {0x3290, 0x01},\r
491         {0x3291, 0x38},\r
492         {0x3296, 0x01},\r
493         {0x3297, 0x68}, \r
494         SensorEnd\r
495 };\r
496 /* Office Colour Temperature : 3500K - 5000K  */\r
497 static  struct rk_sensor_reg sensor_WhiteB_TungstenLamp1[]=\r
498 {\r
499         //[WB-INCANDESCENCE]\r
500         {0x3201, 0x6F},\r
501         {0x3290, 0x01},\r
502         {0x3291, 0x30},\r
503         {0x3296, 0x01},\r
504         {0x3297, 0xCB},\r
505         SensorEnd\r
506 \r
507 };\r
508 /* Home Colour Temperature : 2500K - 3500K      */\r
509 static  struct rk_sensor_reg sensor_WhiteB_TungstenLamp2[]=\r
510 {\r
511         //[WB-FLUORESCENT]\r
512         {0x3201, 0x6F},\r
513         {0x3290, 0x01},\r
514         {0x3291, 0x70},\r
515         {0x3296, 0x01},\r
516         {0x3297, 0xFF},\r
517         SensorEnd\r
518 };\r
519 static  struct rk_sensor_reg sensor_WhiteB_TungstenLamp3[]=\r
520 {\r
521         //[WB-TUNGSTEN]\r
522         {0x3201, 0x6F},\r
523         {0x3290, 0x01},\r
524         {0x3291, 0x00},\r
525         {0x3296, 0x02},\r
526         {0x3297, 0x30}, \r
527         SensorEnd\r
528 };\r
529 \r
530 static struct rk_sensor_reg *sensor_WhiteBalanceSeqe[] = {sensor_WhiteB_Auto, sensor_WhiteB_TungstenLamp1,sensor_WhiteB_TungstenLamp2,\r
531         sensor_WhiteB_ClearDay, sensor_WhiteB_Cloudy, sensor_WhiteB_TungstenLamp3, NULL,\r
532 };\r
533 \r
534 static  struct rk_sensor_reg sensor_Brightness0[]=\r
535 {\r
536         // Brightness -2\r
537         SensorEnd\r
538 };\r
539 \r
540 static  struct rk_sensor_reg sensor_Brightness1[]=\r
541 {\r
542         // Brightness -1\r
543 \r
544         SensorEnd\r
545 };\r
546 \r
547 static  struct rk_sensor_reg sensor_Brightness2[]=\r
548 {\r
549         //      Brightness 0\r
550 \r
551         SensorEnd\r
552 };\r
553 \r
554 static  struct rk_sensor_reg sensor_Brightness3[]=\r
555 {\r
556         // Brightness +1\r
557 \r
558         SensorEnd\r
559 };\r
560 \r
561 static  struct rk_sensor_reg sensor_Brightness4[]=\r
562 {\r
563         //      Brightness +2\r
564 \r
565         SensorEnd\r
566 };\r
567 \r
568 static  struct rk_sensor_reg sensor_Brightness5[]=\r
569 {\r
570         //      Brightness +3\r
571 \r
572         SensorEnd\r
573 };\r
574 static struct rk_sensor_reg *sensor_BrightnessSeqe[] = {sensor_Brightness0, sensor_Brightness1, sensor_Brightness2, sensor_Brightness3,\r
575         sensor_Brightness4, sensor_Brightness5,NULL,\r
576 };\r
577 \r
578 static  struct rk_sensor_reg sensor_Effect_Normal[] =\r
579 {\r
580         {0x32f1, 0x00},\r
581         {0x32f8, 0x01},\r
582         SensorEnd\r
583 };\r
584 \r
585 static  struct rk_sensor_reg sensor_Effect_WandB[] =\r
586 {\r
587         //[SE-GrayScale]\r
588         {0x32f1, 0x01},\r
589         {0x32f8, 0x01},\r
590         SensorEnd\r
591 };\r
592 \r
593 static  struct rk_sensor_reg sensor_Effect_Sepia[] =\r
594 {\r
595         //[SE-SEPIA]\r
596         {0x32f1, 0x02},\r
597         {0x32f8, 0x01},\r
598         SensorEnd\r
599 };\r
600 \r
601 static  struct rk_sensor_reg sensor_Effect_Negative[] =\r
602 {\r
603         //[SE-Inverse] \r
604         {0x32f1, 0x03},\r
605         {0x32f8, 0x01},\r
606         SensorEnd\r
607 };\r
608 static  struct rk_sensor_reg sensor_Effect_Bluish[] =\r
609 {\r
610         //[SE-SEPIABlue]\r
611         {0x32f1, 0x05},\r
612         {0x32f4, 0xf0},\r
613         {0x32f5, 0x80},\r
614         {0x32f8, 0x01}, \r
615         SensorEnd\r
616 };\r
617 \r
618 static  struct rk_sensor_reg sensor_Effect_Green[] =\r
619 {\r
620         //[SE-SEPIAGreen]\r
621         {0x32f1, 0x05},\r
622         {0x32f4, 0x60},\r
623         {0x32f5, 0x20},\r
624         {0x32f8, 0x01},\r
625         SensorEnd\r
626 };\r
627 \r
628 static  struct rk_sensor_reg sensor_Effect_Solarization[] =\r
629 {\r
630         //[SE-Solarization]\r
631         {0x32f1, 0x04},\r
632         {0x32f8, 0x01},\r
633         SensorEnd\r
634 };\r
635 \r
636 static struct rk_sensor_reg *sensor_EffectSeqe[] = {sensor_Effect_Normal, sensor_Effect_WandB, sensor_Effect_Negative,sensor_Effect_Sepia,\r
637         sensor_Effect_Bluish, sensor_Effect_Green, sensor_Effect_Solarization, NULL,\r
638 };\r
639 \r
640 static  struct rk_sensor_reg sensor_Exposure04[]=\r
641 {\r
642         //[EV-4]                                \r
643         {0x32F2, 0x40},\r
644         {0x32F8, 0x01},\r
645         SensorEnd\r
646 };\r
647 \r
648 static  struct rk_sensor_reg sensor_Exposure03[]=\r
649 {\r
650         //[EV-3]                                \r
651         {0x32F2, 0x50},\r
652         {0x32F8, 0x01},\r
653         SensorEnd\r
654 };\r
655 \r
656 static  struct rk_sensor_reg sensor_Exposure02[]=\r
657 {\r
658         //[EV-2]              \r
659         {0x32F2, 0x60},\r
660         {0x32F8, 0x01},\r
661         SensorEnd\r
662 };\r
663 \r
664 static  struct rk_sensor_reg sensor_Exposure01[]=\r
665 {\r
666         //[EV-1]                                \r
667         {0x32F2, 0x70},\r
668         {0x32F8, 0x01},\r
669         SensorEnd\r
670 };\r
671 \r
672 static  struct rk_sensor_reg sensor_Exposure00[]=\r
673 {\r
674         //[EV+0]                                \r
675         {0x32F2, 0x80},\r
676         {0x32F8, 0x01},\r
677         SensorEnd\r
678 };\r
679 \r
680 static  struct rk_sensor_reg sensor_Exposure11[]=\r
681 {\r
682         //[EV+1]              \r
683         {0x32F2, 0x90},\r
684         {0x32F8, 0x01},\r
685         SensorEnd\r
686 };\r
687 \r
688 static  struct rk_sensor_reg sensor_Exposure12[]=\r
689 {\r
690         //[EV+2]                                \r
691         {0x32F2, 0xA0},\r
692         {0x32F8, 0x01},\r
693         SensorEnd\r
694 };\r
695 \r
696 static  struct rk_sensor_reg sensor_Exposure13[]=\r
697 {\r
698         //[EV+3]              \r
699         {0x32F2, 0xB0},\r
700         {0x32F8, 0x01},\r
701         SensorEnd\r
702 };\r
703 \r
704 static  struct rk_sensor_reg sensor_Exposure14[]=\r
705 {\r
706         //[EV+4]                                \r
707         {0x32F2, 0xC0},\r
708         {0x32F8, 0x01},\r
709         SensorEnd\r
710 };\r
711 \r
712 static struct rk_sensor_reg *sensor_ExposureSeqe[] = {sensor_Exposure04,sensor_Exposure03, sensor_Exposure02, sensor_Exposure01, sensor_Exposure00,\r
713         sensor_Exposure11, sensor_Exposure12,sensor_Exposure13,sensor_Exposure14,NULL,\r
714 };\r
715 \r
716 \r
717 static  struct rk_sensor_reg sensor_Saturation0[]=\r
718 {\r
719         SensorEnd\r
720 };\r
721 \r
722 static  struct rk_sensor_reg sensor_Saturation1[]=\r
723 {\r
724         SensorEnd\r
725 };\r
726 \r
727 static  struct rk_sensor_reg sensor_Saturation2[]=\r
728 {\r
729         SensorEnd\r
730 };\r
731 static struct rk_sensor_reg *sensor_SaturationSeqe[] = {sensor_Saturation0, sensor_Saturation1, sensor_Saturation2, NULL,};\r
732 \r
733 static  struct rk_sensor_reg sensor_Contrast04[]=\r
734 {\r
735         //[Contrast : -4]        \r
736         {0x32FC, 0x40},\r
737         {0x32F2, 0x40},\r
738         {0x32f8, 0x01},\r
739         SensorEnd\r
740 };\r
741 \r
742 static  struct rk_sensor_reg sensor_Contrast03[]=\r
743 {\r
744         //[Contrast : -3]            \r
745         {0x32FC, 0x30},\r
746         {0x32F2, 0x50},\r
747         {0x32f8, 0x01},\r
748         SensorEnd\r
749 };\r
750 \r
751 static  struct rk_sensor_reg sensor_Contrast02[]=\r
752 {\r
753         //[Contrast : -2]            \r
754         {0x32FC, 0x20},\r
755         {0x32F2, 0x60},\r
756         {0x32f8, 0x01},\r
757         SensorEnd\r
758 };\r
759 \r
760 static  struct rk_sensor_reg sensor_Contrast01[]=\r
761 {\r
762         //[Contrast : -1]      \r
763         {0x32FC, 0x10},\r
764         {0x32F2, 0x70},\r
765         {0x32f8, 0x01},\r
766         SensorEnd\r
767 };\r
768 \r
769 static  struct rk_sensor_reg sensor_Contrast00[]=\r
770 {\r
771         //[Contrast : 0]             \r
772         {0x32FC, 0x00},\r
773         {0x32F2, 0x80},\r
774         {0x32f8, 0x01},\r
775         SensorEnd\r
776 };\r
777 \r
778 static  struct rk_sensor_reg sensor_Contrast11[]=\r
779 {\r
780         //[Contrast : +1]            \r
781         {0x32FC, 0xF0},\r
782         {0x32F2, 0x90},\r
783         {0x32f8, 0x01},\r
784         SensorEnd\r
785 };\r
786 \r
787 \r
788 static  struct rk_sensor_reg sensor_Contrast12[]=\r
789 {\r
790         //[Contrast : +2]            \r
791         {0x32FC, 0xE0},\r
792         {0x32F2, 0xA0},\r
793         {0x32f8, 0x01},\r
794         SensorEnd\r
795 };\r
796 \r
797 static  struct rk_sensor_reg sensor_Contrast13[]=\r
798 {\r
799         //[Contrast : +3]            \r
800         {0x32FC, 0xD0},\r
801         {0x32F2, 0xB0},\r
802         {0x32f8, 0x01},\r
803         SensorEnd\r
804 };\r
805 \r
806 static  struct rk_sensor_reg sensor_Contrast14[]=\r
807 {\r
808         //[Contrast : +4]        \r
809         {0x32FC, 0xC0},\r
810         {0x32F2, 0xC0},\r
811         {0x32f8, 0x01},\r
812         SensorEnd\r
813 };\r
814 static struct rk_sensor_reg *sensor_ContrastSeqe[] = {sensor_Contrast04, sensor_Contrast03, sensor_Contrast02, sensor_Contrast01,\r
815         sensor_Contrast00, sensor_Contrast11, sensor_Contrast12, sensor_Contrast13, sensor_Contrast14,NULL,\r
816 };\r
817 \r
818 static  struct rk_sensor_reg sensor_SceneAuto[] =\r
819 {\r
820         SensorEnd\r
821 };\r
822 \r
823 static  struct rk_sensor_reg sensor_SceneNight[] =\r
824 {\r
825         SensorEnd\r
826 };\r
827 static struct rk_sensor_reg *sensor_SceneSeqe[] = {sensor_SceneAuto, sensor_SceneNight,NULL,};\r
828 \r
829 static struct rk_sensor_reg sensor_Zoom0[] =\r
830 {\r
831         SensorEnd\r
832 };\r
833 \r
834 static struct rk_sensor_reg sensor_Zoom1[] =\r
835 {\r
836         SensorEnd\r
837 };\r
838 \r
839 static struct rk_sensor_reg sensor_Zoom2[] =\r
840 {\r
841         SensorEnd\r
842 };\r
843 \r
844 \r
845 static struct rk_sensor_reg sensor_Zoom3[] =\r
846 {\r
847         SensorEnd\r
848 };\r
849 static struct rk_sensor_reg *sensor_ZoomSeqe[] = {sensor_Zoom0, sensor_Zoom1, sensor_Zoom2, sensor_Zoom3, NULL,};\r
850 \r
851 /*\r
852 * User could be add v4l2_querymenu in sensor_controls by new_usr_v4l2menu\r
853 */\r
854 static struct v4l2_querymenu sensor_menus[] =\r
855 {\r
856         //white balance\r
857         new_usr_v4l2menu(V4L2_CID_DO_WHITE_BALANCE,0,"auto",0),\r
858         new_usr_v4l2menu(V4L2_CID_DO_WHITE_BALANCE,1,"incandescent",0),\r
859         new_usr_v4l2menu(V4L2_CID_DO_WHITE_BALANCE,2,"fluorescent",0),\r
860         new_usr_v4l2menu(V4L2_CID_DO_WHITE_BALANCE,3,"daylight",0),\r
861         new_usr_v4l2menu(V4L2_CID_DO_WHITE_BALANCE,4,"cloudy-daylight",0),\r
862         new_usr_v4l2menu(V4L2_CID_DO_WHITE_BALANCE,5,"tungsten",0),\r
863 \r
864         //speical effect\r
865         new_usr_v4l2menu(V4L2_CID_EFFECT,0,"none",0),\r
866         new_usr_v4l2menu(V4L2_CID_EFFECT,1,"mono",0),\r
867         new_usr_v4l2menu(V4L2_CID_EFFECT,2,"negative",0),\r
868         new_usr_v4l2menu(V4L2_CID_EFFECT,3,"sepia",0),\r
869         new_usr_v4l2menu(V4L2_CID_EFFECT,4,"posterize",0),\r
870         new_usr_v4l2menu(V4L2_CID_EFFECT,5,"aqua",0),\r
871         new_usr_v4l2menu(V4L2_CID_EFFECT,6,"solarize",0),\r
872 \r
873 };\r
874 /*\r
875 * User could be add v4l2_queryctrl in sensor_controls by new_user_v4l2ctrl\r
876 */\r
877 static struct sensor_v4l2ctrl_usr_s sensor_controls[] =\r
878 {\r
879         new_user_v4l2ctrl(V4L2_CID_DO_WHITE_BALANCE,V4L2_CTRL_TYPE_MENU,"White Balance Control", 0, 5, 1, 0,sensor_v4l2ctrl_default_cb, sensor_WhiteBalanceSeqe),\r
880         new_user_v4l2ctrl(V4L2_CID_EXPOSURE,V4L2_CTRL_TYPE_INTEGER,"Exposure Control", -4, 4, 1, 0,sensor_v4l2ctrl_default_cb, sensor_ExposureSeqe),\r
881         new_user_v4l2ctrl(V4L2_CID_EFFECT,V4L2_CTRL_TYPE_MENU,"Effect Control", 0, 6, 1, 0,sensor_v4l2ctrl_default_cb, sensor_EffectSeqe),\r
882         new_user_v4l2ctrl(V4L2_CID_CONTRAST,V4L2_CTRL_TYPE_INTEGER,"Contrast Control", -4, 4, 1, 0,sensor_v4l2ctrl_default_cb, sensor_ContrastSeqe),\r
883 };\r
884 \r
885 //MUST define the current used format as the first item   \r
886 static struct rk_sensor_datafmt sensor_colour_fmts[] = {\r
887         {V4L2_MBUS_FMT_UYVY8_2X8, V4L2_COLORSPACE_JPEG},\r
888         {V4L2_MBUS_FMT_YUYV8_2X8, V4L2_COLORSPACE_JPEG} \r
889 };\r
890 static struct soc_camera_ops sensor_ops;\r
891 \r
892 \r
893 /*\r
894 **********************************************************\r
895 * Following is local code:\r
896\r
897 * Please codeing your program here \r
898 **********************************************************\r
899 */\r
900 static int sensor_parameter_record(struct i2c_client *client)\r
901 {\r
902         u8 ret_l,ret_m,ret_h;\r
903         int tp_l,tp_m,tp_h;\r
904         \r
905         struct generic_sensor *sensor = to_generic_sensor(client);\r
906         struct specific_sensor *spsensor = to_specific_sensor(sensor);\r
907 \r
908         sensor_read(client,0x3a00, &ret_l);\r
909         sensor_write(client,0x3a00, ret_l&0xfb);\r
910 \r
911         sensor_write(client,0x3503,0x07);       //stop AE/AG\r
912 \r
913         sensor_read(client,0x3500,&ret_h);\r
914         sensor_read(client,0x3501, &ret_m);\r
915         sensor_read(client,0x3502, &ret_l);\r
916         tp_l = ret_l;\r
917         tp_m = ret_m;\r
918         tp_h = ret_h;\r
919         spsensor->parameter.preview_exposure = ((tp_h<<12) & 0xF000) | ((tp_m<<4) & 0x0FF0) | ((tp_l>>4) & 0x0F);\r
920         \r
921         //Read back AGC Gain for preview\r
922         sensor_read(client,0x350b, &ret_l);\r
923         spsensor->parameter.preview_gain = ret_l;\r
924 \r
925         spsensor->parameter.CapturePclk = 24000;\r
926         spsensor->parameter.PreviewPclk = 24000;\r
927         spsensor->parameter.PreviewDummyPixels = 0;\r
928         spsensor->parameter.CaptureDummyPixels = 0;\r
929         SENSOR_DG("Read 0x350b=0x%02x  PreviewExposure:%d 0x3500=0x%02x  0x3501=0x%02x 0x3502=0x%02x",\r
930                   ret_l,spsensor->parameter.preview_exposure,tp_h, tp_m, tp_l);\r
931         return 0;\r
932 }\r
933 #define OV2659_FULL_PERIOD_PIXEL_NUMS  (1940)  // default pixel#(w/o dummy pixels) in UXGA mode\r
934 #define OV2659_FULL_PERIOD_LINE_NUMS   (1238)  // default line#(w/o dummy lines) in UXGA mode\r
935 #define OV2659_PV_PERIOD_PIXEL_NUMS   (970)  // default pixel#(w/o dummy pixels) in SVGA mode\r
936 #define OV2659_PV_PERIOD_LINE_NUMS        (618)   // default line#(w/o dummy lines) in SVGA mode\r
937 \r
938 /* SENSOR EXPOSURE LINE LIMITATION */\r
939 #define OV2659_FULL_EXPOSURE_LIMITATION   (1236)\r
940 #define OV2659_PV_EXPOSURE_LIMITATION     (618)\r
941 \r
942 // SENSOR UXGA SIZE\r
943 #define OV2659_IMAGE_SENSOR_FULL_WIDTH    (1600)\r
944 #define OV2659_IMAGE_SENSOR_FULL_HEIGHT   (1200)\r
945 \r
946 #define OV2659_FULL_GRAB_WIDTH                          (OV2659_IMAGE_SENSOR_FULL_WIDTH - 16)\r
947 #define OV2659_FULL_GRAB_HEIGHT                         (OV2659_IMAGE_SENSOR_FULL_HEIGHT - 12)\r
948 \r
949 /*\r
950 **********************************************************\r
951 * Following is callback\r
952 * If necessary, you could coding these callback\r
953 **********************************************************\r
954 */\r
955 /*\r
956 * the function is called in open sensor  \r
957 */\r
958 static int sensor_activate_cb(struct i2c_client *client)\r
959 {\r
960     u8 reg_val;\r
961 \r
962     SENSOR_DG("%s",__FUNCTION__);       \r
963         return 0;\r
964 }\r
965 /*\r
966 * the function is called in close sensor\r
967 */\r
968 static int sensor_deactivate_cb(struct i2c_client *client)\r
969 {\r
970         u8 reg_val;\r
971         struct generic_sensor *sensor = to_generic_sensor(client);\r
972 \r
973     SENSOR_DG("%s",__FUNCTION__);\r
974     \r
975         /* ddl@rock-chips.com : all sensor output pin must switch into Hi-Z */\r
976         if (sensor->info_priv.funmodule_state & SENSOR_INIT_IS_OK) {\r
977                 //generic_sensor_ioctrl(icd, Sensor_PowerDown, 1);\r
978                  sensor->info_priv.funmodule_state &= ~SENSOR_INIT_IS_OK;\r
979         }\r
980         return 0;\r
981 }\r
982 /*\r
983 * the function is called before sensor register setting in VIDIOC_S_FMT  \r
984 */\r
985 static int sensor_s_fmt_cb_th(struct i2c_client *client,struct v4l2_mbus_framefmt *mf, bool capture)\r
986 {\r
987     if (capture) {\r
988         //sensor_parameter_record(client);\r
989     }\r
990 \r
991     return 0;\r
992 }\r
993 /*\r
994 * the function is called after sensor register setting finished in VIDIOC_S_FMT  \r
995 */\r
996 static int sensor_s_fmt_cb_bh (struct i2c_client *client,struct v4l2_mbus_framefmt *mf, bool capture)\r
997 {\r
998     if (capture) {\r
999         //sensor_ae_transfer(client);\r
1000     }\r
1001     return 0;\r
1002 }\r
1003 \r
1004 static int sensor_try_fmt_cb_th(struct i2c_client *client,struct v4l2_mbus_framefmt *mf)\r
1005 {\r
1006         return 0;\r
1007 }\r
1008 \r
1009 static int sensor_softrest_usr_cb(struct i2c_client *client,struct rk_sensor_reg *series)\r
1010 {\r
1011         \r
1012         return 0;\r
1013 }\r
1014 static int sensor_check_id_usr_cb(struct i2c_client *client,struct rk_sensor_reg *series)\r
1015 {\r
1016         return 0;\r
1017 }\r
1018 \r
1019 static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg)\r
1020 {\r
1021         //struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));\r
1022                 \r
1023         if (pm_msg.event == PM_EVENT_SUSPEND) {\r
1024                 SENSOR_DG("Suspend");\r
1025                 \r
1026         } else {\r
1027                 SENSOR_TR("pm_msg.event(0x%x) != PM_EVENT_SUSPEND\n",pm_msg.event);\r
1028                 return -EINVAL;\r
1029         }\r
1030         return 0;\r
1031 }\r
1032 \r
1033 static int sensor_resume(struct soc_camera_device *icd)\r
1034 {\r
1035 \r
1036         SENSOR_DG("Resume");\r
1037 \r
1038         return 0;\r
1039 \r
1040 }\r
1041 static int sensor_mirror_cb (struct i2c_client *client, int mirror)\r
1042 {\r
1043         char val;\r
1044         int err = 0;\r
1045     \r
1046     SENSOR_DG("mirror: %d",mirror);\r
1047         if (mirror) {\r
1048                 err = sensor_read(client, 0x3022, &val);\r
1049                 if (err == 0) {\r
1050                         val |= 0x02;\r
1051                         err = sensor_write(client, 0x3022, val);\r
1052                 }\r
1053         } else {\r
1054                 err = sensor_read(client, 0x3022, &val);\r
1055                 if (err == 0) {\r
1056                         val &= 0xfd;\r
1057                         err = sensor_write(client, 0x3022, val);\r
1058                 }\r
1059         }\r
1060 \r
1061         return err;    \r
1062 }\r
1063 /*\r
1064 * the function is v4l2 control V4L2_CID_HFLIP callback  \r
1065 */\r
1066 static int sensor_v4l2ctrl_mirror_cb(struct soc_camera_device *icd, struct sensor_v4l2ctrl_info_s *ctrl_info, \r
1067                                                      struct v4l2_ext_control *ext_ctrl)\r
1068 {\r
1069         struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));\r
1070 \r
1071     if (sensor_mirror_cb(client,ext_ctrl->value) != 0)\r
1072                 SENSOR_TR("sensor_mirror failed, value:0x%x",ext_ctrl->value);\r
1073         \r
1074         SENSOR_DG("sensor_mirror success, value:0x%x",ext_ctrl->value);\r
1075         return 0;\r
1076 }\r
1077 \r
1078 static int sensor_flip_cb(struct i2c_client *client, int flip)\r
1079 {\r
1080         char val;\r
1081         int err = 0;    \r
1082 \r
1083     SENSOR_DG("flip: %d",flip);\r
1084         if (flip) {\r
1085                 err = sensor_read(client, 0x3022, &val);\r
1086                 if (err == 0) {\r
1087                         val |= 0x01;\r
1088                         err = sensor_write(client, 0x3022, val);\r
1089                 }\r
1090         } else {\r
1091                 err = sensor_read(client, 0x3022, &val);\r
1092                 if (err == 0) {\r
1093                         val &= 0xfe;\r
1094                         err = sensor_write(client, 0x3022, val);\r
1095                 }\r
1096         }\r
1097 \r
1098         return err;    \r
1099 }\r
1100 /*\r
1101 * the function is v4l2 control V4L2_CID_VFLIP callback  \r
1102 */\r
1103 static int sensor_v4l2ctrl_flip_cb(struct soc_camera_device *icd, struct sensor_v4l2ctrl_info_s *ctrl_info, \r
1104                                                      struct v4l2_ext_control *ext_ctrl)\r
1105 {\r
1106         struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));\r
1107 \r
1108     if (sensor_flip_cb(client,ext_ctrl->value) != 0)\r
1109                 SENSOR_TR("sensor_flip failed, value:0x%x",ext_ctrl->value);\r
1110         \r
1111         SENSOR_DG("sensor_flip success, value:0x%x",ext_ctrl->value);\r
1112         return 0;\r
1113 }\r
1114 static int sensor_focus_init_usr_cb(struct i2c_client *client){\r
1115         return 0;\r
1116 }\r
1117 \r
1118 static int sensor_focus_af_single_usr_cb(struct i2c_client *client){\r
1119         return 0;\r
1120 }\r
1121 \r
1122 static int sensor_focus_af_near_usr_cb(struct i2c_client *client){\r
1123         return 0;\r
1124 }\r
1125 \r
1126 static int sensor_focus_af_far_usr_cb(struct i2c_client *client){\r
1127         return 0;\r
1128 }\r
1129 \r
1130 static int sensor_focus_af_specialpos_usr_cb(struct i2c_client *client,int pos){\r
1131         return 0;\r
1132 }\r
1133 \r
1134 static int sensor_focus_af_const_usr_cb(struct i2c_client *client){\r
1135         return 0;\r
1136 }\r
1137 static int sensor_focus_af_close_usr_cb(struct i2c_client *client){\r
1138         return 0;\r
1139 }\r
1140 \r
1141 static int sensor_focus_af_zoneupdate_usr_cb(struct i2c_client *client){\r
1142         return 0;\r
1143 }\r
1144 \r
1145 /*\r
1146 face defect call back\r
1147 */\r
1148 static int      sensor_face_detect_usr_cb(struct i2c_client *client,int on){\r
1149         return 0;\r
1150 }\r
1151 \r
1152 /*\r
1153 *   The function can been run in sensor_init_parametres which run in sensor_probe, so user can do some\r
1154 * initialization in the function. \r
1155 */\r
1156 static void sensor_init_parameters_user(struct specific_sensor* spsensor,struct soc_camera_device *icd)\r
1157 {\r
1158     return;\r
1159 }\r
1160 \r
1161 /*\r
1162 * :::::WARNING:::::\r
1163 * It is not allowed to modify the following code\r
1164 */\r
1165 \r
1166 sensor_init_parameters_default_code();\r
1167 \r
1168 sensor_v4l2_struct_initialization();\r
1169 \r
1170 sensor_probe_default_code();\r
1171 \r
1172 sensor_remove_default_code();\r
1173 \r
1174 sensor_driver_default_module_code();\r
1175 \r
1176 \r
1177 \r