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
11 #define _STR(x) __STR(x)
\r
12 #define STR(x) _STR(x)
\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
21 #define PMEM_SENSOR_FULL_RESOLUTION_0 0x00
\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
31 #define PMEM_SENSOR_FULL_RESOLUTION_1 0x00
\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
37 #define PMEM_CAM_FULL_RESOLUTION PMEM_SENSOR_FULL_RESOLUTION_1
\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
56 #define PMEM_CAM_NECESSARY 0x1200000
\r
57 #define PMEM_CAMIPP_NECESSARY 0x800000
\r
59 /*---------------- Camera Sensor Fixed Macro End ------------------------*/
\r
60 #else //#ifdef CONFIG_VIDEO_RK29
\r
61 #define PMEM_CAM_NECESSARY 0x00000000
\r
63 #else // #ifdef PMEM_CAM_SIZE
\r
65 /*****************************************************************************************
\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
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
77 #define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__)
\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
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
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
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
100 .dev_name = SENSOR_DEVICE_NAME_0,
\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
108 .dev_name = SENSOR_DEVICE_NAME_1,
\r
111 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
\r
113 .name = "camera_ipp_mem",
\r
114 .start = MEM_CAMIPP_BASE,
\r
115 .size = MEM_CAMIPP_SIZE,
\r
120 .dev_name = SENSOR_DEVICE_NAME_0,
\r
121 .orientation = CONFIG_SENSOR_ORIENTATION_0,
\r
123 .dev_name = SENSOR_DEVICE_NAME_1,
\r
124 .orientation = CONFIG_SENSOR_ORIENTATION_1,
\r
129 static int rk29_sensor_iomux(int pin)
\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
141 case RK29_PIN0_PA5:
\r
143 rk29_mux_api_set(GPIO0A5_FLASHDQS_NAME,0);
\r
146 case RK29_PIN0_PA6:
\r
148 rk29_mux_api_set(GPIO0A6_MIIMD_NAME,0);
\r
151 case RK29_PIN0_PA7:
\r
153 rk29_mux_api_set(GPIO0A7_MIIMDCLK_NAME,0);
\r
156 case RK29_PIN0_PB0:
\r
158 rk29_mux_api_set(GPIO0B0_EBCSDCE0_SMCADDR0_HOSTDATA0_NAME,0);
\r
161 case RK29_PIN0_PB1:
\r
163 rk29_mux_api_set(GPIO0B1_EBCSDCE1_SMCADDR1_HOSTDATA1_NAME,0);
\r
166 case RK29_PIN0_PB2:
\r
168 rk29_mux_api_set(GPIO0B2_EBCSDCE2_SMCADDR2_HOSTDATA2_NAME,0);
\r
171 case RK29_PIN0_PB3:
\r
173 rk29_mux_api_set(GPIO0B3_EBCBORDER0_SMCADDR3_HOSTDATA3_NAME,0);
\r
176 case RK29_PIN0_PB4:
\r
178 rk29_mux_api_set(GPIO0B4_EBCBORDER1_SMCWEN_NAME,0);
\r
181 case RK29_PIN0_PB5:
\r
183 rk29_mux_api_set(GPIO0B5_EBCVCOM_SMCBLSN0_NAME,0);
\r
186 case RK29_PIN0_PB6:
\r
188 rk29_mux_api_set(GPIO0B6_EBCSDSHR_SMCBLSN1_HOSTINT_NAME,0);
\r
191 case RK29_PIN0_PB7:
\r
193 rk29_mux_api_set(GPIO0B7_EBCGDOE_SMCOEN_NAME,0);
\r
196 case RK29_PIN0_PC0:
\r
198 rk29_mux_api_set(GPIO0C0_EBCGDSP_SMCDATA8_NAME,0);
\r
201 case RK29_PIN0_PC1:
\r
203 rk29_mux_api_set(GPIO0C1_EBCGDR1_SMCDATA9_NAME,0);
\r
206 case RK29_PIN0_PC2:
\r
208 rk29_mux_api_set(GPIO0C2_EBCSDCE0_SMCDATA10_NAME,0);
\r
211 case RK29_PIN0_PC3:
\r
213 rk29_mux_api_set(GPIO0C3_EBCSDCE1_SMCDATA11_NAME,0);
\r
216 case RK29_PIN0_PC4:
\r
218 rk29_mux_api_set(GPIO0C4_EBCSDCE2_SMCDATA12_NAME,0);
\r
221 case RK29_PIN0_PC5:
\r
223 rk29_mux_api_set(GPIO0C5_EBCSDCE3_SMCDATA13_NAME,0);
\r
226 case RK29_PIN0_PC6:
\r
228 rk29_mux_api_set(GPIO0C6_EBCSDCE4_SMCDATA14_NAME,0);
\r
231 case RK29_PIN0_PC7:
\r
233 rk29_mux_api_set(GPIO0C7_EBCSDCE5_SMCDATA15_NAME,0);
\r
236 case RK29_PIN0_PD0:
\r
238 rk29_mux_api_set(GPIO0D0_EBCSDOE_SMCADVN_NAME,0);
\r
241 case RK29_PIN0_PD1:
\r
243 rk29_mux_api_set(GPIO0D1_EBCGDCLK_SMCADDR4_HOSTDATA4_NAME,0);
\r
246 case RK29_PIN0_PD2:
\r
248 rk29_mux_api_set(GPIO0D2_FLASHCSN1_NAME,0);
\r
251 case RK29_PIN0_PD3:
\r
253 rk29_mux_api_set(GPIO0D3_FLASHCSN2_NAME,0);
\r
256 case RK29_PIN0_PD4:
\r
258 rk29_mux_api_set(GPIO0D4_FLASHCSN3_NAME,0);
\r
261 case RK29_PIN0_PD5:
\r
263 rk29_mux_api_set(GPIO0D5_FLASHCSN4_NAME,0);
\r
266 case RK29_PIN0_PD6:
\r
268 rk29_mux_api_set(GPIO0D6_FLASHCSN5_NAME,0);
\r
271 case RK29_PIN0_PD7:
\r
273 rk29_mux_api_set(GPIO0D7_FLASHCSN6_NAME,0);
\r
276 case RK29_PIN1_PA0:
\r
278 rk29_mux_api_set(GPIO1A0_FLASHCS7_MDDRTQ_NAME,0);
\r
281 case RK29_PIN1_PA1:
\r
283 rk29_mux_api_set(GPIO1A1_SMCCSN0_NAME,0);
\r
286 case RK29_PIN1_PA2:
\r
288 rk29_mux_api_set(GPIO1A2_SMCCSN1_NAME,0);
\r
291 case RK29_PIN1_PA3:
\r
293 rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,0);
\r
296 case RK29_PIN1_PA4:
\r
298 rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,0);
\r
301 case RK29_PIN1_PA5:
\r
303 rk29_mux_api_set(GPIO1A5_EMMCPWREN_PWM3_NAME,0);
\r
306 case RK29_PIN1_PA6:
\r
308 rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME,0);
\r
311 case RK29_PIN1_PA7:
\r
313 rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME,0);
\r
316 case RK29_PIN1_PB0:
\r
318 rk29_mux_api_set(GPIO1B0_VIPDATA0_NAME,0);
\r
321 case RK29_PIN1_PB1:
\r
323 rk29_mux_api_set(GPIO1B1_VIPDATA1_NAME,0);
\r
326 case RK29_PIN1_PB2:
\r
328 rk29_mux_api_set(GPIO1B2_VIPDATA2_NAME,0);
\r
331 case RK29_PIN1_PB3:
\r
333 rk29_mux_api_set(GPIO1B3_VIPDATA3_NAME,0);
\r
336 case RK29_PIN1_PB4:
\r
338 rk29_mux_api_set(GPIO1B4_VIPCLKOUT_NAME,0);
\r
341 case RK29_PIN1_PB5:
\r
343 rk29_mux_api_set(GPIO1B5_PWM0_NAME,0);
\r
346 case RK29_PIN1_PB6:
\r
348 rk29_mux_api_set(GPIO1B6_UART0SIN_NAME,0);
\r
351 case RK29_PIN1_PB7:
\r
353 rk29_mux_api_set(GPIO1B7_UART0SOUT_NAME,0);
\r
356 case RK29_PIN1_PC0:
\r
358 rk29_mux_api_set(GPIO1C0_UART0CTSN_SDMMC1DETECTN_NAME,0);
\r
361 case RK29_PIN1_PC1:
\r
363 rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME,0);
\r
366 case RK29_PIN1_PC2:
\r
368 rk29_mux_api_set(GPIO1C2_SDMMC1CMD_NAME,0);
\r
371 case RK29_PIN1_PC3:
\r
373 rk29_mux_api_set(GPIO1C3_SDMMC1DATA0_NAME,0);
\r
376 case RK29_PIN1_PC4:
\r
378 rk29_mux_api_set(GPIO1C4_SDMMC1DATA1_NAME,0);
\r
381 case RK29_PIN1_PC5:
\r
383 rk29_mux_api_set(GPIO1C5_SDMMC1DATA2_NAME,0);
\r
386 case RK29_PIN1_PC6:
\r
388 rk29_mux_api_set(GPIO1C6_SDMMC1DATA3_NAME,0);
\r
391 case RK29_PIN1_PC7:
\r
393 rk29_mux_api_set(GPIO1C7_SDMMC1CLKOUT_NAME,0);
\r
396 case RK29_PIN1_PD0:
\r
398 rk29_mux_api_set(GPIO1D0_SDMMC0CLKOUT_NAME,0);
\r
401 case RK29_PIN1_PD1:
\r
403 rk29_mux_api_set(GPIO1D1_SDMMC0CMD_NAME,0);
\r
406 case RK29_PIN1_PD2:
\r
408 rk29_mux_api_set(GPIO1D2_SDMMC0DATA0_NAME,0);
\r
411 case RK29_PIN1_PD3:
\r
413 rk29_mux_api_set(GPIO1D3_SDMMC0DATA1_NAME,0);
\r
416 case RK29_PIN1_PD4:
\r
418 rk29_mux_api_set(GPIO1D4_SDMMC0DATA2_NAME,0);
\r
421 case RK29_PIN1_PD5:
\r
423 rk29_mux_api_set(GPIO1D5_SDMMC0DATA3_NAME,0);
\r
426 case RK29_PIN1_PD6:
\r
428 rk29_mux_api_set(GPIO1D6_SDMMC0DATA4_NAME,0);
\r
431 case RK29_PIN1_PD7:
\r
433 rk29_mux_api_set(GPIO1D7_SDMMC0DATA5_NAME,0);
\r
436 case RK29_PIN2_PA0:
\r
438 rk29_mux_api_set(GPIO2A0_SDMMC0DATA6_NAME,0);
\r
441 case RK29_PIN2_PA1:
\r
443 rk29_mux_api_set(GPIO2A1_SDMMC0DATA7_NAME,0);
\r
446 case RK29_PIN2_PA2:
\r
448 rk29_mux_api_set(GPIO2A2_SDMMC0DETECTN_NAME,0);
\r
451 case RK29_PIN2_PA3:
\r
453 rk29_mux_api_set(GPIO2A3_SDMMC0WRITEPRT_PWM2_NAME,0);
\r
456 case RK29_PIN2_PA4:
\r
458 rk29_mux_api_set(GPIO2A4_UART1SIN_NAME,0);
\r
461 case RK29_PIN2_PA5:
\r
463 rk29_mux_api_set(GPIO2A5_UART1SOUT_NAME,0);
\r
466 case RK29_PIN2_PA6:
\r
468 rk29_mux_api_set(GPIO2A6_UART2CTSN_NAME,0);
\r
471 case RK29_PIN2_PA7:
\r
473 rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME,0);
\r
476 case RK29_PIN2_PB0:
\r
478 rk29_mux_api_set(GPIO2B0_UART2SIN_NAME,0);
\r
481 case RK29_PIN2_PB1:
\r
483 rk29_mux_api_set(GPIO2B1_UART2SOUT_NAME,0);
\r
486 case RK29_PIN2_PB2:
\r
488 rk29_mux_api_set(GPIO2B2_UART3SIN_NAME,0);
\r
491 case RK29_PIN2_PB3:
\r
493 rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME,0);
\r
496 case RK29_PIN2_PB4:
\r
498 rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME,0);
\r
501 case RK29_PIN2_PB5:
\r
503 rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME,0);
\r
506 case RK29_PIN2_PB6:
\r
508 rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME,0);
\r
511 case RK29_PIN2_PB7:
\r
513 rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME,0);
\r
516 case RK29_PIN2_PC0:
\r
518 rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,0);
\r
521 case RK29_PIN2_PC1:
\r
523 rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,0);
\r
526 case RK29_PIN2_PC2:
\r
528 rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,0);
\r
531 case RK29_PIN2_PC3:
\r
533 rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,0);
\r
536 case RK29_PIN2_PC4:
\r
538 rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,0);
\r
541 case RK29_PIN2_PC5:
\r
543 rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,0);
\r
546 case RK29_PIN2_PC6:
\r
548 rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,0);
\r
551 case RK29_PIN2_PC7:
\r
553 rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,0);
\r
556 case RK29_PIN2_PD0:
\r
558 rk29_mux_api_set(GPIO2D0_I2S0CLK_MIIRXCLKIN_NAME,0);
\r
561 case RK29_PIN2_PD1:
\r
563 rk29_mux_api_set(GPIO2D1_I2S0SCLK_MIICRS_NAME,0);
\r
566 case RK29_PIN2_PD2:
\r
568 rk29_mux_api_set(GPIO2D2_I2S0LRCKRX_MIITXERR_NAME,0);
\r
571 case RK29_PIN2_PD3:
\r
573 rk29_mux_api_set(GPIO2D3_I2S0SDI_MIICOL_NAME,0);
\r
576 case RK29_PIN2_PD4:
\r
578 rk29_mux_api_set(GPIO2D4_I2S0SDO0_MIIRXD2_NAME,0);
\r
581 case RK29_PIN2_PD5:
\r
583 rk29_mux_api_set(GPIO2D5_I2S0SDO1_MIIRXD3_NAME,0);
\r
586 case RK29_PIN2_PD6:
\r
588 rk29_mux_api_set(GPIO2D6_I2S0SDO2_MIITXD2_NAME,0);
\r
591 case RK29_PIN2_PD7:
\r
593 rk29_mux_api_set(GPIO2D7_I2S0SDO3_MIITXD3_NAME,0);
\r
596 case RK29_PIN3_PA0:
\r
598 rk29_mux_api_set(GPIO3A0_I2S1CLK_NAME,0);
\r
601 case RK29_PIN3_PA1:
\r
603 rk29_mux_api_set(GPIO3A1_I2S1SCLK_NAME,0);
\r
606 case RK29_PIN3_PA2:
\r
608 rk29_mux_api_set(GPIO3A2_I2S1LRCKRX_NAME,0);
\r
611 case RK29_PIN3_PA3:
\r
613 rk29_mux_api_set(GPIO3A3_I2S1SDI_NAME,0);
\r
616 case RK29_PIN3_PA4:
\r
618 rk29_mux_api_set(GPIO3A4_I2S1SDO_NAME,0);
\r
621 case RK29_PIN3_PA5:
\r
623 rk29_mux_api_set(GPIO3A5_I2S1LRCKTX_NAME,0);
\r
626 case RK29_PIN3_PA6:
\r
628 rk29_mux_api_set(GPIO3A6_SMCADDR14_HOSTDATA14_NAME,0);
\r
631 case RK29_PIN3_PA7:
\r
633 rk29_mux_api_set(GPIO3A7_SMCADDR15_HOSTDATA15_NAME,0);
\r
636 case RK29_PIN3_PB0:
\r
638 rk29_mux_api_set(GPIO3B0_EMMCLKOUT_NAME,0);
\r
641 case RK29_PIN3_PB1:
\r
643 rk29_mux_api_set(GPIO3B1_EMMCMD_NAME,0);
\r
646 case RK29_PIN3_PB2:
\r
648 rk29_mux_api_set(GPIO3B2_EMMCDATA0_NAME,0);
\r
651 case RK29_PIN3_PB3:
\r
653 rk29_mux_api_set(GPIO3B3_EMMCDATA1_NAME,0);
\r
656 case RK29_PIN3_PB4:
\r
658 rk29_mux_api_set(GPIO3B4_EMMCDATA2_NAME,0);
\r
661 case RK29_PIN3_PB5:
\r
663 rk29_mux_api_set(GPIO3B5_EMMCDATA3_NAME,0);
\r
666 case RK29_PIN3_PB6:
\r
668 rk29_mux_api_set(GPIO3B6_EMMCDATA4_NAME,0);
\r
671 case RK29_PIN3_PB7:
\r
673 rk29_mux_api_set(GPIO3B7_EMMCDATA5_NAME,0);
\r
676 case RK29_PIN3_PC0:
\r
678 rk29_mux_api_set(GPIO3C0_EMMCDATA6_NAME,0);
\r
681 case RK29_PIN3_PC1:
\r
683 rk29_mux_api_set(GPIO3C1_EMMCDATA7_NAME,0);
\r
686 case RK29_PIN3_PC2:
\r
688 rk29_mux_api_set(GPIO3C2_SMCADDR13_HOSTDATA13_NAME,0);
\r
691 case RK29_PIN3_PC3:
\r
693 rk29_mux_api_set(GPIO3C3_SMCADDR10_HOSTDATA10_NAME,0);
\r
696 case RK29_PIN3_PC4:
\r
698 rk29_mux_api_set(GPIO3C4_SMCADDR11_HOSTDATA11_NAME,0);
\r
701 case RK29_PIN3_PC5:
\r
703 rk29_mux_api_set(GPIO3C5_SMCADDR12_HOSTDATA12_NAME,0);
\r
706 case RK29_PIN3_PC6:
\r
708 rk29_mux_api_set(GPIO3C6_SMCADDR16_HOSTDATA16_NAME,0);
\r
711 case RK29_PIN3_PC7:
\r
713 rk29_mux_api_set(GPIO3C7_SMCADDR17_HOSTDATA17_NAME,0);
\r
716 case RK29_PIN3_PD0:
\r
718 rk29_mux_api_set(GPIO3D0_SMCADDR18_HOSTADDR0_NAME,0);
\r
721 case RK29_PIN3_PD1:
\r
723 rk29_mux_api_set(GPIO3D1_SMCADDR19_HOSTADDR1_NAME,0);
\r
726 case RK29_PIN3_PD2:
\r
728 rk29_mux_api_set(GPIO3D2_HOSTCSN_NAME,0);
\r
731 case RK29_PIN3_PD3:
\r
733 rk29_mux_api_set(GPIO3D3_HOSTRDN_NAME,0);
\r
736 case RK29_PIN3_PD4:
\r
738 rk29_mux_api_set(GPIO3D4_HOSTWRN_NAME,0);
\r
741 case RK29_PIN3_PD5:
\r
743 rk29_mux_api_set(GPIO3D5_SMCADDR7_HOSTDATA7_NAME,0);
\r
746 case RK29_PIN3_PD6:
\r
748 rk29_mux_api_set(GPIO3D6_SMCADDR8_HOSTDATA8_NAME,0);
\r
751 case RK29_PIN3_PD7:
\r
753 rk29_mux_api_set(GPIO3D7_SMCADDR9_HOSTDATA9_NAME,0);
\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
764 case RK29_PIN4_PA5:
\r
766 rk29_mux_api_set(GPIO4A5_OTG0DRVVBUS_NAME,0);
\r
769 case RK29_PIN4_PA6:
\r
771 rk29_mux_api_set(GPIO4A6_OTG1DRVVBUS_NAME,0);
\r
774 case RK29_PIN4_PA7:
\r
776 rk29_mux_api_set(GPIO4A7_SPDIFTX_NAME,0);
\r
779 case RK29_PIN4_PB0:
\r
781 rk29_mux_api_set(GPIO4B0_FLASHDATA8_NAME,0);
\r
784 case RK29_PIN4_PB1:
\r
786 rk29_mux_api_set(GPIO4B1_FLASHDATA9_NAME,0);
\r
789 case RK29_PIN4_PB2:
\r
791 rk29_mux_api_set(GPIO4B2_FLASHDATA10_NAME,0);
\r
794 case RK29_PIN4_PB3:
\r
796 rk29_mux_api_set(GPIO4B3_FLASHDATA11_NAME,0);
\r
799 case RK29_PIN4_PB4:
\r
801 rk29_mux_api_set(GPIO4B4_FLASHDATA12_NAME,0);
\r
804 case RK29_PIN4_PB5:
\r
806 rk29_mux_api_set(GPIO4B5_FLASHDATA13_NAME,0);
\r
809 case RK29_PIN4_PB6:
\r
811 rk29_mux_api_set(GPIO4B6_FLASHDATA14_NAME ,0);
\r
814 case RK29_PIN4_PB7:
\r
816 rk29_mux_api_set(GPIO4B7_FLASHDATA15_NAME,0);
\r
819 case RK29_PIN4_PC0:
\r
821 rk29_mux_api_set(GPIO4C0_RMIICLKOUT_RMIICLKIN_NAME,0);
\r
824 case RK29_PIN4_PC1:
\r
826 rk29_mux_api_set(GPIO4C1_RMIITXEN_MIITXEN_NAME,0);
\r
829 case RK29_PIN4_PC2:
\r
831 rk29_mux_api_set(GPIO4C2_RMIITXD1_MIITXD1_NAME,0);
\r
834 case RK29_PIN4_PC3:
\r
836 rk29_mux_api_set(GPIO4C3_RMIITXD0_MIITXD0_NAME,0);
\r
839 case RK29_PIN4_PC4:
\r
841 rk29_mux_api_set(GPIO4C4_RMIIRXERR_MIIRXERR_NAME,0);
\r
844 case RK29_PIN4_PC5:
\r
846 rk29_mux_api_set(GPIO4C5_RMIICSRDVALID_MIIRXDVALID_NAME,0);
\r
849 case RK29_PIN4_PC6:
\r
851 rk29_mux_api_set(GPIO4C6_RMIIRXD1_MIIRXD1_NAME,0);
\r
855 case RK29_PIN4_PC7:
\r
857 rk29_mux_api_set(GPIO4C7_RMIIRXD0_MIIRXD0_NAME,0);
\r
860 case RK29_PIN4_PD0:
\r
861 case RK29_PIN4_PD1:
\r
863 rk29_mux_api_set(GPIO4D10_CPUTRACEDATA10_NAME,0);
\r
866 case RK29_PIN4_PD2:
\r
867 case RK29_PIN4_PD3:
\r
869 rk29_mux_api_set(GPIO4D32_CPUTRACEDATA32_NAME,0);
\r
872 case RK29_PIN4_PD4:
\r
874 rk29_mux_api_set(GPIO4D4_CPUTRACECLK_NAME,0);
\r
877 case RK29_PIN4_PD5:
\r
879 rk29_mux_api_set(GPIO4D5_CPUTRACECTL_NAME,0);
\r
882 case RK29_PIN4_PD6:
\r
884 rk29_mux_api_set(GPIO4D6_I2S0LRCKTX0_NAME,0);
\r
887 case RK29_PIN4_PD7:
\r
889 rk29_mux_api_set(GPIO4D7_I2S0LRCKTX1_NAME,0);
\r
892 case RK29_PIN5_PA0:
\r
893 case RK29_PIN5_PA1:
\r
894 case RK29_PIN5_PA2:
\r
898 case RK29_PIN5_PA3:
\r
900 rk29_mux_api_set(GPIO5A3_MIITXCLKIN_NAME,0);
\r
903 case RK29_PIN5_PA4:
\r
905 rk29_mux_api_set(GPIO5A4_TSSYNC_NAME,0);
\r
908 case RK29_PIN5_PA5:
\r
910 rk29_mux_api_set(GPIO5A5_HSADCDATA0_NAME,0);
\r
913 case RK29_PIN5_PA6:
\r
915 rk29_mux_api_set(GPIO5A6_HSADCDATA1_NAME,0);
\r
918 case RK29_PIN5_PA7:
\r
920 rk29_mux_api_set(GPIO5A7_HSADCDATA2_NAME,0);
\r
923 case RK29_PIN5_PB0:
\r
925 rk29_mux_api_set(GPIO5B0_HSADCDATA3_NAME,0);
\r
928 case RK29_PIN5_PB1:
\r
930 rk29_mux_api_set(GPIO5B1_HSADCDATA4_NAME,0);
\r
933 case RK29_PIN5_PB2:
\r
935 rk29_mux_api_set(GPIO5B2_HSADCDATA5_NAME,0);
\r
938 case RK29_PIN5_PB3:
\r
940 rk29_mux_api_set(GPIO5B3_HSADCDATA6_NAME,0);
\r
943 case RK29_PIN5_PB4:
\r
945 rk29_mux_api_set(GPIO5B4_HSADCDATA7_NAME,0);
\r
948 case RK29_PIN5_PB5:
\r
950 rk29_mux_api_set(GPIO5B5_HSADCDATA8_NAME,0);
\r
953 case RK29_PIN5_PB6:
\r
955 rk29_mux_api_set(GPIO5B6_HSADCDATA9_NAME,0);
\r
958 case RK29_PIN5_PB7:
\r
960 rk29_mux_api_set(GPIO5B7_HSADCCLKOUTGPSCLK_NAME,0);
\r
963 case RK29_PIN5_PC0:
\r
965 rk29_mux_api_set(GPIO5C0_EBCSDDO0_SMCDATA0_NAME,0);
\r
968 case RK29_PIN5_PC1:
\r
970 rk29_mux_api_set(GPIO5C1_EBCSDDO1_SMCDATA1_NAME,0);
\r
973 case RK29_PIN5_PC2:
\r
975 rk29_mux_api_set(GPIO5C2_EBCSDDO2_SMCDATA2_NAME,0);
\r
978 case RK29_PIN5_PC3:
\r
980 rk29_mux_api_set(GPIO5C3_EBCSDDO3_SMCDATA3_NAME,0);
\r
983 case RK29_PIN5_PC4:
\r
985 rk29_mux_api_set(GPIO5C4_EBCSDDO4_SMCDATA4_NAME,0);
\r
988 case RK29_PIN5_PC5:
\r
990 rk29_mux_api_set(GPIO5C5_EBCSDDO5_SMCDATA5_NAME,0);
\r
993 case RK29_PIN5_PC6:
\r
995 rk29_mux_api_set(GPIO5C6_EBCSDDO6_SMCDATA6_NAME,0);
\r
998 case RK29_PIN5_PC7:
\r
1000 rk29_mux_api_set(GPIO5C7_EBCSDDO7_SMCDATA7_NAME,0);
\r
1003 case RK29_PIN5_PD0:
\r
1005 rk29_mux_api_set(GPIO5D0_EBCSDLE_SMCADDR5_HOSTDATA5_NAME,0);
\r
1008 case RK29_PIN5_PD1:
\r
1010 rk29_mux_api_set(GPIO5D1_EBCSDCLK_SMCADDR6_HOSTDATA6_NAME,0);
\r
1013 case RK29_PIN5_PD2:
\r
1015 rk29_mux_api_set(GPIO5D2_PWM1_UART1SIRIN_NAME,0);
\r
1018 case RK29_PIN5_PD3:
\r
1020 rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME,0);
\r
1023 case RK29_PIN5_PD4:
\r
1025 rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME,0);
\r
1028 case RK29_PIN5_PD5:
\r
1030 rk29_mux_api_set(GPIO5D5_SDMMC0PWREN_NAME,0);
\r
1033 case RK29_PIN5_PD6:
\r
1035 rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME,0);
\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
1062 case RK29_PIN6_PC4:
\r
1063 case RK29_PIN6_PC5:
\r
1065 rk29_mux_api_set(GPIO6C54_CPUTRACEDATA54_NAME,0);
\r
1068 case RK29_PIN6_PC6:
\r
1069 case RK29_PIN6_PC7:
\r
1071 rk29_mux_api_set(GPIO6C76_CPUTRACEDATA76_NAME,0);
\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
1087 printk("Pin=%d isn't RK29 GPIO, Please init it's iomux yourself!",pin);
\r
1094 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1101 if (camera_power != INVALID_GPIO) {
\r
1102 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
\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
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
1112 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1113 printk("%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);
\r
1116 ret = RK29_CAM_EIO_INVALID;
\r
1122 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1129 if (camera_reset != INVALID_GPIO) {
\r
1130 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
\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
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
1139 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1140 printk("%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);
\r
1143 ret = RK29_CAM_EIO_INVALID;
\r
1149 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1156 if (camera_powerdown != INVALID_GPIO) {
\r
1157 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
\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
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
1166 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1167 dprintk("%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);
\r
1170 ret = RK29_CAM_EIO_INVALID;
\r
1176 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1183 if (camera_flash != INVALID_GPIO) {
\r
1184 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
\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
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
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
1210 printk("%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);
\r
1215 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1216 printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);
\r
1219 ret = RK29_CAM_EIO_INVALID;
\r
1225 static int rk29_sensor_io_init(void)
\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
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
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
1249 if (camera_power != INVALID_GPIO) {
\r
1250 ret = gpio_request(camera_power, "camera power");
\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
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
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
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
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
1276 if (camera_reset != INVALID_GPIO) {
\r
1277 ret = gpio_request(camera_reset, "camera reset");
\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
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
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
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
1296 if (camera_powerdown != INVALID_GPIO) {
\r
1297 ret = gpio_request(camera_powerdown, "camera powerdown");
\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
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
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
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
1316 if (camera_flash != INVALID_GPIO) {
\r
1317 ret = gpio_request(camera_flash, "camera flash");
\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
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
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
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
1336 for (j=0; j<10; j++) {
\r
1337 memset(&rk29_camera_platform_data.info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));
\r
1340 if (strstr(rk29_camera_platform_data.info[i].dev_name,"_back")) {
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
1499 sensor_io_int_loop_end:
\r
1500 rk29_sensor_io_deinit(i);
\r
1507 static int rk29_sensor_io_deinit(int sensor)
\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
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
1517 printk("%s..%s enter..\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[sensor].dev_name);
\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
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
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
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
1547 rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;
\r
1550 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
\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
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
1567 if (sensor_ioctl_cb.sensor_power_cb) {
\r
1568 ret = sensor_ioctl_cb.sensor_power_cb(res, on);
\r
1570 printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");
\r
1577 if (sensor_ioctl_cb.sensor_reset_cb) {
\r
1578 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);
\r
1580 printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");
\r
1586 case Cam_PowerDown:
\r
1588 if (sensor_ioctl_cb.sensor_powerdown_cb) {
\r
1589 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);
\r
1591 printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");
\r
1599 if (sensor_ioctl_cb.sensor_flash_cb) {
\r
1600 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);
\r
1602 printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");
\r
1609 printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);
\r
1613 rk29_sensor_ioctrl_end:
\r
1616 static int rk29_sensor_power(struct device *dev, int on)
\r
1618 rk29_sensor_ioctrl(dev,Cam_Power,on);
\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
1624 rk29_sensor_ioctrl(dev,Cam_Reset,1);
\r
1626 rk29_sensor_ioctrl(dev,Cam_Reset,0);
\r
1630 static int rk29_sensor_powerdown(struct device *dev, int on)
\r
1632 return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);
\r
1634 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)
\r
1635 static struct i2c_board_info rk29_i2c_cam_info_0[] = {
\r
1637 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1)
\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
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
1653 /*platform_device : soc-camera need */
\r
1654 static struct platform_device rk29_soc_camera_pdrv_0 = {
\r
1655 .name = "soc-camera-pdrv",
\r
1658 .init_name = SENSOR_DEVICE_NAME_0,
\r
1659 .platform_data = &rk29_iclink_0,
\r
1663 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)
\r
1664 static struct i2c_board_info rk29_i2c_cam_info_1[] = {
\r
1666 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)
\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
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
1682 /*platform_device : soc-camera need */
\r
1683 static struct platform_device rk29_soc_camera_pdrv_1 = {
\r
1684 .name = "soc-camera-pdrv",
\r
1687 .init_name = SENSOR_DEVICE_NAME_1,
\r
1688 .platform_data = &rk29_iclink_1,
\r
1693 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
\r
1694 static struct resource rk29_camera_resource[] = {
\r
1696 .start = RK29_VIP_PHYS,
\r
1697 .end = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,
\r
1698 .flags = IORESOURCE_MEM,
\r
1703 .flags = IORESOURCE_IRQ,
\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
1714 .dma_mask = &rockchip_device_camera_dmamask,
\r
1715 .coherent_dma_mask = 0xffffffffUL,
\r
1716 .platform_data = &rk29_camera_platform_data,
\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
1728 static struct platform_device android_pmem_cam_device = {
\r
1729 .name = "android_pmem",
\r
1732 .platform_data = &android_pmem_cam_pdata,
\r
1738 #endif //#ifdef CONFIG_VIDEO_RK29
\r