Commit ab2f8603 authored by Paloma Arellano's avatar Paloma Arellano Committed by Dmitry Baryshkov

drm/msm/dp: check if VSC SDP is supported in DP programming

In the DP driver, check if VSC SDP is supported and propagate this value
to dp_panel. In dp_display's dp_mode, the out_fmt_is_yuv_420 parameter
must also utilize this value since YUV420 is only allowed when VSC SDP
is supported.

Changes in v2:
	- Move DP programming when VSC SDP is supported to this patch
Signed-off-by: default avatarPaloma Arellano <quic_parellan@quicinc.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/579625/
Link: https://lore.kernel.org/r/20240222194025.25329-9-quic_parellan@quicinc.comSigned-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent 5b30d1cb
...@@ -1550,8 +1550,10 @@ void dp_bridge_mode_set(struct drm_bridge *drm_bridge, ...@@ -1550,8 +1550,10 @@ void dp_bridge_mode_set(struct drm_bridge *drm_bridge,
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge); struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
struct msm_dp *dp = dp_bridge->dp_display; struct msm_dp *dp = dp_bridge->dp_display;
struct dp_display_private *dp_display; struct dp_display_private *dp_display;
struct dp_panel *dp_panel;
dp_display = container_of(dp, struct dp_display_private, dp_display); dp_display = container_of(dp, struct dp_display_private, dp_display);
dp_panel = dp_display->panel;
memset(&dp_display->dp_mode, 0x0, sizeof(struct dp_display_mode)); memset(&dp_display->dp_mode, 0x0, sizeof(struct dp_display_mode));
...@@ -1572,7 +1574,8 @@ void dp_bridge_mode_set(struct drm_bridge *drm_bridge, ...@@ -1572,7 +1574,8 @@ void dp_bridge_mode_set(struct drm_bridge *drm_bridge,
!!(dp_display->dp_mode.drm_mode.flags & DRM_MODE_FLAG_NHSYNC); !!(dp_display->dp_mode.drm_mode.flags & DRM_MODE_FLAG_NHSYNC);
dp_display->dp_mode.out_fmt_is_yuv_420 = dp_display->dp_mode.out_fmt_is_yuv_420 =
drm_mode_is_420_only(&dp->connector->display_info, adjusted_mode); drm_mode_is_420_only(&dp->connector->display_info, adjusted_mode) &&
dp_panel->vsc_sdp_supported;
/* populate wide_bus_support to different layers */ /* populate wide_bus_support to different layers */
dp_display->ctrl->wide_bus_en = dp_display->ctrl->wide_bus_en =
......
...@@ -57,6 +57,7 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel) ...@@ -57,6 +57,7 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
if (rc) if (rc)
return rc; return rc;
dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd);
link_info = &dp_panel->link_info; link_info = &dp_panel->link_info;
link_info->revision = dpcd[DP_DPCD_REV]; link_info->revision = dpcd[DP_DPCD_REV];
major = (link_info->revision >> 4) & 0x0f; major = (link_info->revision >> 4) & 0x0f;
......
...@@ -46,6 +46,7 @@ struct dp_panel { ...@@ -46,6 +46,7 @@ struct dp_panel {
struct dp_display_mode dp_mode; struct dp_display_mode dp_mode;
struct dp_panel_psr psr_cap; struct dp_panel_psr psr_cap;
bool video_test; bool video_test;
bool vsc_sdp_supported;
u32 vic; u32 vic;
u32 max_dp_lanes; u32 max_dp_lanes;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment