mirror of https://gitee.com/openkylin/linux.git
drm/amd/display: handle active dongle port type is DP++ or DP case
[Why]: Some active dongles have DP++ port and DP port at the same time. Current code doesn't cover DP++ case and processes as default DVI case, in which audio is disabled. Because of dual mode, DP case is also treat as DVI case for the other port. [How]: According DP 1.4 spec, add DP++ procedure similar with HDMI case. Also add None dongle type for DP case. Signed-off-by: Dale Zhao <dale.zhao@amd.com> Reviewed-by: Wenjing Liu <wenjing.liu@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
b791f9dc2d
commit
b70666934b
|
@ -2247,8 +2247,8 @@ static void get_active_converter_info(
|
|||
case DOWNSTREAM_VGA:
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_VGA_CONVERTER;
|
||||
break;
|
||||
case DOWNSTREAM_DVI_HDMI:
|
||||
/* At this point we don't know is it DVI or HDMI,
|
||||
case DOWNSTREAM_DVI_HDMI_DP_PLUS_PLUS:
|
||||
/* At this point we don't know is it DVI or HDMI or DP++,
|
||||
* assume DVI.*/
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_DVI_CONVERTER;
|
||||
break;
|
||||
|
@ -2265,6 +2265,10 @@ static void get_active_converter_info(
|
|||
det_caps, sizeof(det_caps));
|
||||
|
||||
switch (port_caps->bits.DWN_STRM_PORTX_TYPE) {
|
||||
/*Handle DP case as DONGLE_NONE*/
|
||||
case DOWN_STREAM_DETAILED_DP:
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_NONE;
|
||||
break;
|
||||
case DOWN_STREAM_DETAILED_VGA:
|
||||
link->dpcd_caps.dongle_type =
|
||||
DISPLAY_DONGLE_DP_VGA_CONVERTER;
|
||||
|
@ -2274,6 +2278,8 @@ static void get_active_converter_info(
|
|||
DISPLAY_DONGLE_DP_DVI_CONVERTER;
|
||||
break;
|
||||
case DOWN_STREAM_DETAILED_HDMI:
|
||||
case DOWN_STREAM_DETAILED_DP_PLUS_PLUS:
|
||||
/*Handle DP++ active converter case, process DP++ case as HDMI case according DP1.4 spec*/
|
||||
link->dpcd_caps.dongle_type =
|
||||
DISPLAY_DONGLE_DP_HDMI_CONVERTER;
|
||||
|
||||
|
@ -2289,14 +2295,18 @@ static void get_active_converter_info(
|
|||
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_s3d_converter =
|
||||
hdmi_caps.bits.FRAME_SEQ_TO_FRAME_PACK;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr422_pass_through =
|
||||
hdmi_caps.bits.YCrCr422_PASS_THROUGH;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr420_pass_through =
|
||||
hdmi_caps.bits.YCrCr420_PASS_THROUGH;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr422_converter =
|
||||
hdmi_caps.bits.YCrCr422_CONVERSION;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr420_converter =
|
||||
hdmi_caps.bits.YCrCr420_CONVERSION;
|
||||
/*YCBCR capability only for HDMI case*/
|
||||
if (port_caps->bits.DWN_STRM_PORTX_TYPE
|
||||
== DOWN_STREAM_DETAILED_HDMI) {
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr422_pass_through =
|
||||
hdmi_caps.bits.YCrCr422_PASS_THROUGH;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr420_pass_through =
|
||||
hdmi_caps.bits.YCrCr420_PASS_THROUGH;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr422_converter =
|
||||
hdmi_caps.bits.YCrCr422_CONVERSION;
|
||||
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr420_converter =
|
||||
hdmi_caps.bits.YCrCr420_CONVERSION;
|
||||
}
|
||||
|
||||
link->dpcd_caps.dongle_caps.dp_hdmi_max_bpc =
|
||||
translate_dpcd_max_bpc(
|
||||
|
|
|
@ -43,7 +43,7 @@ enum dpcd_revision {
|
|||
enum dpcd_downstream_port_type {
|
||||
DOWNSTREAM_DP = 0,
|
||||
DOWNSTREAM_VGA,
|
||||
DOWNSTREAM_DVI_HDMI,
|
||||
DOWNSTREAM_DVI_HDMI_DP_PLUS_PLUS,/* DVI, HDMI, DP++ */
|
||||
DOWNSTREAM_NONDDC /* has no EDID (TV,CV) */
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue