From 22c580f7fb449994cf60024c9fde9e54e0592f16 Mon Sep 17 00:00:00 2001 From: m00389129 <m00389129@notesmail.huawei.com> Date: Tue, 26 Sep 2017 19:12:20 +0800 Subject: [PATCH] lcd: fix bug,modify reliability plan when the screen can't be turned back to unblank mode 1.read 0x0d register when the panel was set to unblank mode,if the mark bit was set to all pixel off,set 0x13 cmd to set panel to normal mode. Signed-off-by: m00389129 <m00389129@notesmail.huawei.com> --- drivers/video/msm/mdss/mdp3_ctrl.c | 2 -- drivers/video/msm/mdss/mdss_fb.c | 36 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/drivers/video/msm/mdss/mdp3_ctrl.c b/drivers/video/msm/mdss/mdp3_ctrl.c index 55f6a84c09f6..67f1c7b9e41f 100755 --- a/drivers/video/msm/mdss/mdp3_ctrl.c +++ b/drivers/video/msm/mdss/mdp3_ctrl.c @@ -47,7 +47,6 @@ static int mdp3_ctrl_get_pack_pattern(u32 imgType); int mdp3_wait_for_dma_done(struct mdp3_session_data *session); -struct msm_fb_data_type *g_mfd = NULL; u32 mdp_lut_inverse16[MDP_LUT_SIZE] = { 0, 65536, 32768, 21845, 16384, 13107, 10923, 9362, 8192, 7282, 6554, 5958, 5461, 5041, 4681, 4369, 4096, 3855, 3641, 3449, 3277, 3121, 2979, 2849, 2731, @@ -2752,7 +2751,6 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd) u32 intf_type = MDP3_DMA_OUTPUT_SEL_DSI_VIDEO; int rc; int splash_mismatch = 0; - g_mfd = mfd; pr_info("mdp3_ctrl_init\n"); rc = mdp3_parse_dt_splash(mfd); if (rc) diff --git a/drivers/video/msm/mdss/mdss_fb.c b/drivers/video/msm/mdss/mdss_fb.c index 63a4f8ee54a4..4ab2d5223aa6 100755 --- a/drivers/video/msm/mdss/mdss_fb.c +++ b/drivers/video/msm/mdss/mdss_fb.c @@ -81,7 +81,7 @@ static struct fb_info *fbi_list[MAX_FBI_LIST]; static int fbi_list_index; -extern struct msm_fb_data_type *g_mfd; + static void *panel_lk_addr = NULL; static u32 mdss_fb_pseudo_palette[16] = { @@ -1013,7 +1013,7 @@ static ssize_t mdss_fb_get_image_mode(struct device *dev, struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; - int ret; + int ret = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; char *rx_buf = NULL; @@ -1089,7 +1089,7 @@ static ssize_t mdss_fb_get_pixel_mode(struct device *dev, struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; - int ret; + int ret = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; char *rx_buf = NULL; @@ -1165,7 +1165,7 @@ static ssize_t mdss_fb_get_signal_mode(struct device *dev, struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; - int ret; + int ret = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; char *rx_buf = NULL; @@ -1203,7 +1203,7 @@ static ssize_t mdss_fb_get_bright_mode(struct device *dev, struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; - int ret; + int ret = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; char *rx_buf = NULL; @@ -1279,7 +1279,7 @@ static ssize_t mdss_fb_get_bright_en_mode(struct device *dev, struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; - int ret; + int ret = 0; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; char *rx_buf = NULL; @@ -2275,7 +2275,7 @@ int mdss_fb_get_register_value(struct msm_fb_data_type* mfd, int reg, int *val) { struct mdss_panel_data* pdata; struct mdss_panel_info* pinfo; - int ret; + int ret = 0; struct mdss_dsi_ctrl_pdata* ctrl_pdata = NULL; char* rx_buf = NULL; @@ -2370,6 +2370,7 @@ static int mdss_fb_blank_unblank(struct msm_fb_data_type *mfd) { int ret = 0; int cur_power_state; + int reg_val = 0; if (!mfd) return -EINVAL; @@ -2450,6 +2451,16 @@ static int mdss_fb_blank_unblank(struct msm_fb_data_type *mfd) } error: + /*read 0x0d status reg to check whether the panel has been set to all pixel off, set 0x13 cmd to normal mode*/ + reg_val = -1; + mdss_fb_get_register_value(mfd, 0x0d, ®_val); + if (0x08 == reg_val) + { + pr_err("read 0x0d error:%d\n",reg_val); + mdss_set_short_cmd(mfd, 0x13, 0x00); + mdss_fb_get_register_value(mfd, 0x0d, ®_val); + pr_err("read 0x0d after set to normal mode:%d\n",reg_val); + } return ret; } @@ -4154,7 +4165,6 @@ static int __mdss_fb_display_thread(void *data) struct msm_fb_data_type *mfd = data; int ret; struct sched_param param; - int reg_val = 0; /* * this priority was found during empiric testing to have appropriate @@ -4176,16 +4186,6 @@ static int __mdss_fb_display_thread(void *data) break; MDSS_XLOG(mfd->index, XLOG_FUNC_ENTRY); - /*read 0x0d status reg to check whether the panel has been set to all pixel off, set 0x13 cmd to normal mode*/ - reg_val = -1; - mdss_fb_get_register_value(g_mfd, 0x0d, ®_val); - if (0x08 == reg_val) - { - pr_err("read 0x0d error:%d\n",reg_val); - mdss_set_short_cmd(g_mfd, 0x13, 0x00); - mdss_fb_get_register_value(g_mfd, 0x0d, ®_val); - pr_err("read 0x0d after set to normal mode:%d\n",reg_val); - } ret = __mdss_fb_perform_commit(mfd); MDSS_XLOG(mfd->index, XLOG_FUNC_EXIT); -- GitLab