Merge "disp: msm: dsi: follow the HPG guidelines for DATABUS_WIDEN"

This commit is contained in:
qctecmdr
2023-06-14 07:12:20 -07:00
committed by Gerrit - the friendly Code Review server
11 changed files with 77 additions and 37 deletions

View File

@@ -569,7 +569,7 @@ void dsi_ctrl_hw_cmn_setup_cmd_stream(struct dsi_ctrl_hw *ctrl,
this_frame_slices = pic_width / dsc.config.slice_width;
intf_ip_w = this_frame_slices * dsc.config.slice_width;
sde_dsc_populate_dsc_private_params(&dsc, intf_ip_w);
sde_dsc_populate_dsc_private_params(&dsc, intf_ip_w, ctrl->widebus_support);
width_final = dsc.bytes_per_pkt * dsc.pkt_per_line;
stride_final = dsc.bytes_per_pkt;

View File

@@ -7097,12 +7097,23 @@ int dsi_display_get_modes_helper(struct dsi_display *display,
memset(&display_mode, 0, sizeof(display_mode));
display_mode.priv_info = kzalloc(sizeof(*display_mode.priv_info), GFP_KERNEL);
if (!display_mode.priv_info) {
rc = -ENOMEM;
return rc;
}
/* Setup widebus support */
display_mode.priv_info->widebus_support = ctrl->ctrl->hw.widebus_support;
rc = dsi_panel_get_mode(display->panel, mode_idx,
&display_mode,
topology_override);
if (rc) {
DSI_ERR("[%s] failed to get mode idx %d from panel\n",
display->name, mode_idx);
kfree(display_mode.priv_info);
display_mode.priv_info = NULL;
rc = -EINVAL;
return rc;
}
@@ -7120,9 +7131,18 @@ int dsi_display_get_modes_helper(struct dsi_display *display,
else
nondsc_modes++;
/* Setup widebus support */
display_mode.priv_info->widebus_support =
ctrl->ctrl->hw.widebus_support;
/*
* Update the host_config.dst_format for compressed RGB101010 pixel format
* when there is no widebus support.
*/
if (host->dst_format == DSI_PIXEL_FORMAT_RGB101010 &&
display_mode.timing.dsc_enabled &&
!display_mode.priv_info->widebus_support) {
host->dst_format = DSI_PIXEL_FORMAT_RGB888;
DSI_DEBUG("updated dst_format from %d to %d\n",
DSI_PIXEL_FORMAT_RGB101010, host->dst_format);
}
num_dfps_rates = ((!dfps_caps.dfps_support ||
!support_video_mode) ? 1 : dfps_caps.dfps_list_len);

View File

@@ -695,7 +695,7 @@ int dsi_conn_get_mode_info(struct drm_connector *connector,
if (mode_info->comp_info.comp_type) {
tar_bpp = dsi_mode->priv_info->pclk_scale.numer;
src_bpp = dsi_mode->priv_info->pclk_scale.denom;
mode_info->comp_info.comp_ratio = mult_frac(1, src_bpp,
mode_info->comp_info.comp_ratio = mult_frac(100, src_bpp,
tar_bpp);
mode_info->wide_bus_en = dsi_mode->priv_info->widebus_support;
}

View File

@@ -2826,7 +2826,8 @@ static int dsi_panel_parse_dsc_params(struct dsi_display_mode *mode,
goto error;
}
rc = sde_dsc_populate_dsc_private_params(&priv_info->dsc, intf_width);
rc = sde_dsc_populate_dsc_private_params(&priv_info->dsc, intf_width,
priv_info->widebus_support);
if (rc) {
DSI_DEBUG("failed populating other dsc params\n");
rc = -EINVAL;
@@ -4224,12 +4225,6 @@ int dsi_panel_get_mode(struct dsi_panel *panel,
mutex_lock(&panel->panel_lock);
utils = &panel->utils;
mode->priv_info = kzalloc(sizeof(*mode->priv_info), GFP_KERNEL);
if (!mode->priv_info) {
rc = -ENOMEM;
goto done;
}
prv_info = mode->priv_info;
timings_np = utils->get_child_by_name(utils->data,
@@ -4334,12 +4329,8 @@ int dsi_panel_get_mode(struct dsi_panel *panel,
if (rc)
DSI_ERR("failed to partial update caps, rc=%d\n", rc);
}
goto done;
parse_fail:
kfree(mode->priv_info);
mode->priv_info = NULL;
done:
utils->data = utils_data;
mutex_unlock(&panel->panel_lock);
return rc;