camera: oneframe v0.1.e
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / generic_sensor.h
index 879f18ddef36828051c0d9fcbe55b8263dcf4c35..4575ba69e55a6259602a04d64f006138dec2435f 100755 (executable)
@@ -12,8 +12,9 @@
 #include <media/v4l2-chip-ident.h>\r
 #include <media/soc_camera.h>\r
 #include <linux/vmalloc.h>\r
-#include <plat/rk_camera.h>\r
-\r
+#include <linux/module.h>\r
+#include "../../../arch/arm/mach-rockchip/rk30_camera.h"/*yzm*/\r
+#include <linux/kernel.h>\r
 /* Camera Sensor driver */\r
 \r
 #define MIN(x,y)   ((x<y) ? x: y)\r
@@ -296,6 +297,7 @@ extern int generic_sensor_s_ext_control(struct soc_camera_device *icd, struct v4
 extern int generic_sensor_g_ext_controls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ext_ctrl);\r
 extern int generic_sensor_s_ext_controls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ext_ctrl);\r
 extern long generic_sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg);\r
+extern int generic_sensor_s_power(struct v4l2_subdev *sd, int on);/*yzm*/\r
 extern int generic_sensor_enum_fmt(struct v4l2_subdev *sd, unsigned int index,enum v4l2_mbus_pixelcode *code);\r
 extern int generic_sensor_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf);\r
 extern int generic_sensor_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *id);\r
@@ -374,16 +376,17 @@ static inline int sensor_video_probe(struct soc_camera_device *icd,
                                   struct i2c_client *client)\r
 {\r
        int ret;\r
+       \r
        struct generic_sensor *sensor = to_generic_sensor(client);\r
 \r
        /* We must have a parent by now. And it cannot be a wrong one.\r
         * So this entire test is completely redundant. */\r
-       if (!icd->dev.parent ||\r
-               to_soc_camera_host(icd->dev.parent)->nr != icd->iface) {\r
+       if (!icd->parent ||\r
+               to_soc_camera_host(icd->parent)->nr != icd->iface) {\r
                ret = -ENODEV;\r
                goto sensor_video_probe_end;\r
        }\r
-\r
+       \r
        generic_sensor_softreset(client,sensor->info_priv.sensor_SfRstSeqe);\r
     ret = generic_sensor_check_id(client,sensor->info_priv.sensor_CkIdSeqe);\r
 \r
@@ -420,7 +423,6 @@ static inline void sensor_v4l2ctrl_info_init (struct sensor_v4l2ctrl_info_s *ptr
 {\r
     ptr->qctrl->id = id;\r
        ptr->qctrl->type = type;\r
-       strcat(ptr->qctrl->name,name);\r
        ptr->qctrl->minimum = min;\r
        ptr->qctrl->maximum = max;\r
     ptr->qctrl->step = step;\r
@@ -469,7 +471,7 @@ static inline int sensor_v4l2ctrl_replace_cb(struct generic_sensor *sensor, int
             ctrls->cb = cb;\r
             break;\r
         }\r
-    }\r
+    } \r
 \r
     if (i>=num) {\r
         printk(KERN_ERR "%s(%d): v4l2_control id(0x%x) isn't exist\n",__FUNCTION__,__LINE__,id);\r
@@ -515,6 +517,14 @@ static inline int sensor_v4l2ctrl_flash_cb(struct soc_camera_device *icd, struct
     //struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));\r
     int value = ext_ctrl->value;\r
 \r
+       \r
+       if(value == 0xfefe5a5a){        \r
+               if ((ctrl_info->cur_value == 2) || (ctrl_info->cur_value == 1)) {\r
+                       generic_sensor_ioctrl(icd, Sensor_Flash, Flash_On);                                     \r
+               }\r
+               \r
+               return 0;\r
+       }\r
     if ((value < ctrl_info->qctrl->minimum) || (value > ctrl_info->qctrl->maximum)) {\r
         printk(KERN_ERR "%s(%d): value(0x%x) isn't between in (0x%x,0x%x)\n",__FUNCTION__,__LINE__,value,\r
             ctrl_info->qctrl->minimum,ctrl_info->qctrl->maximum);\r
@@ -735,8 +745,8 @@ static inline int sensor_v4l2ctrl_flip_default_cb(struct soc_camera_device *icd,
     struct v4l2_queryctrl *controls, *control; \\r
     struct sensor_v4l2ctrl_info_s *ctrls; \\r
     struct v4l2_querymenu *menus,*menu; \\r
-    struct soc_camera_link *icl = to_soc_camera_link(icd); \\r
-    struct rk29camera_platform_data *pdata = icl->priv_usr; \\r
+       struct soc_camera_desc *desc = to_soc_camera_desc(icd);\\r
+    struct rk29camera_platform_data *pdata = desc->subdev_desc.drv_priv; \\r
     struct rkcamera_platform_data *sensor_device=NULL,*new_camera; \\r
     struct rk_sensor_reg *reg_data; \\r
     int config_flash = 0;\\r
@@ -750,12 +760,12 @@ static inline int sensor_v4l2ctrl_flip_default_cb(struct soc_camera_device *icd,
     }\\r
     sensor_config = SensorConfiguration;\\r
     new_camera = pdata->register_dev_new; \\r
-    while (strstr(new_camera->dev_name,"end")==NULL) { \\r
-        if (strcmp(dev_name(icd->pdev), new_camera->dev_name) == 0) { \\r
+       while(new_camera != NULL){\\r
+               if (strcmp(dev_name(icd->pdev), new_camera->dev_name) == 0) { \\r
             sensor_device = new_camera; \\r
             break; \\r
         } \\r
-        new_camera++; \\r
+        new_camera = new_camera->next_camera; \\r
     } \\r
  \\r
     if(sensor_device && sensor_device->flash)\\r
@@ -1218,6 +1228,7 @@ static inline int sensor_v4l2ctrl_flip_default_cb(struct soc_camera_device *icd,
        .s_ext_ctrls              = generic_sensor_s_ext_controls,\\r
        .g_chip_ident   = generic_sensor_g_chip_ident,\\r
        .ioctl = generic_sensor_ioctl,\\r
+       .s_power = generic_sensor_s_power,\\r
 };\\r
 \\r
 static struct v4l2_subdev_video_ops sensor_subdev_video_ops = {\\r
@@ -1247,9 +1258,11 @@ MODULE_DEVICE_TABLE(i2c, sensor_id);
                         const struct i2c_device_id *did)\\r
 {\\r
        struct specific_sensor *spsensor=NULL;\\r
-       struct soc_camera_device *icd = client->dev.platform_data;\\r
+       struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;\\r
+       struct soc_camera_desc *desc = container_of(ssdd,struct soc_camera_desc,subdev_desc);\\r
+       struct soc_camera_device *icd = ssdd->socdev;\\r
        struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);\\r
-       struct soc_camera_link *icl;\\r
+\\r
        int ret=0;\\r
 \\r
        if (!icd) {\\r
@@ -1258,8 +1271,8 @@ MODULE_DEVICE_TABLE(i2c, sensor_id);
         goto sensor_probe_end;\\r
        }\\r
 \\r
-       icl = to_soc_camera_link(icd);\\r
-       if (!icl) {\\r
+       desc = to_soc_camera_desc(icd);\\r
+       if (!desc) {\\r
                SENSOR_TR("driver needs platform data! But it is failed\n");\\r
                ret = -EINVAL;\\r
         goto sensor_probe_end;\\r
@@ -1310,7 +1323,8 @@ sensor_probe_end:\
 #define sensor_remove_default_code() static int sensor_remove(struct i2c_client *client)\\r
 {\\r
        struct generic_sensor*sensor = to_generic_sensor(client);\\r
-       struct soc_camera_device *icd = client->dev.platform_data;\\r
+       struct soc_camera_subdev_desc *ssdd = client->dev.platform_data;\\r
+       struct soc_camera_device *icd = ssdd->socdev;\\r
        struct specific_sensor *spsensor = to_specific_sensor(sensor);\\r
        int sensor_config;\\r
 \\r
@@ -1364,8 +1378,8 @@ static void __exit sensor_mod_exit(void)\
 \\r
 device_initcall_sync(sensor_mod_init);\\r
 module_exit(sensor_mod_exit);\\r
-\\r
-MODULE_DESCRIPTION(SENSOR_NAME_STRING(sensor driver));\\r
+MODULE_DESCRIPTION(SENSOR_NAME_STRING(sensor driver)); \\r
 MODULE_AUTHOR("<ddl@rock-chips.com,zyc@rock-chips.com>");\\r
+\\r
 MODULE_LICENSE("GPL");\r
 #endif\r