From 6bda2323cb930e5d85dc6c5705c6e7f342dc9caf Mon Sep 17 00:00:00 2001 From: Tony Lijo Jose Date: Fri, 12 Feb 2021 09:48:29 +0530 Subject: [PATCH] msm: camera: flash: Apply flash packets at epoch instead of eof Partial lighted frame can be observed if flash packet is getting applied at eof instead of epoch. This change make the flash packet to be applied at epoch instead of eof. CRs-Fixed: 2853936 Change-Id: I77dac7c0b8cb8149f26c5f89cced590bc3b957ee Signed-off-by: Tony Lijo Jose --- drivers/cam_req_mgr/cam_req_mgr_core.c | 13 +++++++++---- .../cam_sensor_module/cam_flash/cam_flash_core.c | 16 ++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/drivers/cam_req_mgr/cam_req_mgr_core.c b/drivers/cam_req_mgr/cam_req_mgr_core.c index 78be9bcf3e2d..5a74aff10652 100644 --- a/drivers/cam_req_mgr/cam_req_mgr_core.c +++ b/drivers/cam_req_mgr/cam_req_mgr_core.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ #include @@ -568,8 +568,6 @@ 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; } /** @@ -823,6 +821,12 @@ 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", @@ -2652,7 +2656,8 @@ int cam_req_mgr_process_add_req(void *priv, void *data) (add_req->skip_before_applying & 0xFF)); } - if (add_req->trigger_eof) { + /* Used when Precise Flash is enabled */ + if ((add_req->trigger_eof) && (!add_req->skip_before_applying)) { 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 f50fb5da4e21..156fcf0dbafe 100644 --- a/drivers/cam_sensor_module/cam_flash/cam_flash_core.c +++ b/drivers/cam_sensor_module/cam_flash/cam_flash_core.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved. */ #include @@ -1546,9 +1546,12 @@ 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) @@ -1745,13 +1748,14 @@ 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 && (flash_data->opcode != + if ((flash_data->opcode != CAMERA_SENSOR_FLASH_OP_FIREDURATION)) add_req.skip_before_applying |= 1; - else + else if (flash_data->opcode == + CAMERA_SENSOR_FLASH_OP_FIREDURATION) { + CAM_DBG(CAM_FLASH, "Trigger eof is set for request "); + add_req.trigger_eof = true; + } else add_req.skip_before_applying = 0; } else { add_req.skip_before_applying = 0;