mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
bangkk: Powerup and initialize sensor early [3/4]
Powering on and initializing main sensor in camera open instead of streams configuration to optimize the startup KPI. It is a common feature and depends on sensor setting. It can save about 30ms. Porting this func from (CR) and (CR). mot-cam-category: KPI Change-Id: Iab7653a3598cd5816b9700c90cea920b1d172001 Signed-off-by: Liu Yang <liuyang81@lenovo.com> Reviewed-on: https://gerrit.mot.com/2640367 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Ji Zhao <zhaoji1@lenovo.com> Reviewed-by: Bolei Shang <shangbl1@lenovo.com> Reviewed-by: <leixu1@motorola.com> Reviewed-by: Zilong Zhang <zhangzl7@lenovo.com> Reviewed-by: Hualong Zhu <zhuhl11@motorola.com> Reviewed-by: <zhanys2@motorola.com> Reviewed-by: Dongju He <hedj3@motorola.com> Reviewed-by: <weilt2@motorola.com> Reviewed-by: Zhuoran Xu <xuzr3@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
9cc3f930c3
commit
12db07489b
3 changed files with 88 additions and 0 deletions
|
|
@ -1033,6 +1033,9 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
|
|||
*/
|
||||
s_ctrl->is_probe_succeed = 1;
|
||||
s_ctrl->sensor_state = CAM_SENSOR_INIT;
|
||||
#ifdef CONFIG_MOT_SENSOR_PRE_POWERUP
|
||||
s_ctrl->sensor_power_up_done = 0;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case CAM_ACQUIRE_DEV: {
|
||||
|
|
@ -1322,6 +1325,69 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
|
|||
}
|
||||
}
|
||||
break;
|
||||
#ifdef CONFIG_MOT_SENSOR_PRE_POWERUP
|
||||
case CAM_MOT_PRE_POWER_UP: {
|
||||
if (!s_ctrl->sensor_power_up_done)
|
||||
{
|
||||
rc = cam_sensor_power_up(s_ctrl);
|
||||
if (rc < 0) {
|
||||
CAM_ERR(CAM_SENSOR,
|
||||
"MotPreAct - Sensor Power up failed for sensor_id:0x%x, slave_addr:0x%x",
|
||||
s_ctrl->sensordata->slave_info.sensor_id,
|
||||
s_ctrl->sensordata->slave_info.sensor_slave_addr);
|
||||
goto release_mutex;
|
||||
}
|
||||
s_ctrl->sensor_power_up_done = 1;
|
||||
CAM_DBG(CAM_SENSOR, "MotPreAct - Camera sensor_id:0x%x, slave_addr:0x%x, pre power on done = %d",
|
||||
s_ctrl->sensordata->slave_info.sensor_id,
|
||||
s_ctrl->sensordata->slave_info.sensor_slave_addr,
|
||||
s_ctrl->sensor_power_up_done);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CAM_MOT_PRE_POWER_DOWN: {
|
||||
if (s_ctrl->sensor_power_up_done)
|
||||
{
|
||||
rc = cam_sensor_power_down(s_ctrl);
|
||||
if (rc < 0) {
|
||||
CAM_ERR(CAM_SENSOR,
|
||||
"Sensor Power Down failed sensor_id: 0x%x, slave_addr:0x%x",
|
||||
s_ctrl->sensordata->slave_info.sensor_id,
|
||||
s_ctrl->sensordata->slave_info.sensor_slave_addr);
|
||||
goto release_mutex;
|
||||
}
|
||||
CAM_DBG(CAM_SENSOR, "MotPreAct - Camera sensor_id:0x%x, slave_addr:0x%x, pre power on done = %d",
|
||||
s_ctrl->sensordata->slave_info.sensor_id,
|
||||
s_ctrl->sensordata->slave_info.sensor_slave_addr,
|
||||
s_ctrl->sensor_power_up_done);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CAM_MOT_QUERY_SENSOR_STATUS: {
|
||||
uint32_t isSensorActive = 0;
|
||||
|
||||
if (s_ctrl->sensor_power_up_done)
|
||||
{
|
||||
isSensorActive = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
isSensorActive = 0;
|
||||
}
|
||||
|
||||
if (copy_to_user(u64_to_user_ptr(cmd->handle),
|
||||
&isSensorActive, sizeof(uint32_t))) {
|
||||
CAM_ERR(CAM_SENSOR, "MotPreAct - Failed Copy to User");
|
||||
rc = -EFAULT;
|
||||
goto release_mutex;
|
||||
}
|
||||
CAM_DBG(CAM_SENSOR, "MotPreAct - Query camera sensor_id:0x%x, slave_addr:0x%x, status = %d",
|
||||
s_ctrl->sensordata->slave_info.sensor_id,
|
||||
s_ctrl->sensordata->slave_info.sensor_slave_addr,
|
||||
isSensorActive);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
CAM_ERR(CAM_SENSOR, "Invalid Opcode: %d", cmd->op_code);
|
||||
rc = -EINVAL;
|
||||
|
|
@ -1424,6 +1490,16 @@ int cam_sensor_power_up(struct cam_sensor_ctrl_t *s_ctrl)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MOT_SENSOR_PRE_POWERUP
|
||||
if (s_ctrl->sensor_power_up_done)
|
||||
{
|
||||
CAM_INFO(CAM_SENSOR, "MotPreAct - sensor has power on done for sensor_id:0x%x, slave_addr:0x%x",
|
||||
s_ctrl->sensordata->slave_info.sensor_id,
|
||||
s_ctrl->sensordata->slave_info.sensor_slave_addr);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
power_info = &s_ctrl->sensordata->power_info;
|
||||
slave_info = &(s_ctrl->sensordata->slave_info);
|
||||
|
||||
|
|
@ -1498,6 +1574,9 @@ int cam_sensor_power_down(struct cam_sensor_ctrl_t *s_ctrl)
|
|||
}
|
||||
|
||||
camera_io_release(&(s_ctrl->io_master_info));
|
||||
#ifdef CONFIG_MOT_SENSOR_PRE_POWERUP
|
||||
s_ctrl->sensor_power_up_done = 0;
|
||||
#endif
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,6 +128,9 @@ struct cam_sensor_ctrl_t {
|
|||
uint16_t i2c_switch_reg_addr;
|
||||
uint16_t i2c_switch_reg_data;
|
||||
uint16_t i2c_switch_reg_delayMs;
|
||||
#ifdef CONFIG_MOT_SENSOR_PRE_POWERUP
|
||||
bool sensor_power_up_done;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -32,6 +32,12 @@
|
|||
#define CAM_EXT_OPCODE_BASE 0x200
|
||||
#define CAM_CONFIG_DEV_EXTERNAL (CAM_EXT_OPCODE_BASE + 0x1)
|
||||
|
||||
/* CONFIG_MOT_SENSOR_PRE_POWERUP */
|
||||
#define CAM_MOT_OPCODE_BASE 0x250
|
||||
#define CAM_MOT_PRE_POWER_UP (CAM_MOT_OPCODE_BASE + 0x1)
|
||||
#define CAM_MOT_PRE_POWER_DOWN (CAM_MOT_OPCODE_BASE + 0x2)
|
||||
#define CAM_MOT_QUERY_SENSOR_STATUS (CAM_MOT_OPCODE_BASE + 0x3)
|
||||
|
||||
/* camera handle type */
|
||||
#define CAM_HANDLE_USER_POINTER 1
|
||||
#define CAM_HANDLE_MEM_HANDLE 2
|
||||
|
|
|
|||
Loading…
Reference in a new issue