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