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 .orientation = CONFIG_SENSOR_ORIENTATION_0,
\r
101 .dev_name = SENSOR_DEVICE_NAME_0,
\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
109 .orientation = CONFIG_SENSOR_ORIENTATION_1,
\r
110 .dev_name = SENSOR_DEVICE_NAME_1,
\r
113 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
\r
115 .name = "camera_ipp_mem",
\r
116 .start = MEM_CAMIPP_BASE,
\r
117 .size = MEM_CAMIPP_SIZE,
\r
122 static int rk29_sensor_iomux(int pin)
\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
134 case RK29_PIN0_PA5:
\r
136 rk29_mux_api_set(GPIO0A5_FLASHDQS_NAME,0);
\r
139 case RK29_PIN0_PA6:
\r
141 rk29_mux_api_set(GPIO0A6_MIIMD_NAME,0);
\r
144 case RK29_PIN0_PA7:
\r
146 rk29_mux_api_set(GPIO0A7_MIIMDCLK_NAME,0);
\r
149 case RK29_PIN0_PB0:
\r
151 rk29_mux_api_set(GPIO0B0_EBCSDCE0_SMCADDR0_HOSTDATA0_NAME,0);
\r
154 case RK29_PIN0_PB1:
\r
156 rk29_mux_api_set(GPIO0B1_EBCSDCE1_SMCADDR1_HOSTDATA1_NAME,0);
\r
159 case RK29_PIN0_PB2:
\r
161 rk29_mux_api_set(GPIO0B2_EBCSDCE2_SMCADDR2_HOSTDATA2_NAME,0);
\r
164 case RK29_PIN0_PB3:
\r
166 rk29_mux_api_set(GPIO0B3_EBCBORDER0_SMCADDR3_HOSTDATA3_NAME,0);
\r
169 case RK29_PIN0_PB4:
\r
171 rk29_mux_api_set(GPIO0B4_EBCBORDER1_SMCWEN_NAME,0);
\r
174 case RK29_PIN0_PB5:
\r
176 rk29_mux_api_set(GPIO0B5_EBCVCOM_SMCBLSN0_NAME,0);
\r
179 case RK29_PIN0_PB6:
\r
181 rk29_mux_api_set(GPIO0B6_EBCSDSHR_SMCBLSN1_HOSTINT_NAME,0);
\r
184 case RK29_PIN0_PB7:
\r
186 rk29_mux_api_set(GPIO0B7_EBCGDOE_SMCOEN_NAME,0);
\r
189 case RK29_PIN0_PC0:
\r
191 rk29_mux_api_set(GPIO0C0_EBCGDSP_SMCDATA8_NAME,0);
\r
194 case RK29_PIN0_PC1:
\r
196 rk29_mux_api_set(GPIO0C1_EBCGDR1_SMCDATA9_NAME,0);
\r
199 case RK29_PIN0_PC2:
\r
201 rk29_mux_api_set(GPIO0C2_EBCSDCE0_SMCDATA10_NAME,0);
\r
204 case RK29_PIN0_PC3:
\r
206 rk29_mux_api_set(GPIO0C3_EBCSDCE1_SMCDATA11_NAME,0);
\r
209 case RK29_PIN0_PC4:
\r
211 rk29_mux_api_set(GPIO0C4_EBCSDCE2_SMCDATA12_NAME,0);
\r
214 case RK29_PIN0_PC5:
\r
216 rk29_mux_api_set(GPIO0C5_EBCSDCE3_SMCDATA13_NAME,0);
\r
219 case RK29_PIN0_PC6:
\r
221 rk29_mux_api_set(GPIO0C6_EBCSDCE4_SMCDATA14_NAME,0);
\r
224 case RK29_PIN0_PC7:
\r
226 rk29_mux_api_set(GPIO0C7_EBCSDCE5_SMCDATA15_NAME,0);
\r
229 case RK29_PIN0_PD0:
\r
231 rk29_mux_api_set(GPIO0D0_EBCSDOE_SMCADVN_NAME,0);
\r
234 case RK29_PIN0_PD1:
\r
236 rk29_mux_api_set(GPIO0D1_EBCGDCLK_SMCADDR4_HOSTDATA4_NAME,0);
\r
239 case RK29_PIN0_PD2:
\r
241 rk29_mux_api_set(GPIO0D2_FLASHCSN1_NAME,0);
\r
244 case RK29_PIN0_PD3:
\r
246 rk29_mux_api_set(GPIO0D3_FLASHCSN2_NAME,0);
\r
249 case RK29_PIN0_PD4:
\r
251 rk29_mux_api_set(GPIO0D4_FLASHCSN3_NAME,0);
\r
254 case RK29_PIN0_PD5:
\r
256 rk29_mux_api_set(GPIO0D5_FLASHCSN4_NAME,0);
\r
259 case RK29_PIN0_PD6:
\r
261 rk29_mux_api_set(GPIO0D6_FLASHCSN5_NAME,0);
\r
264 case RK29_PIN0_PD7:
\r
266 rk29_mux_api_set(GPIO0D7_FLASHCSN6_NAME,0);
\r
269 case RK29_PIN1_PA0:
\r
271 rk29_mux_api_set(GPIO1A0_FLASHCS7_MDDRTQ_NAME,0);
\r
274 case RK29_PIN1_PA1:
\r
276 rk29_mux_api_set(GPIO1A1_SMCCSN0_NAME,0);
\r
279 case RK29_PIN1_PA2:
\r
281 rk29_mux_api_set(GPIO1A2_SMCCSN1_NAME,0);
\r
284 case RK29_PIN1_PA3:
\r
286 rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,0);
\r
289 case RK29_PIN1_PA4:
\r
291 rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,0);
\r
294 case RK29_PIN1_PA5:
\r
296 rk29_mux_api_set(GPIO1A5_EMMCPWREN_PWM3_NAME,0);
\r
299 case RK29_PIN1_PA6:
\r
301 rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME,0);
\r
304 case RK29_PIN1_PA7:
\r
306 rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME,0);
\r
309 case RK29_PIN1_PB0:
\r
311 rk29_mux_api_set(GPIO1B0_VIPDATA0_NAME,0);
\r
314 case RK29_PIN1_PB1:
\r
316 rk29_mux_api_set(GPIO1B1_VIPDATA1_NAME,0);
\r
319 case RK29_PIN1_PB2:
\r
321 rk29_mux_api_set(GPIO1B2_VIPDATA2_NAME,0);
\r
324 case RK29_PIN1_PB3:
\r
326 rk29_mux_api_set(GPIO1B3_VIPDATA3_NAME,0);
\r
329 case RK29_PIN1_PB4:
\r
331 rk29_mux_api_set(GPIO1B4_VIPCLKOUT_NAME,0);
\r
334 case RK29_PIN1_PB5:
\r
336 rk29_mux_api_set(GPIO1B5_PWM0_NAME,0);
\r
339 case RK29_PIN1_PB6:
\r
341 rk29_mux_api_set(GPIO1B6_UART0SIN_NAME,0);
\r
344 case RK29_PIN1_PB7:
\r
346 rk29_mux_api_set(GPIO1B7_UART0SOUT_NAME,0);
\r
349 case RK29_PIN1_PC0:
\r
351 rk29_mux_api_set(GPIO1C0_UART0CTSN_SDMMC1DETECTN_NAME,0);
\r
354 case RK29_PIN1_PC1:
\r
356 rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME,0);
\r
359 case RK29_PIN1_PC2:
\r
361 rk29_mux_api_set(GPIO1C2_SDMMC1CMD_NAME,0);
\r
364 case RK29_PIN1_PC3:
\r
366 rk29_mux_api_set(GPIO1C3_SDMMC1DATA0_NAME,0);
\r
369 case RK29_PIN1_PC4:
\r
371 rk29_mux_api_set(GPIO1C4_SDMMC1DATA1_NAME,0);
\r
374 case RK29_PIN1_PC5:
\r
376 rk29_mux_api_set(GPIO1C5_SDMMC1DATA2_NAME,0);
\r
379 case RK29_PIN1_PC6:
\r
381 rk29_mux_api_set(GPIO1C6_SDMMC1DATA3_NAME,0);
\r
384 case RK29_PIN1_PC7:
\r
386 rk29_mux_api_set(GPIO1C7_SDMMC1CLKOUT_NAME,0);
\r
389 case RK29_PIN1_PD0:
\r
391 rk29_mux_api_set(GPIO1D0_SDMMC0CLKOUT_NAME,0);
\r
394 case RK29_PIN1_PD1:
\r
396 rk29_mux_api_set(GPIO1D1_SDMMC0CMD_NAME,0);
\r
399 case RK29_PIN1_PD2:
\r
401 rk29_mux_api_set(GPIO1D2_SDMMC0DATA0_NAME,0);
\r
404 case RK29_PIN1_PD3:
\r
406 rk29_mux_api_set(GPIO1D3_SDMMC0DATA1_NAME,0);
\r
409 case RK29_PIN1_PD4:
\r
411 rk29_mux_api_set(GPIO1D4_SDMMC0DATA2_NAME,0);
\r
414 case RK29_PIN1_PD5:
\r
416 rk29_mux_api_set(GPIO1D5_SDMMC0DATA3_NAME,0);
\r
419 case RK29_PIN1_PD6:
\r
421 rk29_mux_api_set(GPIO1D6_SDMMC0DATA4_NAME,0);
\r
424 case RK29_PIN1_PD7:
\r
426 rk29_mux_api_set(GPIO1D7_SDMMC0DATA5_NAME,0);
\r
429 case RK29_PIN2_PA0:
\r
431 rk29_mux_api_set(GPIO2A0_SDMMC0DATA6_NAME,0);
\r
434 case RK29_PIN2_PA1:
\r
436 rk29_mux_api_set(GPIO2A1_SDMMC0DATA7_NAME,0);
\r
439 case RK29_PIN2_PA2:
\r
441 rk29_mux_api_set(GPIO2A2_SDMMC0DETECTN_NAME,0);
\r
444 case RK29_PIN2_PA3:
\r
446 rk29_mux_api_set(GPIO2A3_SDMMC0WRITEPRT_PWM2_NAME,0);
\r
449 case RK29_PIN2_PA4:
\r
451 rk29_mux_api_set(GPIO2A4_UART1SIN_NAME,0);
\r
454 case RK29_PIN2_PA5:
\r
456 rk29_mux_api_set(GPIO2A5_UART1SOUT_NAME,0);
\r
459 case RK29_PIN2_PA6:
\r
461 rk29_mux_api_set(GPIO2A6_UART2CTSN_NAME,0);
\r
464 case RK29_PIN2_PA7:
\r
466 rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME,0);
\r
469 case RK29_PIN2_PB0:
\r
471 rk29_mux_api_set(GPIO2B0_UART2SIN_NAME,0);
\r
474 case RK29_PIN2_PB1:
\r
476 rk29_mux_api_set(GPIO2B1_UART2SOUT_NAME,0);
\r
479 case RK29_PIN2_PB2:
\r
481 rk29_mux_api_set(GPIO2B2_UART3SIN_NAME,0);
\r
484 case RK29_PIN2_PB3:
\r
486 rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME,0);
\r
489 case RK29_PIN2_PB4:
\r
491 rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME,0);
\r
494 case RK29_PIN2_PB5:
\r
496 rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME,0);
\r
499 case RK29_PIN2_PB6:
\r
501 rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME,0);
\r
504 case RK29_PIN2_PB7:
\r
506 rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME,0);
\r
509 case RK29_PIN2_PC0:
\r
511 rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,0);
\r
514 case RK29_PIN2_PC1:
\r
516 rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,0);
\r
519 case RK29_PIN2_PC2:
\r
521 rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,0);
\r
524 case RK29_PIN2_PC3:
\r
526 rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,0);
\r
529 case RK29_PIN2_PC4:
\r
531 rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,0);
\r
534 case RK29_PIN2_PC5:
\r
536 rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,0);
\r
539 case RK29_PIN2_PC6:
\r
541 rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,0);
\r
544 case RK29_PIN2_PC7:
\r
546 rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,0);
\r
549 case RK29_PIN2_PD0:
\r
551 rk29_mux_api_set(GPIO2D0_I2S0CLK_MIIRXCLKIN_NAME,0);
\r
554 case RK29_PIN2_PD1:
\r
556 rk29_mux_api_set(GPIO2D1_I2S0SCLK_MIICRS_NAME,0);
\r
559 case RK29_PIN2_PD2:
\r
561 rk29_mux_api_set(GPIO2D2_I2S0LRCKRX_MIITXERR_NAME,0);
\r
564 case RK29_PIN2_PD3:
\r
566 rk29_mux_api_set(GPIO2D3_I2S0SDI_MIICOL_NAME,0);
\r
569 case RK29_PIN2_PD4:
\r
571 rk29_mux_api_set(GPIO2D4_I2S0SDO0_MIIRXD2_NAME,0);
\r
574 case RK29_PIN2_PD5:
\r
576 rk29_mux_api_set(GPIO2D5_I2S0SDO1_MIIRXD3_NAME,0);
\r
579 case RK29_PIN2_PD6:
\r
581 rk29_mux_api_set(GPIO2D6_I2S0SDO2_MIITXD2_NAME,0);
\r
584 case RK29_PIN2_PD7:
\r
586 rk29_mux_api_set(GPIO2D7_I2S0SDO3_MIITXD3_NAME,0);
\r
589 case RK29_PIN3_PA0:
\r
591 rk29_mux_api_set(GPIO3A0_I2S1CLK_NAME,0);
\r
594 case RK29_PIN3_PA1:
\r
596 rk29_mux_api_set(GPIO3A1_I2S1SCLK_NAME,0);
\r
599 case RK29_PIN3_PA2:
\r
601 rk29_mux_api_set(GPIO3A2_I2S1LRCKRX_NAME,0);
\r
604 case RK29_PIN3_PA3:
\r
606 rk29_mux_api_set(GPIO3A3_I2S1SDI_NAME,0);
\r
609 case RK29_PIN3_PA4:
\r
611 rk29_mux_api_set(GPIO3A4_I2S1SDO_NAME,0);
\r
614 case RK29_PIN3_PA5:
\r
616 rk29_mux_api_set(GPIO3A5_I2S1LRCKTX_NAME,0);
\r
619 case RK29_PIN3_PA6:
\r
621 rk29_mux_api_set(GPIO3A6_SMCADDR14_HOSTDATA14_NAME,0);
\r
624 case RK29_PIN3_PA7:
\r
626 rk29_mux_api_set(GPIO3A7_SMCADDR15_HOSTDATA15_NAME,0);
\r
629 case RK29_PIN3_PB0:
\r
631 rk29_mux_api_set(GPIO3B0_EMMCLKOUT_NAME,0);
\r
634 case RK29_PIN3_PB1:
\r
636 rk29_mux_api_set(GPIO3B1_EMMCMD_NAME,0);
\r
639 case RK29_PIN3_PB2:
\r
641 rk29_mux_api_set(GPIO3B2_EMMCDATA0_NAME,0);
\r
644 case RK29_PIN3_PB3:
\r
646 rk29_mux_api_set(GPIO3B3_EMMCDATA1_NAME,0);
\r
649 case RK29_PIN3_PB4:
\r
651 rk29_mux_api_set(GPIO3B4_EMMCDATA2_NAME,0);
\r
654 case RK29_PIN3_PB5:
\r
656 rk29_mux_api_set(GPIO3B5_EMMCDATA3_NAME,0);
\r
659 case RK29_PIN3_PB6:
\r
661 rk29_mux_api_set(GPIO3B6_EMMCDATA4_NAME,0);
\r
664 case RK29_PIN3_PB7:
\r
666 rk29_mux_api_set(GPIO3B7_EMMCDATA5_NAME,0);
\r
669 case RK29_PIN3_PC0:
\r
671 rk29_mux_api_set(GPIO3C0_EMMCDATA6_NAME,0);
\r
674 case RK29_PIN3_PC1:
\r
676 rk29_mux_api_set(GPIO3C1_EMMCDATA7_NAME,0);
\r
679 case RK29_PIN3_PC2:
\r
681 rk29_mux_api_set(GPIO3C2_SMCADDR13_HOSTDATA13_NAME,0);
\r
684 case RK29_PIN3_PC3:
\r
686 rk29_mux_api_set(GPIO3C3_SMCADDR10_HOSTDATA10_NAME,0);
\r
689 case RK29_PIN3_PC4:
\r
691 rk29_mux_api_set(GPIO3C4_SMCADDR11_HOSTDATA11_NAME,0);
\r
694 case RK29_PIN3_PC5:
\r
696 rk29_mux_api_set(GPIO3C5_SMCADDR12_HOSTDATA12_NAME,0);
\r
699 case RK29_PIN3_PC6:
\r
701 rk29_mux_api_set(GPIO3C6_SMCADDR16_HOSTDATA16_NAME,0);
\r
704 case RK29_PIN3_PC7:
\r
706 rk29_mux_api_set(GPIO3C7_SMCADDR17_HOSTDATA17_NAME,0);
\r
709 case RK29_PIN3_PD0:
\r
711 rk29_mux_api_set(GPIO3D0_SMCADDR18_HOSTADDR0_NAME,0);
\r
714 case RK29_PIN3_PD1:
\r
716 rk29_mux_api_set(GPIO3D1_SMCADDR19_HOSTADDR1_NAME,0);
\r
719 case RK29_PIN3_PD2:
\r
721 rk29_mux_api_set(GPIO3D2_HOSTCSN_NAME,0);
\r
724 case RK29_PIN3_PD3:
\r
726 rk29_mux_api_set(GPIO3D3_HOSTRDN_NAME,0);
\r
729 case RK29_PIN3_PD4:
\r
731 rk29_mux_api_set(GPIO3D4_HOSTWRN_NAME,0);
\r
734 case RK29_PIN3_PD5:
\r
736 rk29_mux_api_set(GPIO3D5_SMCADDR7_HOSTDATA7_NAME,0);
\r
739 case RK29_PIN3_PD6:
\r
741 rk29_mux_api_set(GPIO3D6_SMCADDR8_HOSTDATA8_NAME,0);
\r
744 case RK29_PIN3_PD7:
\r
746 rk29_mux_api_set(GPIO3D7_SMCADDR9_HOSTDATA9_NAME,0);
\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
757 case RK29_PIN4_PA5:
\r
759 rk29_mux_api_set(GPIO4A5_OTG0DRVVBUS_NAME,0);
\r
762 case RK29_PIN4_PA6:
\r
764 rk29_mux_api_set(GPIO4A6_OTG1DRVVBUS_NAME,0);
\r
767 case RK29_PIN4_PA7:
\r
769 rk29_mux_api_set(GPIO4A7_SPDIFTX_NAME,0);
\r
772 case RK29_PIN4_PB0:
\r
774 rk29_mux_api_set(GPIO4B0_FLASHDATA8_NAME,0);
\r
777 case RK29_PIN4_PB1:
\r
779 rk29_mux_api_set(GPIO4B1_FLASHDATA9_NAME,0);
\r
782 case RK29_PIN4_PB2:
\r
784 rk29_mux_api_set(GPIO4B2_FLASHDATA10_NAME,0);
\r
787 case RK29_PIN4_PB3:
\r
789 rk29_mux_api_set(GPIO4B3_FLASHDATA11_NAME,0);
\r
792 case RK29_PIN4_PB4:
\r
794 rk29_mux_api_set(GPIO4B4_FLASHDATA12_NAME,0);
\r
797 case RK29_PIN4_PB5:
\r
799 rk29_mux_api_set(GPIO4B5_FLASHDATA13_NAME,0);
\r
802 case RK29_PIN4_PB6:
\r
804 rk29_mux_api_set(GPIO4B6_FLASHDATA14_NAME ,0);
\r
807 case RK29_PIN4_PB7:
\r
809 rk29_mux_api_set(GPIO4B7_FLASHDATA15_NAME,0);
\r
812 case RK29_PIN4_PC0:
\r
814 rk29_mux_api_set(GPIO4C0_RMIICLKOUT_RMIICLKIN_NAME,0);
\r
817 case RK29_PIN4_PC1:
\r
819 rk29_mux_api_set(GPIO4C1_RMIITXEN_MIITXEN_NAME,0);
\r
822 case RK29_PIN4_PC2:
\r
824 rk29_mux_api_set(GPIO4C2_RMIITXD1_MIITXD1_NAME,0);
\r
827 case RK29_PIN4_PC3:
\r
829 rk29_mux_api_set(GPIO4C3_RMIITXD0_MIITXD0_NAME,0);
\r
832 case RK29_PIN4_PC4:
\r
834 rk29_mux_api_set(GPIO4C4_RMIIRXERR_MIIRXERR_NAME,0);
\r
837 case RK29_PIN4_PC5:
\r
839 rk29_mux_api_set(GPIO4C5_RMIICSRDVALID_MIIRXDVALID_NAME,0);
\r
842 case RK29_PIN4_PC6:
\r
844 rk29_mux_api_set(GPIO4C6_RMIIRXD1_MIIRXD1_NAME,0);
\r
847 case RK29_PIN4_PC7:
\r
849 rk29_mux_api_set(GPIO4C7_RMIIRXD0_MIIRXD0_NAME,0);
\r
852 case RK29_PIN4_PD0:
\r
853 case RK29_PIN4_PD1:
\r
855 rk29_mux_api_set(GPIO4D10_CPUTRACEDATA10_NAME,0);
\r
858 case RK29_PIN4_PD2:
\r
859 case RK29_PIN4_PD3:
\r
861 rk29_mux_api_set(GPIO4D32_CPUTRACEDATA32_NAME,0);
\r
864 case RK29_PIN4_PD4:
\r
866 rk29_mux_api_set(GPIO4D4_CPUTRACECLK_NAME,0);
\r
869 case RK29_PIN4_PD5:
\r
871 rk29_mux_api_set(GPIO4D5_CPUTRACECTL_NAME,0);
\r
874 case RK29_PIN4_PD6:
\r
876 rk29_mux_api_set(GPIO4D6_I2S0LRCKTX0_NAME,0);
\r
879 case RK29_PIN4_PD7:
\r
881 rk29_mux_api_set(GPIO4D7_I2S0LRCKTX1_NAME,0);
\r
884 case RK29_PIN5_PA0:
\r
885 case RK29_PIN5_PA1:
\r
886 case RK29_PIN5_PA2:
\r
890 case RK29_PIN5_PA3:
\r
892 rk29_mux_api_set(GPIO5A3_MIITXCLKIN_NAME,0);
\r
895 case RK29_PIN5_PA4:
\r
897 rk29_mux_api_set(GPIO5A4_TSSYNC_NAME,0);
\r
900 case RK29_PIN5_PA5:
\r
902 rk29_mux_api_set(GPIO5A5_HSADCDATA0_NAME,0);
\r
905 case RK29_PIN5_PA6:
\r
907 rk29_mux_api_set(GPIO5A6_HSADCDATA1_NAME,0);
\r
910 case RK29_PIN5_PA7:
\r
912 rk29_mux_api_set(GPIO5A7_HSADCDATA2_NAME,0);
\r
915 case RK29_PIN5_PB0:
\r
917 rk29_mux_api_set(GPIO5B0_HSADCDATA3_NAME,0);
\r
920 case RK29_PIN5_PB1:
\r
922 rk29_mux_api_set(GPIO5B1_HSADCDATA4_NAME,0);
\r
925 case RK29_PIN5_PB2:
\r
927 rk29_mux_api_set(GPIO5B2_HSADCDATA5_NAME,0);
\r
930 case RK29_PIN5_PB3:
\r
932 rk29_mux_api_set(GPIO5B3_HSADCDATA6_NAME,0);
\r
935 case RK29_PIN5_PB4:
\r
937 rk29_mux_api_set(GPIO5B4_HSADCDATA7_NAME,0);
\r
940 case RK29_PIN5_PB5:
\r
942 rk29_mux_api_set(GPIO5B5_HSADCDATA8_NAME,0);
\r
945 case RK29_PIN5_PB6:
\r
947 rk29_mux_api_set(GPIO5B6_HSADCDATA9_NAME,0);
\r
950 case RK29_PIN5_PB7:
\r
952 rk29_mux_api_set(GPIO5B7_HSADCCLKOUTGPSCLK_NAME,0);
\r
955 case RK29_PIN5_PC0:
\r
957 rk29_mux_api_set(GPIO5C0_EBCSDDO0_SMCDATA0_NAME,0);
\r
960 case RK29_PIN5_PC1:
\r
962 rk29_mux_api_set(GPIO5C1_EBCSDDO1_SMCDATA1_NAME,0);
\r
965 case RK29_PIN5_PC2:
\r
967 rk29_mux_api_set(GPIO5C2_EBCSDDO2_SMCDATA2_NAME,0);
\r
970 case RK29_PIN5_PC3:
\r
972 rk29_mux_api_set(GPIO5C3_EBCSDDO3_SMCDATA3_NAME,0);
\r
975 case RK29_PIN5_PC4:
\r
977 rk29_mux_api_set(GPIO5C4_EBCSDDO4_SMCDATA4_NAME,0);
\r
980 case RK29_PIN5_PC5:
\r
982 rk29_mux_api_set(GPIO5C5_EBCSDDO5_SMCDATA5_NAME,0);
\r
985 case RK29_PIN5_PC6:
\r
987 rk29_mux_api_set(GPIO5C6_EBCSDDO6_SMCDATA6_NAME,0);
\r
990 case RK29_PIN5_PC7:
\r
992 rk29_mux_api_set(GPIO5C7_EBCSDDO7_SMCDATA7_NAME,0);
\r
995 case RK29_PIN5_PD0:
\r
997 rk29_mux_api_set(GPIO5D0_EBCSDLE_SMCADDR5_HOSTDATA5_NAME,0);
\r
1000 case RK29_PIN5_PD1:
\r
1002 rk29_mux_api_set(GPIO5D1_EBCSDCLK_SMCADDR6_HOSTDATA6_NAME,0);
\r
1005 case RK29_PIN5_PD2:
\r
1007 rk29_mux_api_set(GPIO5D2_PWM1_UART1SIRIN_NAME,0);
\r
1010 case RK29_PIN5_PD3:
\r
1012 rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME,0);
\r
1015 case RK29_PIN5_PD4:
\r
1017 rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME,0);
\r
1020 case RK29_PIN5_PD5:
\r
1022 rk29_mux_api_set(GPIO5D5_SDMMC0PWREN_NAME,0);
\r
1025 case RK29_PIN5_PD6:
\r
1027 rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME,0);
\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
1054 case RK29_PIN6_PC4:
\r
1055 case RK29_PIN6_PC5:
\r
1057 rk29_mux_api_set(GPIO6C54_CPUTRACEDATA54_NAME,0);
\r
1060 case RK29_PIN6_PC6:
\r
1061 case RK29_PIN6_PC7:
\r
1063 rk29_mux_api_set(GPIO6C76_CPUTRACEDATA76_NAME,0);
\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
1079 printk("Pin=%d isn't RK29 GPIO, Please init it's iomux yourself!",pin);
\r
1086 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1093 if (camera_power != INVALID_GPIO) {
\r
1094 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
\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
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
1104 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1105 printk("%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);
\r
1108 ret = RK29_CAM_EIO_INVALID;
\r
1114 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1121 if (camera_reset != INVALID_GPIO) {
\r
1122 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
\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
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
1131 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1132 printk("%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);
\r
1135 ret = RK29_CAM_EIO_INVALID;
\r
1141 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1148 if (camera_powerdown != INVALID_GPIO) {
\r
1149 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
\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
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
1158 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1159 dprintk("%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);
\r
1162 ret = RK29_CAM_EIO_INVALID;
\r
1168 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
\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
1175 if (camera_flash != INVALID_GPIO) {
\r
1176 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
\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
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
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 printk("%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);
\r
1207 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
1208 printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);
\r
1211 ret = RK29_CAM_EIO_INVALID;
\r
1217 static int rk29_sensor_io_init(void)
\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
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
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
1241 if (camera_power != INVALID_GPIO) {
\r
1242 ret = gpio_request(camera_power, "camera power");
\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
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
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
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
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
1268 if (camera_reset != INVALID_GPIO) {
\r
1269 ret = gpio_request(camera_reset, "camera reset");
\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
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
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
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
1288 if (camera_powerdown != INVALID_GPIO) {
\r
1289 ret = gpio_request(camera_powerdown, "camera powerdown");
\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
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
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
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
1308 if (camera_flash != INVALID_GPIO) {
\r
1309 ret = gpio_request(camera_flash, "camera flash");
\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
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
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
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
1327 sensor_io_int_loop_end:
\r
1328 rk29_sensor_io_deinit(i);
\r
1335 static int rk29_sensor_io_deinit(int sensor)
\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
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
1345 printk("%s..%s enter..\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[sensor].dev_name);
\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
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
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
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
1375 rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;
\r
1378 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
\r
1380 struct rk29camera_gpio_res *res = NULL;
\r
1381 int ret = RK29_CAM_IO_SUCCESS;
\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
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
1397 if (sensor_ioctl_cb.sensor_power_cb) {
\r
1398 ret = sensor_ioctl_cb.sensor_power_cb(res, on);
\r
1400 printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");
\r
1407 if (sensor_ioctl_cb.sensor_reset_cb) {
\r
1408 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);
\r
1410 printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");
\r
1416 case Cam_PowerDown:
\r
1418 if (sensor_ioctl_cb.sensor_powerdown_cb) {
\r
1419 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);
\r
1421 printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");
\r
1429 if (sensor_ioctl_cb.sensor_flash_cb) {
\r
1430 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);
\r
1432 printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");
\r
1439 printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);
\r
1443 rk29_sensor_ioctrl_end:
\r
1446 static int rk29_sensor_power(struct device *dev, int on)
\r
1448 rk29_sensor_ioctrl(dev,Cam_Power,on);
\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
1454 rk29_sensor_ioctrl(dev,Cam_Reset,1);
\r
1456 rk29_sensor_ioctrl(dev,Cam_Reset,0);
\r
1460 static int rk29_sensor_powerdown(struct device *dev, int on)
\r
1462 return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);
\r
1464 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)
\r
1465 static struct i2c_board_info rk29_i2c_cam_info_0[] = {
\r
1467 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1)
\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
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
1483 /*platform_device : soc-camera need */
\r
1484 static struct platform_device rk29_soc_camera_pdrv_0 = {
\r
1485 .name = "soc-camera-pdrv",
\r
1488 .init_name = SENSOR_DEVICE_NAME_0,
\r
1489 .platform_data = &rk29_iclink_0,
\r
1493 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)
\r
1494 static struct i2c_board_info rk29_i2c_cam_info_1[] = {
\r
1496 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)
\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
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
1512 /*platform_device : soc-camera need */
\r
1513 static struct platform_device rk29_soc_camera_pdrv_1 = {
\r
1514 .name = "soc-camera-pdrv",
\r
1517 .init_name = SENSOR_DEVICE_NAME_1,
\r
1518 .platform_data = &rk29_iclink_1,
\r
1523 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
\r
1524 static struct resource rk29_camera_resource[] = {
\r
1526 .start = RK29_VIP_PHYS,
\r
1527 .end = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,
\r
1528 .flags = IORESOURCE_MEM,
\r
1533 .flags = IORESOURCE_IRQ,
\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
1544 .dma_mask = &rockchip_device_camera_dmamask,
\r
1545 .coherent_dma_mask = 0xffffffffUL,
\r
1546 .platform_data = &rk29_camera_platform_data,
\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
1558 static struct platform_device android_pmem_cam_device = {
\r
1559 .name = "android_pmem",
\r
1562 .platform_data = &android_pmem_cam_pdata,
\r
1568 #endif //#ifdef CONFIG_VIDEO_RK29