From 56c54021867ac29de6004189f2677f009e1fb463 Mon Sep 17 00:00:00 2001 From: Bang Nguyen Date: Tue, 20 Aug 2019 15:00:13 -0500 Subject: [PATCH] disp: msm: provide API to query for panel enable state This dsi_display_is_panel_enable(int panel_index) API will take in panel_index equal 0 for Primary and 1 for Seconday display. It will return TRUE if the panel is ON or FALSE when it's OFF Port from: 255270c Change-Id: Idbc4cc507336104d941a6b2868f9bdf47e5bdaa2 Signed-off-by: Bang Nguyen Reviewed-on: https://gerrit.mot.com/1444402 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Submit-Approved: Jira Key Reviewed-on: https://gerrit.mot.com/1509805 Reviewed-by: Hua Tan --- msm/dsi/dsi_display.c | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 8ad821723f2c..d8732f6ae0f8 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -7844,6 +7844,59 @@ int dsi_display_pre_commit(void *display, return rc; } +/* start of MMI_STOPSHIP section */ +struct dsi_enable_status { + struct dsi_display *display; + bool enable; +}; + +static struct dsi_enable_status enable_status[2]; + +static int dsi_display_enable_status (struct dsi_display *display, bool enable) +{ + int ret = 0; + + if (!strncmp("DSI-1", display->drm_conn->name, 5)) { + DSI_DEBUG("display->drm_conn->name=%s enable = %d MAIN_DISPLAY\n", + display->drm_conn->name, enable); + enable_status[0].display = display; + enable_status[0].enable = enable; + } else if (!strncmp("DSI-2", display->drm_conn->name, 5)) { + DSI_DEBUG("display->drm_conn->name=%s enable = %d CLI_DISPLAY\n", + display->drm_conn->name, enable); + enable_status[1].display = display; + enable_status[1].enable = enable; + } else { + DSI_ERR(" Invalid display->drm_conn->name = %s\n", + display->drm_conn->name); + ret = -EINVAL; + } + + return ret; +} + +bool dsi_display_is_panel_enable (int panel_index) +{ + struct dsi_display *display; + bool enable = false; + + if (panel_index > 1) { + pr_err("Invalid panel index =%d\n", panel_index); + return false; + } + + display = enable_status[panel_index].display; + if (display) { + mutex_lock(&display->display_lock); + enable = enable_status[panel_index].enable; + mutex_unlock(&display->display_lock); + } + + return enable; +} +EXPORT_SYMBOL(dsi_display_is_panel_enable); +/* end of MMI_STOPSHIP section */ + int dsi_display_enable(struct dsi_display *display) { int rc = 0; @@ -7898,6 +7951,8 @@ int dsi_display_enable(struct dsi_display *display) display->name, rc); goto error; } + + dsi_display_enable_status(display, true); } /* Block sending pps command if modeset is due to fps difference */ @@ -8064,6 +8119,8 @@ int dsi_display_disable(struct dsi_display *display) if (rc) DSI_ERR("[%s] display wake up failed, rc=%d\n", display->name, rc); + else + dsi_display_enable_status(display, false); if (display->config.panel_mode == DSI_OP_VIDEO_MODE) { rc = dsi_display_vid_engine_disable(display);