Преглед изворни кода

msm: camera: reqmgr: Only do self-correction at SOF

Since the SOF timestamp is only updated at SOF,
so we can't do self-correction at EOF. When the
frames already in sync, but the req is a EOF
triggered req, then the req can't be applied at
SOF, but it will fail to pass self-correction
checking at EOF. Then we will loop this progress,
the req can't be applied anymore.

CRs-Fixed: 2930497
Change-Id: I079cbd3cb9ac9541f049c5369baeee831f7444a2
Signed-off-by: Depeng Shao <[email protected]>
Depeng Shao пре 4 година
родитељ
комит
924246efa3
1 измењених фајлова са 6 додато и 3 уклоњено
  1. 6 3
      drivers/cam_req_mgr/cam_req_mgr_core.c

+ 6 - 3
drivers/cam_req_mgr/cam_req_mgr_core.c

@@ -1340,7 +1340,8 @@ static int __cam_req_mgr_check_sync_for_mslave(
 static int __cam_req_mgr_check_sync_req_is_ready(
 	struct cam_req_mgr_core_link *link,
 	struct cam_req_mgr_core_link *sync_link,
-	struct cam_req_mgr_slot *slot)
+	struct cam_req_mgr_slot *slot,
+	uint32_t trigger)
 {
 	struct cam_req_mgr_slot *sync_rd_slot = NULL;
 	int64_t req_id = 0, sync_req_id = 0;
@@ -1514,7 +1515,8 @@ static int __cam_req_mgr_check_sync_req_is_ready(
 	 */
 	master_slave_diff = sync_frame_duration;
 	do_div(master_slave_diff, 5);
-	if ((sync_link->sof_timestamp > 0) &&
+	if ((trigger == CAM_TRIGGER_POINT_SOF) &&
+		(sync_link->sof_timestamp > 0) &&
 		(sof_timestamp_delta < master_slave_diff) &&
 		(sync_rd_slot->sync_mode == CAM_REQ_MGR_SYNC_MODE_SYNC)) {
 
@@ -1575,7 +1577,8 @@ static int __cam_req_mgr_check_multi_sync_link_ready(
 			}
 			if (link->max_delay == link->sync_link[i]->max_delay) {
 				rc = __cam_req_mgr_check_sync_req_is_ready(
-						link, link->sync_link[i], slot);
+						link, link->sync_link[i],
+						slot, trigger);
 				if (rc < 0) {
 					CAM_DBG(CAM_CRM, "link %x not ready",
 						link->link_hdl);