camera rk30:commit v0.2.6,support two cif controls.
[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   0x1400000       /* 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 \r
855         case RK29_PIN4_PC7:\r
856         {\r
857              rk29_mux_api_set(GPIO4C7_RMIIRXD0_MIIRXD0_NAME,0);\r
858             break;      \r
859         }\r
860         case RK29_PIN4_PD0:\r
861         case RK29_PIN4_PD1:\r
862         {\r
863              rk29_mux_api_set(GPIO4D10_CPUTRACEDATA10_NAME,0);             \r
864             break;      \r
865         }\r
866         case RK29_PIN4_PD2:\r
867         case RK29_PIN4_PD3:\r
868         {\r
869              rk29_mux_api_set(GPIO4D32_CPUTRACEDATA32_NAME,0);           \r
870             break;      \r
871         }\r
872         case RK29_PIN4_PD4:\r
873         {\r
874              rk29_mux_api_set(GPIO4D4_CPUTRACECLK_NAME,0);\r
875             break;      \r
876         }\r
877         case RK29_PIN4_PD5:\r
878         {\r
879              rk29_mux_api_set(GPIO4D5_CPUTRACECTL_NAME,0);\r
880             break;      \r
881         }\r
882         case RK29_PIN4_PD6:\r
883         {\r
884              rk29_mux_api_set(GPIO4D6_I2S0LRCKTX0_NAME,0);\r
885             break;      \r
886         }\r
887         case RK29_PIN4_PD7:\r
888         {\r
889              rk29_mux_api_set(GPIO4D7_I2S0LRCKTX1_NAME,0);\r
890             break;      \r
891         } \r
892         case RK29_PIN5_PA0:\r
893         case RK29_PIN5_PA1:\r
894         case RK29_PIN5_PA2:\r
895         {      \r
896             break;      \r
897         }\r
898         case RK29_PIN5_PA3:\r
899         {\r
900              rk29_mux_api_set(GPIO5A3_MIITXCLKIN_NAME,0);\r
901             break;      \r
902         }\r
903         case RK29_PIN5_PA4:\r
904         {\r
905              rk29_mux_api_set(GPIO5A4_TSSYNC_NAME,0);\r
906             break;      \r
907         }\r
908         case RK29_PIN5_PA5:\r
909         {\r
910              rk29_mux_api_set(GPIO5A5_HSADCDATA0_NAME,0);\r
911             break;      \r
912         }\r
913         case RK29_PIN5_PA6:\r
914         {\r
915              rk29_mux_api_set(GPIO5A6_HSADCDATA1_NAME,0);\r
916             break;      \r
917         }\r
918         case RK29_PIN5_PA7:\r
919         {\r
920              rk29_mux_api_set(GPIO5A7_HSADCDATA2_NAME,0);\r
921             break;      \r
922         }\r
923         case RK29_PIN5_PB0:\r
924         {\r
925              rk29_mux_api_set(GPIO5B0_HSADCDATA3_NAME,0);\r
926             break;      \r
927         }\r
928         case RK29_PIN5_PB1:\r
929         {\r
930              rk29_mux_api_set(GPIO5B1_HSADCDATA4_NAME,0);\r
931             break;      \r
932         }\r
933         case RK29_PIN5_PB2:\r
934         {\r
935              rk29_mux_api_set(GPIO5B2_HSADCDATA5_NAME,0);\r
936             break;      \r
937         }\r
938         case RK29_PIN5_PB3:\r
939         {\r
940              rk29_mux_api_set(GPIO5B3_HSADCDATA6_NAME,0);\r
941             break;      \r
942         }\r
943         case RK29_PIN5_PB4:\r
944         {\r
945              rk29_mux_api_set(GPIO5B4_HSADCDATA7_NAME,0);\r
946             break;      \r
947         }\r
948         case RK29_PIN5_PB5:\r
949         {\r
950              rk29_mux_api_set(GPIO5B5_HSADCDATA8_NAME,0);\r
951             break;      \r
952         }\r
953         case RK29_PIN5_PB6:\r
954         {\r
955              rk29_mux_api_set(GPIO5B6_HSADCDATA9_NAME,0);\r
956             break;      \r
957         }\r
958         case RK29_PIN5_PB7:\r
959         {\r
960              rk29_mux_api_set(GPIO5B7_HSADCCLKOUTGPSCLK_NAME,0);\r
961             break;      \r
962         }\r
963         case RK29_PIN5_PC0:\r
964         {\r
965              rk29_mux_api_set(GPIO5C0_EBCSDDO0_SMCDATA0_NAME,0);\r
966             break;      \r
967         }\r
968         case RK29_PIN5_PC1:\r
969         {\r
970              rk29_mux_api_set(GPIO5C1_EBCSDDO1_SMCDATA1_NAME,0);\r
971             break;      \r
972         }\r
973         case RK29_PIN5_PC2:\r
974         {\r
975              rk29_mux_api_set(GPIO5C2_EBCSDDO2_SMCDATA2_NAME,0);\r
976             break;      \r
977         }\r
978         case RK29_PIN5_PC3:\r
979         {\r
980              rk29_mux_api_set(GPIO5C3_EBCSDDO3_SMCDATA3_NAME,0);\r
981             break;      \r
982         }\r
983         case RK29_PIN5_PC4:\r
984         {\r
985              rk29_mux_api_set(GPIO5C4_EBCSDDO4_SMCDATA4_NAME,0);\r
986             break;      \r
987         }\r
988         case RK29_PIN5_PC5:\r
989         {\r
990              rk29_mux_api_set(GPIO5C5_EBCSDDO5_SMCDATA5_NAME,0);\r
991             break;      \r
992         }\r
993         case RK29_PIN5_PC6:\r
994         {\r
995              rk29_mux_api_set(GPIO5C6_EBCSDDO6_SMCDATA6_NAME,0);\r
996             break;      \r
997         }\r
998         case RK29_PIN5_PC7:\r
999         {\r
1000              rk29_mux_api_set(GPIO5C7_EBCSDDO7_SMCDATA7_NAME,0);\r
1001             break;      \r
1002         }\r
1003         case RK29_PIN5_PD0:\r
1004         {\r
1005              rk29_mux_api_set(GPIO5D0_EBCSDLE_SMCADDR5_HOSTDATA5_NAME,0);\r
1006             break;      \r
1007         }\r
1008         case RK29_PIN5_PD1:\r
1009         {\r
1010              rk29_mux_api_set(GPIO5D1_EBCSDCLK_SMCADDR6_HOSTDATA6_NAME,0);\r
1011             break;      \r
1012         }\r
1013         case RK29_PIN5_PD2:\r
1014         {\r
1015              rk29_mux_api_set(GPIO5D2_PWM1_UART1SIRIN_NAME,0);\r
1016             break;      \r
1017         }\r
1018         case RK29_PIN5_PD3:\r
1019         {\r
1020              rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME,0);\r
1021             break;      \r
1022         }\r
1023         case RK29_PIN5_PD4:\r
1024         {\r
1025              rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME,0);\r
1026             break;      \r
1027         }\r
1028         case RK29_PIN5_PD5:\r
1029         {\r
1030              rk29_mux_api_set(GPIO5D5_SDMMC0PWREN_NAME,0);\r
1031             break;      \r
1032         }\r
1033         case RK29_PIN5_PD6:\r
1034         {\r
1035              rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME,0);\r
1036             break;      \r
1037         }\r
1038         case RK29_PIN5_PD7:\r
1039         case RK29_PIN6_PA0:\r
1040         case RK29_PIN6_PA1:\r
1041         case RK29_PIN6_PA2:\r
1042         case RK29_PIN6_PA3:\r
1043         case RK29_PIN6_PA4:\r
1044         case RK29_PIN6_PA5:\r
1045         case RK29_PIN6_PA6:\r
1046         case RK29_PIN6_PA7:\r
1047         case RK29_PIN6_PB0:\r
1048         case RK29_PIN6_PB1:\r
1049         case RK29_PIN6_PB2:\r
1050         case RK29_PIN6_PB3:\r
1051         case RK29_PIN6_PB4:\r
1052         case RK29_PIN6_PB5:\r
1053         case RK29_PIN6_PB6:\r
1054         case RK29_PIN6_PB7:\r
1055         case RK29_PIN6_PC0:\r
1056         case RK29_PIN6_PC1:\r
1057         case RK29_PIN6_PC2:\r
1058         case RK29_PIN6_PC3:\r
1059         {\r
1060             break;\r
1061         }\r
1062         case RK29_PIN6_PC4:\r
1063         case RK29_PIN6_PC5:\r
1064         {\r
1065              rk29_mux_api_set(GPIO6C54_CPUTRACEDATA54_NAME,0);\r
1066             break;      \r
1067         }\r
1068         case RK29_PIN6_PC6:\r
1069         case RK29_PIN6_PC7:\r
1070         {\r
1071              rk29_mux_api_set(GPIO6C76_CPUTRACEDATA76_NAME,0);\r
1072             break;      \r
1073         }\r
1074         case RK29_PIN6_PD0:\r
1075         case RK29_PIN6_PD1:\r
1076         case RK29_PIN6_PD2:\r
1077         case RK29_PIN6_PD3:\r
1078         case RK29_PIN6_PD4:\r
1079         case RK29_PIN6_PD5:\r
1080         case RK29_PIN6_PD6:\r
1081         case RK29_PIN6_PD7:\r
1082         {\r
1083             break;      \r
1084         }    \r
1085         default:\r
1086         {\r
1087             printk("Pin=%d isn't RK29 GPIO, Please init it's iomux yourself!",pin);\r
1088             break;\r
1089         }\r
1090     }\r
1091     return 0;\r
1092 }\r
1093 \r
1094 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)\r
1095 {\r
1096     int camera_power = res->gpio_power;\r
1097     int camera_ioflag = res->gpio_flag;\r
1098     int camera_io_init = res->gpio_init;\r
1099     int ret = 0;\r
1100     \r
1101     if (camera_power != INVALID_GPIO)  {\r
1102                      if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {\r
1103             if (on) {\r
1104                 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1105                         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
1106                         msleep(10);\r
1107                 } else {\r
1108                         gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1109                         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
1110                 }\r
1111                 } else {\r
1112                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1113                         printk("%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);\r
1114             }        \r
1115     } else {\r
1116                 ret = RK29_CAM_EIO_INVALID;\r
1117     } \r
1118 \r
1119     return ret;\r
1120 }\r
1121 \r
1122 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)\r
1123 {\r
1124     int camera_reset = res->gpio_reset;\r
1125     int camera_ioflag = res->gpio_flag;\r
1126     int camera_io_init = res->gpio_init;  \r
1127     int ret = 0;\r
1128     \r
1129     if (camera_reset != INVALID_GPIO) {\r
1130                 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {\r
1131                         if (on) {\r
1132                         gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1133                         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
1134                         } else {\r
1135                                 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1136                         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
1137                 }\r
1138                 } else {\r
1139                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1140                         printk("%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);\r
1141                 }\r
1142     } else {\r
1143                 ret = RK29_CAM_EIO_INVALID;\r
1144     }\r
1145 \r
1146     return ret;\r
1147 }\r
1148 \r
1149 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)\r
1150 {\r
1151     int camera_powerdown = res->gpio_powerdown;\r
1152     int camera_ioflag = res->gpio_flag;\r
1153     int camera_io_init = res->gpio_init;  \r
1154     int ret = 0;    \r
1155 \r
1156     if (camera_powerdown != INVALID_GPIO) {\r
1157                 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1158                         if (on) {\r
1159                         gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1160                         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
1161                         } else {\r
1162                                 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1163                         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
1164                 }\r
1165                 } else {\r
1166                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1167                         dprintk("%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);\r
1168                 }\r
1169     } else {\r
1170                 ret = RK29_CAM_EIO_INVALID;\r
1171     }\r
1172     return ret;\r
1173 }\r
1174 \r
1175 \r
1176 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)\r
1177 {\r
1178     int camera_flash = res->gpio_flash;\r
1179     int camera_ioflag = res->gpio_flag;\r
1180     int camera_io_init = res->gpio_init;  \r
1181     int ret = 0;    \r
1182 \r
1183     if (camera_flash != INVALID_GPIO) {\r
1184                 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {\r
1185             switch (on)\r
1186             {\r
1187                 case Flash_Off:\r
1188                 {\r
1189                     gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1190                             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
1191                             break;\r
1192                 }\r
1193 \r
1194                 case Flash_On:\r
1195                 {\r
1196                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1197                             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
1198                             break;\r
1199                 }\r
1200 \r
1201                 case Flash_Torch:\r
1202                 {\r
1203                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1204                             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
1205                             break;\r
1206                 }\r
1207 \r
1208                 default:\r
1209                 {\r
1210                     printk("%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);\r
1211                     break;\r
1212                 }\r
1213             }\r
1214                 } else {\r
1215                         ret = RK29_CAM_EIO_REQUESTFAIL;\r
1216                         printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);\r
1217                 }\r
1218     } else {\r
1219                 ret = RK29_CAM_EIO_INVALID;\r
1220     }\r
1221     return ret;\r
1222 }\r
1223 \r
1224 \r
1225 static int rk29_sensor_io_init(void)\r
1226 {\r
1227     int ret = 0, i,j;\r
1228     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
1229         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
1230         unsigned int camera_ioflag;\r
1231 \r
1232     if (sensor_ioctl_cb.sensor_power_cb == NULL)\r
1233         sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;\r
1234     if (sensor_ioctl_cb.sensor_reset_cb == NULL)\r
1235         sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;\r
1236     if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)\r
1237         sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;\r
1238     if (sensor_ioctl_cb.sensor_flash_cb == NULL)\r
1239         sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;\r
1240     \r
1241     for (i=0; i<2; i++) {\r
1242         camera_reset = rk29_camera_platform_data.gpio_res[i].gpio_reset;\r
1243         camera_power = rk29_camera_platform_data.gpio_res[i].gpio_power;\r
1244                 camera_powerdown = rk29_camera_platform_data.gpio_res[i].gpio_powerdown;\r
1245         camera_flash = rk29_camera_platform_data.gpio_res[i].gpio_flash;\r
1246                 camera_ioflag = rk29_camera_platform_data.gpio_res[i].gpio_flag;\r
1247                 rk29_camera_platform_data.gpio_res[i].gpio_init = 0;\r
1248 \r
1249         if (camera_power != INVALID_GPIO) {\r
1250             ret = gpio_request(camera_power, "camera power");\r
1251             if (ret) {\r
1252                 if (i == 0) {\r
1253                     printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
1254                                     goto sensor_io_int_loop_end;\r
1255                 } else {\r
1256                     if (camera_power != rk29_camera_platform_data.gpio_res[0].gpio_power) {\r
1257                         printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
1258                         goto sensor_io_int_loop_end;\r
1259                     }\r
1260                 }\r
1261             }\r
1262 \r
1263             if (rk29_sensor_iomux(camera_power) < 0) {\r
1264                 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
1265                 goto sensor_io_int_loop_end;\r
1266             }\r
1267             \r
1268                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERACTIVE_MASK;\r
1269             gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1270             gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1271 \r
1272                         dprintk("%s....power pin(%d) init success(0x%x)  \n",__FUNCTION__,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
1273 \r
1274         }\r
1275 \r
1276         if (camera_reset != INVALID_GPIO) {\r
1277             ret = gpio_request(camera_reset, "camera reset");\r
1278             if (ret) {\r
1279                 printk("%s..%s..reset pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);\r
1280                 goto sensor_io_int_loop_end;\r
1281             }\r
1282 \r
1283             if (rk29_sensor_iomux(camera_reset) < 0) {\r
1284                 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
1285                 goto sensor_io_int_loop_end;\r
1286             }\r
1287             \r
1288                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_RESETACTIVE_MASK;\r
1289             gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1290             gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1291 \r
1292                         dprintk("%s....reset pin(%d) init success(0x%x)\n",__FUNCTION__,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
1293 \r
1294         }\r
1295 \r
1296                 if (camera_powerdown != INVALID_GPIO) {\r
1297             ret = gpio_request(camera_powerdown, "camera powerdown");\r
1298             if (ret) {\r
1299                 printk("%s..%s..powerdown pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);\r
1300                 goto sensor_io_int_loop_end;\r
1301             }\r
1302 \r
1303             if (rk29_sensor_iomux(camera_powerdown) < 0) {\r
1304                 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
1305                 goto sensor_io_int_loop_end;\r
1306             }\r
1307             \r
1308                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;\r
1309             gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1310             gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1311 \r
1312                         dprintk("%s....powerdown pin(%d) init success(0x%x) \n",__FUNCTION__,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
1313 \r
1314         }\r
1315 \r
1316                 if (camera_flash != INVALID_GPIO) {\r
1317             ret = gpio_request(camera_flash, "camera flash");\r
1318             if (ret) {\r
1319                 printk("%s..%s..flash pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash);\r
1320                                 goto sensor_io_int_loop_end;\r
1321             }\r
1322 \r
1323             if (rk29_sensor_iomux(camera_flash) < 0) {\r
1324                 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
1325             }\r
1326             \r
1327                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_FLASHACTIVE_MASK;\r
1328             gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));    /* falsh off */\r
1329             gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1330 \r
1331                         dprintk("%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
1332 \r
1333         }  \r
1334 \r
1335         \r
1336         for (j=0; j<10; j++) {\r
1337             memset(&rk29_camera_platform_data.info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));\r
1338         }\r
1339         j=0;\r
1340         if (strstr(rk29_camera_platform_data.info[i].dev_name,"_back")) {\r
1341             \r
1342             #if CONFIG_SENSOR_QCIF_FPS_FIXED_0\r
1343             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_0;\r
1344             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1345             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1346             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1347             rk29_camera_platform_data.info[i].fival[j].width = 176;\r
1348             rk29_camera_platform_data.info[i].fival[j].height = 144;\r
1349             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1350             j++;\r
1351             #endif\r
1352 \r
1353             #if CONFIG_SENSOR_QVGA_FPS_FIXED_0\r
1354             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_0;\r
1355             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1356             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1357             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1358             rk29_camera_platform_data.info[i].fival[j].width = 320;\r
1359             rk29_camera_platform_data.info[i].fival[j].height = 240;\r
1360             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1361             j++;\r
1362             #endif\r
1363 \r
1364             #if CONFIG_SENSOR_CIF_FPS_FIXED_0\r
1365             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_0;\r
1366             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1367             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1368             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1369             rk29_camera_platform_data.info[i].fival[j].width = 352;\r
1370             rk29_camera_platform_data.info[i].fival[j].height = 288;\r
1371             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1372             j++;\r
1373             #endif\r
1374 \r
1375             #if CONFIG_SENSOR_VGA_FPS_FIXED_0\r
1376             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_0;\r
1377             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1378             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1379             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1380             rk29_camera_platform_data.info[i].fival[j].width = 640;\r
1381             rk29_camera_platform_data.info[i].fival[j].height = 480;\r
1382             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1383             j++;\r
1384             #endif\r
1385 \r
1386             #if CONFIG_SENSOR_480P_FPS_FIXED_0\r
1387             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_480P_FPS_FIXED_0;\r
1388             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1389             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1390             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1391             rk29_camera_platform_data.info[i].fival[j].width = 720;\r
1392             rk29_camera_platform_data.info[i].fival[j].height = 480;\r
1393             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1394             j++;\r
1395             #endif            \r
1396 \r
1397             #if CONFIG_SENSOR_SVGA_FPS_FIXED_0\r
1398             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_0;\r
1399             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1400             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1401             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1402             rk29_camera_platform_data.info[i].fival[j].width = 800;\r
1403             rk29_camera_platform_data.info[i].fival[j].height = 600;\r
1404             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1405             j++;\r
1406             #endif\r
1407 \r
1408             #if CONFIG_SENSOR_720P_FPS_FIXED_0\r
1409             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_0;\r
1410             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\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 = 1280;\r
1414             rk29_camera_platform_data.info[i].fival[j].height = 720;\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         } else {\r
1420             #if CONFIG_SENSOR_QCIF_FPS_FIXED_1\r
1421             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_1;\r
1422             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1423             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1424             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1425             rk29_camera_platform_data.info[i].fival[j].width = 176;\r
1426             rk29_camera_platform_data.info[i].fival[j].height = 144;\r
1427             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1428             j++;\r
1429             #endif\r
1430 \r
1431             #if CONFIG_SENSOR_QVGA_FPS_FIXED_1\r
1432             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_1;\r
1433             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1434             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1435             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1436             rk29_camera_platform_data.info[i].fival[j].width = 320;\r
1437             rk29_camera_platform_data.info[i].fival[j].height = 240;\r
1438             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1439             j++;\r
1440             #endif\r
1441 \r
1442             #if CONFIG_SENSOR_CIF_FPS_FIXED_1\r
1443             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_1;\r
1444             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1445             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1446             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1447             rk29_camera_platform_data.info[i].fival[j].width = 352;\r
1448             rk29_camera_platform_data.info[i].fival[j].height = 288;\r
1449             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1450             j++;\r
1451             #endif\r
1452 \r
1453             #if CONFIG_SENSOR_VGA_FPS_FIXED_1\r
1454             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_1;\r
1455             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1456             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1457             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1458             rk29_camera_platform_data.info[i].fival[j].width = 640;\r
1459             rk29_camera_platform_data.info[i].fival[j].height = 480;\r
1460             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1461             j++;\r
1462             #endif\r
1463 \r
1464             #if CONFIG_SENSOR_480P_FPS_FIXED_1\r
1465             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_480P_FPS_FIXED_1;\r
1466             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1467             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1468             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1469             rk29_camera_platform_data.info[i].fival[j].width = 720;\r
1470             rk29_camera_platform_data.info[i].fival[j].height = 480;\r
1471             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1472             j++;\r
1473             #endif \r
1474 \r
1475             #if CONFIG_SENSOR_SVGA_FPS_FIXED_1\r
1476             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_1;\r
1477             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1478             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1479             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1480             rk29_camera_platform_data.info[i].fival[j].width = 800;\r
1481             rk29_camera_platform_data.info[i].fival[j].height = 600;\r
1482             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1483             j++;\r
1484             #endif\r
1485 \r
1486             #if CONFIG_SENSOR_720P_FPS_FIXED_1\r
1487             rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_1;\r
1488             rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
1489             rk29_camera_platform_data.info[i].fival[j].index = 0;\r
1490             rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
1491             rk29_camera_platform_data.info[i].fival[j].width = 1280;\r
1492             rk29_camera_platform_data.info[i].fival[j].height = 720;\r
1493             rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
1494             j++;\r
1495             #endif\r
1496         }\r
1497         \r
1498                 continue;\r
1499 sensor_io_int_loop_end:\r
1500                 rk29_sensor_io_deinit(i);\r
1501                 continue;\r
1502     }\r
1503 \r
1504     return 0;\r
1505 }\r
1506 \r
1507 static int rk29_sensor_io_deinit(int sensor)\r
1508 {\r
1509     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
1510         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
1511 \r
1512     camera_reset = rk29_camera_platform_data.gpio_res[sensor].gpio_reset;\r
1513     camera_power = rk29_camera_platform_data.gpio_res[sensor].gpio_power;\r
1514         camera_powerdown = rk29_camera_platform_data.gpio_res[sensor].gpio_powerdown;\r
1515     camera_flash = rk29_camera_platform_data.gpio_res[sensor].gpio_flash;\r
1516 \r
1517     printk("%s..%s enter..\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[sensor].dev_name);\r
1518 \r
1519         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERACTIVE_MASK) {\r
1520             if (camera_power != INVALID_GPIO) {\r
1521                 gpio_direction_input(camera_power);\r
1522                 gpio_free(camera_power);\r
1523             }\r
1524         }\r
1525 \r
1526         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_RESETACTIVE_MASK) {\r
1527             if (camera_reset != INVALID_GPIO)  {\r
1528                 gpio_direction_input(camera_reset);\r
1529                 gpio_free(camera_reset);\r
1530             }\r
1531         }\r
1532 \r
1533         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
1534             if (camera_powerdown != INVALID_GPIO)  {\r
1535                 gpio_direction_input(camera_powerdown);\r
1536                 gpio_free(camera_powerdown);\r
1537             }\r
1538         }\r
1539 \r
1540         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_FLASHACTIVE_MASK) {\r
1541             if (camera_flash != INVALID_GPIO)  {\r
1542                 gpio_direction_input(camera_flash);\r
1543                 gpio_free(camera_flash);\r
1544             }\r
1545         }\r
1546 \r
1547         rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;\r
1548     return 0;\r
1549 }\r
1550 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)\r
1551 {\r
1552     struct rk29camera_gpio_res *res = NULL;    \r
1553         int ret = RK29_CAM_IO_SUCCESS;\r
1554     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
1555                 res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[0];\r
1556     } 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
1557         res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[1];\r
1558     } else {\r
1559         printk(KERN_ERR "%s is not regisiterd in rk29_camera_platform_data!!\n",dev_name(dev));\r
1560         ret = RK29_CAM_EIO_INVALID;\r
1561         goto rk29_sensor_ioctrl_end;\r
1562     }\r
1563         switch (cmd)\r
1564         {\r
1565                 case Cam_Power:\r
1566                 {\r
1567                         if (sensor_ioctl_cb.sensor_power_cb) {\r
1568                 ret = sensor_ioctl_cb.sensor_power_cb(res, on);\r
1569                         } else {\r
1570                 printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");\r
1571                 WARN_ON(1);\r
1572                         }\r
1573                         break;\r
1574                 }\r
1575                 case Cam_Reset:\r
1576                 {\r
1577                         if (sensor_ioctl_cb.sensor_reset_cb) {\r
1578                 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);\r
1579                         } else {\r
1580                 printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");\r
1581                 WARN_ON(1);\r
1582                         }\r
1583                         break;\r
1584                 }\r
1585 \r
1586                 case Cam_PowerDown:\r
1587                 {\r
1588                         if (sensor_ioctl_cb.sensor_powerdown_cb) {\r
1589                 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);\r
1590                         } else {\r
1591                 printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");\r
1592                 WARN_ON(1);\r
1593                         }\r
1594                         break;\r
1595                 }\r
1596 \r
1597                 case Cam_Flash:\r
1598                 {\r
1599                         if (sensor_ioctl_cb.sensor_flash_cb) {\r
1600                 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);\r
1601                         } else {\r
1602                 printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");\r
1603                 WARN_ON(1);\r
1604                         }\r
1605                         break;\r
1606                 }\r
1607                 default:\r
1608                 {\r
1609                         printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);\r
1610                         break;\r
1611                 }\r
1612         }\r
1613 rk29_sensor_ioctrl_end:\r
1614     return ret;\r
1615 }\r
1616 static int rk29_sensor_power(struct device *dev, int on)\r
1617 {\r
1618         rk29_sensor_ioctrl(dev,Cam_Power,on);\r
1619     return 0;\r
1620 }\r
1621 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO) || (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
1622 static int rk29_sensor_reset(struct device *dev)\r
1623 {\r
1624         rk29_sensor_ioctrl(dev,Cam_Reset,1);\r
1625         msleep(2);\r
1626         rk29_sensor_ioctrl(dev,Cam_Reset,0);\r
1627         return 0;\r
1628 }\r
1629 #endif\r
1630 static int rk29_sensor_powerdown(struct device *dev, int on)\r
1631 {\r
1632         return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);\r
1633 }\r
1634 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
1635 static struct i2c_board_info rk29_i2c_cam_info_0[] = {\r
1636         {\r
1637                 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1)\r
1638         },\r
1639 };\r
1640 \r
1641 static struct soc_camera_link rk29_iclink_0 = {\r
1642         .bus_id         = RK29_CAM_PLATFORM_DEV_ID,\r
1643         .power          = rk29_sensor_power,\r
1644 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO)\r
1645     .reset      = rk29_sensor_reset,\r
1646 #endif    \r
1647         .powerdown  = rk29_sensor_powerdown,\r
1648         .board_info     = &rk29_i2c_cam_info_0[0],\r
1649         .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,\r
1650         .module_name    = SENSOR_NAME_0,\r
1651 };\r
1652 \r
1653 /*platform_device : soc-camera need  */\r
1654 static struct platform_device rk29_soc_camera_pdrv_0 = {\r
1655         .name   = "soc-camera-pdrv",\r
1656         .id     = 0,\r
1657         .dev    = {\r
1658                 .init_name = SENSOR_DEVICE_NAME_0,\r
1659                 .platform_data = &rk29_iclink_0,\r
1660         },\r
1661 };\r
1662 #endif\r
1663 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
1664 static struct i2c_board_info rk29_i2c_cam_info_1[] = {\r
1665         {\r
1666                 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)\r
1667         },\r
1668 };\r
1669 \r
1670 static struct soc_camera_link rk29_iclink_1 = {\r
1671         .bus_id         = RK29_CAM_PLATFORM_DEV_ID,\r
1672         .power          = rk29_sensor_power,\r
1673 #if (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
1674     .reset      = rk29_sensor_reset,\r
1675 #endif          \r
1676         .powerdown  = rk29_sensor_powerdown,\r
1677         .board_info     = &rk29_i2c_cam_info_1[0],\r
1678         .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,\r
1679         .module_name    = SENSOR_NAME_1,\r
1680 };\r
1681 \r
1682 /*platform_device : soc-camera need  */\r
1683 static struct platform_device rk29_soc_camera_pdrv_1 = {\r
1684         .name   = "soc-camera-pdrv",\r
1685         .id     = 1,\r
1686         .dev    = {\r
1687                 .init_name = SENSOR_DEVICE_NAME_1,\r
1688                 .platform_data = &rk29_iclink_1,\r
1689         },\r
1690 };\r
1691 #endif\r
1692 \r
1693 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;\r
1694 static struct resource rk29_camera_resource[] = {\r
1695         [0] = {\r
1696                 .start = RK29_VIP_PHYS,\r
1697                 .end   = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,\r
1698                 .flags = IORESOURCE_MEM,\r
1699         },\r
1700         [1] = {\r
1701                 .start = IRQ_VIP,\r
1702                 .end   = IRQ_VIP,\r
1703                 .flags = IORESOURCE_IRQ,\r
1704         }\r
1705 };\r
1706 \r
1707 /*platform_device : */\r
1708 static struct platform_device rk29_device_camera = {\r
1709         .name             = RK29_CAM_DRV_NAME,\r
1710         .id               = RK29_CAM_PLATFORM_DEV_ID,               /* This is used to put cameras on this interface */\r
1711         .num_resources    = ARRAY_SIZE(rk29_camera_resource),\r
1712         .resource         = rk29_camera_resource,\r
1713         .dev            = {\r
1714                 .dma_mask = &rockchip_device_camera_dmamask,\r
1715                 .coherent_dma_mask = 0xffffffffUL,\r
1716                 .platform_data  = &rk29_camera_platform_data,\r
1717         }\r
1718 };\r
1719 \r
1720 static struct android_pmem_platform_data android_pmem_cam_pdata = {\r
1721         .name           = "pmem_cam",\r
1722         .start          = PMEM_CAM_BASE,\r
1723         .size           = PMEM_CAM_SIZE,\r
1724         .no_allocator   = 1,\r
1725         .cached         = 1,\r
1726 };\r
1727 \r
1728 static struct platform_device android_pmem_cam_device = {\r
1729         .name           = "android_pmem",\r
1730         .id             = 1,\r
1731         .dev            = {\r
1732                 .platform_data = &android_pmem_cam_pdata,\r
1733         },\r
1734 };\r
1735 \r
1736 #endif\r
1737 \r
1738 #endif //#ifdef CONFIG_VIDEO_RK29\r