From 0263204e97df2d2f5d422f50bf4d92d98455f7fc Mon Sep 17 00:00:00 2001 From: Bang Nguyen Date: Wed, 31 Jul 2019 09:46:07 -0500 Subject: [PATCH] disp: msm: Provide a dynamic method to disable the ESD. Providing a dynamic method to disable ESD detection and recovery with UTAGS. Port from: 3c35c27 Change-Id: I95a9861855dc0babfd69c392111b713ed7c89c0e Signed-off-by: Bang Nguyen Reviewed-on: https://gerrit.mot.com/1697323 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- msm/dsi/dsi_display.c | 13 +++++++++++++ msm/dsi/dsi_display.h | 7 +++++++ msm/sde/sde_connector.c | 6 ++++-- msm/sde/sde_connector.h | 7 +++++++ msm/sde/sde_kms.c | 3 +++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 17dde72d5b7c..2c917ddcb7e4 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -946,6 +946,19 @@ release_panel_lock: return rc; } +bool dsi_display_force_esd_disable(void *display) +{ + struct dsi_display *dsi_display = display; + struct dsi_panel *panel; + + if (dsi_display == NULL) + return false; + + panel = dsi_display->panel; + + return (panel->esd_utag_enable? false: true); +} + static int dsi_display_cmd_prepare(const char *cmd_buf, u32 cmd_buf_len, struct dsi_cmd_desc *cmd, u8 *payload, u32 payload_len) { diff --git a/msm/dsi/dsi_display.h b/msm/dsi/dsi_display.h index 6565f59713a7..c0efbbecf9ae 100644 --- a/msm/dsi/dsi_display.h +++ b/msm/dsi/dsi_display.h @@ -715,6 +715,13 @@ int dsi_display_motUtil_transfer(void *display, const char *cmd_buf, u32 cmd_buf_len, struct motUtil *motUtil_data); +/** + * dsi_display_force_esd_disable() - check if ESD UTAG is forced to disable ESD + * @display: Handle to display. + */ +bool dsi_display_force_esd_disable(void *display); + + /** * dsi_display_soft_reset() - perform a soft reset on DSI controller * @display: Handle to display diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index 404e8af8c80f..8ca87e51d4de 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -557,8 +557,10 @@ void sde_connector_schedule_status_work(struct drm_connector *connector, return; sde_connector_get_info(connector, &info); - if (c_conn->ops.check_status && - (info.capabilities & MSM_DISPLAY_ESD_ENABLED)) { + if ((c_conn->ops.force_esd_disable && + (c_conn->ops.force_esd_disable(c_conn->display) == false)) && + (c_conn->ops.check_status && + (info.capabilities & MSM_DISPLAY_ESD_ENABLED))) { if (en) { u32 interval; diff --git a/msm/sde/sde_connector.h b/msm/sde/sde_connector.h index 95054d4025f0..1453dde9c872 100644 --- a/msm/sde/sde_connector.h +++ b/msm/sde/sde_connector.h @@ -290,6 +290,13 @@ struct sde_connector_ops { int (*motUtil_transfer)(void *display, const char *cmd_buf, u32 cmd_buf_len, struct motUtil *motUtil_data); + /** + * force_esd_disable - force to disable check_status + * @display: Pointer to private display handle + * Returns: true for forcing ESD disable + */ + bool (*force_esd_disable)(void *display); + /** * config_hdr - configure HDR * @connector: Pointer to drm connector structure diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index d65e0751bc79..35ab0258b2bb 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1752,6 +1752,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev, .enable_event = dsi_conn_enable_event, .motUtil_transfer = dsi_display_motUtil_transfer, .cmd_transfer = dsi_display_cmd_transfer, + .force_esd_disable = dsi_display_force_esd_disable, .cont_splash_config = dsi_display_cont_splash_config, .cont_splash_res_disable = dsi_display_cont_splash_res_disable, .get_panel_vfp = dsi_display_get_panel_vfp, @@ -1775,6 +1776,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev, .get_dst_format = NULL, .check_status = NULL, .cmd_transfer = NULL, + .force_esd_disable = NULL, .cont_splash_config = NULL, .cont_splash_res_disable = NULL, .get_panel_vfp = NULL, @@ -1795,6 +1797,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev, .set_colorspace = dp_connector_set_colorspace, .config_hdr = dp_connector_config_hdr, .cmd_transfer = NULL, + .force_esd_disable = NULL, .cont_splash_config = NULL, .cont_splash_res_disable = NULL, .get_panel_vfp = NULL,