Loading drivers/video/msm/mdss/mdss_dba_utils.c +74 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -38,6 +38,7 @@ struct mdss_dba_utils_data { struct mdss_panel_info *pinfo; void *dba_data; void *edid_data; void *timing_data; void *cec_abst_data; u8 *edid_buf; u32 edid_buf_size; Loading Loading @@ -648,6 +649,72 @@ void mdss_dba_utils_hdcp_enable(void *data, bool enable) ud->ops.hdcp_enable(ud->dba_data, enable, enable, 0); } void mdss_dba_update_lane_cfg(struct mdss_panel_info *pinfo) { struct mdss_dba_utils_data *dba_data; struct mdss_dba_timing_info *cfg_tbl; int i = 0, lanes; if (NULL == pinfo) return; /* * Restore to default value from DT * if resolution not found in * supported resolutions */ lanes = pinfo->mipi.default_lanes; dba_data = (struct mdss_dba_utils_data *)(pinfo->dba_data); if (NULL == dba_data) goto lane_cfg; /* get adv supported timing info */ cfg_tbl = (struct mdss_dba_timing_info *)(dba_data->timing_data); if (NULL == cfg_tbl) goto lane_cfg; while (cfg_tbl[i].xres != 0xffff) { if (cfg_tbl[i].xres == pinfo->xres && cfg_tbl[i].yres == pinfo->yres && cfg_tbl[i].bpp == pinfo->bpp && cfg_tbl[i].fps == pinfo->mipi.frame_rate) { lanes = cfg_tbl[i].lanes; break; } i++; } lane_cfg: switch (lanes) { case 1: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 0; pinfo->mipi.data_lane2 = 0; pinfo->mipi.data_lane3 = 0; break; case 2: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 1; pinfo->mipi.data_lane2 = 0; pinfo->mipi.data_lane3 = 0; break; case 3: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 1; pinfo->mipi.data_lane2 = 1; pinfo->mipi.data_lane3 = 0; break; case 4: default: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 1; pinfo->mipi.data_lane2 = 1; pinfo->mipi.data_lane3 = 1; break; } } /** * mdss_dba_utils_init() - Allow clients to register with DBA utils * @uid: Initialization data for registration. Loading Loading @@ -760,6 +827,12 @@ void *mdss_dba_utils_init(struct mdss_dba_utils_init_data *uid) goto error; } /* get the timing data for the adv chip */ if (udata->ops.get_supp_timing_info) udata->timing_data = udata->ops.get_supp_timing_info(); else udata->timing_data = NULL; /* update cec data to retrieve it back in cec abstract module */ if (uid->pinfo) { uid->pinfo->is_cec_supported = true; Loading drivers/video/msm/mdss/mdss_dba_utils.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -46,4 +46,5 @@ void mdss_dba_utils_hdcp_enable(void *data, bool enable); void *mdss_dba_utils_init(struct mdss_dba_utils_init_data *init_data); void mdss_dba_utils_deinit(void *data); void mdss_dba_update_lane_cfg(struct mdss_panel_info *pinfo); #endif /* __MDSS_DBA_UTILS__ */ drivers/video/msm/mdss/mdss_dsi.c +22 −0 Original line number Diff line number Diff line Loading @@ -2237,6 +2237,23 @@ static int mdss_dsi_check_params(struct mdss_dsi_ctrl_pdata *ctrl, void *arg) return rc; } #ifdef TARGET_HW_MDSS_HDMI static void mdss_dsi_update_params(struct mdss_dsi_ctrl_pdata *ctrl, void *arg) { struct mdss_panel_info *pinfo; if (!ctrl || !arg) return; pinfo = &ctrl->panel_data.panel_info; mdss_dba_update_lane_cfg(pinfo); } #else static void mdss_dsi_update_params(struct mdss_dsi_ctrl_pdata *ctrl, void *arg) { } #endif static int mdss_dsi_dfps_config(struct mdss_panel_data *pdata, int new_fps) { int rc = 0; Loading Loading @@ -2589,6 +2606,11 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, MDSS_XLOG(event, arg, ctrl_pdata->ndx, 0x3333); switch (event) { case MDSS_EVENT_UPDATE_PARAMS: pr_debug("%s:Entered Case MDSS_EVENT_UPDATE_PARAMS\n", __func__); mdss_dsi_update_params(ctrl_pdata, arg); break; case MDSS_EVENT_CHECK_PARAMS: pr_debug("%s:Entered Case MDSS_EVENT_CHECK_PARAMS\n", __func__); if (mdss_dsi_check_params(ctrl_pdata, arg)) { Loading drivers/video/msm/mdss/mdss_dsi_panel.c +15 −0 Original line number Diff line number Diff line Loading @@ -2527,6 +2527,7 @@ static int mdss_panel_parse_dt(struct device_node *np, struct mdss_dsi_ctrl_pdata *ctrl_pdata) { u32 tmp; u8 lanes = 0; int rc = 0; const char *data; static const char *pdest; Loading Loading @@ -2673,6 +2674,20 @@ static int mdss_panel_parse_dt(struct device_node *np, pinfo->mipi.data_lane3 = of_property_read_bool(np, "qcom,mdss-dsi-lane-3-state"); if (pinfo->mipi.data_lane0) lanes++; if (pinfo->mipi.data_lane1) lanes++; if (pinfo->mipi.data_lane2) lanes++; if (pinfo->mipi.data_lane3) lanes++; /* * needed to set default lanes during * resolution switch for bridge chips */ pinfo->mipi.default_lanes = lanes; rc = mdss_panel_parse_display_timings(np, &ctrl_pdata->panel_data); if (rc) return rc; Loading drivers/video/msm/mdss/mdss_fb.c +4 −0 Original line number Diff line number Diff line Loading @@ -3901,6 +3901,10 @@ static int mdss_fb_set_par(struct fb_info *info) if (mfd->panel_reconfig || (mfd->fb_imgType != old_imgType)) { mdss_fb_blank_sub(FB_BLANK_POWERDOWN, info, mfd->op_enable); mdss_fb_var_to_panelinfo(var, mfd->panel_info); if (mfd->panel_info->is_dba_panel && mdss_fb_send_panel_event(mfd, MDSS_EVENT_UPDATE_PARAMS, mfd->panel_info)) pr_debug("Failed to send panel event UPDATE_PARAMS\n"); mdss_fb_blank_sub(FB_BLANK_UNBLANK, info, mfd->op_enable); mfd->panel_reconfig = false; } Loading Loading
drivers/video/msm/mdss/mdss_dba_utils.c +74 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -38,6 +38,7 @@ struct mdss_dba_utils_data { struct mdss_panel_info *pinfo; void *dba_data; void *edid_data; void *timing_data; void *cec_abst_data; u8 *edid_buf; u32 edid_buf_size; Loading Loading @@ -648,6 +649,72 @@ void mdss_dba_utils_hdcp_enable(void *data, bool enable) ud->ops.hdcp_enable(ud->dba_data, enable, enable, 0); } void mdss_dba_update_lane_cfg(struct mdss_panel_info *pinfo) { struct mdss_dba_utils_data *dba_data; struct mdss_dba_timing_info *cfg_tbl; int i = 0, lanes; if (NULL == pinfo) return; /* * Restore to default value from DT * if resolution not found in * supported resolutions */ lanes = pinfo->mipi.default_lanes; dba_data = (struct mdss_dba_utils_data *)(pinfo->dba_data); if (NULL == dba_data) goto lane_cfg; /* get adv supported timing info */ cfg_tbl = (struct mdss_dba_timing_info *)(dba_data->timing_data); if (NULL == cfg_tbl) goto lane_cfg; while (cfg_tbl[i].xres != 0xffff) { if (cfg_tbl[i].xres == pinfo->xres && cfg_tbl[i].yres == pinfo->yres && cfg_tbl[i].bpp == pinfo->bpp && cfg_tbl[i].fps == pinfo->mipi.frame_rate) { lanes = cfg_tbl[i].lanes; break; } i++; } lane_cfg: switch (lanes) { case 1: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 0; pinfo->mipi.data_lane2 = 0; pinfo->mipi.data_lane3 = 0; break; case 2: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 1; pinfo->mipi.data_lane2 = 0; pinfo->mipi.data_lane3 = 0; break; case 3: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 1; pinfo->mipi.data_lane2 = 1; pinfo->mipi.data_lane3 = 0; break; case 4: default: pinfo->mipi.data_lane0 = 1; pinfo->mipi.data_lane1 = 1; pinfo->mipi.data_lane2 = 1; pinfo->mipi.data_lane3 = 1; break; } } /** * mdss_dba_utils_init() - Allow clients to register with DBA utils * @uid: Initialization data for registration. Loading Loading @@ -760,6 +827,12 @@ void *mdss_dba_utils_init(struct mdss_dba_utils_init_data *uid) goto error; } /* get the timing data for the adv chip */ if (udata->ops.get_supp_timing_info) udata->timing_data = udata->ops.get_supp_timing_info(); else udata->timing_data = NULL; /* update cec data to retrieve it back in cec abstract module */ if (uid->pinfo) { uid->pinfo->is_cec_supported = true; Loading
drivers/video/msm/mdss/mdss_dba_utils.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -46,4 +46,5 @@ void mdss_dba_utils_hdcp_enable(void *data, bool enable); void *mdss_dba_utils_init(struct mdss_dba_utils_init_data *init_data); void mdss_dba_utils_deinit(void *data); void mdss_dba_update_lane_cfg(struct mdss_panel_info *pinfo); #endif /* __MDSS_DBA_UTILS__ */
drivers/video/msm/mdss/mdss_dsi.c +22 −0 Original line number Diff line number Diff line Loading @@ -2237,6 +2237,23 @@ static int mdss_dsi_check_params(struct mdss_dsi_ctrl_pdata *ctrl, void *arg) return rc; } #ifdef TARGET_HW_MDSS_HDMI static void mdss_dsi_update_params(struct mdss_dsi_ctrl_pdata *ctrl, void *arg) { struct mdss_panel_info *pinfo; if (!ctrl || !arg) return; pinfo = &ctrl->panel_data.panel_info; mdss_dba_update_lane_cfg(pinfo); } #else static void mdss_dsi_update_params(struct mdss_dsi_ctrl_pdata *ctrl, void *arg) { } #endif static int mdss_dsi_dfps_config(struct mdss_panel_data *pdata, int new_fps) { int rc = 0; Loading Loading @@ -2589,6 +2606,11 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, MDSS_XLOG(event, arg, ctrl_pdata->ndx, 0x3333); switch (event) { case MDSS_EVENT_UPDATE_PARAMS: pr_debug("%s:Entered Case MDSS_EVENT_UPDATE_PARAMS\n", __func__); mdss_dsi_update_params(ctrl_pdata, arg); break; case MDSS_EVENT_CHECK_PARAMS: pr_debug("%s:Entered Case MDSS_EVENT_CHECK_PARAMS\n", __func__); if (mdss_dsi_check_params(ctrl_pdata, arg)) { Loading
drivers/video/msm/mdss/mdss_dsi_panel.c +15 −0 Original line number Diff line number Diff line Loading @@ -2527,6 +2527,7 @@ static int mdss_panel_parse_dt(struct device_node *np, struct mdss_dsi_ctrl_pdata *ctrl_pdata) { u32 tmp; u8 lanes = 0; int rc = 0; const char *data; static const char *pdest; Loading Loading @@ -2673,6 +2674,20 @@ static int mdss_panel_parse_dt(struct device_node *np, pinfo->mipi.data_lane3 = of_property_read_bool(np, "qcom,mdss-dsi-lane-3-state"); if (pinfo->mipi.data_lane0) lanes++; if (pinfo->mipi.data_lane1) lanes++; if (pinfo->mipi.data_lane2) lanes++; if (pinfo->mipi.data_lane3) lanes++; /* * needed to set default lanes during * resolution switch for bridge chips */ pinfo->mipi.default_lanes = lanes; rc = mdss_panel_parse_display_timings(np, &ctrl_pdata->panel_data); if (rc) return rc; Loading
drivers/video/msm/mdss/mdss_fb.c +4 −0 Original line number Diff line number Diff line Loading @@ -3901,6 +3901,10 @@ static int mdss_fb_set_par(struct fb_info *info) if (mfd->panel_reconfig || (mfd->fb_imgType != old_imgType)) { mdss_fb_blank_sub(FB_BLANK_POWERDOWN, info, mfd->op_enable); mdss_fb_var_to_panelinfo(var, mfd->panel_info); if (mfd->panel_info->is_dba_panel && mdss_fb_send_panel_event(mfd, MDSS_EVENT_UPDATE_PARAMS, mfd->panel_info)) pr_debug("Failed to send panel event UPDATE_PARAMS\n"); mdss_fb_blank_sub(FB_BLANK_UNBLANK, info, mfd->op_enable); mfd->panel_reconfig = false; } Loading