#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
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
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
{\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
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
//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
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
}\\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
.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
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
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
#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
\\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