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

Commit 3d800556 authored by Sachin Bhayare's avatar Sachin Bhayare
Browse files

msm: mdss: avoid sending panel off command during TWM entry



Provide sysfs node to indicate TWM entry and do not
send panel off command when TWM entry is initiated.

Change-Id: I23b2f378ec7810dc6052c2927435bec8aab1b785
Signed-off-by: default avatarSachin Bhayare <sachin.bhayare@codeaurora.org>
parent 5c2db441
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -2675,9 +2675,41 @@ static ssize_t mdp3_show_smart_blit(struct device *dev,
static DEVICE_ATTR(smart_blit, S_IRUGO | S_IWUSR | S_IWGRP,
			mdp3_show_smart_blit, mdp3_store_smart_blit);

static ssize_t mdp3_store_twm(struct device *dev,
		struct device_attribute *attr, const char *buf, size_t len)
{
	u32 data = -1;
	ssize_t rc = 0;

	rc = kstrtoint(buf, 10, &data);
	if (rc) {
		pr_err("kstrtoint failed. rc=%d\n", rc);
		return rc;
	}
	mdp3_res->twm_en = data ? true : false;
	pr_err("TWM :  %s\n",	(mdp3_res->twm_en) ?
		"ENABLED" : "DISABLED");
	return len;
}

static ssize_t mdp3_show_twm(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	ssize_t ret = 0;

	pr_err("TWM :  %s\n",	(mdp3_res->twm_en) ?
		"ENABLED" : "DISABLED");
	ret = snprintf(buf, PAGE_SIZE, "%d\n", mdp3_res->twm_en);
	return ret;
}

static DEVICE_ATTR(twm_enable, S_IRUGO | S_IWUSR | S_IWGRP,
			mdp3_show_twm, mdp3_store_twm);

static struct attribute *mdp3_fs_attrs[] = {
	&dev_attr_caps.attr,
	&dev_attr_smart_blit.attr,
	&dev_attr_twm_enable.attr,
	NULL
};

@@ -2939,6 +2971,7 @@ static int mdp3_probe(struct platform_device *pdev)
		mdp3_dynamic_clock_gating_ctrl;
	mdp3_res->mdss_util->panel_intf_type = mdp3_panel_intf_type;
	mdp3_res->mdss_util->panel_intf_status = mdp3_panel_get_intf_status;
	mdp3_res->twm_en = false;

	if (mdp3_res->mdss_util->param_check(mdss_mdp3_panel)) {
		mdp3_res->mdss_util->display_disabled = true;
+1 −1
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ struct mdp3_hw_resource {
	struct mutex reg_bus_lock;
	int bklt_level;
	int bklt_update;

	bool twm_en;
	u32 max_bw;

	u8 ppp_formats[BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)];
+17 −5
Original line number Diff line number Diff line
@@ -1029,6 +1029,11 @@ end:
	return rc;
}

static bool mdp3_is_twm_en(void)
{
	return mdp3_res->twm_en;
}

static int mdp3_ctrl_off(struct msm_fb_data_type *mfd)
{
	int rc = 0;
@@ -1074,9 +1079,11 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd)
			pr_debug("fb%d is off already", mfd->index);
			goto off_error;
		}
		if (panel && panel->set_backlight)
		if (panel && panel->set_backlight) {
			if (!mdp3_is_twm_en())
				panel->set_backlight(panel, 0);
		}
	}

	/*
	* While transitioning from interactive to low power,
@@ -1114,9 +1121,13 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd)
		mdp3_irq_deregister();
	}

	if (panel->event_handler)
	if (panel->event_handler) {
		if (mdp3_is_twm_en())
			pr_info("TWM Enabled skip MDSS_EVENT_PANEL_OFF\n");
		else
			rc = panel->event_handler(panel, MDSS_EVENT_PANEL_OFF,
				(void *) (long int)mfd->panel_power_state);
	}
	if (rc)
		pr_err("EVENT_PANEL_OFF error (%d)\n", rc);

@@ -2962,6 +2973,7 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd)
	mdp3_interface->configure_panel = mdp3_update_panel_info;
	mdp3_interface->input_event_handler = NULL;
	mdp3_interface->signal_retire_fence = NULL;
	mdp3_interface->is_twm_en = mdp3_is_twm_en;

	mdp3_session = kzalloc(sizeof(struct mdp3_session_data), GFP_KERNEL);
	if (!mdp3_session) {
+8 −0
Original line number Diff line number Diff line
@@ -196,12 +196,20 @@ int mdp3_ppp_verify_res(struct mdp_blit_req *req)

	if (((req->src_rect.x + req->src_rect.w) > req->src.width) ||
	    ((req->src_rect.y + req->src_rect.h) > req->src.height)) {
		pr_err("%s: src roi (x=%d,y=%d,w=%d, h=%d) WxH(%dx%d)\n",
			 __func__, req->src_rect.x, req->src_rect.y,
			req->src_rect.w, req->src_rect.h, req->src.width,
			req->src.height);
		pr_err("%s: src roi larger than boundary\n", __func__);
		return -EINVAL;
	}

	if (((req->dst_rect.x + req->dst_rect.w) > req->dst.width) ||
	    ((req->dst_rect.y + req->dst_rect.h) > req->dst.height)) {
		pr_err("%s: dst roi (x=%d,y=%d,w=%d, h=%d) WxH(%dx%d)\n",
			 __func__, req->dst_rect.x, req->dst_rect.y,
			req->dst_rect.w, req->dst_rect.h, req->dst.width,
			req->dst.height);
		pr_err("%s: dst roi larger than boundary\n", __func__);
		return -EINVAL;
	}
+2 −1
Original line number Diff line number Diff line
@@ -1710,7 +1710,8 @@ static int mdss_dsi_blank(struct mdss_panel_data *pdata, int power_state)
			ATRACE_BEGIN("dsi_panel_off");
			ret = ctrl_pdata->off(pdata);
			if (ret) {
				pr_err("%s: Panel OFF failed\n", __func__);
				pr_err("%s: Panel OFF failed\n",
					__func__);
				goto error;
			}
			ATRACE_END("dsi_panel_off");
Loading