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 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
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
854 case RK29_PIN4_PC7:
\r
856 rk29_mux_api_set(GPIO4C7_RMIIRXD0_MIIRXD0_NAME,0);
\r
859 case RK29_PIN4_PD0:
\r
860 case RK29_PIN4_PD1:
\r
862 rk29_mux_api_set(GPIO4D10_CPUTRACEDATA10_NAME,0);
\r
865 case RK29_PIN4_PD2:
\r
866 case RK29_PIN4_PD3:
\r
868 rk29_mux_api_set(GPIO4D32_CPUTRACEDATA32_NAME,0);
\r
871 case RK29_PIN4_PD4:
\r
873 rk29_mux_api_set(GPIO4D4_CPUTRACECLK_NAME,0);
\r
876 case RK29_PIN4_PD5:
\r
878 rk29_mux_api_set(GPIO4D5_CPUTRACECTL_NAME,0);
\r
881 case RK29_PIN4_PD6:
\r
883 rk29_mux_api_set(GPIO4D6_I2S0LRCKTX0_NAME,0);
\r
886 case RK29_PIN4_PD7:
\r
888 rk29_mux_api_set(GPIO4D7_I2S0LRCKTX1_NAME,0);
\r
891 case RK29_PIN5_PA0:
\r
892 case RK29_PIN5_PA1:
\r
893 case RK29_PIN5_PA2:
\r
897 case RK29_PIN5_PA3:
\r
899 rk29_mux_api_set(GPIO5A3_MIITXCLKIN_NAME,0);
\r
902 case RK29_PIN5_PA4:
\r
904 rk29_mux_api_set(GPIO5A4_TSSYNC_NAME,0);
\r
907 case RK29_PIN5_PA5:
\r
909 rk29_mux_api_set(GPIO5A5_HSADCDATA0_NAME,0);
\r
912 case RK29_PIN5_PA6:
\r
914 rk29_mux_api_set(GPIO5A6_HSADCDATA1_NAME,0);
\r
917 case RK29_PIN5_PA7:
\r
919 rk29_mux_api_set(GPIO5A7_HSADCDATA2_NAME,0);
\r
922 case RK29_PIN5_PB0:
\r
924 rk29_mux_api_set(GPIO5B0_HSADCDATA3_NAME,0);
\r
927 case RK29_PIN5_PB1:
\r
929 rk29_mux_api_set(GPIO5B1_HSADCDATA4_NAME,0);
\r
932 case RK29_PIN5_PB2:
\r
934 rk29_mux_api_set(GPIO5B2_HSADCDATA5_NAME,0);
\r
937 case RK29_PIN5_PB3:
\r
939 rk29_mux_api_set(GPIO5B3_HSADCDATA6_NAME,0);
\r
942 case RK29_PIN5_PB4:
\r
944 rk29_mux_api_set(GPIO5B4_HSADCDATA7_NAME,0);
\r
947 case RK29_PIN5_PB5:
\r
949 rk29_mux_api_set(GPIO5B5_HSADCDATA8_NAME,0);
\r
952 case RK29_PIN5_PB6:
\r
954 rk29_mux_api_set(GPIO5B6_HSADCDATA9_NAME,0);
\r
957 case RK29_PIN5_PB7:
\r
959 rk29_mux_api_set(GPIO5B7_HSADCCLKOUTGPSCLK_NAME,0);
\r
962 case RK29_PIN5_PC0:
\r
964 rk29_mux_api_set(GPIO5C0_EBCSDDO0_SMCDATA0_NAME,0);
\r
967 case RK29_PIN5_PC1:
\r
969 rk29_mux_api_set(GPIO5C1_EBCSDDO1_SMCDATA1_NAME,0);
\r
972 case RK29_PIN5_PC2:
\r
974 rk29_mux_api_set(GPIO5C2_EBCSDDO2_SMCDATA2_NAME,0);
\r
977 case RK29_PIN5_PC3:
\r
979 rk29_mux_api_set(GPIO5C3_EBCSDDO3_SMCDATA3_NAME,0);
\r
982 case RK29_PIN5_PC4:
\r
984 rk29_mux_api_set(GPIO5C4_EBCSDDO4_SMCDATA4_NAME,0);
\r
987 case RK29_PIN5_PC5:
\r
989 rk29_mux_api_set(GPIO5C5_EBCSDDO5_SMCDATA5_NAME,0);
\r
992 case RK29_PIN5_PC6:
\r
994 rk29_mux_api_set(GPIO5C6_EBCSDDO6_SMCDATA6_NAME,0);
\r
997 case RK29_PIN5_PC7:
\r
999 rk29_mux_api_set(GPIO5C7_EBCSDDO7_SMCDATA7_NAME,0);
\r
1002 case RK29_PIN5_PD0:
\r
1004 rk29_mux_api_set(GPIO5D0_EBCSDLE_SMCADDR5_HOSTDATA5_NAME,0);
\r
1007 case RK29_PIN5_PD1:
\r
1009 rk29_mux_api_set(GPIO5D1_EBCSDCLK_SMCADDR6_HOSTDATA6_NAME,0);
\r
1012 case RK29_PIN5_PD2:
\r
1014 rk29_mux_api_set(GPIO5D2_PWM1_UART1SIRIN_NAME,0);
\r
1017 case RK29_PIN5_PD3:
\r
1019 rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME,0);
\r
1022 case RK29_PIN5_PD4:
\r
1024 rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME,0);
\r
1027 case RK29_PIN5_PD5:
\r
1029 rk29_mux_api_set(GPIO5D5_SDMMC0PWREN_NAME,0);
\r
1032 case RK29_PIN5_PD6:
\r
1034 rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME,0);
\r
1037 case RK29_PIN5_PD7:
\r
1038 case RK29_PIN6_PA0:
\r
1039 case RK29_PIN6_PA1:
\r
1040 case RK29_PIN6_PA2:
\r
1041 case RK29_PIN6_PA3:
\r
1042 case RK29_PIN6_PA4:
\r
1043 case RK29_PIN6_PA5:
\r
1044 case RK29_PIN6_PA6:
\r
1045 case RK29_PIN6_PA7:
\r
1046 case RK29_PIN6_PB0:
\r
1047 case RK29_PIN6_PB1:
\r
1048 case RK29_PIN6_PB2:
\r
1049 case RK29_PIN6_PB3:
\r
1050 case RK29_PIN6_PB4:
\r
1051 case RK29_PIN6_PB5:
\r
1052 case RK29_PIN6_PB6:
\r
1053 case RK29_PIN6_PB7:
\r
1054 case RK29_PIN6_PC0:
\r
1055 case RK29_PIN6_PC1:
\r
1056 case RK29_PIN6_PC2:
\r
1057 case RK29_PIN6_PC3:
\r
1061 case RK29_PIN6_PC4:
\r
1062 case RK29_PIN6_PC5:
\r
1064 rk29_mux_api_set(GPIO6C54_CPUTRACEDATA54_NAME,0);
\r
1067 case RK29_PIN6_PC6:
\r
1068 case RK29_PIN6_PC7:
\r
1070 rk29_mux_api_set(GPIO6C76_CPUTRACEDATA76_NAME,0);
\r
1073 case RK29_PIN6_PD0:
\r
1074 case RK29_PIN6_PD1:
\r
1075 case RK29_PIN6_PD2:
\r
1076 case RK29_PIN6_PD3:
\r
1077 case RK29_PIN6_PD4:
\r
1078 case RK29_PIN6_PD5:
\r
1079 case RK29_PIN6_PD6:
\r
1080 case RK29_PIN6_PD7:
\r
1086 printk("Pin=%d isn't RK29 GPIO, Please init it's iomux yourself!",pin);
\r
1093 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
\r
1095 int camera_power = res->gpio_power;
\r
1096 int camera_ioflag = res->gpio_flag;
\r
1097 int camera_io_init = res->gpio_init;
\r
1100 if (camera_power != INVALID_GPIO) {
\r
1101 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
\r
1103 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1104 dprintk("%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1107 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1108 dprintk("%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1111 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1112 printk("%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);
\r
1115 ret = RK29_CAM_EIO_INVALID;
\r
1121 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)
\r
1123 int camera_reset = res->gpio_reset;
\r
1124 int camera_ioflag = res->gpio_flag;
\r
1125 int camera_io_init = res->gpio_init;
\r
1128 if (camera_reset != INVALID_GPIO) {
\r
1129 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
\r
1131 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1132 dprintk("%s..%s..ResetPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1134 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1135 dprintk("%s..%s..ResetPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1138 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1139 printk("%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);
\r
1142 ret = RK29_CAM_EIO_INVALID;
\r
1148 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)
\r
1150 int camera_powerdown = res->gpio_powerdown;
\r
1151 int camera_ioflag = res->gpio_flag;
\r
1152 int camera_io_init = res->gpio_init;
\r
1155 if (camera_powerdown != INVALID_GPIO) {
\r
1156 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1158 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1159 dprintk("%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1161 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1162 dprintk("%s..%s..PowerDownPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1165 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1166 dprintk("%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);
\r
1169 ret = RK29_CAM_EIO_INVALID;
\r
1175 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
\r
1177 int camera_flash = res->gpio_flash;
\r
1178 int camera_ioflag = res->gpio_flag;
\r
1179 int camera_io_init = res->gpio_init;
\r
1182 if (camera_flash != INVALID_GPIO) {
\r
1183 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
\r
1188 gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1189 dprintk("\n%s..%s..FlashPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
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
1202 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1203 dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1209 printk("%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);
\r
1214 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1215 printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);
\r
1218 ret = RK29_CAM_EIO_INVALID;
\r
1224 static int rk29_sensor_io_init(void)
\r
1227 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
\r
1228 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
\r
1229 unsigned int camera_ioflag;
\r
1231 if (sensor_ioctl_cb.sensor_power_cb == NULL)
\r
1232 sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;
\r
1233 if (sensor_ioctl_cb.sensor_reset_cb == NULL)
\r
1234 sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;
\r
1235 if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)
\r
1236 sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;
\r
1237 if (sensor_ioctl_cb.sensor_flash_cb == NULL)
\r
1238 sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;
\r
1240 for (i=0; i<2; i++) {
\r
1241 camera_reset = rk29_camera_platform_data.gpio_res[i].gpio_reset;
\r
1242 camera_power = rk29_camera_platform_data.gpio_res[i].gpio_power;
\r
1243 camera_powerdown = rk29_camera_platform_data.gpio_res[i].gpio_powerdown;
\r
1244 camera_flash = rk29_camera_platform_data.gpio_res[i].gpio_flash;
\r
1245 camera_ioflag = rk29_camera_platform_data.gpio_res[i].gpio_flag;
\r
1246 rk29_camera_platform_data.gpio_res[i].gpio_init = 0;
\r
1248 if (camera_power != INVALID_GPIO) {
\r
1249 ret = gpio_request(camera_power, "camera power");
\r
1252 printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);
\r
1253 goto sensor_io_int_loop_end;
\r
1255 if (camera_power != rk29_camera_platform_data.gpio_res[0].gpio_power) {
\r
1256 printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);
\r
1257 goto sensor_io_int_loop_end;
\r
1262 if (rk29_sensor_iomux(camera_power) < 0) {
\r
1263 printk(KERN_ERR "%s..%s..power pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);
\r
1264 goto sensor_io_int_loop_end;
\r
1267 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERACTIVE_MASK;
\r
1268 gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1269 gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1271 dprintk("%s....power pin(%d) init success(0x%x) \n",__FUNCTION__,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1275 if (camera_reset != INVALID_GPIO) {
\r
1276 ret = gpio_request(camera_reset, "camera reset");
\r
1278 printk("%s..%s..reset pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);
\r
1279 goto sensor_io_int_loop_end;
\r
1282 if (rk29_sensor_iomux(camera_reset) < 0) {
\r
1283 printk(KERN_ERR "%s..%s..reset pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);
\r
1284 goto sensor_io_int_loop_end;
\r
1287 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_RESETACTIVE_MASK;
\r
1288 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1289 gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1291 dprintk("%s....reset pin(%d) init success(0x%x)\n",__FUNCTION__,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1295 if (camera_powerdown != INVALID_GPIO) {
\r
1296 ret = gpio_request(camera_powerdown, "camera powerdown");
\r
1298 printk("%s..%s..powerdown pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);
\r
1299 goto sensor_io_int_loop_end;
\r
1302 if (rk29_sensor_iomux(camera_powerdown) < 0) {
\r
1303 printk(KERN_ERR "%s..%s..powerdown pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);
\r
1304 goto sensor_io_int_loop_end;
\r
1307 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;
\r
1308 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1309 gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1311 dprintk("%s....powerdown pin(%d) init success(0x%x) \n",__FUNCTION__,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1315 if (camera_flash != INVALID_GPIO) {
\r
1316 ret = gpio_request(camera_flash, "camera flash");
\r
1318 printk("%s..%s..flash pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash);
\r
1319 goto sensor_io_int_loop_end;
\r
1322 if (rk29_sensor_iomux(camera_flash) < 0) {
\r
1323 printk(KERN_ERR "%s..%s..flash pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash);
\r
1326 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_FLASHACTIVE_MASK;
\r
1327 gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); /* falsh off */
\r
1328 gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1330 dprintk("%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1335 for (j=0; j<10; j++) {
\r
1336 memset(&rk29_camera_platform_data.info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));
\r
1339 if (strstr(rk29_camera_platform_data.info[i].dev_name,"_back")) {
\r
1341 #if CONFIG_SENSOR_QCIF_FPS_FIXED_0
\r
1342 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_0;
\r
1343 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1344 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1345 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1346 rk29_camera_platform_data.info[i].fival[j].width = 176;
\r
1347 rk29_camera_platform_data.info[i].fival[j].height = 144;
\r
1348 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1352 #if CONFIG_SENSOR_QVGA_FPS_FIXED_0
\r
1353 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_0;
\r
1354 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1355 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1356 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1357 rk29_camera_platform_data.info[i].fival[j].width = 320;
\r
1358 rk29_camera_platform_data.info[i].fival[j].height = 240;
\r
1359 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1363 #if CONFIG_SENSOR_CIF_FPS_FIXED_0
\r
1364 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_0;
\r
1365 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1366 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1367 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1368 rk29_camera_platform_data.info[i].fival[j].width = 352;
\r
1369 rk29_camera_platform_data.info[i].fival[j].height = 288;
\r
1370 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1374 #if CONFIG_SENSOR_VGA_FPS_FIXED_0
\r
1375 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_0;
\r
1376 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1377 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1378 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1379 rk29_camera_platform_data.info[i].fival[j].width = 640;
\r
1380 rk29_camera_platform_data.info[i].fival[j].height = 480;
\r
1381 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1385 #if CONFIG_SENSOR_SVGA_FPS_FIXED_0
\r
1386 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_0;
\r
1387 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1388 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1389 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1390 rk29_camera_platform_data.info[i].fival[j].width = 800;
\r
1391 rk29_camera_platform_data.info[i].fival[j].height = 600;
\r
1392 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1396 #if CONFIG_SENSOR_720P_FPS_FIXED_0
\r
1397 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_0;
\r
1398 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1399 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1400 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1401 rk29_camera_platform_data.info[i].fival[j].width = 1280;
\r
1402 rk29_camera_platform_data.info[i].fival[j].height = 720;
\r
1403 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1408 #if CONFIG_SENSOR_QCIF_FPS_FIXED_1
\r
1409 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_1;
\r
1410 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1411 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1412 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1413 rk29_camera_platform_data.info[i].fival[j].width = 176;
\r
1414 rk29_camera_platform_data.info[i].fival[j].height = 144;
\r
1415 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1419 #if CONFIG_SENSOR_QVGA_FPS_FIXED_1
\r
1420 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_1;
\r
1421 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1422 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1423 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1424 rk29_camera_platform_data.info[i].fival[j].width = 320;
\r
1425 rk29_camera_platform_data.info[i].fival[j].height = 240;
\r
1426 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1430 #if CONFIG_SENSOR_CIF_FPS_FIXED_1
\r
1431 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_1;
\r
1432 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1433 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1434 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1435 rk29_camera_platform_data.info[i].fival[j].width = 352;
\r
1436 rk29_camera_platform_data.info[i].fival[j].height = 288;
\r
1437 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1441 #if CONFIG_SENSOR_VGA_FPS_FIXED_1
\r
1442 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_1;
\r
1443 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1444 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1445 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1446 rk29_camera_platform_data.info[i].fival[j].width = 640;
\r
1447 rk29_camera_platform_data.info[i].fival[j].height = 480;
\r
1448 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1452 #if CONFIG_SENSOR_SVGA_FPS_FIXED_1
\r
1453 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_1;
\r
1454 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1455 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1456 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1457 rk29_camera_platform_data.info[i].fival[j].width = 800;
\r
1458 rk29_camera_platform_data.info[i].fival[j].height = 600;
\r
1459 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1463 #if CONFIG_SENSOR_720P_FPS_FIXED_1
\r
1464 rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_1;
\r
1465 rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
\r
1466 rk29_camera_platform_data.info[i].fival[j].index = 0;
\r
1467 rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1468 rk29_camera_platform_data.info[i].fival[j].width = 1280;
\r
1469 rk29_camera_platform_data.info[i].fival[j].height = 720;
\r
1470 rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1476 sensor_io_int_loop_end:
\r
1477 rk29_sensor_io_deinit(i);
\r
1484 static int rk29_sensor_io_deinit(int sensor)
\r
1486 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
\r
1487 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
\r
1489 camera_reset = rk29_camera_platform_data.gpio_res[sensor].gpio_reset;
\r
1490 camera_power = rk29_camera_platform_data.gpio_res[sensor].gpio_power;
\r
1491 camera_powerdown = rk29_camera_platform_data.gpio_res[sensor].gpio_powerdown;
\r
1492 camera_flash = rk29_camera_platform_data.gpio_res[sensor].gpio_flash;
\r
1494 printk("%s..%s enter..\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[sensor].dev_name);
\r
1496 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERACTIVE_MASK) {
\r
1497 if (camera_power != INVALID_GPIO) {
\r
1498 gpio_direction_input(camera_power);
\r
1499 gpio_free(camera_power);
\r
1503 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_RESETACTIVE_MASK) {
\r
1504 if (camera_reset != INVALID_GPIO) {
\r
1505 gpio_direction_input(camera_reset);
\r
1506 gpio_free(camera_reset);
\r
1510 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1511 if (camera_powerdown != INVALID_GPIO) {
\r
1512 gpio_direction_input(camera_powerdown);
\r
1513 gpio_free(camera_powerdown);
\r
1517 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_FLASHACTIVE_MASK) {
\r
1518 if (camera_flash != INVALID_GPIO) {
\r
1519 gpio_direction_input(camera_flash);
\r
1520 gpio_free(camera_flash);
\r
1524 rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;
\r
1527 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
\r
1529 struct rk29camera_gpio_res *res = NULL;
\r
1530 int ret = RK29_CAM_IO_SUCCESS;
\r
1532 if(rk29_camera_platform_data.gpio_res[0].dev_name && (strcmp(rk29_camera_platform_data.gpio_res[0].dev_name, dev_name(dev)) == 0)) {
\r
1533 res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[0];
\r
1534 } else if (rk29_camera_platform_data.gpio_res[1].dev_name && (strcmp(rk29_camera_platform_data.gpio_res[1].dev_name, dev_name(dev)) == 0)) {
\r
1535 res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[1];
\r
1537 printk(KERN_ERR "%s is not regisiterd in rk29_camera_platform_data!!\n",dev_name(dev));
\r
1538 ret = RK29_CAM_EIO_INVALID;
\r
1539 goto rk29_sensor_ioctrl_end;
\r
1546 if (sensor_ioctl_cb.sensor_power_cb) {
\r
1547 ret = sensor_ioctl_cb.sensor_power_cb(res, on);
\r
1549 printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");
\r
1556 if (sensor_ioctl_cb.sensor_reset_cb) {
\r
1557 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);
\r
1559 printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");
\r
1565 case Cam_PowerDown:
\r
1567 if (sensor_ioctl_cb.sensor_powerdown_cb) {
\r
1568 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);
\r
1570 printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");
\r
1578 if (sensor_ioctl_cb.sensor_flash_cb) {
\r
1579 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);
\r
1581 printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");
\r
1588 printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);
\r
1592 rk29_sensor_ioctrl_end:
\r
1595 static int rk29_sensor_power(struct device *dev, int on)
\r
1597 rk29_sensor_ioctrl(dev,Cam_Power,on);
\r
1600 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO) || (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)
\r
1601 static int rk29_sensor_reset(struct device *dev)
\r
1603 rk29_sensor_ioctrl(dev,Cam_Reset,1);
\r
1605 rk29_sensor_ioctrl(dev,Cam_Reset,0);
\r
1609 static int rk29_sensor_powerdown(struct device *dev, int on)
\r
1611 return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);
\r
1613 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)
\r
1614 static struct i2c_board_info rk29_i2c_cam_info_0[] = {
\r
1616 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1)
\r
1620 static struct soc_camera_link rk29_iclink_0 = {
\r
1621 .bus_id = RK29_CAM_PLATFORM_DEV_ID,
\r
1622 .power = rk29_sensor_power,
\r
1623 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO)
\r
1624 .reset = rk29_sensor_reset,
\r
1626 .powerdown = rk29_sensor_powerdown,
\r
1627 .board_info = &rk29_i2c_cam_info_0[0],
\r
1628 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,
\r
1629 .module_name = SENSOR_NAME_0,
\r
1632 /*platform_device : soc-camera need */
\r
1633 static struct platform_device rk29_soc_camera_pdrv_0 = {
\r
1634 .name = "soc-camera-pdrv",
\r
1637 .init_name = SENSOR_DEVICE_NAME_0,
\r
1638 .platform_data = &rk29_iclink_0,
\r
1642 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)
\r
1643 static struct i2c_board_info rk29_i2c_cam_info_1[] = {
\r
1645 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)
\r
1649 static struct soc_camera_link rk29_iclink_1 = {
\r
1650 .bus_id = RK29_CAM_PLATFORM_DEV_ID,
\r
1651 .power = rk29_sensor_power,
\r
1652 #if (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)
\r
1653 .reset = rk29_sensor_reset,
\r
1655 .powerdown = rk29_sensor_powerdown,
\r
1656 .board_info = &rk29_i2c_cam_info_1[0],
\r
1657 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,
\r
1658 .module_name = SENSOR_NAME_1,
\r
1661 /*platform_device : soc-camera need */
\r
1662 static struct platform_device rk29_soc_camera_pdrv_1 = {
\r
1663 .name = "soc-camera-pdrv",
\r
1666 .init_name = SENSOR_DEVICE_NAME_1,
\r
1667 .platform_data = &rk29_iclink_1,
\r
1672 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
\r
1673 static struct resource rk29_camera_resource[] = {
\r
1675 .start = RK29_VIP_PHYS,
\r
1676 .end = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,
\r
1677 .flags = IORESOURCE_MEM,
\r
1682 .flags = IORESOURCE_IRQ,
\r
1686 /*platform_device : */
\r
1687 static struct platform_device rk29_device_camera = {
\r
1688 .name = RK29_CAM_DRV_NAME,
\r
1689 .id = RK29_CAM_PLATFORM_DEV_ID, /* This is used to put cameras on this interface */
\r
1690 .num_resources = ARRAY_SIZE(rk29_camera_resource),
\r
1691 .resource = rk29_camera_resource,
\r
1693 .dma_mask = &rockchip_device_camera_dmamask,
\r
1694 .coherent_dma_mask = 0xffffffffUL,
\r
1695 .platform_data = &rk29_camera_platform_data,
\r
1699 static struct android_pmem_platform_data android_pmem_cam_pdata = {
\r
1700 .name = "pmem_cam",
\r
1701 .start = PMEM_CAM_BASE,
\r
1702 .size = PMEM_CAM_SIZE,
\r
1703 .no_allocator = 1,
\r
1707 static struct platform_device android_pmem_cam_device = {
\r
1708 .name = "android_pmem",
\r
1711 .platform_data = &android_pmem_cam_pdata,
\r
1717 #endif //#ifdef CONFIG_VIDEO_RK29