Loading drivers/media/platform/msm/ais/isp/msm_isp_util.c +1 −1 Original line number Diff line number Diff line Loading @@ -2012,7 +2012,7 @@ static void msm_isp_enqueue_tasklet_cmd(struct vfe_device *vfe_dev, MSM_VFE_TASKLETQ_SIZE; list_add_tail(&queue_cmd->list, &vfe_dev->tasklet_q); spin_unlock_irqrestore(&vfe_dev->tasklet_lock, flags); tasklet_schedule(&vfe_dev->vfe_tasklet); tasklet_hi_schedule(&vfe_dev->vfe_tasklet); } irqreturn_t msm_isp_process_irq(int irq_num, void *data) Loading drivers/media/platform/msm/ais/sensor/msm_sensor.c +100 −8 Original line number Diff line number Diff line Loading @@ -296,7 +296,8 @@ static void msm_sensor_stop_stream(struct msm_sensor_ctrl_t *s_ctrl) int32_t rc = 0; mutex_lock(s_ctrl->msm_sensor_mutex); if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP || s_ctrl->sensor_state == MSM_SENSOR_CCI_UP) { s_ctrl->sensor_i2c_client->i2c_func_tbl->i2c_write_table( s_ctrl->sensor_i2c_client, &s_ctrl->stop_setting); kfree(s_ctrl->stop_setting.reg_setting); Loading Loading @@ -511,7 +512,8 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -588,6 +590,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } read_config_ptr = (struct msm_camera_i2c_read_config *) compat_ptr(cdata->cfg.setting); Loading Loading @@ -660,6 +670,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(&write_config32, (void __user *)compat_ptr(cdata->cfg.setting), sizeof( Loading Loading @@ -766,7 +784,8 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -852,7 +871,7 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, kfree(s_ctrl->stop_setting.reg_setting); s_ctrl->stop_setting.reg_setting = NULL; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading @@ -879,6 +898,12 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_CCI_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_up(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -886,11 +911,21 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_UP; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_CCI_POWER_DOWN: if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_down(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -898,6 +933,9 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_SET_STOP_STREAM_SETTING: { struct msm_camera_i2c_reg_setting32 stop_setting32; Loading @@ -908,6 +946,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(&stop_setting32, (void __user *)compat_ptr((cdata->cfg.setting)), sizeof(struct msm_camera_i2c_reg_setting32))) { Loading Loading @@ -1064,7 +1110,8 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -1134,6 +1181,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } read_config_ptr = (struct msm_camera_i2c_read_config *)cdata->cfg.setting; if (copy_from_user(&read_config, (void __user *)read_config_ptr, Loading Loading @@ -1199,6 +1254,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(&write_config, (void __user *)cdata->cfg.setting, sizeof(struct msm_camera_i2c_array_write_config))) { Loading Loading @@ -1282,7 +1345,8 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -1364,7 +1428,7 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) kfree(s_ctrl->stop_setting.reg_setting); s_ctrl->stop_setting.reg_setting = NULL; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -1392,6 +1456,12 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_CCI_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_up(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -1399,12 +1469,22 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_UP; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_CCI_POWER_DOWN: if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_down(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -1412,6 +1492,9 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_SET_STOP_STREAM_SETTING: { Loading @@ -1422,6 +1505,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(stop_setting, (void __user *)cdata->cfg.setting, sizeof(struct msm_camera_i2c_reg_setting))) { Loading Loading @@ -1522,7 +1613,8 @@ static int msm_sensor_power(struct v4l2_subdev *sd, int on) struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd); mutex_lock(s_ctrl->msm_sensor_mutex); if (!on && s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) { if (!on && (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP || s_ctrl->sensor_state == MSM_SENSOR_CCI_UP)) { s_ctrl->func_tbl->sensor_power_down(s_ctrl); s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN; } Loading drivers/media/platform/msm/ais/sensor/msm_sensor.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -52,6 +52,8 @@ struct msm_sensor_ctrl_t; enum msm_sensor_state_t { MSM_SENSOR_POWER_DOWN, MSM_SENSOR_POWER_UP, MSM_SENSOR_CCI_DOWN, MSM_SENSOR_CCI_UP, }; struct msm_sensor_fn_t { Loading Loading
drivers/media/platform/msm/ais/isp/msm_isp_util.c +1 −1 Original line number Diff line number Diff line Loading @@ -2012,7 +2012,7 @@ static void msm_isp_enqueue_tasklet_cmd(struct vfe_device *vfe_dev, MSM_VFE_TASKLETQ_SIZE; list_add_tail(&queue_cmd->list, &vfe_dev->tasklet_q); spin_unlock_irqrestore(&vfe_dev->tasklet_lock, flags); tasklet_schedule(&vfe_dev->vfe_tasklet); tasklet_hi_schedule(&vfe_dev->vfe_tasklet); } irqreturn_t msm_isp_process_irq(int irq_num, void *data) Loading
drivers/media/platform/msm/ais/sensor/msm_sensor.c +100 −8 Original line number Diff line number Diff line Loading @@ -296,7 +296,8 @@ static void msm_sensor_stop_stream(struct msm_sensor_ctrl_t *s_ctrl) int32_t rc = 0; mutex_lock(s_ctrl->msm_sensor_mutex); if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP || s_ctrl->sensor_state == MSM_SENSOR_CCI_UP) { s_ctrl->sensor_i2c_client->i2c_func_tbl->i2c_write_table( s_ctrl->sensor_i2c_client, &s_ctrl->stop_setting); kfree(s_ctrl->stop_setting.reg_setting); Loading Loading @@ -511,7 +512,8 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -588,6 +590,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } read_config_ptr = (struct msm_camera_i2c_read_config *) compat_ptr(cdata->cfg.setting); Loading Loading @@ -660,6 +670,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(&write_config32, (void __user *)compat_ptr(cdata->cfg.setting), sizeof( Loading Loading @@ -766,7 +784,8 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -852,7 +871,7 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, kfree(s_ctrl->stop_setting.reg_setting); s_ctrl->stop_setting.reg_setting = NULL; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading @@ -879,6 +898,12 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_CCI_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_up(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -886,11 +911,21 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_UP; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_CCI_POWER_DOWN: if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_down(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -898,6 +933,9 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_SET_STOP_STREAM_SETTING: { struct msm_camera_i2c_reg_setting32 stop_setting32; Loading @@ -908,6 +946,14 @@ static int msm_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl, if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(&stop_setting32, (void __user *)compat_ptr((cdata->cfg.setting)), sizeof(struct msm_camera_i2c_reg_setting32))) { Loading Loading @@ -1064,7 +1110,8 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -1134,6 +1181,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } read_config_ptr = (struct msm_camera_i2c_read_config *)cdata->cfg.setting; if (copy_from_user(&read_config, (void __user *)read_config_ptr, Loading Loading @@ -1199,6 +1254,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(&write_config, (void __user *)cdata->cfg.setting, sizeof(struct msm_camera_i2c_array_write_config))) { Loading Loading @@ -1282,7 +1345,8 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -1364,7 +1428,7 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) kfree(s_ctrl->stop_setting.reg_setting); s_ctrl->stop_setting.reg_setting = NULL; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) { if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; Loading Loading @@ -1392,6 +1456,12 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_CCI_DOWN) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_up(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -1399,12 +1469,22 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_UP; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_CCI_POWER_DOWN: if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } rc = msm_camera_cci_power_down(s_ctrl->sensor_device_type, s_ctrl->sensor_i2c_client); if (rc < 0) { Loading @@ -1412,6 +1492,9 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) __LINE__, rc); break; } s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN; CDBG("%s:%d sensor state %d\n", __func__, __LINE__, s_ctrl->sensor_state); break; case CFG_SET_STOP_STREAM_SETTING: { Loading @@ -1422,6 +1505,14 @@ int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void *argp) if (s_ctrl->is_csid_tg_mode) goto DONE; if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP && s_ctrl->sensor_state != MSM_SENSOR_CCI_UP) { pr_err("%s:%d failed: invalid state %d\n", __func__, __LINE__, s_ctrl->sensor_state); rc = -EFAULT; break; } if (copy_from_user(stop_setting, (void __user *)cdata->cfg.setting, sizeof(struct msm_camera_i2c_reg_setting))) { Loading Loading @@ -1522,7 +1613,8 @@ static int msm_sensor_power(struct v4l2_subdev *sd, int on) struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd); mutex_lock(s_ctrl->msm_sensor_mutex); if (!on && s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) { if (!on && (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP || s_ctrl->sensor_state == MSM_SENSOR_CCI_UP)) { s_ctrl->func_tbl->sensor_power_down(s_ctrl); s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN; } Loading
drivers/media/platform/msm/ais/sensor/msm_sensor.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -52,6 +52,8 @@ struct msm_sensor_ctrl_t; enum msm_sensor_state_t { MSM_SENSOR_POWER_DOWN, MSM_SENSOR_POWER_UP, MSM_SENSOR_CCI_DOWN, MSM_SENSOR_CCI_UP, }; struct msm_sensor_fn_t { Loading