QC8225Q/OV8825 torch

OV8825_V4L2.C  
module_init(msm_sensor_init_module);  
msm_sensor_init_module     -->  
i2c_add_driver(&ov8825_i2c_driver);  
&ov8825_i2c_driver     -->  
static struct i2c_driver ov8825_i2c_driver = {  
.id_table = ov8825_i2c_id,  
.probe = ov8825_sensor_i2c_probe,  
.driver = {  
.name = SENSOR_NAME,  
},  
};  
.id_table = ov8825_i2c_id,     -->  
static const struct i2c_device_id ov8825_i2c_id[] = {  
{SENSOR_NAME, (kernel_ulong_t)&ov8825_s_ctrl},  
{ }  
};  
&ov8825_s_ctrl     -->  
static struct msm_sensor_ctrl_t ov8825_s_ctrl = {  
.msm_sensor_reg = &ov8825_regs,  
.sensor_i2c_client = &ov8825_sensor_i2c_client,  
.sensor_i2c_addr = 0x6C,  
.sensor_output_reg_addr = &ov8825_reg_addr,  
.sensor_id_info = &ov8825_id_info,  
.sensor_exp_gain_info = &ov8825_exp_gain_info,  
.cam_mode = MSM_SENSOR_MODE_INVALID,  
.csic_params = &ov8825_csi_params_array[0],  
.msm_sensor_mutex = &ov8825_mut,  
.sensor_i2c_driver = &ov8825_i2c_driver,  
.sensor_v4l2_subdev_info = ov8825_subdev_info,  
.sensor_v4l2_subdev_info_size = ARRAY_SIZE(ov8825_subdev_info),  
.sensor_v4l2_subdev_ops = &ov8825_subdev_ops,  
.func_tbl = &ov8825_func_tbl,  
};  
ov8825_sensor_i2c_probe,     -->  
int32_t ov8825_sensor_i2c_probe(struct i2c_client *client,  
const struct i2c_device_id *id)  
{  
int32_t rc = 0;  
//struct msm_sensor_ctrl_t *s_ctrl;  
  
CDBG("\n in ov8825_sensor_i2c_probe\n");  
rc = msm_sensor_i2c_probe(client, id);  
if (client->dev.platform_data == NULL) {  
pr_err("%s: NULL sensor data\n", __func__);  
return -EFAULT;  
}  
//move the powerdown operation to sensor_power_down function  
//s_ctrl = client->dev.platform_data;  
//if (s_ctrl->sensordata->pmic_gpio_enable)  
//  lcd_camera_power_onoff(0);  
return rc;  
}  
 msm_sensor_i2c_probe(client, id);     -->  
  
Msm_sensor.c  
int32_t msm_sensor_i2c_probe(struct i2c_client *client,  
const struct i2c_device_id *id)  
{  
int rc = 0;  
struct msm_sensor_ctrl_t *s_ctrl;  
CDBG("%s %s_i2c_probe called\n", __func__, client->name);  
if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {  
pr_err("%s %s i2c_check_functionality failed\n",  
__func__, client->name);  
rc = -EFAULT;  
return rc;  
}  
  
s_ctrl = (struct msm_sensor_ctrl_t *)(id->driver_data);  
if (s_ctrl->sensor_i2c_client != NULL) {  
s_ctrl->sensor_i2c_client->client = client;  
if (s_ctrl->sensor_i2c_addr != 0)  
s_ctrl->sensor_i2c_client->client->addr =  
s_ctrl->sensor_i2c_addr;  
} else {  
pr_err("%s %s sensor_i2c_client NULL\n",  
__func__, client->name);  
rc = -EFAULT;  
return rc;  
}  
  
s_ctrl->sensordata = client->dev.platform_data;  
if (s_ctrl->sensordata == NULL) {  
pr_err("%s %s NULL sensor data\n", __func__, client->name);  
return -EFAULT;  
}  
  
rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);  
if (rc < 0) {  
pr_err("%s %s power up failed\n", __func__, client->name);  
return rc;  
}  
  
if (s_ctrl->func_tbl->sensor_match_id)  
rc = s_ctrl->func_tbl->sensor_match_id(s_ctrl);  
else  
rc = msm_sensor_match_id(s_ctrl);  
if (rc < 0)  
goto probe_fail;  
  
snprintf(s_ctrl->sensor_v4l2_subdev.name,  
sizeof(s_ctrl->sensor_v4l2_subdev.name), "%s", id->name);  
v4l2_i2c_subdev_init(&s_ctrl->sensor_v4l2_subdev, client,  
s_ctrl->sensor_v4l2_subdev_ops);  
  
msm_sensor_register(&s_ctrl->sensor_v4l2_subdev);  
goto power_down;  
probe_fail:  
pr_err("%s %s_i2c_probe failed\n", __func__, client->name);  
power_down:  
if (rc > 0)  
rc = 0;  
s_ctrl->func_tbl->sensor_power_down(s_ctrl);  
s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;  
return rc;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值