Эх сурвалжийг харах

Merge "msm: camera: isp: Update ife substate before apply setting" into camera-kernel.lnx.4.0

Haritha Chintalapati 4 жил өмнө
parent
commit
38ba051707

+ 23 - 7
drivers/cam_isp/cam_isp_context.c

@@ -1318,6 +1318,7 @@ static int __cam_isp_ctx_apply_req_offline(
 	void *priv, void *data)
 {
 	int rc = 0;
+	int64_t prev_applied_req;
 	struct cam_context *ctx = NULL;
 	struct cam_isp_context *ctx_isp = priv;
 	struct cam_ctx_request *req;
@@ -1363,22 +1364,36 @@ static int __cam_isp_ctx_apply_req_offline(
 	cfg.priv  = &req_isp->hw_update_data;
 	cfg.init_packet = 0;
 
+	/*
+	 * Offline mode may receive the SOF and REG_UPD earlier than
+	 * CDM processing return back, so we set the substate before
+	 * apply setting.
+	 */
+	spin_lock_bh(&ctx->lock);
+
+	atomic_set(&ctx_isp->rxd_epoch, 0);
+	ctx_isp->substate_activated = CAM_ISP_CTX_ACTIVATED_APPLIED;
+	prev_applied_req = ctx_isp->last_applied_req_id;
+	ctx_isp->last_applied_req_id = req->request_id;
+
+	list_del_init(&req->list);
+	list_add_tail(&req->list, &ctx->wait_req_list);
+
+	spin_unlock_bh(&ctx->lock);
+
 	rc = ctx->hw_mgr_intf->hw_config(ctx->hw_mgr_intf->hw_mgr_priv, &cfg);
 	if (rc) {
 		CAM_ERR_RATE_LIMIT(CAM_ISP, "Can not apply the configuration");
-	} else {
 		spin_lock_bh(&ctx->lock);
 
-		atomic_set(&ctx_isp->rxd_epoch, 0);
-
-		ctx_isp->substate_activated = CAM_ISP_CTX_ACTIVATED_APPLIED;
-		ctx_isp->last_applied_req_id = req->request_id;
+		ctx_isp->substate_activated = CAM_ISP_CTX_ACTIVATED_SOF;
+		ctx_isp->last_applied_req_id = prev_applied_req;
 
 		list_del_init(&req->list);
-		list_add_tail(&req->list, &ctx->wait_req_list);
+		list_add(&req->list, &ctx->pending_req_list);
 
 		spin_unlock_bh(&ctx->lock);
-
+	} else {
 		CAM_DBG(CAM_ISP, "New substate state %d, applied req %lld",
 			CAM_ISP_CTX_ACTIVATED_APPLIED,
 			ctx_isp->last_applied_req_id);
@@ -1387,6 +1402,7 @@ static int __cam_isp_ctx_apply_req_offline(
 			CAM_ISP_STATE_CHANGE_TRIGGER_APPLIED,
 			req->request_id);
 	}
+
 end:
 	return rc;
 }