From e60959b052f8301dc157fdf46489f194beaa5026 Mon Sep 17 00:00:00 2001 From: Rajeev Nandan Date: Tue, 1 Dec 2020 17:05:52 +0530 Subject: [PATCH] disp: msm: dsi: move backlight operations to post kickoff MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change moves the backlight update operation from drm bridge enable to connector post kickoff. When timing engine is enabled with programmable fetch enabled, the timing engine will start counting from the prog_fetch_start point (which is somewhere in VFP). It’s a grey area from that point to the actual panel vsync and SW should not trigger DMA command during that time. During display resume, sometimes the INTF timing engine do not get enabled completely at the first vblank irq. The backlight update cmd transfer trigger as part of the drm bridge enable can also take place at the same time, that may cause DSI cmd transfer failure. Change-Id: I2722d3c23012ef0e7bcc7f728ec5658318ce4e60 Signed-off-by: Rajeev Nandan --- msm/dsi/dsi_drm.c | 3 +++ msm/sde/sde_connector.c | 12 +++++++++++- msm/sde/sde_connector.h | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/msm/dsi/dsi_drm.c b/msm/dsi/dsi_drm.c index 4ce96806851e..8adea12ae80b 100644 --- a/msm/dsi/dsi_drm.c +++ b/msm/dsi/dsi_drm.c @@ -1094,6 +1094,9 @@ int dsi_conn_post_kickoff(struct drm_connector *connector, dsi_ctrl_setup_avr(display->ctrl[i].ctrl, enable); } + if (display->drm_conn) + sde_connector_helper_post_kickoff(display->drm_conn); + return 0; } diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index c31c9731bd13..aa1bc31e47fd 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -945,6 +945,17 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector) } 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); + c_conn->panel_dead = false; +} + +void sde_connector_helper_post_kickoff(struct drm_connector *connector) { struct sde_connector *c_conn = NULL; struct dsi_display *display; @@ -976,7 +987,6 @@ void sde_connector_helper_bridge_enable(struct drm_connector *connector) 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) diff --git a/msm/sde/sde_connector.h b/msm/sde/sde_connector.h index aad04d29f2f4..2e02ef640d2d 100644 --- a/msm/sde/sde_connector.h +++ b/msm/sde/sde_connector.h @@ -1086,4 +1086,10 @@ int sde_connector_get_panel_vfp(struct drm_connector *connector, */ int sde_connector_esd_status(struct drm_connector *connector); +/** + * sde_connector_helper_post_kickoff - helper function for drm connector post kickoff + * @connector: Pointer to DRM connector object + */ +void sde_connector_helper_post_kickoff(struct drm_connector *connector); + #endif /* _SDE_CONNECTOR_H_ */