Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02842fba authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: Modify the handling of clk off work"

parents 3668f107 cefb7d15
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -174,6 +174,7 @@ static void mdp3_dispatch_clk_off(struct work_struct *work)
		return;

	mutex_lock(&session->lock);
	MDSS_XLOG(0x111);
	if (session->vsync_enabled ||
		atomic_read(&session->vsync_countdown) > 0) {
		mutex_unlock(&session->lock);
@@ -182,10 +183,17 @@ static void mdp3_dispatch_clk_off(struct work_struct *work)
		return;
	}

	if (!session->clk_on) {
		mutex_unlock(&session->lock);
		pr_debug("%s: Clk shut down is done\n", __func__);
		MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__);
		return;
	}
	if (session->intf->active) {
retry_dma_done:
		rc = wait_for_completion_timeout(&session->dma_completion,
							WAIT_DMA_TIMEOUT);
		MDSS_XLOG(0x222);
		if (rc <= 0) {
			struct mdss_panel_data *panel;

@@ -196,6 +204,7 @@ static void mdp3_dispatch_clk_off(struct work_struct *work)
				if (--retry_count) {
					pr_err("dmap is busy, retry %d\n",
						retry_count);
					MDSS_XLOG(__LINE__, retry_count);
					goto retry_dma_done;
				}
				pr_err("dmap is still busy, bug_on\n");
@@ -1017,8 +1026,10 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd)
	MDSS_XLOG(XLOG_FUNC_ENTRY, __LINE__, mdss_fb_is_power_on_ulp(mfd),
		mfd->panel_power_state);
	panel = mdp3_session->panel;
	mutex_lock(&mdp3_session->lock);

	cancel_work_sync(&mdp3_session->clk_off_work);
	mutex_lock(&mdp3_session->lock);
	MDSS_XLOG(0x111);
	pr_debug("Requested power state = %d\n", mfd->panel_power_state);
	if (mdss_fb_is_power_on_lp(mfd)) {
		/*
@@ -1485,6 +1496,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
	}
	mutex_unlock(&mdp3_res->fs_idle_pc_lock);

	cancel_work_sync(&mdp3_session->clk_off_work);
	mutex_lock(&mdp3_session->lock);

	if (!mdp3_session->status) {
@@ -1492,7 +1504,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
		mutex_unlock(&mdp3_session->lock);
		return -EPERM;
	}

	MDSS_XLOG(0x111);
	mdp3_ctrl_notify(mdp3_session, MDP_NOTIFY_FRAME_BEGIN);
	data = mdp3_bufq_pop(&mdp3_session->bufq_in);
	if (data) {
@@ -2714,6 +2726,8 @@ static int mdp3_ctrl_ioctl_handler(struct msm_fb_data_type *mfd,
		}
		mutex_unlock(&mdp3_res->fs_idle_pc_lock);
		rc = mdp3_ctrl_async_blit_req(mfd, argp);
		if (!rc)
			cancel_work_sync(&mdp3_session->clk_off_work);
		break;
	case MSMFB_BLIT:
		mutex_lock(&mdp3_res->fs_idle_pc_lock);
@@ -2721,6 +2735,8 @@ static int mdp3_ctrl_ioctl_handler(struct msm_fb_data_type *mfd,
			mdp3_ctrl_reset(mfd);
		mutex_unlock(&mdp3_res->fs_idle_pc_lock);
		rc = mdp3_ctrl_blit_req(mfd, argp);
		if (!rc)
			cancel_work_sync(&mdp3_session->clk_off_work);
		break;
	case MSMFB_METADATA_GET:
		rc = copy_from_user(&metadata, argp, sizeof(metadata));