drm/amd/display: Handle branch device with DFP count = 0 case.
[Why] When you have a SST branch device the driver, Even no sink device connected, it also send HPD with a valid EDID. Driver will config it to DP sink. Therefore, there're two displays in display setting. DPCD 0x05, DFP_PRESENT = 1 (branch device), DFP_TYPE = 00 (Display Port) [How] Driver determine DPCD 0x05 DFP_PRESENT = 1(branch) as an active dongle And check DFP count. Signed-off-by: Hugo Hu <hugo.hu@amd.com> Reviewed-by: Hugo Hu <Hugo.Hu@amd.com> Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Родитель
3ae42acde3
Коммит
a504ad265d
|
@ -720,9 +720,8 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
|
|||
same_dpcd = false;
|
||||
}
|
||||
/* Active dongle plug in without display or downstream unplug*/
|
||||
if (link->type == dc_connection_active_dongle
|
||||
&& link->dpcd_caps.sink_count.
|
||||
bits.SINK_COUNT == 0) {
|
||||
if (link->type == dc_connection_active_dongle &&
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT == 0) {
|
||||
if (prev_sink != NULL) {
|
||||
/* Downstream unplug */
|
||||
dc_sink_release(prev_sink);
|
||||
|
|
|
@ -2226,11 +2226,7 @@ bool is_mst_supported(struct dc_link *link)
|
|||
|
||||
bool is_dp_active_dongle(const struct dc_link *link)
|
||||
{
|
||||
enum display_dongle_type dongle_type = link->dpcd_caps.dongle_type;
|
||||
|
||||
return (dongle_type == DISPLAY_DONGLE_DP_VGA_CONVERTER) ||
|
||||
(dongle_type == DISPLAY_DONGLE_DP_DVI_CONVERTER) ||
|
||||
(dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER);
|
||||
return link->dpcd_caps.is_branch_dev;
|
||||
}
|
||||
|
||||
static int translate_dpcd_max_bpc(enum dpcd_downstream_port_max_bpc bpc)
|
||||
|
@ -2264,6 +2260,9 @@ static void get_active_converter_info(
|
|||
return;
|
||||
}
|
||||
|
||||
/* DPCD 0x5 bit 0 = 1, it indicate it's branch device */
|
||||
link->dpcd_caps.is_branch_dev = ds_port.fields.PORT_PRESENT;
|
||||
|
||||
switch (ds_port.fields.PORT_TYPE) {
|
||||
case DOWNSTREAM_VGA:
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_VGA_CONVERTER;
|
||||
|
|
|
@ -689,6 +689,8 @@ struct dpcd_caps {
|
|||
|
||||
/* dongle type (DP converter, CV smart dongle) */
|
||||
enum display_dongle_type dongle_type;
|
||||
/* branch device or sink device */
|
||||
bool is_branch_dev;
|
||||
/* Dongle's downstream count. */
|
||||
union sink_count sink_count;
|
||||
/* If dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER,
|
||||
|
|
Загрузка…
Ссылка в новой задаче