From 96a10ecb425802c49aa5f8fe4bf572ab956f0f63 Mon Sep 17 00:00:00 2001 From: Jigarkumar Zala Date: Tue, 6 Oct 2020 16:33:59 -0700 Subject: [PATCH] msm: camera: common: Enable flash operation at EOF Flash operation is currently being done at EPOCH timeframe. In order to support flash operation at EPOCH extra frame needs to skip to avoid partial lit on previous request. Moving flash operation to EOF saves one frame and also give more stability to perform the operation with higher stablility with removing partial lit. This change gives flash hardware extra time to perform the operation for turn on/off the flash hardware. CRs-Fixed: 2795719 Change-Id: I08b82527006d8a9c81c5a5be0768705051cbd3f1 Signed-off-by: Jigarkumar Zala Signed-off-by: Depeng Shao --- drivers/cam_req_mgr/cam_req_mgr_core.c | 11 +++-------- drivers/cam_sensor_module/cam_flash/cam_flash_core.c | 9 +++------ 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/drivers/cam_req_mgr/cam_req_mgr_core.c b/drivers/cam_req_mgr/cam_req_mgr_core.c index 1be94c5d35be..35c2a504e856 100644 --- a/drivers/cam_req_mgr/cam_req_mgr_core.c +++ b/drivers/cam_req_mgr/cam_req_mgr_core.c @@ -558,6 +558,8 @@ static void __cam_req_mgr_flush_req_slot( in_q->rd_idx = 0; link->trigger_cnt[0] = 0; link->trigger_cnt[1] = 0; + link->trigger_mask = 0; + link->subscribe_event &= ~CAM_TRIGGER_POINT_EOF; } /** @@ -811,12 +813,6 @@ static int __cam_req_mgr_send_req(struct cam_req_mgr_core_link *link, continue; } - if (slot->ops.apply_at_eof && slot->ops.skip_next_frame) { - CAM_ERR(CAM_CRM, - "Both EOF and SOF trigger is not supported"); - return -EINVAL; - } - if (dev->dev_hdl != slot->ops.dev_hdl) { CAM_DBG(CAM_CRM, "Dev_hdl : %d Not matched:: Expected dev_hdl: %d", @@ -2586,8 +2582,7 @@ int cam_req_mgr_process_add_req(void *priv, void *data) (add_req->skip_before_applying & 0xFF)); } - /* Used when Precise Flash is enabled */ - if ((add_req->trigger_eof) && (!add_req->skip_before_applying)) { + if (add_req->trigger_eof) { slot->ops.apply_at_eof = true; slot->ops.dev_hdl = add_req->dev_hdl; CAM_DBG(CAM_REQ, diff --git a/drivers/cam_sensor_module/cam_flash/cam_flash_core.c b/drivers/cam_sensor_module/cam_flash/cam_flash_core.c index 15def761af55..caa1c83512ca 100644 --- a/drivers/cam_sensor_module/cam_flash/cam_flash_core.c +++ b/drivers/cam_sensor_module/cam_flash/cam_flash_core.c @@ -1546,12 +1546,9 @@ int cam_flash_pmic_pkt_parser(struct cam_flash_ctrl *fctrl, void *arg) CAM_DBG(CAM_FLASH, "FLASH_CMD_TYPE op:%d", flash_data->opcode); - if (flash_data->opcode == CAMERA_SENSOR_FLASH_OP_OFF) - add_req.skip_before_applying |= SKIP_NEXT_FRAME; if (flash_data->opcode == CAMERA_SENSOR_FLASH_OP_FIREDURATION) { - add_req.trigger_eof = true; /* Active time for the preflash */ flash_data->flash_active_time_ms = (flash_operation_info->time_on_duration_ns) @@ -1748,12 +1745,12 @@ int cam_flash_pmic_pkt_parser(struct cam_flash_ctrl *fctrl, void *arg) if ((csl_packet->header.op_code & 0xFFFFF) == CAM_FLASH_PACKET_OPCODE_SET_OPS) { + add_req.skip_before_applying |= SKIP_NEXT_FRAME; + add_req.trigger_eof = true; + if ((flash_data->opcode != CAMERA_SENSOR_FLASH_OP_FIREDURATION)) add_req.skip_before_applying |= 1; - else if (flash_data->opcode == - CAMERA_SENSOR_FLASH_OP_FIREDURATION) - add_req.trigger_eof = true; else add_req.skip_before_applying = 0; } else {