camera: support query framerate and support detect framerate, version update to v0.1.5
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / rk29_camera.c
1 #include <mach/rk29_camera.h> \r
2 #include <mach/iomux.h>\r
3 #ifndef PMEM_CAM_SIZE\r
4 #ifdef CONFIG_VIDEO_RK29 \r
5 /*---------------- Camera Sensor Fixed Macro Begin  ------------------------*/\r
6 // Below Macro is fixed, programer don't change it!!!!!!\r
7 #define _CONS(a,b) a##b\r
8 #define CONS(a,b) _CONS(a,b)\r
9 \r
10 #define __STR(x) #x\r
11 #define _STR(x) __STR(x)\r
12 #define STR(x) _STR(x)\r
13 \r
14 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
15 #define PMEM_SENSOR_FULL_RESOLUTION_0  CONS(CONFIG_SENSOR_0,_FULL_RESOLUTION)\r
16 #if !(PMEM_SENSOR_FULL_RESOLUTION_0)\r
17 #undef PMEM_SENSOR_FULL_RESOLUTION_0\r
18 #define PMEM_SENSOR_FULL_RESOLUTION_0  0x500000\r
19 #endif\r
20 #else\r
21 #define PMEM_SENSOR_FULL_RESOLUTION_0  0x00\r
22 #endif\r
23  \r
24 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
25 #define PMEM_SENSOR_FULL_RESOLUTION_1  CONS(CONFIG_SENSOR_1,_FULL_RESOLUTION)\r
26 #if !(PMEM_SENSOR_FULL_RESOLUTION_1)\r
27 #undef PMEM_SENSOR_FULL_RESOLUTION_1\r
28 #define PMEM_SENSOR_FULL_RESOLUTION_1  0x500000\r
29 #endif\r
30 #else\r
31 #define PMEM_SENSOR_FULL_RESOLUTION_1  0x00\r
32 #endif\r
33 \r
34 #if (PMEM_SENSOR_FULL_RESOLUTION_0 > PMEM_SENSOR_FULL_RESOLUTION_1)\r
35 #define PMEM_CAM_FULL_RESOLUTION   PMEM_SENSOR_FULL_RESOLUTION_0\r
36 #else\r
37 #define PMEM_CAM_FULL_RESOLUTION   PMEM_SENSOR_FULL_RESOLUTION_1\r
38 #endif\r
39 \r
40 #if (PMEM_CAM_FULL_RESOLUTION == 0x500000)\r
41 #define PMEM_CAM_NECESSARY   0x1200000       /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */\r
42 #define PMEM_CAMIPP_NECESSARY    0x800000\r
43 #elif (PMEM_CAM_FULL_RESOLUTION == 0x300000)\r
44 #define PMEM_CAM_NECESSARY   0xe00000        /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */\r
45 #define PMEM_CAMIPP_NECESSARY    0x500000\r
46 #elif (PMEM_CAM_FULL_RESOLUTION == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
47 #define PMEM_CAM_NECESSARY   0xc00000\r
48 #define PMEM_CAMIPP_NECESSARY    0x400000\r
49 #elif ((PMEM_CAM_FULL_RESOLUTION == 0x100000) || (PMEM_CAM_FULL_RESOLUTION == 0x130000))\r
50 #define PMEM_CAM_NECESSARY   0x800000        /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
51 #define PMEM_CAMIPP_NECESSARY    0x400000\r
52 #elif (PMEM_CAM_FULL_RESOLUTION == 0x30000)\r
53 #define PMEM_CAM_NECESSARY   0x400000        /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */\r
54 #define PMEM_CAMIPP_NECESSARY    0x400000\r
55 #else\r
56 #define PMEM_CAM_NECESSARY   0x1200000\r
57 #define PMEM_CAMIPP_NECESSARY    0x800000\r
58 #endif\r
59 /*---------------- Camera Sensor Fixed Macro End  ------------------------*/\r
60 #else   //#ifdef CONFIG_VIDEO_RK29 \r
61 #define PMEM_CAM_NECESSARY   0x00000000\r
62 #endif\r
63 #else   // #ifdef PMEM_CAM_SIZE\r
64 \r
65 /*****************************************************************************************\r
66  * camera  devices\r
67  * author: ddl@rock-chips.com\r
68  *****************************************************************************************/\r
69 #ifdef CONFIG_VIDEO_RK29 \r
70 static int camera_debug;\r
71 module_param(camera_debug, int, S_IRUGO|S_IWUSR);\r
72 \r
73 #define ddprintk(level, fmt, arg...) do {                       \\r
74         if (camera_debug >= level)                                      \\r
75             printk(KERN_WARNING"rk29_cam_io: " fmt , ## arg); } while (0)\r
76 \r
77 #define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__)    \r
78 \r
79 #define SENSOR_NAME_0 STR(CONFIG_SENSOR_0)                      /* back camera sensor */\r
80 #define SENSOR_NAME_1 STR(CONFIG_SENSOR_1)                      /* front camera sensor */\r
81 #define SENSOR_DEVICE_NAME_0  STR(CONS(CONFIG_SENSOR_0, _back))\r
82 #define SENSOR_DEVICE_NAME_1  STR(CONS(CONFIG_SENSOR_1, _front))\r
83 \r
84 static int rk29_sensor_io_init(void);\r
85 static int rk29_sensor_io_deinit(int sensor);\r
86 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);\r
87 \r
88 static struct rk29camera_platform_data rk29_camera_platform_data = {\r
89     .io_init = rk29_sensor_io_init,\r
90     .io_deinit = rk29_sensor_io_deinit,\r
91     .sensor_ioctrl = rk29_sensor_ioctrl,\r
92     .gpio_res = {\r
93         {\r
94             .gpio_reset = CONFIG_SENSOR_RESET_PIN_0,\r
95             .gpio_power = CONFIG_SENSOR_POWER_PIN_0,\r
96             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_0,\r
97             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_0,\r
98             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_0|CONFIG_SENSOR_RESETACTIVE_LEVEL_0|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0|CONFIG_SENSOR_FLASHACTIVE_LEVEL_0),\r
99             .gpio_init = 0,            \r
100             .dev_name = SENSOR_DEVICE_NAME_0,\r
101         }, {\r
102             .gpio_reset = CONFIG_SENSOR_RESET_PIN_1,\r
103             .gpio_power = CONFIG_SENSOR_POWER_PIN_1,\r
104             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1,\r
105             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1,\r
106             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1),\r
107             .gpio_init = 0,\r
108             .dev_name = SENSOR_DEVICE_NAME_1,\r
109         }\r
110     },\r
111         #ifdef CONFIG_VIDEO_RK29_WORK_IPP\r
112         .meminfo = {\r
113             .name  = "camera_ipp_mem",\r
114                 .start = MEM_CAMIPP_BASE,\r
115                 .size   = MEM_CAMIPP_SIZE,\r
116         },\r
117         #endif\r
118     .info = {\r
119         {\r
120             .dev_name = SENSOR_DEVICE_NAME_0,\r
121             .orientation = CONFIG_SENSOR_ORIENTATION_0, \r
122             },{\r
123             .dev_name = SENSOR_DEVICE_NAME_1,\r
124             .orientation = CONFIG_SENSOR_ORIENTATION_1,\r
125         }\r
126         }\r
127 };\r
128 \r
129 static int rk29_sensor_iomux(int pin)\r
130 {    \r
131     switch (pin)\r
132     {\r
133         case RK29_PIN0_PA0:        \r
134         case RK29_PIN0_PA1:        \r
135         case RK29_PIN0_PA2:\r
136         case RK29_PIN0_PA3:\r
137         case RK29_PIN0_PA4:\r
138         {\r
139             break;      \r
140         }\r
141         case RK29_PIN0_PA5:\r
142         {\r
143              rk29_mux_api_set(GPIO0A5_FLASHDQS_NAME,0);\r
144             break;      \r
145         }\r
146         case RK29_PIN0_PA6:\r
147         {\r
148              rk29_mux_api_set(GPIO0A6_MIIMD_NAME,0);\r
149             break;      \r
150         }\r
151         case RK29_PIN0_PA7:\r
152         {\r
153              rk29_mux_api_set(GPIO0A7_MIIMDCLK_NAME,0);\r
154             break;      \r
155         }\r
156         case RK29_PIN0_PB0:\r
157         {\r
158              rk29_mux_api_set(GPIO0B0_EBCSDCE0_SMCADDR0_HOSTDATA0_NAME,0);\r
159             break;      \r
160         }\r
161         case RK29_PIN0_PB1:\r
162         {\r
163              rk29_mux_api_set(GPIO0B1_EBCSDCE1_SMCADDR1_HOSTDATA1_NAME,0);\r
164             break;      \r
165         }\r
166         case RK29_PIN0_PB2:\r
167         {\r
168              rk29_mux_api_set(GPIO0B2_EBCSDCE2_SMCADDR2_HOSTDATA2_NAME,0);\r
169             break;      \r
170         }\r
171         case RK29_PIN0_PB3:\r
172         {\r
173              rk29_mux_api_set(GPIO0B3_EBCBORDER0_SMCADDR3_HOSTDATA3_NAME,0);\r
174             break;      \r
175         }\r
176         case RK29_PIN0_PB4:\r
177         {\r
178              rk29_mux_api_set(GPIO0B4_EBCBORDER1_SMCWEN_NAME,0);\r
179             break;      \r
180         }\r
181         case RK29_PIN0_PB5:\r
182         {\r
183              rk29_mux_api_set(GPIO0B5_EBCVCOM_SMCBLSN0_NAME,0);\r
184             break;      \r
185         }\r
186         case RK29_PIN0_PB6:\r
187         {\r
188              rk29_mux_api_set(GPIO0B6_EBCSDSHR_SMCBLSN1_HOSTINT_NAME,0);\r
189             break;      \r
190         }\r
191         case RK29_PIN0_PB7:\r
192         {\r
193              rk29_mux_api_set(GPIO0B7_EBCGDOE_SMCOEN_NAME,0);\r
194             break;      \r
195         }\r
196         case RK29_PIN0_PC0:\r
197         {\r
198              rk29_mux_api_set(GPIO0C0_EBCGDSP_SMCDATA8_NAME,0);\r
199             break;      \r
200         }\r
201         case RK29_PIN0_PC1:\r
202         {\r
203              rk29_mux_api_set(GPIO0C1_EBCGDR1_SMCDATA9_NAME,0);\r
204             break;      \r
205         }\r
206         case RK29_PIN0_PC2:\r
207         {\r
208              rk29_mux_api_set(GPIO0C2_EBCSDCE0_SMCDATA10_NAME,0);\r
209             break;      \r
210         }\r
211         case RK29_PIN0_PC3:\r
212         {\r
213              rk29_mux_api_set(GPIO0C3_EBCSDCE1_SMCDATA11_NAME,0);\r
214             break;      \r
215         }\r
216         case RK29_PIN0_PC4:\r
217         {\r
218              rk29_mux_api_set(GPIO0C4_EBCSDCE2_SMCDATA12_NAME,0);\r
219             break;      \r
220         }\r
221         case RK29_PIN0_PC5:\r
222         {\r
223              rk29_mux_api_set(GPIO0C5_EBCSDCE3_SMCDATA13_NAME,0);\r
224             break;      \r
225         }\r
226         case RK29_PIN0_PC6:\r
227         {\r
228              rk29_mux_api_set(GPIO0C6_EBCSDCE4_SMCDATA14_NAME,0);\r
229             break;      \r
230         }\r
231         case RK29_PIN0_PC7:\r
232         {\r
233              rk29_mux_api_set(GPIO0C7_EBCSDCE5_SMCDATA15_NAME,0);\r
234             break;      \r
235         }\r
236         case RK29_PIN0_PD0:\r
237         {\r
238              rk29_mux_api_set(GPIO0D0_EBCSDOE_SMCADVN_NAME,0);\r
239             break;      \r
240         }\r
241         case RK29_PIN0_PD1:\r
242         {\r
243              rk29_mux_api_set(GPIO0D1_EBCGDCLK_SMCADDR4_HOSTDATA4_NAME,0);\r
244             break;      \r
245         }\r
246         case RK29_PIN0_PD2:\r
247         {\r
248              rk29_mux_api_set(GPIO0D2_FLASHCSN1_NAME,0);\r
249             break;      \r
250         }\r
251         case RK29_PIN0_PD3:\r
252         {\r
253              rk29_mux_api_set(GPIO0D3_FLASHCSN2_NAME,0);\r
254             break;      \r
255         }\r
256         case RK29_PIN0_PD4:\r
257         {\r
258              rk29_mux_api_set(GPIO0D4_FLASHCSN3_NAME,0);\r
259             break;      \r
260         }\r
261         case RK29_PIN0_PD5:\r
262         {\r
263              rk29_mux_api_set(GPIO0D5_FLASHCSN4_NAME,0);\r
264             break;      \r
265         }\r
266         case RK29_PIN0_PD6:\r
267         {\r
268              rk29_mux_api_set(GPIO0D6_FLASHCSN5_NAME,0);\r
269             break;      \r
270         }\r
271         case RK29_PIN0_PD7:\r
272         {\r
273              rk29_mux_api_set(GPIO0D7_FLASHCSN6_NAME,0);\r
274             break;      \r
275         }\r
276         case RK29_PIN1_PA0:\r
277         {\r
278              rk29_mux_api_set(GPIO1A0_FLASHCS7_MDDRTQ_NAME,0);\r
279             break;      \r
280         }\r
281         case RK29_PIN1_PA1:\r
282         {\r
283              rk29_mux_api_set(GPIO1A1_SMCCSN0_NAME,0);\r
284             break;      \r
285         }\r
286         case RK29_PIN1_PA2:\r
287         {\r
288              rk29_mux_api_set(GPIO1A2_SMCCSN1_NAME,0);\r
289             break;      \r
290         }\r
291         case RK29_PIN1_PA3:\r
292         {\r
293              rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,0);\r
294             break;      \r
295         }\r
296         case RK29_PIN1_PA4:\r
297         {\r
298              rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,0);\r
299             break;      \r
300         }\r
301         case RK29_PIN1_PA5:\r
302         {\r
303              rk29_mux_api_set(GPIO1A5_EMMCPWREN_PWM3_NAME,0);\r
304             break;      \r
305         }\r
306         case RK29_PIN1_PA6:\r
307         {\r
308              rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME,0);\r
309             break;      \r
310         }\r
311         case RK29_PIN1_PA7:\r
312         {\r
313              rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME,0);\r
314             break;      \r
315         }\r
316         case RK29_PIN1_PB0:\r
317         {\r
318              rk29_mux_api_set(GPIO1B0_VIPDATA0_NAME,0);\r
319             break;      \r
320         }\r
321         case RK29_PIN1_PB1:\r
322         {\r
323              rk29_mux_api_set(GPIO1B1_VIPDATA1_NAME,0);\r
324             break;      \r
325         }\r
326         case RK29_PIN1_PB2:\r
327         {\r
328              rk29_mux_api_set(GPIO1B2_VIPDATA2_NAME,0);\r
329             break;      \r
330         }\r
331         case RK29_PIN1_PB3:\r
332         {\r
333              rk29_mux_api_set(GPIO1B3_VIPDATA3_NAME,0);\r
334             break;      \r
335         }\r
336         case RK29_PIN1_PB4:\r
337         {\r
338              rk29_mux_api_set(GPIO1B4_VIPCLKOUT_NAME,0);\r
339             break;      \r
340         }\r
341         case RK29_PIN1_PB5:\r
342         {\r
343              rk29_mux_api_set(GPIO1B5_PWM0_NAME,0);\r
344             break;      \r
345         }\r
346         case RK29_PIN1_PB6:\r
347         {\r
348              rk29_mux_api_set(GPIO1B6_UART0SIN_NAME,0);\r
349             break;      \r
350         }\r
351         case RK29_PIN1_PB7:\r
352         {\r
353              rk29_mux_api_set(GPIO1B7_UART0SOUT_NAME,0);\r
354             break;      \r
355         }\r
356         case RK29_PIN1_PC0:\r
357         {\r
358              rk29_mux_api_set(GPIO1C0_UART0CTSN_SDMMC1DETECTN_NAME,0);\r
359             break;      \r
360         }\r
361         case RK29_PIN1_PC1:\r
362         {\r
363              rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME,0);\r
364             break;      \r
365         }\r
366         case RK29_PIN1_PC2:\r
367         {\r
368              rk29_mux_api_set(GPIO1C2_SDMMC1CMD_NAME,0);\r
369             break;      \r
370         }\r
371         case RK29_PIN1_PC3:\r
372         {\r
373              rk29_mux_api_set(GPIO1C3_SDMMC1DATA0_NAME,0);\r
374             break;      \r
375         }\r
376         case RK29_PIN1_PC4:\r
377         {\r
378              rk29_mux_api_set(GPIO1C4_SDMMC1DATA1_NAME,0);\r
379             break;      \r
380         }\r
381         case RK29_PIN1_PC5:\r
382         {\r
383              rk29_mux_api_set(GPIO1C5_SDMMC1DATA2_NAME,0);\r
384             break;      \r
385         }\r
386         case RK29_PIN1_PC6:\r
387         {\r
388              rk29_mux_api_set(GPIO1C6_SDMMC1DATA3_NAME,0);\r
389             break;      \r
390         }\r
391         case RK29_PIN1_PC7:\r
392         {\r
393              rk29_mux_api_set(GPIO1C7_SDMMC1CLKOUT_NAME,0);\r
394             break;      \r
395         }\r
396         case RK29_PIN1_PD0:\r
397         {\r
398              rk29_mux_api_set(GPIO1D0_SDMMC0CLKOUT_NAME,0);\r
399             break;      \r
400         }\r
401         case RK29_PIN1_PD1:\r
402         {\r
403              rk29_mux_api_set(GPIO1D1_SDMMC0CMD_NAME,0);\r
404             break;      \r
405         }\r
406         case RK29_PIN1_PD2:\r
407         {\r
408              rk29_mux_api_set(GPIO1D2_SDMMC0DATA0_NAME,0);\r
409             break;      \r
410         }\r
411         case RK29_PIN1_PD3:\r
412         {\r
413              rk29_mux_api_set(GPIO1D3_SDMMC0DATA1_NAME,0);\r
414             break;      \r
415         }\r
416         case RK29_PIN1_PD4:\r
417         {\r
418              rk29_mux_api_set(GPIO1D4_SDMMC0DATA2_NAME,0);\r
419             break;      \r
420         }\r
421         case RK29_PIN1_PD5:\r
422         {\r
423              rk29_mux_api_set(GPIO1D5_SDMMC0DATA3_NAME,0);\r
424             break;      \r
425         }\r
426         case RK29_PIN1_PD6:\r
427         {\r
428              rk29_mux_api_set(GPIO1D6_SDMMC0DATA4_NAME,0);\r
429             break;      \r
430         }\r
431         case RK29_PIN1_PD7:\r
432         {\r
433              rk29_mux_api_set(GPIO1D7_SDMMC0DATA5_NAME,0);\r
434             break;      \r
435         }\r
436         case RK29_PIN2_PA0:\r
437         {\r
438              rk29_mux_api_set(GPIO2A0_SDMMC0DATA6_NAME,0);\r
439             break;      \r
440         }\r
441         case RK29_PIN2_PA1:\r
442         {\r
443              rk29_mux_api_set(GPIO2A1_SDMMC0DATA7_NAME,0);\r
444             break;      \r
445         }\r
446         case RK29_PIN2_PA2:\r
447         {\r
448              rk29_mux_api_set(GPIO2A2_SDMMC0DETECTN_NAME,0);\r
449             break;      \r
450         }\r
451         case RK29_PIN2_PA3:\r
452         {\r
453              rk29_mux_api_set(GPIO2A3_SDMMC0WRITEPRT_PWM2_NAME,0);\r
454             break;      \r
455         }\r
456         case RK29_PIN2_PA4:\r
457         {\r
458              rk29_mux_api_set(GPIO2A4_UART1SIN_NAME,0);\r
459             break;      \r
460         }\r
461         case RK29_PIN2_PA5:\r
462         {\r
463              rk29_mux_api_set(GPIO2A5_UART1SOUT_NAME,0);\r
464             break;      \r
465         }\r
466         case RK29_PIN2_PA6:\r
467         {\r
468              rk29_mux_api_set(GPIO2A6_UART2CTSN_NAME,0);\r
469             break;      \r
470         }\r
471         case RK29_PIN2_PA7:\r
472         {\r
473              rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME,0);\r
474             break;      \r
475         }\r
476         case RK29_PIN2_PB0:\r
477         {\r
478              rk29_mux_api_set(GPIO2B0_UART2SIN_NAME,0);\r
479             break;      \r
480         }\r
481         case RK29_PIN2_PB1:\r
482         {\r
483              rk29_mux_api_set(GPIO2B1_UART2SOUT_NAME,0);\r
484             break;      \r
485         }\r
486         case RK29_PIN2_PB2:\r
487         {\r
488              rk29_mux_api_set(GPIO2B2_UART3SIN_NAME,0);\r
489             break;      \r
490         }\r
491         case RK29_PIN2_PB3:\r
492         {\r
493              rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME,0);\r
494             break;      \r
495         }\r
496         case RK29_PIN2_PB4:\r
497         {\r
498              rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME,0);\r
499             break;      \r
500         }\r
501         case RK29_PIN2_PB5:\r
502         {\r
503              rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME,0);\r
504             break;      \r
505         }\r
506         case RK29_PIN2_PB6:\r
507         {\r
508              rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME,0);\r
509             break;      \r
510         }\r
511         case RK29_PIN2_PB7:\r
512         {\r
513              rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME,0);\r
514             break;      \r
515         }\r
516         case RK29_PIN2_PC0:\r
517         {\r
518              rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,0);\r
519             break;      \r
520         }\r
521         case RK29_PIN2_PC1:\r
522         {\r
523              rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,0);\r
524             break;      \r
525         }\r
526         case RK29_PIN2_PC2:\r
527         {\r
528              rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,0);\r
529             break;      \r
530         }\r
531         case RK29_PIN2_PC3:\r
532         {\r
533              rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,0);\r
534             break;      \r
535         }\r
536         case RK29_PIN2_PC4:\r
537         {\r
538              rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,0);\r
539             break;      \r
540         }\r
541         case RK29_PIN2_PC5:\r
542         {\r
543              rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,0);\r
544             break;      \r
545         }\r
546         case RK29_PIN2_PC6:\r
547         {\r
548              rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,0);\r
549             break;      \r
550         }\r
551         case RK29_PIN2_PC7:\r
552         {\r
553              rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,0);\r
554             break;      \r
555         }\r
556         case RK29_PIN2_PD0:\r
557         {\r
558              rk29_mux_api_set(GPIO2D0_I2S0CLK_MIIRXCLKIN_NAME,0);\r
559             break;      \r
560         }\r
561         case RK29_PIN2_PD1:\r
562         {\r
563              rk29_mux_api_set(GPIO2D1_I2S0SCLK_MIICRS_NAME,0);\r
564             break;      \r
565         }\r
566         case RK29_PIN2_PD2:\r
567         {\r
568              rk29_mux_api_set(GPIO2D2_I2S0LRCKRX_MIITXERR_NAME,0);\r
569             break;      \r
570         }\r
571         case RK29_PIN2_PD3:\r
572         {\r
573              rk29_mux_api_set(GPIO2D3_I2S0SDI_MIICOL_NAME,0);\r
574             break;      \r
575         }\r
576         case RK29_PIN2_PD4:\r
577         {\r
578              rk29_mux_api_set(GPIO2D4_I2S0SDO0_MIIRXD2_NAME,0);\r
579             break;      \r
580         }\r
581         case RK29_PIN2_PD5:\r
582         {\r
583              rk29_mux_api_set(GPIO2D5_I2S0SDO1_MIIRXD3_NAME,0);\r
584             break;      \r
585         }\r
586         case RK29_PIN2_PD6:\r
587         {\r
588              rk29_mux_api_set(GPIO2D6_I2S0SDO2_MIITXD2_NAME,0);\r
589             break;      \r
590         }\r
591         case RK29_PIN2_PD7:\r
592         {\r
593              rk29_mux_api_set(GPIO2D7_I2S0SDO3_MIITXD3_NAME,0);\r
594             break;      \r
595         }\r
596         case RK29_PIN3_PA0:\r
597         {\r
598              rk29_mux_api_set(GPIO3A0_I2S1CLK_NAME,0);\r
599             break;      \r
600         }\r
601         case RK29_PIN3_PA1:\r
602         {\r
603              rk29_mux_api_set(GPIO3A1_I2S1SCLK_NAME,0);\r
604             break;      \r
605         }\r
606         case RK29_PIN3_PA2:\r
607         {\r
608              rk29_mux_api_set(GPIO3A2_I2S1LRCKRX_NAME,0);\r
609             break;      \r
610         }\r
611         case RK29_PIN3_PA3:\r
612         {\r
613              rk29_mux_api_set(GPIO3A3_I2S1SDI_NAME,0);\r
614             break;      \r
615         }\r
616         case RK29_PIN3_PA4:\r
617         {\r
618              rk29_mux_api_set(GPIO3A4_I2S1SDO_NAME,0);\r
619             break;      \r
620         }\r
621         case RK29_PIN3_PA5:\r
622         {\r
623              rk29_mux_api_set(GPIO3A5_I2S1LRCKTX_NAME,0);\r
624             break;      \r
625         }\r
626         case RK29_PIN3_PA6:\r
627         {\r
628              rk29_mux_api_set(GPIO3A6_SMCADDR14_HOSTDATA14_NAME,0);\r
629             break;      \r
630         }\r
631         case RK29_PIN3_PA7:\r
632         {\r
633              rk29_mux_api_set(GPIO3A7_SMCADDR15_HOSTDATA15_NAME,0);\r
634             break;      \r
635         }\r
636         case RK29_PIN3_PB0:\r
637         {\r
638              rk29_mux_api_set(GPIO3B0_EMMCLKOUT_NAME,0);\r
639             break;      \r
640         }\r
641         case RK29_PIN3_PB1:\r
642         {\r
643              rk29_mux_api_set(GPIO3B1_EMMCMD_NAME,0);\r
644             break;      \r
645         }\r
646         case RK29_PIN3_PB2:\r
647         {\r
648              rk29_mux_api_set(GPIO3B2_EMMCDATA0_NAME,0);\r
649             break;      \r
650         }\r
651         case RK29_PIN3_PB3:\r
652         {\r
653              rk29_mux_api_set(GPIO3B3_EMMCDATA1_NAME,0);\r
654             break;      \r
655         }\r
656         case RK29_PIN3_PB4:\r
657         {\r
658              rk29_mux_api_set(GPIO3B4_EMMCDATA2_NAME,0);\r
659             break;      \r
660         }\r
661         case RK29_PIN3_PB5:\r
662         {\r
663              rk29_mux_api_set(GPIO3B5_EMMCDATA3_NAME,0);\r
664             break;      \r
665         }\r
666         case RK29_PIN3_PB6:\r
667         {\r
668              rk29_mux_api_set(GPIO3B6_EMMCDATA4_NAME,0);\r
669             break;      \r
670         }\r
671         case RK29_PIN3_PB7:\r
672         {\r
673              rk29_mux_api_set(GPIO3B7_EMMCDATA5_NAME,0);\r
674             break;      \r
675         }\r
676         case RK29_PIN3_PC0:\r
677         {\r
678              rk29_mux_api_set(GPIO3C0_EMMCDATA6_NAME,0);\r
679             break;      \r
680         }\r
681         case RK29_PIN3_PC1:\r
682         {\r
683              rk29_mux_api_set(GPIO3C1_EMMCDATA7_NAME,0);\r
684             break;      \r
685         }\r
686         case RK29_PIN3_PC2:\r
687         {\r
688              rk29_mux_api_set(GPIO3C2_SMCADDR13_HOSTDATA13_NAME,0);\r
689             break;      \r
690         }\r
691         case RK29_PIN3_PC3:\r
692         {\r
693              rk29_mux_api_set(GPIO3C3_SMCADDR10_HOSTDATA10_NAME,0);\r
694             break;      \r
695         }\r
696         case RK29_PIN3_PC4:\r
697         {\r
698              rk29_mux_api_set(GPIO3C4_SMCADDR11_HOSTDATA11_NAME,0);\r
699             break;      \r
700         }\r
701         case RK29_PIN3_PC5:\r
702         {\r
703              rk29_mux_api_set(GPIO3C5_SMCADDR12_HOSTDATA12_NAME,0);\r
704             break;      \r
705         }\r
706         case RK29_PIN3_PC6:\r
707         {\r
708              rk29_mux_api_set(GPIO3C6_SMCADDR16_HOSTDATA16_NAME,0);\r
709             break;      \r
710         }\r
711         case RK29_PIN3_PC7:\r
712         {\r
713              rk29_mux_api_set(GPIO3C7_SMCADDR17_HOSTDATA17_NAME,0);\r
714             break;      \r
715         }\r
716         case RK29_PIN3_PD0:\r
717         {\r
718              rk29_mux_api_set(GPIO3D0_SMCADDR18_HOSTADDR0_NAME,0);\r
719             break;      \r
720         }\r
721         case RK29_PIN3_PD1:\r
722         {\r
723              rk29_mux_api_set(GPIO3D1_SMCADDR19_HOSTADDR1_NAME,0);\r
724             break;      \r
725         }\r
726         case RK29_PIN3_PD2:\r
727         {\r
728              rk29_mux_api_set(GPIO3D2_HOSTCSN_NAME,0);\r
729             break;      \r
730         }\r
731         case RK29_PIN3_PD3:\r
732         {\r
733              rk29_mux_api_set(GPIO3D3_HOSTRDN_NAME,0);\r
734             break;      \r
735         }\r
736         case RK29_PIN3_PD4:\r
737         {\r
738              rk29_mux_api_set(GPIO3D4_HOSTWRN_NAME,0);\r
739             break;      \r
740         }\r
741         case RK29_PIN3_PD5:\r
742         {\r
743              rk29_mux_api_set(GPIO3D5_SMCADDR7_HOSTDATA7_NAME,0);\r
744             break;      \r
745         }\r
746         case RK29_PIN3_PD6:\r
747         {\r
748              rk29_mux_api_set(GPIO3D6_SMCADDR8_HOSTDATA8_NAME,0);\r
749             break;      \r
750         }\r
751         case RK29_PIN3_PD7:\r
752         {\r
753              rk29_mux_api_set(GPIO3D7_SMCADDR9_HOSTDATA9_NAME,0);\r
754             break;      \r
755         }\r
756         case RK29_PIN4_PA0:\r
757         case RK29_PIN4_PA1:\r
758         case RK29_PIN4_PA2:\r
759         case RK29_PIN4_PA3:\r
760         case RK29_PIN4_PA4:\r
761         {            \r
762             break;      \r
763         }\r
764         case RK29_PIN4_PA5:\r
765         {\r
766              rk29_mux_api_set(GPIO4A5_OTG0DRVVBUS_NAME,0);\r
767             break;      \r
768         }\r
769         case RK29_PIN4_PA6:\r
770         {\r
771              rk29_mux_api_set(GPIO4A6_OTG1DRVVBUS_NAME,0);\r
772             break;      \r
773         }\r
774         case RK29_PIN4_PA7:\r
775         {\r
776              rk29_mux_api_set(GPIO4A7_SPDIFTX_NAME,0);\r
777             break;      \r
778         }\r
779         case RK29_PIN4_PB0:\r
780         {\r
781              rk29_mux_api_set(GPIO4B0_FLASHDATA8_NAME,0);\r
782             break;      \r
783         }\r
784         case RK29_PIN4_PB1:\r
785         {\r
786              rk29_mux_api_set(GPIO4B1_FLASHDATA9_NAME,0);\r
787             break;      \r
788         }\r
789         case RK29_PIN4_PB2:\r
790         {\r
791              rk29_mux_api_set(GPIO4B2_FLASHDATA10_NAME,0);\r
792             break;      \r
793         }\r
794         case RK29_PIN4_PB3:\r
795         {\r
796              rk29_mux_api_set(GPIO4B3_FLASHDATA11_NAME,0);\r
797             break;      \r
798         }\r
799         case RK29_PIN4_PB4:\r
800         {\r
801              rk29_mux_api_set(GPIO4B4_FLASHDATA12_NAME,0);\r
802             break;      \r
803         }\r
804         case RK29_PIN4_PB5:\r
805         {\r
806              rk29_mux_api_set(GPIO4B5_FLASHDATA13_NAME,0);\r
807             break;      \r
808         }\r
809         case RK29_PIN4_PB6:\r
810         {\r
811              rk29_mux_api_set(GPIO4B6_FLASHDATA14_NAME ,0);\r
812             break;      \r
813         }\r
814         case RK29_PIN4_PB7:\r
815         {\r
816              rk29_mux_api_set(GPIO4B7_FLASHDATA15_NAME,0);\r
817             break;      \r
818         }\r
819         case RK29_PIN4_PC0:\r
820         {\r
821              rk29_mux_api_set(GPIO4C0_RMIICLKOUT_RMIICLKIN_NAME,0);\r
822             break;      \r
823         }\r
824         case RK29_PIN4_PC1:\r
825         {\r
826              rk29_mux_api_set(GPIO4C1_RMIITXEN_MIITXEN_NAME,0);\r
827             break;      \r
828         }\r
829         case RK29_PIN4_PC2:\r
830         {\r
831              rk29_mux_api_set(GPIO4C2_RMIITXD1_MIITXD1_NAME,0);\r
832             break;      \r
833         }\r
834         case RK29_PIN4_PC3:\r
835         {\r
836              rk29_mux_api_set(GPIO4C3_RMIITXD0_MIITXD0_NAME,0);\r
837             break;      \r
838         }\r
839         case RK29_PIN4_PC4:\r
840         {\r
841              rk29_mux_api_set(GPIO4C4_RMIIRXERR_MIIRXERR_NAME,0);\r
842             break;      \r
843         }\r
844         case RK29_PIN4_PC5:\r
845         {\r
846              rk29_mux_api_set(GPIO4C5_RMIICSRDVALID_MIIRXDVALID_NAME,0);\r
847             break;      \r
848         }\r
849         case RK29_PIN4_PC6:\r
850         {\r
851              rk29_mux_api_set(GPIO4C6_RMIIRXD1_MIIRXD1_NAME,0);\r
852             break;      \r
853         }\r
854         case RK29_PIN4_PC7:\r
855         {\r
856              rk29_mux_api_set(GPIO4C7_RMIIRXD0_MIIRXD0_NAME,0);\r
857             break;      \r
858         }\r
859         case RK29_PIN4_PD0:\r
860         case RK29_PIN4_PD1:\r
861         {\r
862              rk29_mux_api_set(GPIO4D10_CPUTRACEDATA10_NAME,0);             \r
863             break;      \r
864         }\r
865         case RK29_PIN4_PD2:\r
866         case RK29_PIN4_PD3:\r
867         {\r
868              rk29_mux_api_set(GPIO4D32_CPUTRACEDATA32_NAME,0);           \r
869             break;      \r
870         }\r
871         case RK29_PIN4_PD4:\r
872         {\r
873              rk29_mux_api_set(GPIO4D4_CPUTRACECLK_NAME,0);\r
874             break;      \r
875         }\r
876         case RK29_PIN4_PD5:\r
877         {\r
878              rk29_mux_api_set(GPIO4D5_CPUTRACECTL_NAME,0);\r
879             break;      \r
880         }\r
881         case RK29_PIN4_PD6:\r
882         {\r
883              rk29_mux_api_set(GPIO4D6_I2S0LRCKTX0_NAME,0);\r
884             break;      \r
885         }\r
886         case RK29_PIN4_PD7:\r
887         {\r
888              rk29_mux_api_set(GPIO4D7_I2S0LRCKTX1_NAME,0);\r
889             break;      \r
890         } \r
891         case RK29_PIN5_PA0:\r
892         case RK29_PIN5_PA1:\r
893         case RK29_PIN5_PA2:\r
894         {      \r
895             break;      \r
896         }\r
897         case RK29_PIN5_PA3:\r
898         {\r
899              rk29_mux_api_set(GPIO5A3_MIITXCLKIN_NAME,0);\r
900             break;      \r
901         }\r
902         case RK29_PIN5_PA4:\r
903         {\r
904              rk29_mux_api_set(GPIO5A4_TSSYNC_NAME,0);\r
905             break;      \r
906         }\r
907         case RK29_PIN5_PA5:\r
908         {\r
909              rk29_mux_api_set(GPIO5A5_HSADCDATA0_NAME,0);\r
910             break;      \r
911         }\r
912         case RK29_PIN5_PA6:\r
913         {\r
914              rk29_mux_api_set(GPIO5A6_HSADCDATA1_NAME,0);\r
915             break;      \r
916         }\r
917         case RK29_PIN5_PA7:\r
918         {\r
919              rk29_mux_api_set(GPIO5A7_HSADCDATA2_NAME,0);\r
920             break;      \r
921         }\r
922         case RK29_PIN5_PB0:\r
923         {\r
924              rk29_mux_api_set(GPIO5B0_HSADCDATA3_NAME,0);\r
925             break;      \r
926         }\r
927         case RK29_PIN5_PB1:\r
928         {\r
929              rk29_mux_api_set(GPIO5B1_HSADCDATA4_NAME,0);\r
930             break;      \r
931         }\r
932         case RK29_PIN5_PB2:\r
933         {\r
934              rk29_mux_api_set(GPIO5B2_HSADCDATA5_NAME,0);\r
935             break;      \r
936         }\r
937         case RK29_PIN5_PB3:\r
938         {\r
939              rk29_mux_api_set(GPIO5B3_HSADCDATA6_NAME,0);\r
940             break;      \r
941         }\r
942         case RK29_PIN5_PB4:\r
943         {\r
944              rk29_mux_api_set(GPIO5B4_HSADCDATA7_NAME,0);\r
945             break;      \r
946         }\r
947         case RK29_PIN5_PB5:\r
948         {\r
949              rk29_mux_api_set(GPIO5B5_HSADCDATA8_NAME,0);\r
950             break;      \r
951         }\r
952         case RK29_PIN5_PB6:\r
953         {\r
954              rk29_mux_api_set(GPIO5B6_HSADCDATA9_NAME,0);\r
955             break;      \r
956         }\r
957         case RK29_PIN5_PB7:\r
958         {\r
959              rk29_mux_api_set(GPIO5B7_HSADCCLKOUTGPSCLK_NAME,0);\r
960             break;      \r
961         }\r
962         case RK29_PIN5_PC0:\r
963         {\r
964              rk29_mux_api_set(GPIO5C0_EBCSDDO0_SMCDATA0_NAME,0);\r
965             break;      \r
966         }\r
967         case RK29_PIN5_PC1:\r
968         {\r
969              rk29_mux_api_set(GPIO5C1_EBCSDDO1_SMCDATA1_NAME,0);\r
970             break;      \r
971         }\r
972         case RK29_PIN5_PC2:\r
973         {\r
974              rk29_mux_api_set(GPIO5C2_EBCSDDO2_SMCDATA2_NAME,0);\r
975             break;      \r
976         }\r
977         case RK29_PIN5_PC3:\r
978         {\r
979              rk29_mux_api_set(GPIO5C3_EBCSDDO3_SMCDATA3_NAME,0);\r
980             break;      \r
981         }\r
982         case RK29_PIN5_PC4:\r
983         {\r
984              rk29_mux_api_set(GPIO5C4_EBCSDDO4_SMCDATA4_NAME,0);\r
985             break;      \r
986         }\r
987         case RK29_PIN5_PC5:\r
988         {\r
989              rk29_mux_api_set(GPIO5C5_EBCSDDO5_SMCDATA5_NAME,0);\r
990             break;      \r
991         }\r
992         case RK29_PIN5_PC6:\r
993         {\r
994              rk29_mux_api_set(GPIO5C6_EBCSDDO6_SMCDATA6_NAME,0);\r
995             break;      \r
996         }\r
997         case RK29_PIN5_PC7:\r
998         {\r
999              rk29_mux_api_set(GPIO5C7_EBCSDDO7_SMCDATA7_NAME,0);\r
1000             break;      \r
1001         }\r
1002         case RK29_PIN5_PD0:\r
1003         {\r
1004              rk29_mux_api_set(GPIO5D0_EBCSDLE_SMCADDR5_HOSTDATA5_NAME,0);\r
1005             break;      \r
1006         }\r
1007         case RK29_PIN5_PD1:\r
1008         {\r
1009              rk29_mux_api_set(GPIO5D1_EBCSDCLK_SMCADDR6_HOSTDATA6_NAME,0);\r
1010             break;      \r
1011         }\r
1012         case RK29_PIN5_PD2:\r
1013         {\r
1014              rk29_mux_api_set(GPIO5D2_PWM1_UART1SIRIN_NAME,0);\r
1015             break;      \r
1016         }\r
1017         case RK29_PIN5_PD3:\r
1018         {\r
1019              rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME,0);\r
1020             break;      \r
1021         }\r
1022         case RK29_PIN5_PD4:\r
1023         {\r
1024              rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME,0);\r
1025             break;      \r
1026         }\r
1027         case RK29_PIN5_PD5:\r
1028         {\r
1029              rk29_mux_api_set(GPIO5D5_SDMMC0PWREN_NAME,0);\r
1030             break;      \r
1031         }\r
1032         case RK29_PIN5_PD6:\r
1033         {\r
1034              rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME,0);\r
1035             break;      \r
1036         }\r
1037         case RK29_PIN5_PD7:\r
1038         case RK29_PIN6_PA0:\r
1039         case RK29_PIN6_PA1:\r
1040         case RK29_PIN6_PA2:\r
1041         case RK29_PIN6_PA3:\r
1042         case RK29_PIN6_PA4:\r
1043         case RK29_PIN6_PA5:\r
1044         case RK29_PIN6_PA6:\r
1045         case RK29_PIN6_PA7:\r
1046         case RK29_PIN6_PB0:\r
1047         case RK29_PIN6_PB1:\r
1048         case RK29_PIN6_PB2:\r
1049         case RK29_PIN6_PB3:\r
1050         case RK29_PIN6_PB4:\r
1051         case RK29_PIN6_PB5:\r
1052         case RK29_PIN6_PB6:\r
1053         case RK29_PIN6_PB7:\r
1054         case RK29_PIN6_PC0:\r
1055         case RK29_PIN6_PC1:\r
1056         case RK29_PIN6_PC2:\r
1057         case RK29_PIN6_PC3:\r
1058         {\r
1059             break;\r
1060         }\r
1061         case RK29_PIN6_PC4:\r
1062         case RK29_PIN6_PC5:\r
1063         {\r
1064              rk29_mux_api_set(GPIO6C54_CPUTRACEDATA54_NAME,0);\r
1065             break;      \r
1066         }\r
1067         case RK29_PIN6_PC6:\r
1068         case RK29_PIN6_PC7:\r
1069         {\r
1070              rk29_mux_api_set(GPIO6C76_CPUTRACEDATA76_NAME,0);\r
1071             break;      \r
1072         }\r
1073         case RK29_PIN6_PD0:\r
1074         case RK29_PIN6_PD1:\r
1075         case RK29_PIN6_PD2:\r
1076         case RK29_PIN6_PD3:\r
1077         case RK29_PIN6_PD4:\r
1078         case RK29_PIN6_PD5:\r
1079         case RK29_PIN6_PD6:\r
1080         case RK29_PIN6_PD7:\r
1081         {\r
1082             break;      \r
1083         }    \r
1084         default:\r
1085         {\r
1086             printk("Pin=%d isn't RK29 GPIO, Please init it's iomux yourself!",pin);\r
1087             break;\r
1088         }\r
1089     }\r
1090     return 0;\r
1091 }\r
1092 \r
1093 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)\r
1094 {\r
1095     int camera_power = res->gpio_power;\r
1096     int camera_ioflag = res->gpio_flag;\r
1097     int camera_io_init = res->gpio_init;\r
1098     int ret = 0;\r
1099     \r
1100     if (camera_power != INVALID_GPIO)  {\r
1101                      if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {\r
1102             if (on) {\r
1103                 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1104                         dprintk("%s..%s..PowerPin=%d ..PinLevel = %x   \n",__FUNCTION__,res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1105                         msleep(10);\r
1106                 } else {\r
1107                         gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1108                         dprintk("%s..%s..PowerPin=%d ..PinLevel = %x   \n",__FUNCTION__,res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1109                 }\r
1110                 } else {\r
1111                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1112                         printk("%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);\r
1113             }        \r
1114     } else {\r
1115                 ret = RK29_CAM_EIO_INVALID;\r
1116     } \r
1117 \r
1118     return ret;\r
1119 }\r
1120 \r
1121 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)\r
1122 {\r
1123     int camera_reset = res->gpio_reset;\r
1124     int camera_ioflag = res->gpio_flag;\r
1125     int camera_io_init = res->gpio_init;  \r
1126     int ret = 0;\r
1127     \r
1128     if (camera_reset != INVALID_GPIO) {\r
1129                 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {\r
1130                         if (on) {\r
1131                         gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1132                         dprintk("%s..%s..ResetPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1133                         } else {\r
1134                                 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1135                         dprintk("%s..%s..ResetPin= %d..PinLevel = %x   \n",__FUNCTION__,res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1136                 }\r
1137                 } else {\r
1138                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1139                         printk("%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);\r
1140                 }\r
1141     } else {\r
1142                 ret = RK29_CAM_EIO_INVALID;\r
1143     }\r
1144 \r
1145     return ret;\r
1146 }\r
1147 \r
1148 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)\r
1149 {\r
1150     int camera_powerdown = res->gpio_powerdown;\r
1151     int camera_ioflag = res->gpio_flag;\r
1152     int camera_io_init = res->gpio_init;  \r
1153     int ret = 0;    \r
1154 \r
1155     if (camera_powerdown != INVALID_GPIO) {\r
1156                 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1157                         if (on) {\r
1158                         gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1159                         dprintk("%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1160                         } else {\r
1161                                 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1162                         dprintk("%s..%s..PowerDownPin= %d..PinLevel = %x   \n",__FUNCTION__,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1163                 }\r
1164                 } else {\r
1165                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1166                         dprintk("%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);\r
1167                 }\r
1168     } else {\r
1169                 ret = RK29_CAM_EIO_INVALID;\r
1170     }\r
1171     return ret;\r
1172 }\r
1173 \r
1174 \r
1175 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)\r
1176 {\r
1177     int camera_flash = res->gpio_flash;\r
1178     int camera_ioflag = res->gpio_flag;\r
1179     int camera_io_init = res->gpio_init;  \r
1180     int ret = 0;    \r
1181 \r
1182     if (camera_flash != INVALID_GPIO) {\r
1183                 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {\r
1184             switch (on)\r
1185             {\r
1186                 case Flash_Off:\r
1187                 {\r
1188                     gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1189                             dprintk("\n%s..%s..FlashPin= %d..PinLevel = %x   \n",__FUNCTION__,res->dev_name, camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); \r
1190                             break;\r
1191                 }\r
1192 \r
1193                 case Flash_On:\r
1194                 {\r
1195                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1196                             dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1197                             break;\r
1198                 }\r
1199 \r
1200                 case Flash_Torch:\r
1201                 {\r
1202                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1203                             dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1204                             break;\r
1205                 }\r
1206 \r
1207                 default:\r
1208                 {\r
1209                     printk("%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);\r
1210                     break;\r
1211                 }\r
1212             }\r
1213                 } else {\r
1214                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1215                         printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);\r
1216                 }\r
1217     } else {\r
1218                 ret = RK29_CAM_EIO_INVALID;\r
1219     }\r
1220     return ret;\r
1221 }\r
1222 \r
1223 \r
1224 static int rk29_sensor_io_init(void)\r
1225 {\r
1226     int ret = 0, i,j;\r
1227     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
1228         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
1229         unsigned int camera_ioflag;\r
1230 \r
1231     if (sensor_ioctl_cb.sensor_power_cb == NULL)\r
1232         sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;\r
1233     if (sensor_ioctl_cb.sensor_reset_cb == NULL)\r
1234         sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;\r
1235     if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)\r
1236         sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;\r
1237     if (sensor_ioctl_cb.sensor_flash_cb == NULL)\r
1238         sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;\r
1239     \r
1240     for (i=0; i<2; i++) {\r
1241         camera_reset = rk29_camera_platform_data.gpio_res[i].gpio_reset;\r
1242         camera_power = rk29_camera_platform_data.gpio_res[i].gpio_power;\r
1243                 camera_powerdown = rk29_camera_platform_data.gpio_res[i].gpio_powerdown;\r
1244         camera_flash = rk29_camera_platform_data.gpio_res[i].gpio_flash;\r
1245                 camera_ioflag = rk29_camera_platform_data.gpio_res[i].gpio_flag;\r
1246                 rk29_camera_platform_data.gpio_res[i].gpio_init = 0;\r
1247 \r
1248         if (camera_power != INVALID_GPIO) {\r
1249             ret = gpio_request(camera_power, "camera power");\r
1250             if (ret) {\r
1251                 if (i == 0) {\r
1252                     printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
1253                                     goto sensor_io_int_loop_end;\r
1254                 } else {\r
1255                     if (camera_power != rk29_camera_platform_data.gpio_res[0].gpio_power) {\r
1256                         printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
1257                         goto sensor_io_int_loop_end;\r
1258                     }\r
1259                 }\r
1260             }\r
1261 \r
1262             if (rk29_sensor_iomux(camera_power) < 0) {\r
1263                 printk(KERN_ERR "%s..%s..power pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
1264                 goto sensor_io_int_loop_end;\r
1265             }\r
1266             \r
1267                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERACTIVE_MASK;\r
1268             gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1269             gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1270 \r
1271                         dprintk("%s....power pin(%d) init success(0x%x)  \n",__FUNCTION__,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1272 \r
1273         }\r
1274 \r
1275         if (camera_reset != INVALID_GPIO) {\r
1276             ret = gpio_request(camera_reset, "camera reset");\r
1277             if (ret) {\r
1278                 printk("%s..%s..reset pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);\r
1279                 goto sensor_io_int_loop_end;\r
1280             }\r
1281 \r
1282             if (rk29_sensor_iomux(camera_reset) < 0) {\r
1283                 printk(KERN_ERR "%s..%s..reset pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);\r
1284                 goto sensor_io_int_loop_end;\r
1285             }\r
1286             \r
1287                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_RESETACTIVE_MASK;\r
1288             gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1289             gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1290 \r
1291                         dprintk("%s....reset pin(%d) init success(0x%x)\n",__FUNCTION__,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1292 \r
1293         }\r
1294 \r
1295                 if (camera_powerdown != INVALID_GPIO) {\r
1296             ret = gpio_request(camera_powerdown, "camera powerdown");\r
1297             if (ret) {\r
1298                 printk("%s..%s..powerdown pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);\r
1299                 goto sensor_io_int_loop_end;\r
1300             }\r
1301 \r
1302             if (rk29_sensor_iomux(camera_powerdown) < 0) {\r
1303                 printk(KERN_ERR "%s..%s..powerdown pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);\r
1304                 goto sensor_io_int_loop_end;\r
1305             }\r
1306             \r
1307                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;\r
1308             gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1309             gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1310 \r
1311                         dprintk("%s....powerdown pin(%d) init success(0x%x) \n",__FUNCTION__,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1312 \r
1313         }\r
1314 \r
1315                 if (camera_flash != INVALID_GPIO) {\r
1316             ret = gpio_request(camera_flash, "camera flash");\r
1317             if (ret) {\r
1318                 printk("%s..%s..flash pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash);\r
1319                                 goto sensor_io_int_loop_end;\r
1320             }\r
1321 \r
1322             if (rk29_sensor_iomux(camera_flash) < 0) {\r
1323                 printk(KERN_ERR "%s..%s..flash pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash);                \r
1324             }\r
1325             \r
1326                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_FLASHACTIVE_MASK;\r
1327             gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));    /* falsh off */\r
1328             gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1329 \r
1330                         dprintk("%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1331 \r
1332         }  \r
1333 \r
1334         \r
1335         for (j=0; j<10; j++) {\r
1336             memset(&rk29_camera_platform_data.info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));\r
1337         }\r
1338         j=0;\r
1339         if (strstr(rk29_camera_platform_data.info[i].dev_name,"_back")) {\r
1340             \r
1341             #if CONFIG_SENSOR_QCIF_FPS_FIXED_0\r
1342             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_0;\r
1343             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1344             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1345             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1346             rk29_camera_platform_data.info[i].fival[j].width = 176;\r
1347             rk29_camera_platform_data.info[i].fival[j].height = 144;\r
1348             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1349             j++;\r
1350             #endif\r
1351 \r
1352             #if CONFIG_SENSOR_QVGA_FPS_FIXED_0\r
1353             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_0;\r
1354             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1355             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1356             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1357             rk29_camera_platform_data.info[i].fival[j].width = 320;\r
1358             rk29_camera_platform_data.info[i].fival[j].height = 240;\r
1359             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1360             j++;\r
1361             #endif\r
1362 \r
1363             #if CONFIG_SENSOR_CIF_FPS_FIXED_0\r
1364             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_0;\r
1365             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1366             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1367             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1368             rk29_camera_platform_data.info[i].fival[j].width = 352;\r
1369             rk29_camera_platform_data.info[i].fival[j].height = 288;\r
1370             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1371             j++;\r
1372             #endif\r
1373 \r
1374             #if CONFIG_SENSOR_VGA_FPS_FIXED_0\r
1375             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_0;\r
1376             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1377             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1378             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1379             rk29_camera_platform_data.info[i].fival[j].width = 640;\r
1380             rk29_camera_platform_data.info[i].fival[j].height = 480;\r
1381             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1382             j++;\r
1383             #endif\r
1384 \r
1385             #if CONFIG_SENSOR_SVGA_FPS_FIXED_0\r
1386             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_0;\r
1387             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1388             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1389             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1390             rk29_camera_platform_data.info[i].fival[j].width = 800;\r
1391             rk29_camera_platform_data.info[i].fival[j].height = 600;\r
1392             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1393             j++;\r
1394             #endif\r
1395 \r
1396             #if CONFIG_SENSOR_720P_FPS_FIXED_0\r
1397             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_0;\r
1398             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1399             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1400             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1401             rk29_camera_platform_data.info[i].fival[j].width = 1280;\r
1402             rk29_camera_platform_data.info[i].fival[j].height = 720;\r
1403             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1404             j++;\r
1405             #endif\r
1406 \r
1407         } else {\r
1408             #if CONFIG_SENSOR_QCIF_FPS_FIXED_1\r
1409             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_1;\r
1410             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1411             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1412             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1413             rk29_camera_platform_data.info[i].fival[j].width = 176;\r
1414             rk29_camera_platform_data.info[i].fival[j].height = 144;\r
1415             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1416             j++;\r
1417             #endif\r
1418 \r
1419             #if CONFIG_SENSOR_QVGA_FPS_FIXED_1\r
1420             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_1;\r
1421             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1422             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1423             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1424             rk29_camera_platform_data.info[i].fival[j].width = 320;\r
1425             rk29_camera_platform_data.info[i].fival[j].height = 240;\r
1426             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1427             j++;\r
1428             #endif\r
1429 \r
1430             #if CONFIG_SENSOR_CIF_FPS_FIXED_1\r
1431             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_1;\r
1432             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1433             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1434             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1435             rk29_camera_platform_data.info[i].fival[j].width = 352;\r
1436             rk29_camera_platform_data.info[i].fival[j].height = 288;\r
1437             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1438             j++;\r
1439             #endif\r
1440 \r
1441             #if CONFIG_SENSOR_VGA_FPS_FIXED_1\r
1442             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_1;\r
1443             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1444             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1445             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1446             rk29_camera_platform_data.info[i].fival[j].width = 640;\r
1447             rk29_camera_platform_data.info[i].fival[j].height = 480;\r
1448             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1449             j++;\r
1450             #endif\r
1451 \r
1452             #if CONFIG_SENSOR_SVGA_FPS_FIXED_1\r
1453             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_1;\r
1454             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1455             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1456             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1457             rk29_camera_platform_data.info[i].fival[j].width = 800;\r
1458             rk29_camera_platform_data.info[i].fival[j].height = 600;\r
1459             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1460             j++;\r
1461             #endif\r
1462 \r
1463             #if CONFIG_SENSOR_720P_FPS_FIXED_1\r
1464             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_1;\r
1465             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;\r
1466             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1467             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1468             rk29_camera_platform_data.info[i].fival[j].width = 1280;\r
1469             rk29_camera_platform_data.info[i].fival[j].height = 720;\r
1470             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1471             j++;\r
1472             #endif\r
1473         }\r
1474         \r
1475                 continue;\r
1476 sensor_io_int_loop_end:\r
1477                 rk29_sensor_io_deinit(i);\r
1478                 continue;\r
1479     }\r
1480 \r
1481     return 0;\r
1482 }\r
1483 \r
1484 static int rk29_sensor_io_deinit(int sensor)\r
1485 {\r
1486     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
1487         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
1488 \r
1489     camera_reset = rk29_camera_platform_data.gpio_res[sensor].gpio_reset;\r
1490     camera_power = rk29_camera_platform_data.gpio_res[sensor].gpio_power;\r
1491         camera_powerdown = rk29_camera_platform_data.gpio_res[sensor].gpio_powerdown;\r
1492     camera_flash = rk29_camera_platform_data.gpio_res[sensor].gpio_flash;\r
1493 \r
1494     printk("%s..%s enter..\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[sensor].dev_name);\r
1495 \r
1496         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERACTIVE_MASK) {\r
1497             if (camera_power != INVALID_GPIO) {\r
1498                 gpio_direction_input(camera_power);\r
1499                 gpio_free(camera_power);\r
1500             }\r
1501         }\r
1502 \r
1503         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_RESETACTIVE_MASK) {\r
1504             if (camera_reset != INVALID_GPIO)  {\r
1505                 gpio_direction_input(camera_reset);\r
1506                 gpio_free(camera_reset);\r
1507             }\r
1508         }\r
1509 \r
1510         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1511             if (camera_powerdown != INVALID_GPIO)  {\r
1512                 gpio_direction_input(camera_powerdown);\r
1513                 gpio_free(camera_powerdown);\r
1514             }\r
1515         }\r
1516 \r
1517         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_FLASHACTIVE_MASK) {\r
1518             if (camera_flash != INVALID_GPIO)  {\r
1519                 gpio_direction_input(camera_flash);\r
1520                 gpio_free(camera_flash);\r
1521             }\r
1522         }\r
1523 \r
1524         rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;\r
1525     return 0;\r
1526 }\r
1527 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)\r
1528 {\r
1529     struct rk29camera_gpio_res *res = NULL;    \r
1530         int ret = RK29_CAM_IO_SUCCESS;\r
1531 \r
1532     if(rk29_camera_platform_data.gpio_res[0].dev_name &&  (strcmp(rk29_camera_platform_data.gpio_res[0].dev_name, dev_name(dev)) == 0)) {\r
1533                 res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[0];\r
1534     } else if (rk29_camera_platform_data.gpio_res[1].dev_name && (strcmp(rk29_camera_platform_data.gpio_res[1].dev_name, dev_name(dev)) == 0)) {\r
1535         res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[1];\r
1536     } else {\r
1537         printk(KERN_ERR "%s is not regisiterd in rk29_camera_platform_data!!\n",dev_name(dev));\r
1538         ret = RK29_CAM_EIO_INVALID;\r
1539         goto rk29_sensor_ioctrl_end;\r
1540     }\r
1541 \r
1542         switch (cmd)\r
1543         {\r
1544                 case Cam_Power:\r
1545                 {\r
1546                         if (sensor_ioctl_cb.sensor_power_cb) {\r
1547                 ret = sensor_ioctl_cb.sensor_power_cb(res, on);\r
1548                         } else {\r
1549                 printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");\r
1550                 WARN_ON(1);\r
1551                         }\r
1552                         break;\r
1553                 }\r
1554                 case Cam_Reset:\r
1555                 {\r
1556                         if (sensor_ioctl_cb.sensor_reset_cb) {\r
1557                 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);\r
1558                         } else {\r
1559                 printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");\r
1560                 WARN_ON(1);\r
1561                         }\r
1562                         break;\r
1563                 }\r
1564 \r
1565                 case Cam_PowerDown:\r
1566                 {\r
1567                         if (sensor_ioctl_cb.sensor_powerdown_cb) {\r
1568                 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);\r
1569                         } else {\r
1570                 printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");\r
1571                 WARN_ON(1);\r
1572                         }\r
1573                         break;\r
1574                 }\r
1575 \r
1576                 case Cam_Flash:\r
1577                 {\r
1578                         if (sensor_ioctl_cb.sensor_flash_cb) {\r
1579                 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);\r
1580                         } else {\r
1581                 printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");\r
1582                 WARN_ON(1);\r
1583                         }\r
1584                         break;\r
1585                 }\r
1586                 default:\r
1587                 {\r
1588                         printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);\r
1589                         break;\r
1590                 }\r
1591         }\r
1592 rk29_sensor_ioctrl_end:\r
1593     return ret;\r
1594 }\r
1595 static int rk29_sensor_power(struct device *dev, int on)\r
1596 {\r
1597         rk29_sensor_ioctrl(dev,Cam_Power,on);\r
1598     return 0;\r
1599 }\r
1600 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO) || (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
1601 static int rk29_sensor_reset(struct device *dev)\r
1602 {\r
1603         rk29_sensor_ioctrl(dev,Cam_Reset,1);\r
1604         msleep(2);\r
1605         rk29_sensor_ioctrl(dev,Cam_Reset,0);\r
1606         return 0;\r
1607 }\r
1608 #endif\r
1609 static int rk29_sensor_powerdown(struct device *dev, int on)\r
1610 {\r
1611         return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);\r
1612 }\r
1613 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
1614 static struct i2c_board_info rk29_i2c_cam_info_0[] = {\r
1615         {\r
1616                 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1)\r
1617         },\r
1618 };\r
1619 \r
1620 static struct soc_camera_link rk29_iclink_0 = {\r
1621         .bus_id         = RK29_CAM_PLATFORM_DEV_ID,\r
1622         .power          = rk29_sensor_power,\r
1623 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO)\r
1624     .reset      = rk29_sensor_reset,\r
1625 #endif    \r
1626         .powerdown  = rk29_sensor_powerdown,\r
1627         .board_info     = &rk29_i2c_cam_info_0[0],\r
1628         .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,\r
1629         .module_name    = SENSOR_NAME_0,\r
1630 };\r
1631 \r
1632 /*platform_device : soc-camera need  */\r
1633 static struct platform_device rk29_soc_camera_pdrv_0 = {\r
1634         .name   = "soc-camera-pdrv",\r
1635         .id     = 0,\r
1636         .dev    = {\r
1637                 .init_name = SENSOR_DEVICE_NAME_0,\r
1638                 .platform_data = &rk29_iclink_0,\r
1639         },\r
1640 };\r
1641 #endif\r
1642 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
1643 static struct i2c_board_info rk29_i2c_cam_info_1[] = {\r
1644         {\r
1645                 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)\r
1646         },\r
1647 };\r
1648 \r
1649 static struct soc_camera_link rk29_iclink_1 = {\r
1650         .bus_id         = RK29_CAM_PLATFORM_DEV_ID,\r
1651         .power          = rk29_sensor_power,\r
1652 #if (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
1653     .reset      = rk29_sensor_reset,\r
1654 #endif          \r
1655         .powerdown  = rk29_sensor_powerdown,\r
1656         .board_info     = &rk29_i2c_cam_info_1[0],\r
1657         .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,\r
1658         .module_name    = SENSOR_NAME_1,\r
1659 };\r
1660 \r
1661 /*platform_device : soc-camera need  */\r
1662 static struct platform_device rk29_soc_camera_pdrv_1 = {\r
1663         .name   = "soc-camera-pdrv",\r
1664         .id     = 1,\r
1665         .dev    = {\r
1666                 .init_name = SENSOR_DEVICE_NAME_1,\r
1667                 .platform_data = &rk29_iclink_1,\r
1668         },\r
1669 };\r
1670 #endif\r
1671 \r
1672 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;\r
1673 static struct resource rk29_camera_resource[] = {\r
1674         [0] = {\r
1675                 .start = RK29_VIP_PHYS,\r
1676                 .end   = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,\r
1677                 .flags = IORESOURCE_MEM,\r
1678         },\r
1679         [1] = {\r
1680                 .start = IRQ_VIP,\r
1681                 .end   = IRQ_VIP,\r
1682                 .flags = IORESOURCE_IRQ,\r
1683         }\r
1684 };\r
1685 \r
1686 /*platform_device : */\r
1687 static struct platform_device rk29_device_camera = {\r
1688         .name             = RK29_CAM_DRV_NAME,\r
1689         .id               = RK29_CAM_PLATFORM_DEV_ID,               /* This is used to put cameras on this interface */\r
1690         .num_resources    = ARRAY_SIZE(rk29_camera_resource),\r
1691         .resource         = rk29_camera_resource,\r
1692         .dev            = {\r
1693                 .dma_mask = &rockchip_device_camera_dmamask,\r
1694                 .coherent_dma_mask = 0xffffffffUL,\r
1695                 .platform_data  = &rk29_camera_platform_data,\r
1696         }\r
1697 };\r
1698 \r
1699 static struct android_pmem_platform_data android_pmem_cam_pdata = {\r
1700         .name           = "pmem_cam",\r
1701         .start          = PMEM_CAM_BASE,\r
1702         .size           = PMEM_CAM_SIZE,\r
1703         .no_allocator   = 1,\r
1704         .cached         = 1,\r
1705 };\r
1706 \r
1707 static struct platform_device android_pmem_cam_device = {\r
1708         .name           = "android_pmem",\r
1709         .id             = 1,\r
1710         .dev            = {\r
1711                 .platform_data = &android_pmem_cam_pdata,\r
1712         },\r
1713 };\r
1714 \r
1715 #endif\r
1716 \r
1717 #endif //#ifdef CONFIG_VIDEO_RK29