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

Commit ec1d8c52 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: Add separate backlight notify update for AD attenuation"

parents dfb1a5d5 3b6d7a52
Loading
Loading
Loading
Loading
+26 −7
Original line number Diff line number Diff line
@@ -123,16 +123,21 @@ void mdss_fb_no_update_notify_timer_cb(unsigned long data)
	complete(&mfd->no_update.comp);
}

void mdss_fb_bl_update_notify(struct msm_fb_data_type *mfd)
void mdss_fb_bl_update_notify(struct msm_fb_data_type *mfd,
		uint32_t notification_type)
{
	if (!mfd) {
		pr_err("%s mfd NULL\n", __func__);
		return;
	}
	mutex_lock(&mfd->update.lock);
	if (mfd->update.is_suspend) {
		mutex_unlock(&mfd->update.lock);
		return;
	}
	if (mfd->update.ref_count > 0) {
		mutex_unlock(&mfd->update.lock);
		mfd->update.value = NOTIFY_TYPE_BL_UPDATE;
		mfd->update.value = notification_type;
		complete(&mfd->update.comp);
		mutex_lock(&mfd->update.lock);
	}
@@ -141,7 +146,7 @@ void mdss_fb_bl_update_notify(struct msm_fb_data_type *mfd)
	mutex_lock(&mfd->no_update.lock);
	if (mfd->no_update.ref_count > 0) {
		mutex_unlock(&mfd->no_update.lock);
		mfd->no_update.value = NOTIFY_TYPE_BL_UPDATE;
		mfd->no_update.value = notification_type;
		complete(&mfd->no_update.comp);
		mutex_lock(&mfd->no_update.lock);
	}
@@ -1195,6 +1200,7 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl)
{
	struct mdss_panel_data *pdata;
	u32 temp = bkl_lvl;
	bool ad_bl_notify_needed = false;
	bool bl_notify_needed = false;

	if ((((mdss_fb_is_power_off(mfd) && mfd->dcm_state != DCM_ENTER)
@@ -1211,9 +1217,7 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl)
	if ((pdata) && (pdata->set_backlight)) {
		if (mfd->mdp.ad_calc_bl)
			(*mfd->mdp.ad_calc_bl)(mfd, temp, &temp,
							&bl_notify_needed);
		if (bl_notify_needed)
			mdss_fb_bl_update_notify(mfd);
							&ad_bl_notify_needed);
		if (!IS_CALIB_MODE_BL(mfd))
			mdss_fb_scale_bl(mfd, &temp);
		/*
@@ -1227,11 +1231,20 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl)
		if (mfd->bl_level_scaled == temp) {
			mfd->bl_level = bkl_lvl;
		} else {
			if (mfd->bl_level != bkl_lvl)
				bl_notify_needed = true;
			pr_debug("backlight sent to panel :%d\n", temp);
			pdata->set_backlight(pdata, temp);
			mfd->bl_level = bkl_lvl;
			mfd->bl_level_scaled = temp;
		}

		if (ad_bl_notify_needed)
			mdss_fb_bl_update_notify(mfd,
					NOTIFY_TYPE_BL_AD_ATTEN_UPDATE);
		else if (bl_notify_needed)
			mdss_fb_bl_update_notify(mfd,
					NOTIFY_TYPE_BL_UPDATE);
	}
}

@@ -1253,7 +1266,8 @@ void mdss_fb_update_backlight(struct msm_fb_data_type *mfd)
				(*mfd->mdp.ad_calc_bl)(mfd, temp, &temp,
								&bl_notify);
			if (bl_notify)
				mdss_fb_bl_update_notify(mfd);
				mdss_fb_bl_update_notify(mfd,
					NOTIFY_TYPE_BL_AD_ATTEN_UPDATE);
			pdata->set_backlight(pdata, temp);
			mfd->bl_level_scaled = mfd->unset_bl_level;
			mfd->bl_updated = 1;
@@ -1353,6 +1367,11 @@ static int mdss_fb_blank_blank(struct msm_fb_data_type *mfd,
	del_timer(&mfd->no_update.timer);
	mfd->no_update.value = NOTIFY_TYPE_SUSPEND;
	complete(&mfd->no_update.comp);
	if (mfd->mdp.stop_histogram)
		ret = (*mfd->mdp.stop_histogram)(mfd);
	if (ret)
		pr_err("Failed to stop histogram before suspend, fb idx = %d\n",
			mfd->index);

	mfd->op_enable = false;
	if (mdss_panel_is_power_off(req_power_state)) {
+1 −0
Original line number Diff line number Diff line
@@ -202,6 +202,7 @@ struct msm_mdp_interface {
	int (*lut_update)(struct msm_fb_data_type *mfd, struct fb_cmap *cmap);
	int (*do_histogram)(struct msm_fb_data_type *mfd,
				struct mdp_histogram *hist);
	int (*stop_histogram)(struct msm_fb_data_type *mfd);
	int (*ad_calc_bl)(struct msm_fb_data_type *mfd, int bl_in,
		int *bl_out, bool *bl_out_notify);
	int (*panel_register_done)(struct mdss_panel_data *pdata);
+7 −0
Original line number Diff line number Diff line
@@ -351,6 +351,7 @@ struct mdss_pp_res_type {
static DEFINE_MUTEX(mdss_pp_mutex);
static struct mdss_pp_res_type *mdss_pp_res;

static int pp_hist_stop_wrapper(struct msm_fb_data_type *mfd);
static u32 pp_hist_read(char __iomem *v_addr,
				struct pp_hist_col_info *hist_info);
static int pp_hist_setup(u32 *op, u32 block, struct mdss_mdp_mixer *mix);
@@ -2191,6 +2192,7 @@ int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd)
	}

	mfd->mdp.ad_calc_bl = pp_ad_calc_bl;
	mfd->mdp.stop_histogram = pp_hist_stop_wrapper;
	return 0;
}

@@ -3601,6 +3603,11 @@ exit:
	return ret;
}

static int pp_hist_stop_wrapper(struct msm_fb_data_type *mfd)
{
	return mdss_mdp_hist_stop(mfd->index + MDP_LOGICAL_BLOCK_DISP_0);
}

int mdss_mdp_hist_stop(u32 block)
{
	int i, ret = 0;
+1 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ enum {
	NOTIFY_TYPE_SUSPEND,
	NOTIFY_TYPE_UPDATE,
	NOTIFY_TYPE_BL_UPDATE,
	NOTIFY_TYPE_BL_AD_ATTEN_UPDATE,
};

enum {