disp: msm: dsi: disallow backlight update during panel mode switch
DSI controller and clock will be disabled/enabled during panel mode switch, so disallow backlight update during panel mode switch to avoiding DSI exception. Change-Id: I37e2f3c9aa929555593ffb53950521150ee7698f Signed-off-by: Lei Chen <chenlei@codeaurora.org> Signed-off-by: Satya Rama Aditya Pinapala <psraditya30@codeaurora.org>
This commit is contained in:

committed by
Satya Rama Aditya Pinapala

parent
7d33aeb87e
commit
3842597275
@@ -253,6 +253,7 @@ static void dsi_bridge_enable(struct drm_bridge *bridge)
|
|||||||
static void dsi_bridge_disable(struct drm_bridge *bridge)
|
static void dsi_bridge_disable(struct drm_bridge *bridge)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
int private_flags;
|
||||||
struct dsi_display *display;
|
struct dsi_display *display;
|
||||||
struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
|
struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
|
||||||
|
|
||||||
@@ -261,18 +262,14 @@ static void dsi_bridge_disable(struct drm_bridge *bridge)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
display = c_bridge->display;
|
display = c_bridge->display;
|
||||||
|
private_flags =
|
||||||
|
bridge->encoder->crtc->state->adjusted_mode.private_flags;
|
||||||
|
|
||||||
if (display && display->drm_conn) {
|
if (display && display->drm_conn) {
|
||||||
if (bridge->encoder->crtc->state->adjusted_mode.private_flags &
|
display->poms_pending =
|
||||||
MSM_MODE_FLAG_SEAMLESS_POMS) {
|
private_flags & MSM_MODE_FLAG_SEAMLESS_POMS;
|
||||||
display->poms_pending = true;
|
|
||||||
/* Disable ESD thread, during panel mode switch */
|
sde_connector_helper_bridge_disable(display->drm_conn);
|
||||||
sde_connector_schedule_status_work(display->drm_conn,
|
|
||||||
false);
|
|
||||||
} else {
|
|
||||||
display->poms_pending = false;
|
|
||||||
sde_connector_helper_bridge_disable(display->drm_conn);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = dsi_display_pre_disable(c_bridge->display);
|
rc = dsi_display_pre_disable(c_bridge->display);
|
||||||
|
@@ -94,8 +94,7 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
|
|||||||
if (!bl_lvl && brightness)
|
if (!bl_lvl && brightness)
|
||||||
bl_lvl = 1;
|
bl_lvl = 1;
|
||||||
|
|
||||||
if (display->panel->bl_config.bl_update ==
|
if (!c_conn->allow_bl_update) {
|
||||||
BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) {
|
|
||||||
c_conn->unset_bl_level = bl_lvl;
|
c_conn->unset_bl_level = bl_lvl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -532,9 +531,7 @@ static int _sde_connector_update_bl_scale(struct sde_connector *c_conn)
|
|||||||
|
|
||||||
bl_config = &dsi_display->panel->bl_config;
|
bl_config = &dsi_display->panel->bl_config;
|
||||||
|
|
||||||
if (dsi_display->panel->bl_config.bl_update ==
|
if (!c_conn->allow_bl_update) {
|
||||||
BL_UPDATE_DELAY_UNTIL_FIRST_FRAME &&
|
|
||||||
!c_conn->allow_bl_update) {
|
|
||||||
c_conn->unset_bl_level = bl_config->bl_level;
|
c_conn->unset_bl_level = bl_config->bl_level;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -797,21 +794,29 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector)
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
struct sde_connector *c_conn = NULL;
|
struct sde_connector *c_conn = NULL;
|
||||||
|
struct dsi_display *display;
|
||||||
|
bool poms_pending = false;
|
||||||
|
|
||||||
if (!connector)
|
if (!connector)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rc = _sde_connector_update_dirty_properties(connector);
|
c_conn = to_sde_connector(connector);
|
||||||
if (rc) {
|
if (c_conn->connector_type == DRM_MODE_CONNECTOR_DSI) {
|
||||||
SDE_ERROR("conn %d final pre kickoff failed %d\n",
|
display = (struct dsi_display *) c_conn->display;
|
||||||
connector->base.id, rc);
|
poms_pending = display->poms_pending;
|
||||||
SDE_EVT32(connector->base.id, SDE_EVTLOG_ERROR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!poms_pending) {
|
||||||
|
rc = _sde_connector_update_dirty_properties(connector);
|
||||||
|
if (rc) {
|
||||||
|
SDE_ERROR("conn %d final pre kickoff failed %d\n",
|
||||||
|
connector->base.id, rc);
|
||||||
|
SDE_EVT32(connector->base.id, SDE_EVTLOG_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Disable ESD thread */
|
/* Disable ESD thread */
|
||||||
sde_connector_schedule_status_work(connector, false);
|
sde_connector_schedule_status_work(connector, false);
|
||||||
|
|
||||||
c_conn = to_sde_connector(connector);
|
|
||||||
if (c_conn->bl_device) {
|
if (c_conn->bl_device) {
|
||||||
c_conn->bl_device->props.power = FB_BLANK_POWERDOWN;
|
c_conn->bl_device->props.power = FB_BLANK_POWERDOWN;
|
||||||
c_conn->bl_device->props.state |= BL_CORE_FBBLANK;
|
c_conn->bl_device->props.state |= BL_CORE_FBBLANK;
|
||||||
|
Reference in New Issue
Block a user