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 <tjose@codeaurora.org>
This commit is contained in:
Tony Lijo Jose 2021-02-12 09:48:29 +05:30
commit 6bda2323cb
2 changed files with 19 additions and 10 deletions

View file

@ -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 <linux/module.h>
@ -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,

View file

@ -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 <linux/module.h>
@ -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;