Merge tag 'v3.10.55' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-mt8127 / kr076 / camera / camera / kd_camera_hw.c
1 #include <linux/videodev2.h>
2 #include <linux/i2c.h>
3 #include <linux/platform_device.h>
4 #include <linux/delay.h>
5 #include <linux/cdev.h>
6 #include <linux/uaccess.h>
7 #include <linux/fs.h>
8 #include <asm/atomic.h>
9 #include <linux/xlog.h>
10
11 #include "kd_camera_hw.h"
12
13 #include "kd_imgsensor.h"
14 #include "kd_imgsensor_define.h"
15 #include "kd_camera_feature.h"
16
17 /******************************************************************************
18 * Debug configuration
19 ******************************************************************************/
20 #define PFX "[kd_camera_hw]"
21 #define PK_DBG_NONE(fmt, arg...) do {} while (0)
22 #define PK_DBG_FUNC(fmt, arg...) xlog_printk(ANDROID_LOG_INFO, PFX , fmt, ##arg)
23
24 #define DEBUG_CAMERA_HW_K
25 #ifdef DEBUG_CAMERA_HW_K
26 #define PK_DBG PK_DBG_FUNC
27 #define PK_ERR(fmt, arg...) xlog_printk(ANDROID_LOG_ERR, PFX , fmt, ##arg)
28 #define PK_XLOG_INFO(fmt, args...) \
29 do { \
30 xlog_printk(ANDROID_LOG_INFO, PFX , fmt, ##arg); \
31 } while(0)
32 #else
33 #define PK_DBG(a,...)
34 #define PK_ERR(a,...)
35 #define PK_XLOG_INFO(fmt, args...)
36 #endif
37
38
39 int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name)
40 {
41 #if !defined (MTK_ALPS_BOX_SUPPORT)
42
43 u32 pinSetIdx = 0;//default main sensor
44 u32 pinSetIdxTmp = 0;
45
46 #define IDX_PS_CMRST 0
47 #define IDX_PS_CMPDN 4
48
49 #define IDX_PS_MODE 1
50 #define IDX_PS_ON 2
51 #define IDX_PS_OFF 3
52
53
54 u32 pinSet[2][8] =
55 {
56 //for main sensor
57 {
58 GPIO_CAMERA_CMRST_PIN,
59 GPIO_CAMERA_CMRST_PIN_M_GPIO, /* mode */
60 GPIO_OUT_ONE, /* ON state */
61 GPIO_OUT_ZERO, /* OFF state */
62 GPIO_CAMERA_CMPDN_PIN,
63 GPIO_CAMERA_CMPDN_PIN_M_GPIO,
64 GPIO_OUT_ONE,
65 GPIO_OUT_ZERO,
66 },
67 //for sub sensor
68 {
69 GPIO_CAMERA_CMRST_PIN,
70 GPIO_CAMERA_CMRST_PIN_M_GPIO,
71 GPIO_OUT_ONE,
72 GPIO_OUT_ZERO,
73 GPIO_CAMERA_CMPDN1_PIN,
74 GPIO_CAMERA_CMPDN1_PIN_M_GPIO,
75 GPIO_OUT_ONE,
76 GPIO_OUT_ZERO,
77 },
78 };
79
80 if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx)
81 {
82 pinSetIdx = 0;
83 }
84 else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx)
85 {
86 pinSetIdx = 1;
87 }
88
89
90 //power ON
91 if (On)
92 {
93
94 PK_DBG("kdCISModulePowerOn -on:currSensorName=%s;\n",currSensorName);
95 PK_DBG("kdCISModulePowerOn -on:pinSetIdx=%d\n",pinSetIdx);
96
97 if ((pinSetIdx == 1) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_HI708_YUV,currSensorName)))
98 {
99 PK_DBG("[CAMERA SENSOR] kdCISModulePowerOn get in---GC2145_YUV sensorIdx:%d; pinSetIdx=%d\n",SensorIdx, pinSetIdx);
100 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800/*VOL_2800*/,mode_name)) //IO
101 {
102 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
103 //return -EIO;
104 goto _kdCISModulePowerOn_exit_;
105 }
106
107 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) //AVDD
108 {
109 PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
110 //return -EIO;
111 goto _kdCISModulePowerOn_exit_;
112 }
113 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) //DVDD no use
114 {
115 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
116 //return -EIO;
117 goto _kdCISModulePowerOn_exit_;
118 }
119 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON]))
120 {
121 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
122 }
123 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
124 {
125 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
126 }
127
128 //PDN/STBY pin
129 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
130 {
131
132 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE]))
133 {
134 PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");
135 }
136 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT))
137 {
138 PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");
139 }
140 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF]))
141 {
142 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
143 }
144
145 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF]))
146 {
147 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
148 }
149 msleep(3);
150
151
152 //RST pin
153 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE]))
154 {
155 PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");
156 }
157 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))
158 {
159 PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");
160 }
161 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
162 {
163 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
164 }
165 msleep(3);
166 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON]))
167 {
168 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
169 }
170 msleep(3);
171 }
172
173 //disable inactive sensor
174 if(pinSetIdx == 0) //disable sub
175 {
176 pinSetIdxTmp = 1;
177 }
178 else
179 {
180 pinSetIdxTmp = 0;
181 }
182 #if 1
183 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdxTmp][IDX_PS_CMRST])
184 {
185 if(mt_set_gpio_mode(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],pinSet[pinSetIdxTmp][IDX_PS_CMPDN+IDX_PS_MODE]))
186 {
187 PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");
188 }
189
190 if(mt_set_gpio_dir(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],GPIO_DIR_OUT))
191 {
192 PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");
193 }
194
195 if(mt_set_gpio_out(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],pinSet[pinSetIdxTmp][IDX_PS_CMPDN+IDX_PS_OFF]))
196 {
197 PK_DBG("[CAMERA LENS] set gpio failed!! \n"); //high == power down lens module
198 }
199 //RST pin
200 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE]))
201 {
202 PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");
203 }
204 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))
205 {
206 PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");
207 }
208 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
209 {
210 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
211 }
212 msleep(3);
213 }
214 #endif
215 //while(1);
216 }
217 else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV2680_RAW ,currSensorName))) {
218 //OV5648 Power UP
219 //First Power Pin low and Reset Pin Low
220
221 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name))
222 {
223 PK_DBG("[CAMERA SENSOR] Fail to enable IO power\n");
224 goto _kdCISModulePowerOn_exit_;
225 }
226 {
227 //PDN pin
228 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
229 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
230 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
231 mdelay(10);
232 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
233 mdelay(5);
234
235 //RST pin
236 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
237 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
238 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
239 mdelay(10);
240 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
241 mdelay(5);
242 }
243
244 msleep(20);
245
246 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800, mode_name))
247 {
248 PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
249 goto _kdCISModulePowerOn_exit_;
250 }
251
252 //if(TRUE != hwPowerOn(PMIC_APP_MAIN_CAMERA_POWER_D, VOL_1500,mode_name))
253 // {
254 // PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
255 // goto _kdCISModulePowerOn_exit_;
256 // }
257
258
259 // wait power to be stable
260 mdelay(25);
261
262
263 ;
264 }
265 else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K5E2YA_MIPI_RAW,currSensorName)))
266 {
267 PK_DBG("[CAMERA SENSOR] kdCISModulePowerOn get in---GC2145_YUV sensorIdx:%d; pinSetIdx=%d\n",SensorIdx, pinSetIdx);
268 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800/*VOL_2800*/,mode_name)) //IO
269 {
270 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
271 //return -EIO;
272 goto _kdCISModulePowerOn_exit_;
273 }
274
275 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) //AVDD
276 {
277 PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
278 //return -EIO;
279 goto _kdCISModulePowerOn_exit_;
280 }
281 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) //DVDD no use
282 {
283 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
284 //return -EIO;
285 goto _kdCISModulePowerOn_exit_;
286 }
287 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF]))
288 {
289 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
290 }
291 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
292 {
293 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
294 }
295
296 //PDN/STBY pin
297 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
298 {
299
300 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE]))
301 {
302 PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");
303 }
304 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT))
305 {
306 PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");
307 }
308 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF]))
309 {
310 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
311 }
312 msleep(3);
313 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON]))
314 {
315 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
316 }
317 msleep(3);
318
319
320 //RST pin
321 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE]))
322 {
323 PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");
324 }
325 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))
326 {
327 PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");
328 }
329 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
330 {
331 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
332 }
333 msleep(3);
334 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON]))
335 {
336 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
337 }
338 msleep(3);
339 }
340
341 //disable inactive sensor
342 if(pinSetIdx == 0) //disable sub
343 {
344 pinSetIdxTmp = 1;
345 }
346 else
347 {
348 pinSetIdxTmp = 0;
349 }
350 #if 1
351 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdxTmp][IDX_PS_CMRST])
352 {
353 if(mt_set_gpio_mode(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],pinSet[pinSetIdxTmp][IDX_PS_CMPDN+IDX_PS_MODE]))
354 {
355 PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");
356 }
357
358 if(mt_set_gpio_dir(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],GPIO_DIR_OUT))
359 {
360 PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");
361 }
362
363 if(mt_set_gpio_out(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],pinSet[pinSetIdxTmp][IDX_PS_CMPDN+IDX_PS_OFF]))
364 {
365 PK_DBG("[CAMERA LENS] set gpio failed!! \n"); //high == power down lens module
366 }
367 //RST pin
368 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE]))
369 {
370 PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");
371 }
372 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))
373 {
374 PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");
375 }
376 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
377 {
378 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
379 }
380 msleep(3);
381 }
382 #endif
383 //while(1);
384 }
385 else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2355_RAW,currSensorName)))
386 {
387 PK_DBG("[CAMERA SENSOR] kdCISModulePowerOn get in---GC2145_YUV sensorIdx:%d; pinSetIdx=%d\n",SensorIdx, pinSetIdx);
388 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800/*VOL_2800*/,mode_name)) //IO
389 {
390 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
391 //return -EIO;
392 goto _kdCISModulePowerOn_exit_;
393 }
394
395 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) //AVDD
396 {
397 PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
398 //return -EIO;
399 goto _kdCISModulePowerOn_exit_;
400 }
401 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) //DVDD no use
402 {
403 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
404 //return -EIO;
405 goto _kdCISModulePowerOn_exit_;
406 }
407 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON]))
408 {
409 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
410 }
411 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
412 {
413 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
414 }
415
416 //PDN/STBY pin
417 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
418 {
419
420 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE]))
421 {
422 PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");
423 }
424 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT))
425 {
426 PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");
427 }
428 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF]))
429 {
430 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
431 }
432 msleep(3);
433 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF]))
434 {
435 PK_DBG("[CAMERA LENS] set gpio failed!! \n");
436 }
437 msleep(3);
438
439
440 //RST pin
441 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE]))
442 {
443 PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");
444 }
445 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))
446 {
447 PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");
448 }
449 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
450 {
451 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
452 }
453 msleep(3);
454 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON]))
455 {
456 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
457 }
458 msleep(3);
459 }
460
461 //disable inactive sensor
462 if(pinSetIdx == 0) //disable sub
463 {
464 pinSetIdxTmp = 1;
465 }
466 else
467 {
468 pinSetIdxTmp = 0;
469 }
470 #if 1
471 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdxTmp][IDX_PS_CMRST])
472 {
473 if(mt_set_gpio_mode(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],pinSet[pinSetIdxTmp][IDX_PS_CMPDN+IDX_PS_MODE]))
474 {
475 PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");
476 }
477
478 if(mt_set_gpio_dir(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],GPIO_DIR_OUT))
479 {
480 PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");
481 }
482
483 if(mt_set_gpio_out(pinSet[pinSetIdxTmp][IDX_PS_CMPDN],pinSet[pinSetIdxTmp][IDX_PS_CMPDN+IDX_PS_ON]))
484 {
485 PK_DBG("[CAMERA LENS] set gpio failed!! \n"); //high == power down lens module
486 }
487 //RST pin
488 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE]))
489 {
490 PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");
491 }
492 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT))
493 {
494 PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");
495 }
496 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF]))
497 {
498 PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");
499 }
500 msleep(3);
501 }
502 #endif
503 //while(1);
504 }
505 else{
506 if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
507 PK_DBG("[CAMERA SENSOR] Fail to OFF analog power\n");
508 //return -EIO;
509 //goto _kdCISModulePowerOn_exit_;
510 }
511 if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name))
512 {
513 PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
514 //return -EIO;
515 //goto _kdCISModulePowerOn_exit_;
516 }
517 mdelay(5);
518
519 //DVDD
520 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1500,mode_name))
521 {
522 PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
523 //return -EIO;
524 //goto _kdCISModulePowerOn_exit_;
525 }
526 mdelay(5);
527
528 #if 0
529 // AF_VCC
530 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name))
531 {
532 PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
533 //return -EIO;
534 goto _kdCISModulePowerOn_exit_;
535 }
536 #endif
537
538 //enable active sensor
539 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
540 //RST pin
541 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
542 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
543 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
544 mdelay(5);
545
546 //PDN pin
547 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
548 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
549 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
550 mdelay(5);
551 }
552
553
554 //disable inactive sensor
555 if(pinSetIdx == 0 || pinSetIdx == 2) {//disable sub
556 if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) {
557 if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
558 if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
559 if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
560 if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
561 if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
562 if(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
563 }
564 }
565 else {
566 if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) {
567 if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
568 if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
569 if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
570 if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
571 if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
572 if(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
573 }
574 }
575
576
577 }
578 }
579 else {//power OFF
580
581 //PK_DBG("[OFF]sensorIdx:%d \n",SensorIdx);
582 if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
583 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
584 if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
585 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
586 if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
587 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
588 if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
589 }
590
591 if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
592 PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
593 }
594 if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)){
595 PK_DBG("[CAMERA SENSOR] Fail to OFF a2 power\n");
596 }
597 if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) {
598 PK_DBG("[CAMERA SENSOR] Fail to OFF d digital power\n");
599 }
600 if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name))
601 {
602 PK_DBG("[CAMERA SENSOR] Fail to OFF d2 digital power\n");
603 }
604 }//
605
606 #endif /* end of defined MTK_ALPS_BOX_SUPPORT */
607
608 return 0;
609
610 _kdCISModulePowerOn_exit_:
611 return -EIO;
612 }
613
614 EXPORT_SYMBOL(kdCISModulePowerOn);
615
616
617 //!--
618 //
619
620
621
622