mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
msm: camera: isp: Update ife substate before apply setting
Offline mode may receive the SOF and REG_UPD irq event earlier than CMD processing return back, then the event will be dropped. This change updates ife substate to APPLIED state before apply setting and move the req to wait list. CRs-Fixed: 2736862 Change-Id: I052c618ef64aae0e30232609a209a0dc43b53f8c Signed-off-by: Depeng Shao <depengs@codeaurora.org>
This commit is contained in:
parent
1af3ec8d9d
commit
7ccae419d3
1 changed files with 23 additions and 7 deletions
|
|
@ -1067,6 +1067,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;
|
||||
|
|
@ -1112,22 +1113,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);
|
||||
|
|
@ -1136,6 +1151,7 @@ static int __cam_isp_ctx_apply_req_offline(
|
|||
CAM_ISP_STATE_CHANGE_TRIGGER_APPLIED,
|
||||
req->request_id);
|
||||
}
|
||||
|
||||
end:
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue