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

Commit 77084953 authored by Benet Clark's avatar Benet Clark Committed by Gerrit - the friendly Code Review server
Browse files

msm: mdss: Clean up histogram software state when FB device is released



When framebuffer device is released, the software state for the histograms
attached to that FB remains unchanged. During the release of FB resources,
the histogram state should be reset back to idle. This change adds that
support.

Change-Id: I0e9adcb5b98b8ea219c0bd5b0afa791f5820dc95
Signed-off-by: default avatarBenet Clark <benetc@codeaurora.org>
parent a6d93db3
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -2609,11 +2609,10 @@ static int mdss_fb_release_all(struct fb_info *info, bool release_all)
		if (mfd->mdp.release_fnc)
			mfd->mdp.release_fnc(mfd, NULL);

		if (mfd->mdp.ad_shutdown_cleanup) {
			ret = (*mfd->mdp.ad_shutdown_cleanup)(mfd);
		if (mfd->mdp.pp_release_fnc) {
			ret = (*mfd->mdp.pp_release_fnc)(mfd);
			if (ret)
				pr_err("AD shutdown cleanup failed ret %d\n",
				       ret);
				pr_err("PP release failed ret %d\n", ret);
		}

		ret = mdss_fb_blank_sub(FB_BLANK_POWERDOWN, info,
+1 −1
Original line number Diff line number Diff line
@@ -232,7 +232,7 @@ struct msm_mdp_interface {
	int (*configure_panel)(struct msm_fb_data_type *mfd, int mode,
				int dest_ctrl);
	int (*input_event_handler)(struct msm_fb_data_type *mfd);
	int (*ad_shutdown_cleanup)(struct msm_fb_data_type *mfd);
	int (*pp_release_fnc)(struct msm_fb_data_type *mfd);
	void *private1;
};

+24 −5
Original line number Diff line number Diff line
@@ -395,9 +395,10 @@ static void mdss_mdp_hist_intr_notify(u32 disp);
static int mdss_mdp_panel_default_dither_config(struct msm_fb_data_type *mfd,
					u32 panel_bpp);
static int mdss_mdp_limited_lut_igc_config(struct msm_fb_data_type *mfd);
static int pp_ad_shutdown_cleanup(struct msm_fb_data_type *mfd);
static inline int pp_validate_dspp_mfd_block(struct msm_fb_data_type *mfd,
					int block);
static int pp_mfd_release_all(struct msm_fb_data_type *mfd);
static int pp_mfd_ad_release_all(struct msm_fb_data_type *mfd);

static u32 last_sts, last_state;

@@ -2416,10 +2417,10 @@ int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd)
		pr_err("Invalid mfd %p mdata %p\n", mfd, mdata);
		return -EPERM;
	}
	if (mdata->nad_cfgs) {

	if (mdata->nad_cfgs)
		mfd->mdp.ad_calc_bl = pp_ad_calc_bl;
		mfd->mdp.ad_shutdown_cleanup = pp_ad_shutdown_cleanup;
	}
	mfd->mdp.pp_release_fnc = pp_mfd_release_all;
	return 0;
}

@@ -6588,7 +6589,25 @@ static int mdss_mdp_mfd_valid_ad(struct msm_fb_data_type *mfd)
	return valid_ad;
}

static int pp_ad_shutdown_cleanup(struct msm_fb_data_type *mfd)
static int pp_mfd_release_all(struct msm_fb_data_type *mfd)
{
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	int ret = 0;

	if (mdata->nad_cfgs) {
		ret = pp_mfd_ad_release_all(mfd);
		if (ret)
			pr_err("ad release all failed on disp %d, ret %d\n",
				mfd->index, ret);
	}

	if (mdss_mdp_mfd_valid_dspp(mfd))
		mdss_mdp_hist_stop(mfd->index + MDP_LOGICAL_BLOCK_DISP_0);

	return ret;
}

static int pp_mfd_ad_release_all(struct msm_fb_data_type *mfd)
{
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	struct mdss_mdp_ctl *ctl = NULL;