1 #include <mach/rk29_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
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 #elif (PMEM_CAM_FULL_RESOLUTION == 0x300000)
\r
43 #define PMEM_CAM_NECESSARY 0xe00000 /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */
\r
44 #elif (PMEM_CAM_FULL_RESOLUTION == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */
\r
45 #define PMEM_CAM_NECESSARY 0xc00000
\r
46 #elif ((PMEM_CAM_FULL_RESOLUTION == 0x100000) || (PMEM_CAM_FULL_RESOLUTION == 0x130000))
\r
47 #define PMEM_CAM_NECESSARY 0x800000 /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */
\r
48 #elif (PMEM_CAM_FULL_RESOLUTION == 0x30000)
\r
49 #define PMEM_CAM_NECESSARY 0x400000 /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */
\r
51 #define PMEM_CAM_NECESSARY 0x1200000
\r
53 /*---------------- Camera Sensor Fixed Macro End ------------------------*/
\r
54 #else //#ifdef CONFIG_VIDEO_RK29
\r
55 #define PMEM_CAM_NECESSARY 0x00000000
\r
57 #else // #ifdef PMEM_CAM_SIZE
\r
59 /*****************************************************************************************
\r
61 * author: ddl@rock-chips.com
\r
62 *****************************************************************************************/
\r
63 #ifdef CONFIG_VIDEO_RK29
\r
64 static int camera_debug;
\r
65 module_param(camera_debug, int, S_IRUGO|S_IWUSR);
\r
67 #define ddprintk(level, fmt, arg...) do { \
\r
68 if (camera_debug >= level) \
\r
69 printk(KERN_WARNING"rk29_cam_io: " fmt , ## arg); } while (0)
\r
71 #define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__)
\r
73 #define SENSOR_NAME_0 STR(CONFIG_SENSOR_0) /* back camera sensor */
\r
74 #define SENSOR_NAME_1 STR(CONFIG_SENSOR_1) /* front camera sensor */
\r
75 #define SENSOR_DEVICE_NAME_0 STR(CONS(CONFIG_SENSOR_0, _back))
\r
76 #define SENSOR_DEVICE_NAME_1 STR(CONS(CONFIG_SENSOR_1, _front))
\r
78 static int rk29_sensor_io_init(void);
\r
79 static int rk29_sensor_io_deinit(int sensor);
\r
80 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);
\r
82 static struct rk29camera_platform_data rk29_camera_platform_data = {
\r
83 .io_init = rk29_sensor_io_init,
\r
84 .io_deinit = rk29_sensor_io_deinit,
\r
85 .sensor_ioctrl = rk29_sensor_ioctrl,
\r
88 .gpio_reset = CONFIG_SENSOR_RESET_PIN_0,
\r
89 .gpio_power = CONFIG_SENSOR_POWER_PIN_0,
\r
90 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_0,
\r
91 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_0,
\r
92 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_0|CONFIG_SENSOR_RESETACTIVE_LEVEL_0|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0|CONFIG_SENSOR_FLASHACTIVE_LEVEL_0),
\r
94 .dev_name = SENSOR_DEVICE_NAME_0,
\r
96 .gpio_reset = CONFIG_SENSOR_RESET_PIN_1,
\r
97 .gpio_power = CONFIG_SENSOR_POWER_PIN_1,
\r
98 .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1,
\r
99 .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1,
\r
100 .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1),
\r
102 .dev_name = SENSOR_DEVICE_NAME_1,
\r
105 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
\r
107 .name = "camera_ipp_mem",
\r
108 .start = MEM_CAMIPP_BASE,
\r
109 .size = MEM_CAMIPP_SIZE,
\r
116 static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)
\r
118 int camera_power = res->gpio_power;
\r
119 int camera_ioflag = res->gpio_flag;
\r
120 int camera_io_init = res->gpio_init;
\r
123 if (camera_power != INVALID_GPIO) {
\r
124 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
\r
126 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
127 dprintk("\n%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
130 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
131 dprintk("\n%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
134 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
135 printk("\n%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);
\r
138 ret = RK29_CAM_EIO_INVALID;
\r
144 static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)
\r
146 int camera_reset = res->gpio_reset;
\r
147 int camera_ioflag = res->gpio_flag;
\r
148 int camera_io_init = res->gpio_init;
\r
151 if (camera_reset != INVALID_GPIO) {
\r
152 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
\r
154 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
155 dprintk("\n%s..%s..ResetPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
157 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
158 dprintk("\n%s..%s..ResetPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
161 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
162 printk("\n%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);
\r
165 ret = RK29_CAM_EIO_INVALID;
\r
171 static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)
\r
173 int camera_powerdown = res->gpio_powerdown;
\r
174 int camera_ioflag = res->gpio_flag;
\r
175 int camera_io_init = res->gpio_init;
\r
178 if (camera_powerdown != INVALID_GPIO) {
\r
179 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
181 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
182 dprintk("\n%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
184 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
185 dprintk("\n%s..%s..PowerDownPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
188 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
189 dprintk("\n%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);
\r
192 ret = RK29_CAM_EIO_INVALID;
\r
198 static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
\r
200 int camera_flash = res->gpio_flash;
\r
201 int camera_ioflag = res->gpio_flag;
\r
202 int camera_io_init = res->gpio_init;
\r
205 if (camera_flash != INVALID_GPIO) {
\r
206 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
\r
211 gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
212 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
218 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
219 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
225 gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
226 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
232 printk("\n%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);
\r
237 ret = RK29_CAM_EIO_REQUESTFAIL;
\r
238 printk("\n%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);
\r
241 ret = RK29_CAM_EIO_INVALID;
\r
247 static int rk29_sensor_io_init(void)
\r
250 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
\r
251 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
\r
252 unsigned int camera_ioflag;
\r
254 if (sensor_ioctl_cb.sensor_power_cb == NULL)
\r
255 sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;
\r
256 if (sensor_ioctl_cb.sensor_reset_cb == NULL)
\r
257 sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;
\r
258 if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)
\r
259 sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;
\r
260 if (sensor_ioctl_cb.sensor_flash_cb == NULL)
\r
261 sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;
\r
263 for (i=0; i<2; i++) {
\r
264 camera_reset = rk29_camera_platform_data.gpio_res[i].gpio_reset;
\r
265 camera_power = rk29_camera_platform_data.gpio_res[i].gpio_power;
\r
266 camera_powerdown = rk29_camera_platform_data.gpio_res[i].gpio_powerdown;
\r
267 camera_flash = rk29_camera_platform_data.gpio_res[i].gpio_flash;
\r
268 camera_ioflag = rk29_camera_platform_data.gpio_res[i].gpio_flag;
\r
269 rk29_camera_platform_data.gpio_res[i].gpio_init = 0;
\r
271 if (camera_power != INVALID_GPIO) {
\r
272 ret = gpio_request(camera_power, "camera power");
\r
275 goto sensor_io_int_loop_end;
\r
277 if (camera_power != rk29_camera_platform_data.gpio_res[0].gpio_power)
\r
278 goto sensor_io_int_loop_end;
\r
282 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERACTIVE_MASK;
\r
283 gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
284 gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
286 printk("\n%s....power pin(%d) init success(0x%x) \n",__FUNCTION__,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
\r
290 if (camera_reset != INVALID_GPIO) {
\r
291 ret = gpio_request(camera_reset, "camera reset");
\r
293 goto sensor_io_int_loop_end;
\r
294 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_RESETACTIVE_MASK;
\r
295 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
296 gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
298 dprintk("\n%s....reset pin(%d) init success(0x%x)\n",__FUNCTION__,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
\r
302 if (camera_powerdown != INVALID_GPIO) {
\r
303 ret = gpio_request(camera_powerdown, "camera powerdown");
\r
305 goto sensor_io_int_loop_end;
\r
306 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;
\r
307 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
308 gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
310 printk("\n%s....powerdown pin(%d) init success(0x%x) \n",__FUNCTION__,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));
\r
314 if (camera_flash != INVALID_GPIO) {
\r
315 ret = gpio_request(camera_flash, "camera flash");
\r
317 goto sensor_io_int_loop_end;
\r
318 rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_FLASHACTIVE_MASK;
\r
319 gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); /* falsh off */
\r
320 gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
322 dprintk("\n%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
\r
326 sensor_io_int_loop_end:
\r
327 rk29_sensor_io_deinit(i);
\r
334 static int rk29_sensor_io_deinit(int sensor)
\r
336 unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
\r
337 unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
\r
339 camera_reset = rk29_camera_platform_data.gpio_res[sensor].gpio_reset;
\r
340 camera_power = rk29_camera_platform_data.gpio_res[sensor].gpio_power;
\r
341 camera_powerdown = rk29_camera_platform_data.gpio_res[sensor].gpio_powerdown;
\r
342 camera_flash = rk29_camera_platform_data.gpio_res[sensor].gpio_flash;
\r
344 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERACTIVE_MASK) {
\r
345 if (camera_power != INVALID_GPIO) {
\r
346 gpio_direction_input(camera_power);
\r
347 gpio_free(camera_power);
\r
351 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_RESETACTIVE_MASK) {
\r
352 if (camera_reset != INVALID_GPIO) {
\r
353 gpio_direction_input(camera_reset);
\r
354 gpio_free(camera_reset);
\r
358 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
\r
359 if (camera_powerdown != INVALID_GPIO) {
\r
360 gpio_direction_input(camera_powerdown);
\r
361 gpio_free(camera_powerdown);
\r
365 if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_FLASHACTIVE_MASK) {
\r
366 if (camera_flash != INVALID_GPIO) {
\r
367 gpio_direction_input(camera_flash);
\r
368 gpio_free(camera_flash);
\r
372 rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;
\r
375 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
\r
377 struct rk29camera_gpio_res *res = NULL;
\r
378 int ret = RK29_CAM_IO_SUCCESS;
\r
380 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
381 res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[0];
\r
382 } 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
383 res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[1];
\r
385 printk(KERN_ERR "%s is not regisiterd in rk29_camera_platform_data!!\n",dev_name(dev));
\r
386 ret = RK29_CAM_EIO_INVALID;
\r
387 goto rk29_sensor_ioctrl_end;
\r
394 if (sensor_ioctl_cb.sensor_power_cb) {
\r
395 ret = sensor_ioctl_cb.sensor_power_cb(res, on);
\r
397 printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");
\r
404 if (sensor_ioctl_cb.sensor_reset_cb) {
\r
405 ret = sensor_ioctl_cb.sensor_reset_cb(res, on);
\r
407 printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");
\r
413 case Cam_PowerDown:
\r
415 if (sensor_ioctl_cb.sensor_powerdown_cb) {
\r
416 ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);
\r
418 printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");
\r
426 if (sensor_ioctl_cb.sensor_flash_cb) {
\r
427 ret = sensor_ioctl_cb.sensor_flash_cb(res, on);
\r
429 printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");
\r
437 printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);
\r
441 rk29_sensor_ioctrl_end:
\r
444 static int rk29_sensor_power(struct device *dev, int on)
\r
446 rk29_sensor_ioctrl(dev,Cam_Power,on);
\r
450 static int rk29_sensor_reset(struct device *dev)
\r
452 rk29_sensor_ioctrl(dev,Cam_Reset,1);
\r
454 rk29_sensor_ioctrl(dev,Cam_Reset,0);
\r
458 static int rk29_sensor_powerdown(struct device *dev, int on)
\r
460 return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);
\r
462 #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)
\r
463 static struct i2c_board_info rk29_i2c_cam_info_0[] = {
\r
465 I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1)
\r
469 static struct soc_camera_link rk29_iclink_0 = {
\r
470 .bus_id = RK29_CAM_PLATFORM_DEV_ID,
\r
471 .power = rk29_sensor_power,
\r
472 .powerdown = rk29_sensor_powerdown,
\r
473 .board_info = &rk29_i2c_cam_info_0[0],
\r
474 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,
\r
475 .module_name = SENSOR_NAME_0,
\r
478 /*platform_device : soc-camera need */
\r
479 static struct platform_device rk29_soc_camera_pdrv_0 = {
\r
480 .name = "soc-camera-pdrv",
\r
483 .init_name = SENSOR_DEVICE_NAME_0,
\r
484 .platform_data = &rk29_iclink_0,
\r
488 static struct i2c_board_info rk29_i2c_cam_info_1[] = {
\r
490 I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1)
\r
494 static struct soc_camera_link rk29_iclink_1 = {
\r
495 .bus_id = RK29_CAM_PLATFORM_DEV_ID,
\r
496 .power = rk29_sensor_power,
\r
497 .powerdown = rk29_sensor_powerdown,
\r
498 .board_info = &rk29_i2c_cam_info_1[0],
\r
499 .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,
\r
500 .module_name = SENSOR_NAME_1,
\r
503 /*platform_device : soc-camera need */
\r
504 static struct platform_device rk29_soc_camera_pdrv_1 = {
\r
505 .name = "soc-camera-pdrv",
\r
508 .init_name = SENSOR_DEVICE_NAME_1,
\r
509 .platform_data = &rk29_iclink_1,
\r
514 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
\r
515 static struct resource rk29_camera_resource[] = {
\r
517 .start = RK29_VIP_PHYS,
\r
518 .end = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,
\r
519 .flags = IORESOURCE_MEM,
\r
524 .flags = IORESOURCE_IRQ,
\r
528 /*platform_device : */
\r
529 static struct platform_device rk29_device_camera = {
\r
530 .name = RK29_CAM_DRV_NAME,
\r
531 .id = RK29_CAM_PLATFORM_DEV_ID, /* This is used to put cameras on this interface */
\r
532 .num_resources = ARRAY_SIZE(rk29_camera_resource),
\r
533 .resource = rk29_camera_resource,
\r
535 .dma_mask = &rockchip_device_camera_dmamask,
\r
536 .coherent_dma_mask = 0xffffffffUL,
\r
537 .platform_data = &rk29_camera_platform_data,
\r
541 static struct android_pmem_platform_data android_pmem_cam_pdata = {
\r
542 .name = "pmem_cam",
\r
543 .start = PMEM_CAM_BASE,
\r
544 .size = PMEM_CAM_SIZE,
\r
549 static struct platform_device android_pmem_cam_device = {
\r
550 .name = "android_pmem",
\r
553 .platform_data = &android_pmem_cam_pdata,
\r
559 #endif //#ifdef CONFIG_VIDEO_RK29