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

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

Merge "drm/msm/sde: enable backlight in ESD recovery case" into msm-4.9

parents 0d72b739 9eee1933
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ static void dsi_bridge_enable(struct drm_bridge *bridge)
{
	int rc = 0;
	struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
	struct dsi_display *display;

	if (!bridge) {
		pr_err("Invalid params\n");
@@ -197,11 +198,15 @@ static void dsi_bridge_enable(struct drm_bridge *bridge)
		pr_debug("[%d] seamless enable\n", c_bridge->id);
		return;
	}
	display = c_bridge->display;

	rc = dsi_display_post_enable(c_bridge->display);
	rc = dsi_display_post_enable(display);
	if (rc)
		pr_err("[%d] DSI display post enabled failed, rc=%d\n",
		       c_bridge->id, rc);

	if (display && display->drm_conn)
		sde_connector_helper_bridge_enable(display->drm_conn);
}

static void dsi_bridge_disable(struct drm_bridge *bridge)
+28 −2
Original line number Diff line number Diff line
@@ -623,6 +623,7 @@ int sde_connector_pre_kickoff(struct drm_connector *connector)
void sde_connector_helper_bridge_disable(struct drm_connector *connector)
{
	int rc;
	struct sde_connector *c_conn = NULL;

	if (!connector)
		return;
@@ -633,6 +634,31 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector)
				connector->base.id, rc);
		SDE_EVT32(connector->base.id, SDE_EVTLOG_ERROR);
	}

	c_conn = to_sde_connector(connector);
	if (c_conn->panel_dead) {
		c_conn->bl_device->props.power = FB_BLANK_POWERDOWN;
		c_conn->bl_device->props.state |= BL_CORE_FBBLANK;
		backlight_update_status(c_conn->bl_device);
	}
}

void sde_connector_helper_bridge_enable(struct drm_connector *connector)
{
	struct sde_connector *c_conn = NULL;

	if (!connector)
		return;

	c_conn = to_sde_connector(connector);

	/* Special handling for ESD recovery case */
	if (c_conn->panel_dead) {
		c_conn->bl_device->props.power = FB_BLANK_UNBLANK;
		c_conn->bl_device->props.state &= ~BL_CORE_FBBLANK;
		backlight_update_status(c_conn->bl_device);
		c_conn->panel_dead = false;
	}
}

int sde_connector_clk_ctrl(struct drm_connector *connector, bool enable)
@@ -1734,15 +1760,15 @@ sde_connector_best_encoder(struct drm_connector *connector)
static void _sde_connector_report_panel_dead(struct sde_connector *conn)
{
	struct drm_event event;
	bool panel_dead = true;

	if (!conn)
		return;

	conn->panel_dead = true;
	event.type = DRM_EVENT_PANEL_DEAD;
	event.length = sizeof(bool);
	msm_mode_object_event_notify(&conn->base.base,
		conn->base.dev, &event, (u8 *)&panel_dead);
		conn->base.dev, &event, (u8 *)&conn->panel_dead);
	sde_encoder_display_failure_notification(conn->encoder);
	SDE_EVT32(SDE_EVTLOG_ERROR);
	SDE_ERROR("esd check failed report PANEL_DEAD conn_id: %d enc_id: %d\n",
+9 −1
Original line number Diff line number Diff line
@@ -324,6 +324,8 @@ struct sde_connector_evt {
 * @status_work: work object to perform status checks
 * @force_panel_dead: variable to trigger forced ESD recovery
 * @esd_status_interval: variable to change ESD check interval in millisec
 * @panel_dead: Flag to indicate if panel has gone bad
 * @esd_status_check: Flag to indicate if ESD thread is scheduled or not
 * @bl_scale_dirty: Flag to indicate PP BL scale value(s) is changed
 * @bl_scale: BL scale value for ABA feature
 * @bl_scale_ad: BL scale value for AD feature
@@ -365,7 +367,7 @@ struct sde_connector {
	struct delayed_work status_work;
	u32 force_panel_dead;
	u32 esd_status_interval;

	bool panel_dead;
	bool esd_status_check;

	bool bl_scale_dirty;
@@ -762,6 +764,12 @@ void sde_conn_timeline_status(struct drm_connector *conn);
 */
void sde_connector_helper_bridge_disable(struct drm_connector *connector);

/**
 * sde_connector_helper_bridge_enable - helper function for drm bridge enable
 * @connector: Pointer to DRM connector object
 */
void sde_connector_helper_bridge_enable(struct drm_connector *connector);

/**
 * sde_connector_get_panel_vfp - helper to get panel vfp
 * @connector: pointer to drm connector