disp: msm: sde: flush esd work before disabling the encoder
Flush ESD status work before resetting the encoder state during virt_disable sequence to avoid stale pointers being used in the ESD work. Change-Id: I4bb08a7a7ae33ad6386169667692736e554141c4 Signed-off-by: Kalyan Thota <quic_kalyant@quicinc.com>
This commit is contained in:
@@ -2769,7 +2769,7 @@ static void sde_connector_check_status_work(struct work_struct *work)
|
|||||||
dev = conn->base.dev->dev;
|
dev = conn->base.dev->dev;
|
||||||
|
|
||||||
if (!conn->ops.check_status || dev->power.is_suspended ||
|
if (!conn->ops.check_status || dev->power.is_suspended ||
|
||||||
(conn->dpms_mode != DRM_MODE_DPMS_ON)) {
|
(conn->lp_mode == SDE_MODE_DPMS_OFF)) {
|
||||||
SDE_DEBUG("dpms mode: %d\n", conn->dpms_mode);
|
SDE_DEBUG("dpms mode: %d\n", conn->dpms_mode);
|
||||||
mutex_unlock(&conn->lock);
|
mutex_unlock(&conn->lock);
|
||||||
return;
|
return;
|
||||||
|
@@ -3066,6 +3066,7 @@ void sde_encoder_virt_reset(struct drm_encoder *drm_enc)
|
|||||||
static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
|
static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
|
||||||
{
|
{
|
||||||
struct sde_encoder_virt *sde_enc = NULL;
|
struct sde_encoder_virt *sde_enc = NULL;
|
||||||
|
struct sde_connector *sde_conn;
|
||||||
struct sde_kms *sde_kms;
|
struct sde_kms *sde_kms;
|
||||||
enum sde_intf_mode intf_mode;
|
enum sde_intf_mode intf_mode;
|
||||||
int ret, i = 0;
|
int ret, i = 0;
|
||||||
@@ -3087,6 +3088,7 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sde_enc = to_sde_encoder_virt(drm_enc);
|
sde_enc = to_sde_encoder_virt(drm_enc);
|
||||||
|
sde_conn = to_sde_connector(sde_enc->cur_master->connector);
|
||||||
SDE_DEBUG_ENC(sde_enc, "\n");
|
SDE_DEBUG_ENC(sde_enc, "\n");
|
||||||
|
|
||||||
sde_kms = sde_encoder_get_kms(&sde_enc->base);
|
sde_kms = sde_encoder_get_kms(&sde_enc->base);
|
||||||
@@ -3103,6 +3105,7 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
|
|||||||
|
|
||||||
_sde_encoder_input_handler_unregister(drm_enc);
|
_sde_encoder_input_handler_unregister(drm_enc);
|
||||||
|
|
||||||
|
flush_delayed_work(&sde_conn->status_work);
|
||||||
/*
|
/*
|
||||||
* For primary command mode and video mode encoders, execute the
|
* For primary command mode and video mode encoders, execute the
|
||||||
* resource control pre-stop operations before the physical encoders
|
* resource control pre-stop operations before the physical encoders
|
||||||
|
Reference in New Issue
Block a user