Loading drivers/video/msm/mdss/mdss_dsi.c +2 −1 Original line number Diff line number Diff line Loading @@ -1672,7 +1672,8 @@ int dsi_panel_device_register(struct device_node *pan_node, ctrl_pdata->panel_data.event_handler = mdss_dsi_event_handler; if (ctrl_pdata->status_mode == ESD_REG) if (ctrl_pdata->status_mode == ESD_REG || ctrl_pdata->status_mode == ESD_REG_NT35596) ctrl_pdata->check_status = mdss_dsi_reg_status_check; else if (ctrl_pdata->status_mode == ESD_BTA) ctrl_pdata->check_status = mdss_dsi_bta_status_check; Loading drivers/video/msm/mdss/mdss_dsi.h +4 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ enum dsi_panel_bl_ctrl { enum dsi_panel_status_mode { ESD_BTA, ESD_REG, ESD_REG_NT35596, ESD_MAX, }; Loading Loading @@ -271,6 +272,7 @@ struct mdss_dsi_ctrl_pdata { int (*off) (struct mdss_panel_data *pdata); int (*set_col_page_addr) (struct mdss_panel_data *pdata); int (*check_status) (struct mdss_dsi_ctrl_pdata *pdata); int (*check_read_status) (struct mdss_dsi_ctrl_pdata *pdata); int (*cmdlist_commit)(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp); void (*switch_mode) (struct mdss_panel_data *pdata, int mode); struct mdss_panel_data panel_data; Loading Loading @@ -321,7 +323,9 @@ struct mdss_dsi_ctrl_pdata { struct dsi_panel_cmds on_cmds; struct dsi_panel_cmds off_cmds; struct dsi_panel_cmds status_cmds; u32 status_cmds_rlen; u32 status_value; u32 status_error_count; struct dsi_panel_cmds video2cmd; struct dsi_panel_cmds cmd2video; Loading drivers/video/msm/mdss/mdss_dsi_host.c +2 −9 Original line number Diff line number Diff line Loading @@ -594,7 +594,7 @@ static int mdss_dsi_read_status(struct mdss_dsi_ctrl_pdata *ctrl) cmdreq.cmds = ctrl->status_cmds.cmds; cmdreq.cmds_cnt = ctrl->status_cmds.cmd_cnt; cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL | CMD_REQ_RX; cmdreq.rlen = 0; cmdreq.rlen = ctrl->status_cmds_rlen; cmdreq.cb = NULL; cmdreq.rbuf = ctrl->status_buf.data; Loading Loading @@ -634,14 +634,7 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata) mdss_dsi_set_tx_power_mode(1, &ctrl_pdata->panel_data); if (ret == 0) { if (ctrl_pdata->status_buf.data[0] != ctrl_pdata->status_value) { pr_err("%s: Read back value from panel is incorrect\n", __func__); ret = -EINVAL; } else { ret = 1; } ret = ctrl_pdata->check_read_status(ctrl_pdata); } else { pr_err("%s: Read status register returned error\n", __func__); } Loading drivers/video/msm/mdss/mdss_dsi_panel.c +62 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,12 @@ #define DT_CMD_HDR 6 /* NT35596 panel specific status variables */ #define NT35596_BUF_3_STATUS 0x02 #define NT35596_BUF_4_STATUS 0x40 #define NT35596_BUF_5_STATUS 0x80 #define NT35596_MAX_ERR_CNT 2 DEFINE_LED_TRIGGER(bl_led_trigger); void mdss_dsi_panel_pwm_cfg(struct mdss_dsi_ctrl_pdata *ctrl) Loading Loading @@ -934,6 +940,50 @@ static int mdss_dsi_parse_reset_seq(struct device_node *np, return 0; } static int mdss_dsi_gen_read_status(struct mdss_dsi_ctrl_pdata *ctrl_pdata) { if (ctrl_pdata->status_buf.data[0] != ctrl_pdata->status_value) { pr_err("%s: Read back value from panel is incorrect\n", __func__); return -EINVAL; } else { return 1; } } static int mdss_dsi_nt35596_read_status(struct mdss_dsi_ctrl_pdata *ctrl_pdata) { if (ctrl_pdata->status_buf.data[0] != ctrl_pdata->status_value) { ctrl_pdata->status_error_count = 0; pr_err("%s: Read back value from panel is incorrect\n", __func__); return -EINVAL; } else { if (ctrl_pdata->status_buf.data[3] != NT35596_BUF_3_STATUS) { ctrl_pdata->status_error_count = 0; } else { if ((ctrl_pdata->status_buf.data[4] == NT35596_BUF_4_STATUS) || (ctrl_pdata->status_buf.data[5] == NT35596_BUF_5_STATUS)) ctrl_pdata->status_error_count = 0; else ctrl_pdata->status_error_count++; if (ctrl_pdata->status_error_count >= NT35596_MAX_ERR_CNT) { ctrl_pdata->status_error_count = 0; pr_err("%s: Read value bad. Error_cnt = %i\n", __func__, ctrl_pdata->status_error_count); return -EINVAL; } } return 1; } } static void mdss_dsi_parse_roi_alignment(struct device_node *np, struct mdss_panel_info *pinfo) { Loading Loading @@ -1382,10 +1432,20 @@ static int mdss_panel_parse_dt(struct device_node *np, rc = of_property_read_string(np, "qcom,mdss-dsi-panel-status-check-mode", &data); if (!rc) { if (!strcmp(data, "bta_check")) if (!strcmp(data, "bta_check")) { ctrl_pdata->status_mode = ESD_BTA; else if (!strcmp(data, "reg_read")) } else if (!strcmp(data, "reg_read")) { ctrl_pdata->status_mode = ESD_REG; ctrl_pdata->status_cmds_rlen = 0; ctrl_pdata->check_read_status = mdss_dsi_gen_read_status; } else if (!strcmp(data, "reg_read_nt35596")) { ctrl_pdata->status_mode = ESD_REG_NT35596; ctrl_pdata->status_error_count = 0; ctrl_pdata->status_cmds_rlen = 8; ctrl_pdata->check_read_status = mdss_dsi_nt35596_read_status; } } rc = mdss_dsi_parse_panel_features(np, ctrl_pdata); Loading Loading
drivers/video/msm/mdss/mdss_dsi.c +2 −1 Original line number Diff line number Diff line Loading @@ -1672,7 +1672,8 @@ int dsi_panel_device_register(struct device_node *pan_node, ctrl_pdata->panel_data.event_handler = mdss_dsi_event_handler; if (ctrl_pdata->status_mode == ESD_REG) if (ctrl_pdata->status_mode == ESD_REG || ctrl_pdata->status_mode == ESD_REG_NT35596) ctrl_pdata->check_status = mdss_dsi_reg_status_check; else if (ctrl_pdata->status_mode == ESD_BTA) ctrl_pdata->check_status = mdss_dsi_bta_status_check; Loading
drivers/video/msm/mdss/mdss_dsi.h +4 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ enum dsi_panel_bl_ctrl { enum dsi_panel_status_mode { ESD_BTA, ESD_REG, ESD_REG_NT35596, ESD_MAX, }; Loading Loading @@ -271,6 +272,7 @@ struct mdss_dsi_ctrl_pdata { int (*off) (struct mdss_panel_data *pdata); int (*set_col_page_addr) (struct mdss_panel_data *pdata); int (*check_status) (struct mdss_dsi_ctrl_pdata *pdata); int (*check_read_status) (struct mdss_dsi_ctrl_pdata *pdata); int (*cmdlist_commit)(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp); void (*switch_mode) (struct mdss_panel_data *pdata, int mode); struct mdss_panel_data panel_data; Loading Loading @@ -321,7 +323,9 @@ struct mdss_dsi_ctrl_pdata { struct dsi_panel_cmds on_cmds; struct dsi_panel_cmds off_cmds; struct dsi_panel_cmds status_cmds; u32 status_cmds_rlen; u32 status_value; u32 status_error_count; struct dsi_panel_cmds video2cmd; struct dsi_panel_cmds cmd2video; Loading
drivers/video/msm/mdss/mdss_dsi_host.c +2 −9 Original line number Diff line number Diff line Loading @@ -594,7 +594,7 @@ static int mdss_dsi_read_status(struct mdss_dsi_ctrl_pdata *ctrl) cmdreq.cmds = ctrl->status_cmds.cmds; cmdreq.cmds_cnt = ctrl->status_cmds.cmd_cnt; cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL | CMD_REQ_RX; cmdreq.rlen = 0; cmdreq.rlen = ctrl->status_cmds_rlen; cmdreq.cb = NULL; cmdreq.rbuf = ctrl->status_buf.data; Loading Loading @@ -634,14 +634,7 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata) mdss_dsi_set_tx_power_mode(1, &ctrl_pdata->panel_data); if (ret == 0) { if (ctrl_pdata->status_buf.data[0] != ctrl_pdata->status_value) { pr_err("%s: Read back value from panel is incorrect\n", __func__); ret = -EINVAL; } else { ret = 1; } ret = ctrl_pdata->check_read_status(ctrl_pdata); } else { pr_err("%s: Read status register returned error\n", __func__); } Loading
drivers/video/msm/mdss/mdss_dsi_panel.c +62 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,12 @@ #define DT_CMD_HDR 6 /* NT35596 panel specific status variables */ #define NT35596_BUF_3_STATUS 0x02 #define NT35596_BUF_4_STATUS 0x40 #define NT35596_BUF_5_STATUS 0x80 #define NT35596_MAX_ERR_CNT 2 DEFINE_LED_TRIGGER(bl_led_trigger); void mdss_dsi_panel_pwm_cfg(struct mdss_dsi_ctrl_pdata *ctrl) Loading Loading @@ -934,6 +940,50 @@ static int mdss_dsi_parse_reset_seq(struct device_node *np, return 0; } static int mdss_dsi_gen_read_status(struct mdss_dsi_ctrl_pdata *ctrl_pdata) { if (ctrl_pdata->status_buf.data[0] != ctrl_pdata->status_value) { pr_err("%s: Read back value from panel is incorrect\n", __func__); return -EINVAL; } else { return 1; } } static int mdss_dsi_nt35596_read_status(struct mdss_dsi_ctrl_pdata *ctrl_pdata) { if (ctrl_pdata->status_buf.data[0] != ctrl_pdata->status_value) { ctrl_pdata->status_error_count = 0; pr_err("%s: Read back value from panel is incorrect\n", __func__); return -EINVAL; } else { if (ctrl_pdata->status_buf.data[3] != NT35596_BUF_3_STATUS) { ctrl_pdata->status_error_count = 0; } else { if ((ctrl_pdata->status_buf.data[4] == NT35596_BUF_4_STATUS) || (ctrl_pdata->status_buf.data[5] == NT35596_BUF_5_STATUS)) ctrl_pdata->status_error_count = 0; else ctrl_pdata->status_error_count++; if (ctrl_pdata->status_error_count >= NT35596_MAX_ERR_CNT) { ctrl_pdata->status_error_count = 0; pr_err("%s: Read value bad. Error_cnt = %i\n", __func__, ctrl_pdata->status_error_count); return -EINVAL; } } return 1; } } static void mdss_dsi_parse_roi_alignment(struct device_node *np, struct mdss_panel_info *pinfo) { Loading Loading @@ -1382,10 +1432,20 @@ static int mdss_panel_parse_dt(struct device_node *np, rc = of_property_read_string(np, "qcom,mdss-dsi-panel-status-check-mode", &data); if (!rc) { if (!strcmp(data, "bta_check")) if (!strcmp(data, "bta_check")) { ctrl_pdata->status_mode = ESD_BTA; else if (!strcmp(data, "reg_read")) } else if (!strcmp(data, "reg_read")) { ctrl_pdata->status_mode = ESD_REG; ctrl_pdata->status_cmds_rlen = 0; ctrl_pdata->check_read_status = mdss_dsi_gen_read_status; } else if (!strcmp(data, "reg_read_nt35596")) { ctrl_pdata->status_mode = ESD_REG_NT35596; ctrl_pdata->status_error_count = 0; ctrl_pdata->status_cmds_rlen = 8; ctrl_pdata->check_read_status = mdss_dsi_nt35596_read_status; } } rc = mdss_dsi_parse_panel_features(np, ctrl_pdata); Loading