#include <mach/rk29_camera.h> \r
#include <mach/iomux.h>\r
-#ifndef PMEM_CAM_SIZE\r
-#ifdef CONFIG_VIDEO_RK29 \r
-/*---------------- Camera Sensor Fixed Macro Begin ------------------------*/\r
-// Below Macro is fixed, programer don't change it!!!!!!\r
-#define _CONS(a,b) a##b\r
-#define CONS(a,b) _CONS(a,b)\r
-\r
-#define __STR(x) #x\r
-#define _STR(x) __STR(x)\r
-#define STR(x) _STR(x)\r
-\r
-#if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
-#define PMEM_SENSOR_FULL_RESOLUTION_0 CONS(CONFIG_SENSOR_0,_FULL_RESOLUTION)\r
-#if !(PMEM_SENSOR_FULL_RESOLUTION_0)\r
-#undef PMEM_SENSOR_FULL_RESOLUTION_0\r
-#define PMEM_SENSOR_FULL_RESOLUTION_0 0x500000\r
-#endif\r
-#else\r
-#define PMEM_SENSOR_FULL_RESOLUTION_0 0x00\r
-#endif\r
- \r
-#if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
-#define PMEM_SENSOR_FULL_RESOLUTION_1 CONS(CONFIG_SENSOR_1,_FULL_RESOLUTION)\r
-#if !(PMEM_SENSOR_FULL_RESOLUTION_1)\r
-#undef PMEM_SENSOR_FULL_RESOLUTION_1\r
-#define PMEM_SENSOR_FULL_RESOLUTION_1 0x500000\r
-#endif\r
-#else\r
-#define PMEM_SENSOR_FULL_RESOLUTION_1 0x00\r
-#endif\r
\r
-#if (PMEM_SENSOR_FULL_RESOLUTION_0 > PMEM_SENSOR_FULL_RESOLUTION_1)\r
-#define PMEM_CAM_FULL_RESOLUTION PMEM_SENSOR_FULL_RESOLUTION_0\r
-#else\r
-#define PMEM_CAM_FULL_RESOLUTION PMEM_SENSOR_FULL_RESOLUTION_1\r
-#endif\r
-\r
-#if (PMEM_CAM_FULL_RESOLUTION == 0x500000)\r
-#define PMEM_CAM_NECESSARY 0x1400000 /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY 0x800000\r
-#elif (PMEM_CAM_FULL_RESOLUTION == 0x300000)\r
-#define PMEM_CAM_NECESSARY 0xe00000 /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY 0x500000\r
-#elif (PMEM_CAM_FULL_RESOLUTION == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
-#define PMEM_CAM_NECESSARY 0xc00000\r
-#define PMEM_CAMIPP_NECESSARY 0x400000\r
-#elif ((PMEM_CAM_FULL_RESOLUTION == 0x100000) || (PMEM_CAM_FULL_RESOLUTION == 0x130000))\r
-#define PMEM_CAM_NECESSARY 0x800000 /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY 0x400000\r
-#elif (PMEM_CAM_FULL_RESOLUTION == 0x30000)\r
-#define PMEM_CAM_NECESSARY 0x400000 /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY 0x400000\r
+#ifndef PMEM_CAM_SIZE\r
+#include "../../../arch/arm/plat-rk/rk_camera.c"\r
#else\r
-#define PMEM_CAM_NECESSARY 0x1200000\r
-#define PMEM_CAMIPP_NECESSARY 0x800000\r
-#endif\r
-/*---------------- Camera Sensor Fixed Macro End ------------------------*/\r
-#else //#ifdef CONFIG_VIDEO_RK29 \r
-#define PMEM_CAM_NECESSARY 0x00000000\r
-#endif\r
-#else // #ifdef PMEM_CAM_SIZE\r
\r
/*****************************************************************************************\r
* camera devices\r
* author: ddl@rock-chips.com\r
*****************************************************************************************/\r
#ifdef CONFIG_VIDEO_RK29 \r
-static int camera_debug;\r
-module_param(camera_debug, int, S_IRUGO|S_IWUSR);\r
-\r
-#define ddprintk(level, fmt, arg...) do { \\r
- if (camera_debug >= level) \\r
- printk(KERN_WARNING"rk29_cam_io: " fmt , ## arg); } while (0)\r
-\r
-#define dprintk(format, ...) ddprintk(1, format, ## __VA_ARGS__) \r
-\r
-#define SENSOR_NAME_0 STR(CONFIG_SENSOR_0) /* back camera sensor */\r
-#define SENSOR_NAME_1 STR(CONFIG_SENSOR_1) /* front camera sensor */\r
-#define SENSOR_DEVICE_NAME_0 STR(CONS(CONFIG_SENSOR_0, _back))\r
-#define SENSOR_DEVICE_NAME_1 STR(CONS(CONFIG_SENSOR_1, _front))\r
-\r
-static int rk29_sensor_io_init(void);\r
-static int rk29_sensor_io_deinit(int sensor);\r
-static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);\r
-\r
-static struct rk29camera_platform_data rk29_camera_platform_data = {\r
- .io_init = rk29_sensor_io_init,\r
- .io_deinit = rk29_sensor_io_deinit,\r
- .sensor_ioctrl = rk29_sensor_ioctrl,\r
- .gpio_res = {\r
- {\r
- .gpio_reset = CONFIG_SENSOR_RESET_PIN_0,\r
- .gpio_power = CONFIG_SENSOR_POWER_PIN_0,\r
- .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_0,\r
- .gpio_flash = CONFIG_SENSOR_FALSH_PIN_0,\r
- .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_0|CONFIG_SENSOR_RESETACTIVE_LEVEL_0|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0|CONFIG_SENSOR_FLASHACTIVE_LEVEL_0),\r
- .gpio_init = 0, \r
- .dev_name = SENSOR_DEVICE_NAME_0,\r
- }, {\r
- .gpio_reset = CONFIG_SENSOR_RESET_PIN_1,\r
- .gpio_power = CONFIG_SENSOR_POWER_PIN_1,\r
- .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1,\r
- .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1,\r
- .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1),\r
- .gpio_init = 0,\r
- .dev_name = SENSOR_DEVICE_NAME_1,\r
- }\r
- },\r
- #ifdef CONFIG_VIDEO_RK29_WORK_IPP\r
- .meminfo = {\r
- .name = "camera_ipp_mem",\r
- .start = MEM_CAMIPP_BASE,\r
- .size = MEM_CAMIPP_SIZE,\r
- },\r
- #endif\r
- .info = {\r
- {\r
- .dev_name = SENSOR_DEVICE_NAME_0,\r
- .orientation = CONFIG_SENSOR_ORIENTATION_0, \r
- },{\r
- .dev_name = SENSOR_DEVICE_NAME_1,\r
- .orientation = CONFIG_SENSOR_ORIENTATION_1,\r
- }\r
- }\r
-};\r
-\r
-static int rk29_sensor_iomux(int pin)\r
+static int rk_sensor_iomux(int pin)\r
{ \r
switch (pin)\r
{\r
}\r
return 0;\r
}\r
+#include "../../../arch/arm/plat-rk/rk_camera.c"\r
\r
-static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)\r
-{\r
- int camera_power = res->gpio_power;\r
- int camera_ioflag = res->gpio_flag;\r
- int camera_io_init = res->gpio_init;\r
- int ret = 0;\r
- \r
- if (camera_power != INVALID_GPIO) {\r
- if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {\r
- if (on) {\r
- gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
- dprintk("%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
- msleep(10);\r
- } else {\r
- gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
- dprintk("%s..%s..PowerPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_REQUESTFAIL;\r
- printk("%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_power);\r
- } \r
- } else {\r
- ret = RK29_CAM_EIO_INVALID;\r
- } \r
-\r
- return ret;\r
-}\r
-\r
-static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)\r
-{\r
- int camera_reset = res->gpio_reset;\r
- int camera_ioflag = res->gpio_flag;\r
- int camera_io_init = res->gpio_init; \r
- int ret = 0;\r
- \r
- if (camera_reset != INVALID_GPIO) {\r
- if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {\r
- if (on) {\r
- gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
- dprintk("%s..%s..ResetPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
- } else {\r
- gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
- dprintk("%s..%s..ResetPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_REQUESTFAIL;\r
- printk("%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_reset);\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_INVALID;\r
- }\r
-\r
- return ret;\r
-}\r
-\r
-static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)\r
-{\r
- int camera_powerdown = res->gpio_powerdown;\r
- int camera_ioflag = res->gpio_flag;\r
- int camera_io_init = res->gpio_init; \r
- int ret = 0; \r
-\r
- if (camera_powerdown != INVALID_GPIO) {\r
- if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
- if (on) {\r
- gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
- dprintk("%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
- } else {\r
- gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
- dprintk("%s..%s..PowerDownPin= %d..PinLevel = %x \n",__FUNCTION__,res->dev_name, camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_REQUESTFAIL;\r
- dprintk("%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_powerdown);\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_INVALID;\r
- }\r
- return ret;\r
-}\r
-\r
-\r
-static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)\r
-{\r
- int camera_flash = res->gpio_flash;\r
- int camera_ioflag = res->gpio_flag;\r
- int camera_io_init = res->gpio_init; \r
- int ret = 0; \r
-\r
- if (camera_flash != INVALID_GPIO) {\r
- if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {\r
- switch (on)\r
- {\r
- case Flash_Off:\r
- {\r
- gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
- 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
- break;\r
- }\r
-\r
- case Flash_On:\r
- {\r
- gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
- dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
- break;\r
- }\r
-\r
- case Flash_Torch:\r
- {\r
- gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
- dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",__FUNCTION__,res->dev_name,camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
- break;\r
- }\r
-\r
- default:\r
- {\r
- printk("%s..%s..Flash command(%d) is invalidate \n",__FUNCTION__,res->dev_name,on);\r
- break;\r
- }\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_REQUESTFAIL;\r
- printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,camera_flash);\r
- }\r
- } else {\r
- ret = RK29_CAM_EIO_INVALID;\r
- }\r
- return ret;\r
-}\r
-\r
-\r
-static int rk29_sensor_io_init(void)\r
-{\r
- int ret = 0, i,j;\r
- unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
- unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
- unsigned int camera_ioflag;\r
-\r
- if (sensor_ioctl_cb.sensor_power_cb == NULL)\r
- sensor_ioctl_cb.sensor_power_cb = sensor_power_default_cb;\r
- if (sensor_ioctl_cb.sensor_reset_cb == NULL)\r
- sensor_ioctl_cb.sensor_reset_cb = sensor_reset_default_cb;\r
- if (sensor_ioctl_cb.sensor_powerdown_cb == NULL)\r
- sensor_ioctl_cb.sensor_powerdown_cb = sensor_powerdown_default_cb;\r
- if (sensor_ioctl_cb.sensor_flash_cb == NULL)\r
- sensor_ioctl_cb.sensor_flash_cb = sensor_flash_default_cb;\r
- \r
- for (i=0; i<2; i++) {\r
- camera_reset = rk29_camera_platform_data.gpio_res[i].gpio_reset;\r
- camera_power = rk29_camera_platform_data.gpio_res[i].gpio_power;\r
- camera_powerdown = rk29_camera_platform_data.gpio_res[i].gpio_powerdown;\r
- camera_flash = rk29_camera_platform_data.gpio_res[i].gpio_flash;\r
- camera_ioflag = rk29_camera_platform_data.gpio_res[i].gpio_flag;\r
- rk29_camera_platform_data.gpio_res[i].gpio_init = 0;\r
-\r
- if (camera_power != INVALID_GPIO) {\r
- ret = gpio_request(camera_power, "camera power");\r
- if (ret) {\r
- if (i == 0) {\r
- printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
- goto sensor_io_int_loop_end;\r
- } else {\r
- if (camera_power != rk29_camera_platform_data.gpio_res[0].gpio_power) {\r
- printk("%s..%s..power pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
- goto sensor_io_int_loop_end;\r
- }\r
- }\r
- }\r
-\r
- if (rk29_sensor_iomux(camera_power) < 0) {\r
- printk(KERN_ERR "%s..%s..power pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_power);\r
- goto sensor_io_int_loop_end;\r
- }\r
- \r
- rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERACTIVE_MASK;\r
- gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
- gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
-\r
- dprintk("%s....power pin(%d) init success(0x%x) \n",__FUNCTION__,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));\r
-\r
- }\r
-\r
- if (camera_reset != INVALID_GPIO) {\r
- ret = gpio_request(camera_reset, "camera reset");\r
- if (ret) {\r
- printk("%s..%s..reset pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);\r
- goto sensor_io_int_loop_end;\r
- }\r
-\r
- if (rk29_sensor_iomux(camera_reset) < 0) {\r
- printk(KERN_ERR "%s..%s..reset pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_reset);\r
- goto sensor_io_int_loop_end;\r
- }\r
- \r
- rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_RESETACTIVE_MASK;\r
- gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
- gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
-\r
- dprintk("%s....reset pin(%d) init success(0x%x)\n",__FUNCTION__,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));\r
-\r
- }\r
-\r
- if (camera_powerdown != INVALID_GPIO) {\r
- ret = gpio_request(camera_powerdown, "camera powerdown");\r
- if (ret) {\r
- printk("%s..%s..powerdown pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);\r
- goto sensor_io_int_loop_end;\r
- }\r
-\r
- if (rk29_sensor_iomux(camera_powerdown) < 0) {\r
- printk(KERN_ERR "%s..%s..powerdown pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_powerdown);\r
- goto sensor_io_int_loop_end;\r
- }\r
- \r
- rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;\r
- gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
- gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
-\r
- dprintk("%s....powerdown pin(%d) init success(0x%x) \n",__FUNCTION__,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));\r
-\r
- }\r
-\r
- if (camera_flash != INVALID_GPIO) {\r
- ret = gpio_request(camera_flash, "camera flash");\r
- if (ret) {\r
- printk("%s..%s..flash pin(%d) init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash);\r
- goto sensor_io_int_loop_end;\r
- }\r
-\r
- if (rk29_sensor_iomux(camera_flash) < 0) {\r
- printk(KERN_ERR "%s..%s..flash pin(%d) iomux init failed\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[i].dev_name,camera_flash); \r
- }\r
- \r
- rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_FLASHACTIVE_MASK;\r
- gpio_set_value(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); /* falsh off */\r
- gpio_direction_output(camera_flash, ((~camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
-\r
- dprintk("%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));\r
-\r
- } \r
-\r
- \r
- for (j=0; j<10; j++) {\r
- memset(&rk29_camera_platform_data.info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));\r
- }\r
- j=0;\r
- if (strstr(rk29_camera_platform_data.info[i].dev_name,"_back")) {\r
- \r
- #if CONFIG_SENSOR_QCIF_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 176;\r
- rk29_camera_platform_data.info[i].fival[j].height = 144;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_QVGA_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 320;\r
- rk29_camera_platform_data.info[i].fival[j].height = 240;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_CIF_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 352;\r
- rk29_camera_platform_data.info[i].fival[j].height = 288;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_VGA_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 640;\r
- rk29_camera_platform_data.info[i].fival[j].height = 480;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_480P_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_480P_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 720;\r
- rk29_camera_platform_data.info[i].fival[j].height = 480;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif \r
-\r
- #if CONFIG_SENSOR_SVGA_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 800;\r
- rk29_camera_platform_data.info[i].fival[j].height = 600;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_720P_FPS_FIXED_0\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_0;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 1280;\r
- rk29_camera_platform_data.info[i].fival[j].height = 720;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- } else {\r
- #if CONFIG_SENSOR_QCIF_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 176;\r
- rk29_camera_platform_data.info[i].fival[j].height = 144;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_QVGA_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 320;\r
- rk29_camera_platform_data.info[i].fival[j].height = 240;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_CIF_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 352;\r
- rk29_camera_platform_data.info[i].fival[j].height = 288;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_VGA_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 640;\r
- rk29_camera_platform_data.info[i].fival[j].height = 480;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_480P_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_480P_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 720;\r
- rk29_camera_platform_data.info[i].fival[j].height = 480;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif \r
-\r
- #if CONFIG_SENSOR_SVGA_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 800;\r
- rk29_camera_platform_data.info[i].fival[j].height = 600;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
-\r
- #if CONFIG_SENSOR_720P_FPS_FIXED_1\r
- rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_1;\r
- rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1000;\r
- rk29_camera_platform_data.info[i].fival[j].index = 0;\r
- rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;\r
- rk29_camera_platform_data.info[i].fival[j].width = 1280;\r
- rk29_camera_platform_data.info[i].fival[j].height = 720;\r
- rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;\r
- j++;\r
- #endif\r
- }\r
- \r
- continue;\r
-sensor_io_int_loop_end:\r
- rk29_sensor_io_deinit(i);\r
- continue;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int rk29_sensor_io_deinit(int sensor)\r
-{\r
- unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;\r
- unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;\r
-\r
- camera_reset = rk29_camera_platform_data.gpio_res[sensor].gpio_reset;\r
- camera_power = rk29_camera_platform_data.gpio_res[sensor].gpio_power;\r
- camera_powerdown = rk29_camera_platform_data.gpio_res[sensor].gpio_powerdown;\r
- camera_flash = rk29_camera_platform_data.gpio_res[sensor].gpio_flash;\r
-\r
- printk("%s..%s enter..\n",__FUNCTION__,rk29_camera_platform_data.gpio_res[sensor].dev_name);\r
-\r
- if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERACTIVE_MASK) {\r
- if (camera_power != INVALID_GPIO) {\r
- gpio_direction_input(camera_power);\r
- gpio_free(camera_power);\r
- }\r
- }\r
-\r
- if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_RESETACTIVE_MASK) {\r
- if (camera_reset != INVALID_GPIO) {\r
- gpio_direction_input(camera_reset);\r
- gpio_free(camera_reset);\r
- }\r
- }\r
-\r
- if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {\r
- if (camera_powerdown != INVALID_GPIO) {\r
- gpio_direction_input(camera_powerdown);\r
- gpio_free(camera_powerdown);\r
- }\r
- }\r
-\r
- if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_FLASHACTIVE_MASK) {\r
- if (camera_flash != INVALID_GPIO) {\r
- gpio_direction_input(camera_flash);\r
- gpio_free(camera_flash);\r
- }\r
- }\r
-\r
- rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;\r
- return 0;\r
-}\r
-static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)\r
-{\r
- struct rk29camera_gpio_res *res = NULL; \r
- int ret = RK29_CAM_IO_SUCCESS;\r
-\r
- 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
- res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[0];\r
- } 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
- res = (struct rk29camera_gpio_res *)&rk29_camera_platform_data.gpio_res[1];\r
- } else {\r
- printk(KERN_ERR "%s is not regisiterd in rk29_camera_platform_data!!\n",dev_name(dev));\r
- ret = RK29_CAM_EIO_INVALID;\r
- goto rk29_sensor_ioctrl_end;\r
- }\r
-\r
- switch (cmd)\r
- {\r
- case Cam_Power:\r
- {\r
- if (sensor_ioctl_cb.sensor_power_cb) {\r
- ret = sensor_ioctl_cb.sensor_power_cb(res, on);\r
- } else {\r
- printk(KERN_ERR "sensor_ioctl_cb.sensor_power_cb is NULL");\r
- WARN_ON(1);\r
- }\r
- break;\r
- }\r
- case Cam_Reset:\r
- {\r
- if (sensor_ioctl_cb.sensor_reset_cb) {\r
- ret = sensor_ioctl_cb.sensor_reset_cb(res, on);\r
- } else {\r
- printk(KERN_ERR "sensor_ioctl_cb.sensor_reset_cb is NULL");\r
- WARN_ON(1);\r
- }\r
- break;\r
- }\r
-\r
- case Cam_PowerDown:\r
- {\r
- if (sensor_ioctl_cb.sensor_powerdown_cb) {\r
- ret = sensor_ioctl_cb.sensor_powerdown_cb(res, on);\r
- } else {\r
- printk(KERN_ERR "sensor_ioctl_cb.sensor_powerdown_cb is NULL");\r
- WARN_ON(1);\r
- }\r
- break;\r
- }\r
-\r
- case Cam_Flash:\r
- {\r
- if (sensor_ioctl_cb.sensor_flash_cb) {\r
- ret = sensor_ioctl_cb.sensor_flash_cb(res, on);\r
- } else {\r
- printk(KERN_ERR "sensor_ioctl_cb.sensor_flash_cb is NULL!");\r
- WARN_ON(1);\r
- }\r
- break;\r
- }\r
- default:\r
- {\r
- printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);\r
- break;\r
- }\r
- }\r
-rk29_sensor_ioctrl_end:\r
- return ret;\r
-}\r
-static int rk29_sensor_power(struct device *dev, int on)\r
-{\r
- rk29_sensor_ioctrl(dev,Cam_Power,on);\r
- return 0;\r
-}\r
-#if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO) || (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
-static int rk29_sensor_reset(struct device *dev)\r
-{\r
- rk29_sensor_ioctrl(dev,Cam_Reset,1);\r
- msleep(2);\r
- rk29_sensor_ioctrl(dev,Cam_Reset,0);\r
- return 0;\r
-}\r
-#endif\r
-static int rk29_sensor_powerdown(struct device *dev, int on)\r
-{\r
- return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);\r
-}\r
#if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00)\r
static struct i2c_board_info rk29_i2c_cam_info_0[] = {\r
{\r
\r
static struct soc_camera_link rk29_iclink_0 = {\r
.bus_id = RK29_CAM_PLATFORM_DEV_ID,\r
- .power = rk29_sensor_power,\r
+ .power = rk_sensor_power,\r
#if (CONFIG_SENSOR_RESET_PIN_0 != INVALID_GPIO)\r
- .reset = rk29_sensor_reset,\r
+ .reset = rk_sensor_reset,\r
#endif \r
- .powerdown = rk29_sensor_powerdown,\r
+ .powerdown = rk_sensor_powerdown,\r
.board_info = &rk29_i2c_cam_info_0[0],\r
.i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0,\r
.module_name = SENSOR_NAME_0,\r
\r
static struct soc_camera_link rk29_iclink_1 = {\r
.bus_id = RK29_CAM_PLATFORM_DEV_ID,\r
- .power = rk29_sensor_power,\r
+ .power = rk_sensor_power,\r
#if (CONFIG_SENSOR_RESET_PIN_1 != INVALID_GPIO)\r
- .reset = rk29_sensor_reset,\r
+ .reset = rk_sensor_reset,\r
#endif \r
- .powerdown = rk29_sensor_powerdown,\r
+ .powerdown = rk_sensor_powerdown,\r
.board_info = &rk29_i2c_cam_info_1[0],\r
.i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1,\r
.module_name = SENSOR_NAME_1,\r
.dev = {\r
.dma_mask = &rockchip_device_camera_dmamask,\r
.coherent_dma_mask = 0xffffffffUL,\r
- .platform_data = &rk29_camera_platform_data,\r
+ .platform_data = &rk_camera_platform_data,\r
}\r
};\r
\r
-static struct android_pmem_platform_data android_pmem_cam_pdata = {\r
- .name = "pmem_cam",\r
- .start = PMEM_CAM_BASE,\r
- .size = PMEM_CAM_SIZE,\r
- .no_allocator = 1,\r
- .cached = 1,\r
-};\r
+static void rk_init_camera_plateform_data(void)\r
+{\r
+ int i,dev_idx;\r
+ \r
+ dev_idx = 0;\r
+ for (i=0; i<RK_CAM_NUM; i++) {\r
+ if (rk_camera_platform_data.register_dev[i].device_info.name) { \r
+ rk_camera_platform_data.register_dev[i].link_info.board_info = \r
+ &rk_camera_platform_data.register_dev[i].i2c_cam_info;\r
+ rk_camera_platform_data.register_dev[i].device_info.id = dev_idx;\r
+ rk_camera_platform_data.register_dev[i].device_info.dev.platform_data = \r
+ &rk_camera_platform_data.register_dev[i].link_info;\r
+ dev_idx++;\r
+ }\r
+ }\r
+}\r
\r
-static struct platform_device android_pmem_cam_device = {\r
- .name = "android_pmem",\r
- .id = 1,\r
- .dev = {\r
- .platform_data = &android_pmem_cam_pdata,\r
- },\r
-};\r
+static int rk_register_camera_devices(void)\r
+{ \r
+ int i;\r
+ \r
+ rk_init_camera_plateform_data();\r
+ for (i=0; i<RK_CAM_NUM; i++) {\r
+ if (rk_camera_platform_data.register_dev[i].device_info.name\r
+ && !strcmp(rk_camera_platform_data.register_dev[i].device_info.dev.init_name,SENSOR_DEVICE_NAME_0)\r
+ && !strcmp(rk_camera_platform_data.register_dev[i].device_info.dev.init_name,SENSOR_DEVICE_NAME_1)) {\r
+ platform_device_register(&rk_camera_platform_data.register_dev[i].device_info);\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
+module_init(rk_register_camera_devices);\r
\r
#endif\r
\r