1 #include <plat/rk_camera.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
8 #if defined (CONFIG_SENSOR_IIC_ADDR_0) && (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)
\r
9 #define PMEM_SENSOR_FULL_RESOLUTION_0 CONS(CONFIG_SENSOR_0,_FULL_RESOLUTION)
\r
11 #ifdef CONFIG_SENSOR_CIF_INDEX_0
\r
12 #define SENSOR_CIF_BUSID_0 CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_0)
\r
14 #define SENSOR_CIF_BUSID_0 RK29_CAM_PLATFORM_DEV_ID
\r
17 #if !(PMEM_SENSOR_FULL_RESOLUTION_0)
\r
18 #undef PMEM_SENSOR_FULL_RESOLUTION_0
\r
19 #define PMEM_SENSOR_FULL_RESOLUTION_0 RK_CAM_SUPPORT_RESOLUTION
\r
22 #if(SENSOR_CIF_BUSID_0 == RK_CAM_PLATFORM_DEV_ID_0)
\r
23 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_0
\r
24 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 0
\r
26 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_0
\r
27 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 0
\r
30 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 0x00
\r
31 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 0x00
\r
34 #if defined (CONFIG_SENSOR_IIC_ADDR_1) && (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)
\r
35 #define PMEM_SENSOR_FULL_RESOLUTION_1 CONS(CONFIG_SENSOR_1,_FULL_RESOLUTION)
\r
37 #ifdef CONFIG_SENSOR_CIF_INDEX_1
\r
38 #define SENSOR_CIF_BUSID_1 CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_1)
\r
40 #define SENSOR_CIF_BUSID_1 RK29_CAM_PLATFORM_DEV_ID
\r
43 #if !(PMEM_SENSOR_FULL_RESOLUTION_1)
\r
44 #undef PMEM_SENSOR_FULL_RESOLUTION_1
\r
45 #define PMEM_SENSOR_FULL_RESOLUTION_1 RK_CAM_SUPPORT_RESOLUTION
\r
47 #if (SENSOR_CIF_BUSID_1 == RK_CAM_PLATFORM_DEV_ID_0)
\r
48 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_1)
\r
49 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0
\r
50 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_1
\r
53 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_1)
\r
54 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1
\r
55 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_1
\r
60 #if defined (CONFIG_SENSOR_IIC_ADDR_01) && (CONFIG_SENSOR_IIC_ADDR_01!=0x00)
\r
61 #define PMEM_SENSOR_FULL_RESOLUTION_01 CONS(CONFIG_SENSOR_01,_FULL_RESOLUTION)
\r
63 #ifdef CONFIG_SENSOR_CIF_INDEX_01
\r
64 #define SENSOR_CIF_BUSID_01 CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_01)
\r
66 #define SENSOR_CIF_BUSID_01 RK29_CAM_PLATFORM_DEV_ID
\r
69 #if !(PMEM_SENSOR_FULL_RESOLUTION_01)
\r
70 #undef PMEM_SENSOR_FULL_RESOLUTION_01
\r
71 #define PMEM_SENSOR_FULL_RESOLUTION_01 RK_CAM_SUPPORT_RESOLUTION
\r
73 #if (SENSOR_CIF_BUSID_01 == RK_CAM_PLATFORM_DEV_ID_0)
\r
74 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_01)
\r
75 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0
\r
76 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_01
\r
79 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_01)
\r
80 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1
\r
81 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_01
\r
86 #if defined (CONFIG_SENSOR_IIC_ADDR_02) && (CONFIG_SENSOR_IIC_ADDR_02!=0x00)
\r
87 #define PMEM_SENSOR_FULL_RESOLUTION_02 CONS(CONFIG_SENSOR_02,_FULL_RESOLUTION)
\r
89 #ifdef CONFIG_SENSOR_CIF_INDEX_02
\r
90 #define SENSOR_CIF_BUSID_02 CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_02)
\r
92 #define SENSOR_CIF_BUSID_02 RK29_CAM_PLATFORM_DEV_ID
\r
95 #if !(PMEM_SENSOR_FULL_RESOLUTION_02)
\r
96 #undef PMEM_SENSOR_FULL_RESOLUTION_02
\r
97 #define PMEM_SENSOR_FULL_RESOLUTION_02 RK_CAM_SUPPORT_RESOLUTION
\r
99 #if (SENSOR_CIF_BUSID_02 == RK_CAM_PLATFORM_DEV_ID_0)
\r
100 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_02)
\r
101 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0
\r
102 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_02
\r
105 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_02)
\r
106 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1
\r
107 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_02
\r
112 #ifdef CONFIG_SENSOR_IIC_ADDR_11
\r
113 #if (CONFIG_SENSOR_IIC_ADDR_11 != 0x00)
\r
114 #define PMEM_SENSOR_FULL_RESOLUTION_11 CONS(CONFIG_SENSOR_11,_FULL_RESOLUTION)
\r
116 #ifdef CONFIG_SENSOR_CIF_INDEX_11
\r
117 #define SENSOR_CIF_BUSID_11 CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_11)
\r
119 #define SENSOR_CIF_BUSID_11 RK29_CAM_PLATFORM_DEV_ID
\r
122 #if !(PMEM_SENSOR_FULL_RESOLUTION_11)
\r
123 #undef PMEM_SENSOR_FULL_RESOLUTION_11
\r
124 #define PMEM_SENSOR_FULL_RESOLUTION_11 RK_CAM_SUPPORT_RESOLUTION
\r
126 #if (SENSOR_CIF_BUSID_11 == RK_CAM_PLATFORM_DEV_ID_0)
\r
127 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_11)
\r
128 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0
\r
129 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_11
\r
132 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_11)
\r
133 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1
\r
134 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_11
\r
141 #ifdef CONFIG_SENSOR_IIC_ADDR_12
\r
142 #if (CONFIG_SENSOR_IIC_ADDR_12 != 0x00)
\r
143 #define PMEM_SENSOR_FULL_RESOLUTION_12 CONS(CONFIG_SENSOR_12,_FULL_RESOLUTION)
\r
145 #ifdef CONFIG_SENSOR_CIF_INDEX_12
\r
146 #define SENSOR_CIF_BUSID_12 CONS(RK_CAM_PLATFORM_DEV_ID_,CONFIG_SENSOR_CIF_INDEX_12)
\r
148 #define SENSOR_CIF_BUSID_12 RK29_CAM_PLATFORM_DEV_ID
\r
151 #if !(PMEM_SENSOR_FULL_RESOLUTION_12)
\r
152 #undef PMEM_SENSOR_FULL_RESOLUTION_12
\r
153 #define PMEM_SENSOR_FULL_RESOLUTION_12 RK_CAM_SUPPORT_RESOLUTION
\r
155 #if (SENSOR_CIF_BUSID_12 == RK_CAM_PLATFORM_DEV_ID_0)
\r
156 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_12)
\r
157 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0
\r
158 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_12
\r
161 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_12)
\r
162 #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1
\r
163 #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_12
\r
169 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 > RK_CAM_SUPPORT_RESOLUTION)
\r
170 #error "PMEM_SENSOR_FULL_RESOLUTION_CIF_0 is larger than 5Meag"
\r
173 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 > RK_CAM_SUPPORT_RESOLUTION)
\r
174 #error "PMEM_SENSOR_FULL_RESOLUTION_CIF_1 is larger than 5Meag"
\r
178 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x800000) /* ddl@rock-chips.com : It is only support 5Mega interplate to 8Mega */
\r
179 #define PMEM_CAM_NECESSARY_CIF_0 0x1900000 /* 1280*720*1.5*4(preview) + 12M(capture raw) + 7M(jpeg encode output) */
\r
180 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x800000
\r
181 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x500000)
\r
182 #define PMEM_CAM_NECESSARY_CIF_0 0x1400000 /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */
\r
183 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x800000
\r
184 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x300000)
\r
185 #define PMEM_CAM_NECESSARY_CIF_0 0xf00000 /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */
\r
186 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x600000
\r
187 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */
\r
188 #define PMEM_CAM_NECESSARY_CIF_0 0xc00000
\r
189 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x600000
\r
190 #elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x130000))
\r
191 #define PMEM_CAM_NECESSARY_CIF_0 0xa00000 /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */
\r
192 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x600000
\r
193 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x30000)
\r
194 #define PMEM_CAM_NECESSARY_CIF_0 0x600000 /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */
\r
195 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x600000
\r
196 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x00)
\r
197 #define PMEM_CAM_NECESSARY_CIF_0 0x00
\r
198 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x00
\r
200 #define PMEM_CAM_NECESSARY_CIF_0 0x1400000
\r
201 #define PMEM_CAMIPP_NECESSARY_CIF_0 0x800000
\r
205 #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x800000) /* ddl@rock-chips.com : It is only support 5Mega interplate to 8Mega */
\r
206 #define PMEM_CAM_NECESSARY_CIF_1 0x1900000 /* 1280*720*1.5*4(preview) + 12M(capture raw) + 7M(jpeg encode output) */
\r
207 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x800000
\r
208 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x500000)
\r
209 #define PMEM_CAM_NECESSARY_CIF_1 0x1400000 /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */
\r
210 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x800000
\r
211 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x300000)
\r
212 #define PMEM_CAM_NECESSARY_CIF_1 0xf00000 /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */
\r
213 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x600000
\r
214 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1== 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */
\r
215 #define PMEM_CAM_NECESSARY_CIF_1 0xc00000
\r
216 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x600000
\r
217 #elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x130000))
\r
218 #define PMEM_CAM_NECESSARY_CIF_1 0xa00000 /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */
\r
219 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x600000
\r
220 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x30000)
\r
221 #define PMEM_CAM_NECESSARY_CIF_1 0x600000 /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */
\r
222 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x600000
\r
223 #elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x00)
\r
224 #define PMEM_CAM_NECESSARY_CIF_1 0x00
\r
225 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x00
\r
227 #define PMEM_CAM_NECESSARY_CIF_1 0x1400000
\r
228 #define PMEM_CAMIPP_NECESSARY_CIF_1 0x800000
\r
232 #ifdef CONFIG_VIDEO_RKCIF_WORK_SIMUL_OFF
\r
233 #if (PMEM_CAM_NECESSARY_CIF_0 > PMEM_CAM_NECESSARY_CIF_1)
\r
234 #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_0
\r
235 #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_0
\r
237 #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_1
\r
238 #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_1
\r
242 #if (!defined(CONFIG_VIDEO_RKCIF_WORK_SIMUL_OFF) && !defined(CONFIG_VIDEO_RKCIF_WORK_SIMUL_ON))
\r
243 #if PMEM_CAM_NECESSARY_CIF_0
\r
244 #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_0
\r
245 #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_0
\r
247 #define PMEM_CAM_NECESSARY PMEM_CAM_NECESSARY_CIF_1
\r
248 #define PMEM_CAMIPP_NECESSARY PMEM_CAMIPP_NECESSARY_CIF_1
\r
252 #ifdef CONFIG_VIDEO_RK29_CAMMEM_ION
\r
253 #undef PMEM_CAM_NECESSARY
\r
254 #define PMEM_CAM_NECESSARY 0x00000000
\r
258 /*---------------- Camera Sensor Fixed Macro End ------------------------*/
\r
259 #else //#ifdef CONFIG_VIDEO_RK
\r
260 #define PMEM_CAM_NECESSARY 0x00000000
\r
263 #else // #ifndef PMEM_CAM_SIZE
\r
265 * Driver Version Note
\r
266 *v0.0.1: this driver is compatible with generic_sensor
\r
268 static int camio_version = KERNEL_VERSION(0,1,0);
\r
269 module_param(camio_version, int, S_IRUGO);
\r
272 static int camera_debug;
\r
273 module_param(camera_debug, int, S_IRUGO|S_IWUSR);
\r
275 #undef CAMMODULE_NAME
\r
276 #define CAMMODULE_NAME "rk_cam_io"
\r
278 #define ddprintk(level, fmt, arg...) do { \
\r
279 if (camera_debug >= level) \
\r
280 printk(KERN_WARNING"%s(%d):" fmt"\n", CAMMODULE_NAME,__LINE__,## arg); } while (0)
\r
282 #define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__)
\r
283 #define eprintk(format, ...) printk(KERN_ERR "%s(%d):" format"\n",CAMMODULE_NAME,__LINE__,## __VA_ARGS__)
\r
285 #define SENSOR_NAME_0 STR(CONFIG_SENSOR_0) /* back camera sensor 0 */
\r
286 #define SENSOR_NAME_1 STR(CONFIG_SENSOR_1) /* front camera sensor 0 */
\r
287 #define SENSOR_DEVICE_NAME_0 STR(CONS(CONFIG_SENSOR_0, _back))
\r
288 #define SENSOR_DEVICE_NAME_1 STR(CONS(CONFIG_SENSOR_1, _front))
\r
289 #ifdef CONFIG_SENSOR_01
\r
290 #define SENSOR_NAME_01 STR(CONFIG_SENSOR_01) /* back camera sensor 1 */
\r
291 #define SENSOR_DEVICE_NAME_01 STR(CONS(CONFIG_SENSOR_01, _back_1))
\r
293 #ifdef CONFIG_SENSOR_02
\r
294 #define SENSOR_NAME_02 STR(CONFIG_SENSOR_02) /* back camera sensor 2 */
\r
295 #define SENSOR_DEVICE_NAME_02 STR(CONS(CONFIG_SENSOR_02, _back_2))
\r
297 #ifdef CONFIG_SENSOR_11
\r
298 #define SENSOR_NAME_11 STR(CONFIG_SENSOR_11) /* front camera sensor 1 */
\r
299 #define SENSOR_DEVICE_NAME_11 STR(CONS(CONFIG_SENSOR_11, _front_1))
\r
301 #ifdef CONFIG_SENSOR_12
\r
302 #define SENSOR_NAME_12 STR(CONFIG_SENSOR_12) /* front camera sensor 2 */
\r
303 #define SENSOR_DEVICE_NAME_12 STR(CONS(CONFIG_SENSOR_12, _front_2))
\r
306 static int rk_sensor_io_init(void);
\r
307 static int rk_sensor_io_deinit(int sensor);
\r
308 static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on);
\r
309 static int rk_sensor_power(struct device *dev, int on);
\r
310 static int rk_sensor_register(void);
\r
311 //static int rk_sensor_reset(struct device *dev);
\r
313 static int rk_sensor_powerdown(struct device *dev, int on);
\r
315 static struct rk29camera_platform_data rk_camera_platform_data = {
\r
316 .io_init = rk_sensor_io_init,
\r
317 .io_deinit = rk_sensor_io_deinit,
\r
318 .iomux = rk_sensor_iomux,
\r
319 .sensor_ioctrl = rk_sensor_ioctrl,
\r
320 .sensor_register = rk_sensor_register,
\r
323 #if defined CONFIG_SENSOR_IIC_ADDR_0 && CONFIG_SENSOR_IIC_ADDR_0
\r
324 .gpio_reset = CONFIG_SENSOR_RESET_PIN_0,
\r
325 .gpio_power = CONFIG_SENSOR_POWER_PIN_0,
\r
326 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_0,
\r
327 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_0,
\r
328 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_0|CONFIG_SENSOR_RESETACTIVE_LEVEL_0|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0|CONFIG_SENSOR_FLASHACTIVE_LEVEL_0),
\r
330 .dev_name = SENSOR_DEVICE_NAME_0,
\r
332 .gpio_reset = INVALID_GPIO,
\r
333 .gpio_power = INVALID_GPIO,
\r
334 .gpio_powerdown = INVALID_GPIO,
\r
335 .gpio_flash = INVALID_GPIO,
\r
341 #if defined CONFIG_SENSOR_IIC_ADDR_1 && CONFIG_SENSOR_IIC_ADDR_1
\r
342 .gpio_reset = CONFIG_SENSOR_RESET_PIN_1,
\r
343 .gpio_power = CONFIG_SENSOR_POWER_PIN_1,
\r
344 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1,
\r
345 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1,
\r
346 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1),
\r
348 .dev_name = SENSOR_DEVICE_NAME_1,
\r
350 .gpio_reset = INVALID_GPIO,
\r
351 .gpio_power = INVALID_GPIO,
\r
352 .gpio_powerdown = INVALID_GPIO,
\r
353 .gpio_flash = INVALID_GPIO,
\r
359 #ifdef CONFIG_SENSOR_01
\r
361 #if CONFIG_SENSOR_IIC_ADDR_01
\r
362 .gpio_reset = CONFIG_SENSOR_RESET_PIN_01,
\r
363 .gpio_power = CONFIG_SENSOR_POWER_PIN_01,
\r
364 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_01,
\r
365 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_01,
\r
366 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_01|CONFIG_SENSOR_RESETACTIVE_LEVEL_01|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_01|CONFIG_SENSOR_FLASHACTIVE_LEVEL_01),
\r
368 .dev_name = SENSOR_DEVICE_NAME_01,
\r
370 .gpio_reset = INVALID_GPIO,
\r
371 .gpio_power = INVALID_GPIO,
\r
372 .gpio_powerdown = INVALID_GPIO,
\r
373 .gpio_flash = INVALID_GPIO,
\r
380 #ifdef CONFIG_SENSOR_02
\r
382 #if CONFIG_SENSOR_IIC_ADDR_02
\r
383 .gpio_reset = CONFIG_SENSOR_RESET_PIN_02,
\r
384 .gpio_power = CONFIG_SENSOR_POWER_PIN_02,
\r
385 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_02,
\r
386 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_02,
\r
387 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_02|CONFIG_SENSOR_RESETACTIVE_LEVEL_02|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_02|CONFIG_SENSOR_FLASHACTIVE_LEVEL_02),
\r
389 .dev_name = SENSOR_DEVICE_NAME_02,
\r
391 .gpio_reset = INVALID_GPIO,
\r
392 .gpio_power = INVALID_GPIO,
\r
393 .gpio_powerdown = INVALID_GPIO,
\r
394 .gpio_flash = INVALID_GPIO,
\r
401 #ifdef CONFIG_SENSOR_11
\r
403 #if CONFIG_SENSOR_IIC_ADDR_11
\r
404 .gpio_reset = CONFIG_SENSOR_RESET_PIN_11,
\r
405 .gpio_power = CONFIG_SENSOR_POWER_PIN_11,
\r
406 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_11,
\r
407 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_11,
\r
408 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_11|CONFIG_SENSOR_RESETACTIVE_LEVEL_11|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_11|CONFIG_SENSOR_FLASHACTIVE_LEVEL_11),
\r
410 .dev_name = SENSOR_DEVICE_NAME_11,
\r
412 .gpio_reset = INVALID_GPIO,
\r
413 .gpio_power = INVALID_GPIO,
\r
414 .gpio_powerdown = INVALID_GPIO,
\r
415 .gpio_flash = INVALID_GPIO,
\r
422 #ifdef CONFIG_SENSOR_12
\r
424 #if CONFIG_SENSOR_IIC_ADDR_12
\r
425 .gpio_reset = CONFIG_SENSOR_RESET_PIN_12,
\r
426 .gpio_power = CONFIG_SENSOR_POWER_PIN_12,
\r
427 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_12,
\r
428 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_12,
\r
429 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_12|CONFIG_SENSOR_RESETACTIVE_LEVEL_12|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_12|CONFIG_SENSOR_FLASHACTIVE_LEVEL_12),
\r
431 .dev_name = SENSOR_DEVICE_NAME_12,
\r
433 .gpio_reset = INVALID_GPIO,
\r
434 .gpio_power = INVALID_GPIO,
\r
435 .gpio_powerdown = INVALID_GPIO,
\r
436 .gpio_flash = INVALID_GPIO,
\r
445 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
\r
446 #ifdef MEM_CAMIPP_BASE
\r
448 .name = "camera_ipp_mem",
\r
449 .start = MEM_CAMIPP_BASE,
\r
450 .size = MEM_CAMIPP_SIZE,
\r
457 #ifdef CONFIG_SENSOR_0
\r
458 .dev_name = SENSOR_DEVICE_NAME_0,
\r
459 .orientation = CONFIG_SENSOR_ORIENTATION_0,
\r
462 .orientation = 0x00,
\r
465 #ifdef CONFIG_SENSOR_1
\r
466 .dev_name = SENSOR_DEVICE_NAME_1,
\r
467 .orientation = CONFIG_SENSOR_ORIENTATION_1,
\r
470 .orientation = 0x00,
\r
472 #ifdef CONFIG_SENSOR_01
\r
474 .dev_name = SENSOR_DEVICE_NAME_01,
\r
475 .orientation = CONFIG_SENSOR_ORIENTATION_01,
\r
479 .orientation = 0x00,
\r
481 #ifdef CONFIG_SENSOR_02
\r
483 .dev_name = SENSOR_DEVICE_NAME_02,
\r
484 .orientation = CONFIG_SENSOR_ORIENTATION_02,
\r
488 .orientation = 0x00,
\r
491 #ifdef CONFIG_SENSOR_11
\r
493 .dev_name = SENSOR_DEVICE_NAME_11,
\r
494 .orientation = CONFIG_SENSOR_ORIENTATION_11,
\r
498 .orientation = 0x00,
\r
500 #ifdef CONFIG_SENSOR_12
\r
502 .dev_name = SENSOR_DEVICE_NAME_12,
\r
503 .orientation = CONFIG_SENSOR_ORIENTATION_12,
\r
507 .orientation = 0x00,
\r
513 #ifdef CONFIG_SENSOR_0
\r
515 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)
\r
517 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1),
\r
520 #ifdef SENSOR_CIF_BUSID_0
\r
521 .bus_id= SENSOR_CIF_BUSID_0,
\r
523 .bus_id= RK29_CAM_PLATFORM_DEV_ID,
\r
525 .power = rk_sensor_power,
\r
526 #if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO)
\r
527 .reset = rk_sensor_reset,
\r
529 .powerdown = rk_sensor_powerdown,
\r
530 //.board_info = &rk_i2c_cam_info_0[0],
\r
532 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,
\r
533 .module_name = SENSOR_NAME_0,
\r
536 .name = "soc-camera-pdrv",
\r
539 .init_name = SENSOR_DEVICE_NAME_0,
\r
540 //.platform_data = &rk_iclink_0,
\r
546 #ifdef CONFIG_SENSOR_1
\r
548 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)
\r
550 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)
\r
553 #ifdef SENSOR_CIF_BUSID_1
\r
554 .bus_id= SENSOR_CIF_BUSID_1,
\r
556 .bus_id= RK29_CAM_PLATFORM_DEV_ID,
\r
558 .power = rk_sensor_power,
\r
559 #if (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)
\r
560 .reset = rk_sensor_reset,
\r
562 .powerdown = rk_sensor_powerdown,
\r
563 //.board_info = &rk_i2c_cam_info_0[0],
\r
565 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,
\r
566 .module_name = SENSOR_NAME_1,
\r
569 .name = "soc-camera-pdrv",
\r
572 .init_name = SENSOR_DEVICE_NAME_1,
\r
573 //.platform_data = &rk_iclink_0,
\r
579 #ifdef CONFIG_SENSOR_01
\r
581 #if (CONFIG_SENSOR_IIC_ADDR_01 != 0x00)
\r
583 I2C_BOARD_INFO(SENSOR_NAME_01, CONFIG_SENSOR_IIC_ADDR_01>>1)
\r
586 #ifdef SENSOR_CIF_BUSID_01
\r
587 .bus_id= SENSOR_CIF_BUSID_01,
\r
589 .bus_id= RK29_CAM_PLATFORM_DEV_ID,
\r
591 .power = rk_sensor_power,
\r
592 #if (CONFIG_SENSOR_RESET_PIN_01 != INVALID_GPIO)
\r
593 .reset = rk_sensor_reset,
\r
595 .powerdown = rk_sensor_powerdown,
\r
596 //.board_info = &rk_i2c_cam_info_0[0],
\r
598 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_01,
\r
599 .module_name = SENSOR_NAME_01,
\r
602 .name = "soc-camera-pdrv",
\r
605 .init_name = SENSOR_DEVICE_NAME_01,
\r
606 //.platform_data = &rk_iclink_0,
\r
612 #ifdef CONFIG_SENSOR_02
\r
614 #if (CONFIG_SENSOR_IIC_ADDR_02 != 0x00)
\r
616 I2C_BOARD_INFO(SENSOR_NAME_02, CONFIG_SENSOR_IIC_ADDR_02>>1)
\r
619 #ifdef SENSOR_CIF_BUSID_02
\r
620 .bus_id= SENSOR_CIF_BUSID_02,
\r
622 .bus_id= RK29_CAM_PLATFORM_DEV_ID,
\r
624 .power = rk_sensor_power,
\r
625 #if (CONFIG_SENSOR_RESET_PIN_02 != INVALID_GPIO)
\r
626 .reset = rk_sensor_reset,
\r
628 .powerdown = rk_sensor_powerdown,
\r
629 //.board_info = &rk_i2c_cam_info_0[0],
\r
631 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_02,
\r
632 .module_name = SENSOR_NAME_02,
\r
635 .name = "soc-camera-pdrv",
\r
638 .init_name = SENSOR_DEVICE_NAME_02,
\r
639 //.platform_data = &rk_iclink_0,
\r
645 #ifdef CONFIG_SENSOR_11
\r
647 #if (CONFIG_SENSOR_IIC_ADDR_11 != 0x00)
\r
649 I2C_BOARD_INFO(SENSOR_NAME_11, CONFIG_SENSOR_IIC_ADDR_11>>1)
\r
652 #ifdef SENSOR_CIF_BUSID_11
\r
653 .bus_id= SENSOR_CIF_BUSID_11,
\r
655 .bus_id= RK29_CAM_PLATFORM_DEV_ID,
\r
657 .power = rk_sensor_power,
\r
658 #if (CONFIG_SENSOR_RESET_PIN_11 != INVALID_GPIO)
\r
659 .reset = rk_sensor_reset,
\r
661 .powerdown = rk_sensor_powerdown,
\r
662 //.board_info = &rk_i2c_cam_info_0[0],
\r
664 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_11,
\r
665 .module_name = SENSOR_NAME_11,
\r
668 .name = "soc-camera-pdrv",
\r
671 .init_name = SENSOR_DEVICE_NAME_11,
\r
672 //.platform_data = &rk_iclink_0,
\r
678 #ifdef CONFIG_SENSOR_12
\r
680 #if (CONFIG_SENSOR_IIC_ADDR_12 != 0x00)
\r
682 I2C_BOARD_INFO(SENSOR_NAME_12, CONFIG_SENSOR_IIC_ADDR_12>>1)
\r
685 #ifdef SENSOR_CIF_BUSID_12
\r
686 .bus_id= SENSOR_CIF_BUSID_12,
\r
688 .bus_id= RK29_CAM_PLATFORM_DEV_ID,
\r
690 .power = rk_sensor_power,
\r
691 #if (CONFIG_SENSOR_RESET_PIN_12 != INVALID_GPIO)
\r
692 .reset = rk_sensor_reset,
\r
694 .powerdown = rk_sensor_powerdown,
\r
695 //.board_info = &rk_i2c_cam_info_0[0],
\r
697 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_12,
\r
698 .module_name = SENSOR_NAME_12,
\r
701 .name = "soc-camera-pdrv",
\r
704 .init_name = SENSOR_DEVICE_NAME_12,
\r
705 //.platform_data = &rk_iclink_0,
\r
712 .register_dev_new = new_camera,
\r
716 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
\r
718 int camera_power = res->gpio_power;
\r
719 int camera_ioflag = res->gpio_flag;
\r
720 int camera_io_init = res->gpio_init;
\r
723 if (camera_power != INVALID_GPIO) {
\r
724 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
\r
726 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
727 dprintk("%s PowerPin=%d ..PinLevel = %x",res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
730 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
731 dprintk("%s PowerPin=%d ..PinLevel = %x",res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
734 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
735 eprintk("%s PowerPin=%d request failed!", res->dev_name,camera_power);
\r
738 ret = RK29_CAM_EIO_INVALID;
\r
744 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)
\r
746 int camera_reset = res->gpio_reset;
\r
747 int camera_ioflag = res->gpio_flag;
\r
748 int camera_io_init = res->gpio_init;
\r
751 if (camera_reset != INVALID_GPIO) {
\r
752 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
\r
754 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
755 dprintk("%s ResetPin=%d ..PinLevel = %x",res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
757 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
758 dprintk("%s ResetPin= %d..PinLevel = %x",res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
761 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
762 eprintk("%s ResetPin=%d request failed!", res->dev_name,camera_reset);
\r
765 ret = RK29_CAM_EIO_INVALID;
\r
771 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)
\r
773 int camera_powerdown = res->gpio_powerdown;
\r
774 int camera_ioflag = res->gpio_flag;
\r
775 int camera_io_init = res->gpio_init;
\r
778 if (camera_powerdown != INVALID_GPIO) {
\r
779 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
781 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
782 dprintk("%s PowerDownPin=%d ..PinLevel = %x" ,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
784 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
785 dprintk("%s PowerDownPin= %d..PinLevel = %x" ,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
788 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
789 dprintk("%s PowerDownPin=%d request failed!", res->dev_name,camera_powerdown);
\r
792 ret = RK29_CAM_EIO_INVALID;
\r
798 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
\r
800 int camera_flash = res->gpio_flash;
\r
801 int camera_ioflag = res->gpio_flag;
\r
802 int camera_io_init = res->gpio_init;
\r
805 if (camera_flash != INVALID_GPIO) {
\r
806 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
\r
811 gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
812 dprintk("%s FlashPin= %d..PinLevel = %x", res->dev_name, camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
818 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
819 dprintk("%s FlashPin=%d ..PinLevel = %x", res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
825 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
826 dprintk("%s FlashPin=%d ..PinLevel = %x", res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
832 eprintk("%s Flash command(%d) is invalidate", res->dev_name,on);
\r
837 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
838 eprintk("%s FlashPin=%d request failed!", res->dev_name,camera_flash);
\r
841 ret = RK29_CAM_EIO_INVALID;
\r
845 static void rk29_sensor_fps_get(int idx, unsigned int *val, int w, int h)
\r
849 #ifdef CONFIG_SENSOR_0
\r
852 if ((w==176) && (h==144)) {
\r
853 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_0;
\r
854 #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_0
\r
855 } else if ((w==240) && (h==160)) {
\r
856 *val = CONFIG_SENSOR_240X160_FPS_FIXED_0;
\r
858 } else if ((w==320) && (h==240)) {
\r
859 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_0;
\r
860 } else if ((w==352) && (h==288)) {
\r
861 *val = CONFIG_SENSOR_CIF_FPS_FIXED_0;
\r
862 } else if ((w==640) && (h==480)) {
\r
863 *val = CONFIG_SENSOR_VGA_FPS_FIXED_0;
\r
864 } else if ((w==720) && (h==480)) {
\r
865 *val = CONFIG_SENSOR_480P_FPS_FIXED_0;
\r
866 } else if ((w==800) && (h==600)) {
\r
867 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_0;
\r
868 } else if ((w==1280) && (h==720)) {
\r
869 *val = CONFIG_SENSOR_720P_FPS_FIXED_0;
\r
874 #ifdef CONFIG_SENSOR_1
\r
877 if ((w==176) && (h==144)) {
\r
878 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_1;
\r
879 #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_1
\r
880 } else if ((w==240) && (h==160)) {
\r
881 *val = CONFIG_SENSOR_240X160_FPS_FIXED_1;
\r
883 } else if ((w==320) && (h==240)) {
\r
884 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_1;
\r
885 } else if ((w==352) && (h==288)) {
\r
886 *val = CONFIG_SENSOR_CIF_FPS_FIXED_1;
\r
887 } else if ((w==640) && (h==480)) {
\r
888 *val = CONFIG_SENSOR_VGA_FPS_FIXED_1;
\r
889 } else if ((w==720) && (h==480)) {
\r
890 *val = CONFIG_SENSOR_480P_FPS_FIXED_1;
\r
891 } else if ((w==800) && (h==600)) {
\r
892 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_1;
\r
893 } else if ((w==1280) && (h==720)) {
\r
894 *val = CONFIG_SENSOR_720P_FPS_FIXED_1;
\r
899 #ifdef CONFIG_SENSOR_01
\r
902 if ((w==176) && (h==144)) {
\r
903 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_01;
\r
904 #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_01
\r
905 } else if ((w==240) && (h==160)) {
\r
906 *val = CONFIG_SENSOR_240X160_FPS_FIXED_01;
\r
908 } else if ((w==320) && (h==240)) {
\r
909 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_01;
\r
910 } else if ((w==352) && (h==288)) {
\r
911 *val = CONFIG_SENSOR_CIF_FPS_FIXED_01;
\r
912 } else if ((w==640) && (h==480)) {
\r
913 *val = CONFIG_SENSOR_VGA_FPS_FIXED_01;
\r
914 } else if ((w==720) && (h==480)) {
\r
915 *val = CONFIG_SENSOR_480P_FPS_FIXED_01;
\r
916 } else if ((w==800) && (h==600)) {
\r
917 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_01;
\r
918 } else if ((w==1280) && (h==720)) {
\r
919 *val = CONFIG_SENSOR_720P_FPS_FIXED_01;
\r
924 #ifdef CONFIG_SENSOR_02
\r
927 if ((w==176) && (h==144)) {
\r
928 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_02;
\r
929 #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_02
\r
930 } else if ((w==240) && (h==160)) {
\r
931 *val = CONFIG_SENSOR_240X160_FPS_FIXED_02;
\r
933 } else if ((w==320) && (h==240)) {
\r
934 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_02;
\r
935 } else if ((w==352) && (h==288)) {
\r
936 *val = CONFIG_SENSOR_CIF_FPS_FIXED_02;
\r
937 } else if ((w==640) && (h==480)) {
\r
938 *val = CONFIG_SENSOR_VGA_FPS_FIXED_02;
\r
939 } else if ((w==720) && (h==480)) {
\r
940 *val = CONFIG_SENSOR_480P_FPS_FIXED_02;
\r
941 } else if ((w==800) && (h==600)) {
\r
942 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_02;
\r
943 } else if ((w==1280) && (h==720)) {
\r
944 *val = CONFIG_SENSOR_720P_FPS_FIXED_02;
\r
950 #ifdef CONFIG_SENSOR_11
\r
953 if ((w==176) && (h==144)) {
\r
954 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_11;
\r
955 #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_11
\r
956 } else if ((w==240) && (h==160)) {
\r
957 *val = CONFIG_SENSOR_240X160_FPS_FIXED_11;
\r
959 } else if ((w==320) && (h==240)) {
\r
960 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_11;
\r
961 } else if ((w==352) && (h==288)) {
\r
962 *val = CONFIG_SENSOR_CIF_FPS_FIXED_11;
\r
963 } else if ((w==640) && (h==480)) {
\r
964 *val = CONFIG_SENSOR_VGA_FPS_FIXED_11;
\r
965 } else if ((w==720) && (h==480)) {
\r
966 *val = CONFIG_SENSOR_480P_FPS_FIXED_11;
\r
967 } else if ((w==800) && (h==600)) {
\r
968 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_11;
\r
969 } else if ((w==1280) && (h==720)) {
\r
970 *val = CONFIG_SENSOR_720P_FPS_FIXED_11;
\r
975 #ifdef CONFIG_SENSOR_12
\r
978 if ((w==176) && (h==144)) {
\r
979 *val = CONFIG_SENSOR_QCIF_FPS_FIXED_12;
\r
980 #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_12
\r
981 } else if ((w==240) && (h==160)) {
\r
982 *val = CONFIG_SENSOR_240X160_FPS_FIXED_12;
\r
984 } else if ((w==320) && (h==240)) {
\r
985 *val = CONFIG_SENSOR_QVGA_FPS_FIXED_12;
\r
986 } else if ((w==352) && (h==288)) {
\r
987 *val = CONFIG_SENSOR_CIF_FPS_FIXED_12;
\r
988 } else if ((w==640) && (h==480)) {
\r
989 *val = CONFIG_SENSOR_VGA_FPS_FIXED_12;
\r
990 } else if ((w==720) && (h==480)) {
\r
991 *val = CONFIG_SENSOR_480P_FPS_FIXED_12;
\r
992 } else if ((w==800) && (h==600)) {
\r
993 *val = CONFIG_SENSOR_SVGA_FPS_FIXED_12;
\r
994 } else if ((w==1280) && (h==720)) {
\r
995 *val = CONFIG_SENSOR_720P_FPS_FIXED_12;
\r
1001 eprintk(" sensor-%d have not been define in board file!",idx);
\r
1004 static int _rk_sensor_io_init_(struct rk29camera_gpio_res *gpio_res)
\r
1007 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
\r
1008 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
\r
1009 unsigned int camera_ioflag;
\r
1010 struct rk29camera_gpio_res *io_res;
\r
1011 bool io_requested_in_camera;
\r
1013 camera_reset = gpio_res->gpio_reset;
\r
1014 camera_power = gpio_res->gpio_power;
\r
1015 camera_powerdown = gpio_res->gpio_powerdown;
\r
1016 camera_flash = gpio_res->gpio_flash;
\r
1017 camera_ioflag = gpio_res->gpio_flag;
\r
1018 gpio_res->gpio_init = 0;
\r
1020 if (camera_power != INVALID_GPIO) {
\r
1021 ret = gpio_request(camera_power, "camera power");
\r
1023 io_requested_in_camera = false;
\r
1024 for (i=0; i<RK_CAM_NUM; i++) {
\r
1025 io_res = &rk_camera_platform_data.gpio_res[i];
\r
1026 if (io_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {
\r
1027 if (io_res->gpio_power == camera_power)
\r
1028 io_requested_in_camera = true;
\r
1032 if (io_requested_in_camera==false) {
\r
1034 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1035 io_res = &new_camera[i].io;
\r
1036 if (io_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {
\r
1037 if (io_res->gpio_power == camera_power)
\r
1038 io_requested_in_camera = true;
\r
1044 if (io_requested_in_camera==false) {
\r
1045 printk( "%s power pin(%d) init failed\n", gpio_res->dev_name,camera_power);
\r
1046 goto _rk_sensor_io_init_end_;
\r
1052 if (rk_camera_platform_data.iomux(camera_power) < 0) {
\r
1054 eprintk("%s power pin(%d) iomux init failed",gpio_res->dev_name,camera_power);
\r
1055 goto _rk_sensor_io_init_end_;
\r
1058 gpio_res->gpio_init |= RK29_CAM_POWERACTIVE_MASK;
\r
1059 gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1060 gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1062 dprintk("%s power pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
1066 if (camera_reset != INVALID_GPIO) {
\r
1067 ret = gpio_request(camera_reset, "camera reset");
\r
1069 io_requested_in_camera = false;
\r
1070 for (i=0; i<RK_CAM_NUM; i++) {
\r
1071 io_res = &rk_camera_platform_data.gpio_res[i];
\r
1072 if (io_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {
\r
1073 if (io_res->gpio_reset == camera_reset)
\r
1074 io_requested_in_camera = true;
\r
1078 if (io_requested_in_camera==false) {
\r
1080 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1081 io_res = &new_camera[i].io;
\r
1082 if (io_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {
\r
1083 if (io_res->gpio_reset == camera_reset)
\r
1084 io_requested_in_camera = true;
\r
1090 if (io_requested_in_camera==false) {
\r
1091 eprintk("%s reset pin(%d) init failed" ,gpio_res->dev_name,camera_reset);
\r
1092 goto _rk_sensor_io_init_end_;
\r
1098 if (rk_camera_platform_data.iomux(camera_reset) < 0) {
\r
1100 eprintk("%s reset pin(%d) iomux init failed", gpio_res->dev_name,camera_reset);
\r
1101 goto _rk_sensor_io_init_end_;
\r
1104 gpio_res->gpio_init |= RK29_CAM_RESETACTIVE_MASK;
\r
1105 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1106 gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1108 dprintk("%s reset pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
1112 if (camera_powerdown != INVALID_GPIO) {
\r
1113 ret = gpio_request(camera_powerdown, "camera powerdown");
\r
1115 io_requested_in_camera = false;
\r
1116 for (i=0; i<RK_CAM_NUM; i++) {
\r
1117 io_res = &rk_camera_platform_data.gpio_res[i];
\r
1118 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1119 if (io_res->gpio_powerdown == camera_powerdown)
\r
1120 io_requested_in_camera = true;
\r
1124 if (io_requested_in_camera==false) {
\r
1126 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1127 io_res = &new_camera[i].io;
\r
1128 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1129 if (io_res->gpio_powerdown == camera_powerdown)
\r
1130 io_requested_in_camera = true;
\r
1136 if (io_requested_in_camera==false) {
\r
1137 eprintk("%s powerdown pin(%d) init failed",gpio_res->dev_name,camera_powerdown);
\r
1138 goto _rk_sensor_io_init_end_;
\r
1144 if (rk_camera_platform_data.iomux(camera_powerdown) < 0) {
\r
1146 eprintk("%s powerdown pin(%d) iomux init failed",gpio_res->dev_name,camera_powerdown);
\r
1147 goto _rk_sensor_io_init_end_;
\r
1150 gpio_res->gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;
\r
1151 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1152 gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1154 dprintk("%s powerdown pin(%d) init success(0x%x)" ,gpio_res->dev_name,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1158 if (camera_flash != INVALID_GPIO) {
\r
1159 ret = gpio_request(camera_flash, "camera flash");
\r
1161 io_requested_in_camera = false;
\r
1162 for (i=0; i<RK_CAM_NUM; i++) {
\r
1163 io_res = &rk_camera_platform_data.gpio_res[i];
\r
1164 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1165 if (io_res->gpio_powerdown == camera_powerdown)
\r
1166 io_requested_in_camera = true;
\r
1170 if (io_requested_in_camera==false) {
\r
1172 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1173 io_res = &new_camera[i].io;
\r
1174 if (io_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1175 if (io_res->gpio_powerdown == camera_powerdown)
\r
1176 io_requested_in_camera = true;
\r
1182 ret = 0; //ddl@rock-chips.com : flash is only a function, sensor is also run;
\r
1183 if (io_requested_in_camera==false) {
\r
1184 eprintk("%s flash pin(%d) init failed",gpio_res->dev_name,camera_flash);
\r
1185 goto _rk_sensor_io_init_end_;
\r
1189 if (rk_camera_platform_data.iomux(camera_flash) < 0) {
\r
1190 printk("%s flash pin(%d) iomux init failed\n",gpio_res->dev_name,camera_flash);
\r
1193 gpio_res->gpio_init |= RK29_CAM_FLASHACTIVE_MASK;
\r
1194 gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); /* falsh off */
\r
1195 gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1197 dprintk("%s flash pin(%d) init success(0x%x)",gpio_res->dev_name, camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
1200 _rk_sensor_io_init_end_:
\r
1205 static int _rk_sensor_io_deinit_(struct rk29camera_gpio_res *gpio_res)
\r
1207 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
\r
1208 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
\r
1210 camera_reset = gpio_res->gpio_reset;
\r
1211 camera_power = gpio_res->gpio_power;
\r
1212 camera_powerdown = gpio_res->gpio_powerdown;
\r
1213 camera_flash = gpio_res->gpio_flash;
\r
1215 if (gpio_res->gpio_init & RK29_CAM_POWERACTIVE_MASK) {
\r
1216 if (camera_power != INVALID_GPIO) {
\r
1217 gpio_direction_input(camera_power);
\r
1218 gpio_free(camera_power);
\r
1222 if (gpio_res->gpio_init & RK29_CAM_RESETACTIVE_MASK) {
\r
1223 if (camera_reset != INVALID_GPIO) {
\r
1224 gpio_direction_input(camera_reset);
\r
1225 gpio_free(camera_reset);
\r
1229 if (gpio_res->gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
1230 if (camera_powerdown != INVALID_GPIO) {
\r
1231 gpio_direction_input(camera_powerdown);
\r
1232 gpio_free(camera_powerdown);
\r
1236 if (gpio_res->gpio_init & RK29_CAM_FLASHACTIVE_MASK) {
\r
1237 if (camera_flash != INVALID_GPIO) {
\r
1238 gpio_direction_input(camera_flash);
\r
1239 gpio_free(camera_flash);
\r
1242 gpio_res->gpio_init = 0;
\r
1247 static int rk_sensor_io_init(void)
\r
1250 static bool is_init = false;
\r
1251 struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
\r
1259 if (sensor_ioctl_cb.sensor_power_cb == NULL)
\r
1260 sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;
\r
1261 if (sensor_ioctl_cb.sensor_reset_cb == NULL)
\r
1262 sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;
\r
1263 if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)
\r
1264 sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;
\r
1265 if (sensor_ioctl_cb.sensor_flash_cb == NULL)
\r
1266 sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;
\r
1268 for(i = 0;i < RK_CAM_NUM; i++) {
\r
1269 if (plat_data->gpio_res[i].dev_name == NULL)
\r
1272 if (_rk_sensor_io_init_(&plat_data->gpio_res[i])<0)
\r
1273 goto sensor_io_init_erro;
\r
1275 for (j=0; j<10; j++) {
\r
1276 memset(&plat_data->info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));
\r
1279 plat_data->info[i].fival[j].width = 176;
\r
1280 plat_data->info[i].fival[j].height = 144;
\r
1281 } else if (j==1) {
\r
1282 plat_data->info[i].fival[j].width = 320;
\r
1283 plat_data->info[i].fival[j].height = 240;
\r
1284 } else if (j==2) {
\r
1285 plat_data->info[i].fival[j].width = 352;
\r
1286 plat_data->info[i].fival[j].height = 288;
\r
1287 } else if (j==3) {
\r
1288 plat_data->info[i].fival[j].width = 640;
\r
1289 plat_data->info[i].fival[j].height = 480;
\r
1290 } else if (j==4) {
\r
1291 plat_data->info[i].fival[j].width = 720;
\r
1292 plat_data->info[i].fival[j].height = 480;
\r
1293 } else if (j==5) {
\r
1294 plat_data->info[i].fival[j].width = 1280;
\r
1295 plat_data->info[i].fival[j].height = 720;
\r
1296 } else if (j==6) {
\r
1297 plat_data->info[i].fival[j].width = 240;
\r
1298 plat_data->info[i].fival[j].height = 160;
\r
1299 } else if (j==7) {
\r
1300 plat_data->info[i].fival[j].width = 800;
\r
1301 plat_data->info[i].fival[j].height = 600;
\r
1303 if (plat_data->info[i].fival[j].width && plat_data->info[i].fival[j].height) {
\r
1304 rk29_sensor_fps_get(i,&plat_data->info[i].fival[j].discrete.denominator,
\r
1305 plat_data->info[i].fival[j].width,plat_data->info[i].fival[j].height);
\r
1306 plat_data->info[i].fival[j].discrete.numerator= 1000;
\r
1307 plat_data->info[i].fival[j].index = 0;
\r
1308 plat_data->info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
\r
1309 plat_data->info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
\r
1314 sensor_io_init_erro:
\r
1315 _rk_sensor_io_deinit_(&plat_data->gpio_res[i]);
\r
1319 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1320 if (_rk_sensor_io_init_(&new_camera[i].io)<0)
\r
1321 _rk_sensor_io_deinit_(&new_camera[i].io);
\r
1328 static int rk_sensor_io_deinit(int sensor)
\r
1331 struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
\r
1333 for(i = 0;i < RK_CAM_NUM; i++) {
\r
1334 if (plat_data->gpio_res[i].dev_name == NULL)
\r
1337 _rk_sensor_io_deinit_(&plat_data->gpio_res[i]);
\r
1341 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1342 _rk_sensor_io_deinit_(&new_camera[i].io);
\r
1349 static int rk_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
\r
1351 struct rk29camera_gpio_res *res = NULL;
\r
1352 struct rkcamera_platform_data *new_cam_dev = NULL;
\r
1353 struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
\r
1354 int ret = RK29_CAM_IO_SUCCESS,i = 0;
\r
1355 struct soc_camera_link *dev_icl = NULL;
\r
1358 for(i = 0;i < RK_CAM_NUM;i++){
\r
1359 if(plat_data->gpio_res[i].dev_name && (strcmp(plat_data->gpio_res[i].dev_name, dev_name(dev)) == 0)) {
\r
1360 res = (struct rk29camera_gpio_res *)&plat_data->gpio_res[i];
\r
1361 dev_icl = &plat_data->register_dev[i].link_info;
\r
1366 if (res == NULL) {
\r
1368 while (strstr(new_camera[i].dev_name,"end")==NULL) {
\r
1369 if (strcmp(new_camera[i].dev_name, dev_name(dev)) == 0) {
\r
1370 res = (struct rk29camera_gpio_res *)&new_camera[i].io;
\r
1371 new_cam_dev = &new_camera[i];
\r
1372 dev_icl = &new_camera[i].dev.link_info;
\r
1379 if (res == NULL) {
\r
1380 eprintk("%s is not regisiterd in rk29_camera_platform_data!!",dev_name(dev));
\r
1381 ret = RK29_CAM_EIO_INVALID;
\r
1382 goto rk_sensor_ioctrl_end;
\r
1389 if (sensor_ioctl_cb.sensor_power_cb) {
\r
1390 ret = sensor_ioctl_cb.sensor_power_cb(res, on);
\r
1392 eprintk("sensor_ioctl_cb.sensor_power_cb is NULL");
\r
1399 if (sensor_ioctl_cb.sensor_reset_cb) {
\r
1400 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);
\r
1402 ret = (ret != RK29_CAM_EIO_INVALID)?ret:0;
\r
1404 eprintk( "sensor_ioctl_cb.sensor_reset_cb is NULL");
\r
1410 case Cam_PowerDown:
\r
1412 if (sensor_ioctl_cb.sensor_powerdown_cb) {
\r
1413 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);
\r
1415 eprintk( "sensor_ioctl_cb.sensor_powerdown_cb is NULL");
\r
1423 if (sensor_ioctl_cb.sensor_flash_cb) {
\r
1424 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);
\r
1426 eprintk( "sensor_ioctl_cb.sensor_flash_cb is NULL!");
\r
1434 if (plat_data->sensor_mclk && dev_icl) {
\r
1435 plat_data->sensor_mclk(dev_icl->bus_id,(on!=0)?1:0,on);
\r
1437 eprintk( "%s(%d): sensor_mclk(%p) or dev_icl(%p) is NULL",
\r
1438 __FUNCTION__,__LINE__,plat_data->sensor_mclk,dev_icl);
\r
1445 eprintk("%s cmd(0x%x) is unknown!",__FUNCTION__, cmd);
\r
1449 rk_sensor_ioctrl_end:
\r
1453 static int rk_sensor_pwrseq(struct device *dev,int powerup_sequence, int on, int mclk_rate)
\r
1456 int i,powerup_type;
\r
1458 for (i=0; i<8; i++) {
\r
1461 powerup_type = SENSOR_PWRSEQ_GET(powerup_sequence,i);
\r
1463 powerup_type = SENSOR_PWRSEQ_GET(powerup_sequence,(7-i));
\r
1465 switch (powerup_type)
\r
1467 case SENSOR_PWRSEQ_AVDD:
\r
1468 case SENSOR_PWRSEQ_DOVDD:
\r
1469 case SENSOR_PWRSEQ_DVDD:
\r
1470 case SENSOR_PWRSEQ_PWR:
\r
1472 ret = rk_sensor_ioctrl(dev,Cam_Power, on);
\r
1474 eprintk("SENSOR_PWRSEQ_PWR failed");
\r
1477 dprintk("SensorPwrSeq-power: %d",on);
\r
1482 case SENSOR_PWRSEQ_HWRST:
\r
1484 ret = rk_sensor_ioctrl(dev,Cam_Reset, 1);
\r
1486 ret |= rk_sensor_ioctrl(dev,Cam_Reset, 0);
\r
1488 eprintk("SENSOR_PWRSEQ_HWRST failed");
\r
1490 dprintk("SensorPwrSeq-reset: %d",on);
\r
1495 case SENSOR_PWRSEQ_PWRDN:
\r
1497 ret = rk_sensor_ioctrl(dev,Cam_PowerDown, !on);
\r
1499 eprintk("SENSOR_PWRSEQ_PWRDN failed");
\r
1501 dprintk("SensorPwrSeq-power down: %d",!on);
\r
1506 case SENSOR_PWRSEQ_CLKIN:
\r
1508 ret = rk_sensor_ioctrl(dev,Cam_Mclk, (on?mclk_rate:on));
\r
1510 eprintk("SENSOR_PWRSEQ_CLKIN failed");
\r
1512 dprintk("SensorPwrSeq-clock: %d",on);
\r
1526 static int rk_sensor_power(struct device *dev, int on)
\r
1528 int i, powerup_sequence,mclk_rate;
\r
1530 struct rk29camera_platform_data* plat_data = &rk_camera_platform_data;
\r
1531 struct rk29camera_gpio_res *dev_io = NULL;
\r
1532 struct rkcamera_platform_data *new_camera=NULL, *new_device=NULL;
\r
1533 bool real_pwroff = true;
\r
1536 //ddl@rock-chips.com: other sensor must switch into standby before turn on power;
\r
1537 for(i = 0;i < RK_CAM_NUM; i++) {
\r
1538 if (plat_data->gpio_res[i].dev_name == NULL)
\r
1541 if (plat_data->gpio_res[i].gpio_powerdown != INVALID_GPIO) {
\r
1542 gpio_direction_output(plat_data->gpio_res[i].gpio_powerdown,
\r
1543 ((plat_data->gpio_res[i].gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1546 if (strcmp(plat_data->gpio_res[i].dev_name,dev_name(dev))) {
\r
1547 if (sensor_ioctl_cb.sensor_powerdown_cb && on)
\r
1548 sensor_ioctl_cb.sensor_powerdown_cb(&plat_data->gpio_res[i],1);
\r
1550 dev_io = &plat_data->gpio_res[i];
\r
1551 real_pwroff = true;
\r
1555 new_camera = plat_data->register_dev_new;
\r
1556 while (strstr(new_camera->dev_name,"end")==NULL) {
\r
1558 if (new_camera->io.gpio_powerdown != INVALID_GPIO) {
\r
1559 gpio_direction_output(new_camera->io.gpio_powerdown,
\r
1560 ((new_camera->io.gpio_flag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
1563 if (strcmp(new_camera->dev_name,dev_name(dev))) {
\r
1564 if (sensor_ioctl_cb.sensor_powerdown_cb && on)
\r
1565 sensor_ioctl_cb.sensor_powerdown_cb(&new_camera->io,1);
\r
1567 new_device = new_camera;
\r
1568 dev_io = &new_camera->io;
\r
1570 if (!Sensor_Support_DirectResume(new_camera->pwdn_info))
\r
1571 real_pwroff = true;
\r
1573 real_pwroff = false;
\r
1578 if (new_device != NULL) {
\r
1579 powerup_sequence = new_device->powerup_sequence;
\r
1580 if ((new_device->mclk_rate == 24) || (new_device->mclk_rate == 48))
\r
1581 mclk_rate = new_device->mclk_rate*1000000;
\r
1583 mclk_rate = 24000000;
\r
1585 powerup_sequence = sensor_PWRSEQ_DEFAULT;
\r
1586 mclk_rate = 24000000;
\r
1590 rk_sensor_pwrseq(dev, powerup_sequence, on,mclk_rate);
\r
1592 if (real_pwroff) {
\r
1593 rk_sensor_pwrseq(dev, powerup_sequence, on,mclk_rate);
\r
1595 /*ddl@rock-chips.com: all power down switch to Hi-Z after power off*/
\r
1596 for(i = 0;i < RK_CAM_NUM; i++) {
\r
1597 if (plat_data->gpio_res[i].dev_name == NULL)
\r
1599 if (plat_data->gpio_res[i].gpio_powerdown != INVALID_GPIO) {
\r
1600 gpio_direction_input(plat_data->gpio_res[i].gpio_powerdown);
\r
1604 new_camera = plat_data->register_dev_new;
\r
1605 while (strstr(new_camera->dev_name,"end")==NULL) {
\r
1606 if (new_camera->io.gpio_powerdown != INVALID_GPIO) {
\r
1607 gpio_direction_input(new_camera->io.gpio_powerdown);
\r
1609 new_camera->pwdn_info |= 0x01;
\r
1613 rk_sensor_ioctrl(dev,Cam_PowerDown, !on);
\r
1615 rk_sensor_ioctrl(dev,Cam_Mclk, 0);
\r
1623 static int rk_sensor_reset(struct device *dev)
\r
1626 rk_sensor_ioctrl(dev,Cam_Reset,1);
\r
1628 rk_sensor_ioctrl(dev,Cam_Reset,0);
\r
1631 *ddl@rock-chips.com : the rest function invalidate, because this operate is put together in rk_sensor_power;
\r
1637 static int rk_sensor_powerdown(struct device *dev, int on)
\r
1639 return rk_sensor_ioctrl(dev,Cam_PowerDown,on);
\r
1641 #if ((defined PMEM_CAM_NECESSARY)&&(defined CONFIG_VIDEO_RK29_CAMMEM_PMEM))
\r
1642 static struct android_pmem_platform_data android_pmem_cam_pdata = {
\r
1643 .name = "pmem_cam",
\r
1644 .start = PMEM_CAM_BASE,
\r
1645 .size = PMEM_CAM_SIZE,
\r
1646 .no_allocator = 1,
\r
1650 static struct platform_device android_pmem_cam_device = {
\r
1651 .name = "android_pmem",
\r
1654 .platform_data = &android_pmem_cam_pdata,
\r
1658 #ifdef CONFIG_RK_CONFIG
\r
1659 int camera_set_platform_param(int id, int i2c, int gpio)
\r
1662 char *dev_name[] = {
\r
1663 SENSOR_DEVICE_NAME_0,
\r
1664 SENSOR_DEVICE_NAME_01,
\r
1665 SENSOR_DEVICE_NAME_02,
\r
1666 SENSOR_DEVICE_NAME_1,
\r
1667 SENSOR_DEVICE_NAME_11,
\r
1668 SENSOR_DEVICE_NAME_12
\r
1670 char *module_name[] = {
\r
1679 if(id < 0 || id >= 6)
\r
1681 for(i = 0; i < 6; i++){
\r
1683 printk("%s: id = %d, i2c = %d, gpio = %d\n", __func__, id, i2c, gpio);
\r
1685 if(rk_camera_platform_data.gpio_res[i].dev_name &&
\r
1686 strcmp(rk_camera_platform_data.gpio_res[i].dev_name, dev_name[id]) == 0)
\r
1687 rk_camera_platform_data.gpio_res[i].gpio_powerdown = gpio;
\r
1688 if(rk_camera_platform_data.register_dev[i].link_info.module_name &&
\r
1689 strcmp(rk_camera_platform_data.register_dev[i].link_info.module_name, module_name[id]) == 0)
\r
1690 rk_camera_platform_data.register_dev[i].link_info.i2c_adapter_id = i2c;
\r
1696 int camera_set_platform_param(int id, int i2c, int gpio)
\r
1702 int rk_sensor_register(void)
\r
1707 while (strstr(new_camera[i].dev.device_info.dev.init_name,"end")==NULL) {
\r
1709 if (new_camera[i].dev.i2c_cam_info.addr == INVALID_VALUE) {
\r
1711 KERN_ERR "%s(%d): new_camera[%d] i2c addr is invalidate!",
\r
1712 __FUNCTION__,__LINE__,i);
\r
1716 sprintf(new_camera[i].dev_name,"%s_%d",new_camera[i].dev.device_info.dev.init_name,i+3);
\r
1717 new_camera[i].dev.device_info.dev.init_name =(const char*)&new_camera[i].dev_name[0];
\r
1718 new_camera[i].io.dev_name =(const char*)&new_camera[i].dev_name[0];
\r
1720 if (new_camera[i].orientation == INVALID_VALUE) {
\r
1721 if (strstr(new_camera[i].dev_name,"back")) {
\r
1722 new_camera[i].orientation = 90;
\r
1724 new_camera[i].orientation = 270;
\r
1728 new_camera[i].dev.link_info.power = rk_sensor_power;
\r
1729 new_camera[i].dev.link_info.powerdown = rk_sensor_powerdown;
\r
1731 new_camera[i].dev.link_info.board_info =&new_camera[i].dev.i2c_cam_info;
\r
1732 new_camera[i].dev.device_info.id = i+6;
\r
1733 new_camera[i].dev.device_info.dev.platform_data = &new_camera[i].dev.link_info;
\r
1735 if (new_camera[i].flash == true) {
\r
1736 if (CONFIG_SENSOR_FLASH_IOCTL_USR == 0) {
\r
1737 eprintk("new_camera[%d] have been configed as attach flash, but CONFIG_SENSOR_FLASH_IOCTL_USR isn't turn on!",i);
\r
1739 new_camera[i].flash = false;
\r
1743 new_camera[i].dev.link_info.priv_usr = &rk_camera_platform_data;
\r
1744 platform_device_register(&new_camera[i].dev.device_info);
\r
1748 sprintf(new_camera[i].dev_name,"%s",new_camera[i].dev.device_info.dev.init_name);
\r