Loading drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +6 −1 Original line number Diff line number Diff line Loading @@ -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"); Loading @@ -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) Loading drivers/gpu/drm/msm/sde/sde_connector.c +28 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) Loading Loading @@ -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", Loading drivers/gpu/drm/msm/sde/sde_connector.h +9 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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 Loading Loading
drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +6 −1 Original line number Diff line number Diff line Loading @@ -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"); Loading @@ -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) Loading
drivers/gpu/drm/msm/sde/sde_connector.c +28 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) Loading Loading @@ -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", Loading
drivers/gpu/drm/msm/sde/sde_connector.h +9 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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 Loading