|
@@ -764,39 +764,41 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
|
|
if ((prev_sink != NULL) && ((edid_status == EDID_THE_SAME) || (edid_status == EDID_OK)))
|
|
if ((prev_sink != NULL) && ((edid_status == EDID_THE_SAME) || (edid_status == EDID_OK)))
|
|
same_edid = is_same_edid(&prev_sink->dc_edid, &sink->dc_edid);
|
|
same_edid = is_same_edid(&prev_sink->dc_edid, &sink->dc_edid);
|
|
|
|
|
|
- // If both edid and dpcd are the same, then discard new sink and revert back to original sink
|
|
|
|
- if ((same_edid) && (same_dpcd)) {
|
|
|
|
- link_disconnect_remap(prev_sink, link);
|
|
|
|
- sink = prev_sink;
|
|
|
|
- prev_sink = NULL;
|
|
|
|
- } else {
|
|
|
|
- if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT &&
|
|
|
|
- sink_caps.transaction_type ==
|
|
|
|
- DDC_TRANSACTION_TYPE_I2C_OVER_AUX) {
|
|
|
|
- /*
|
|
|
|
- * TODO debug why Dell 2413 doesn't like
|
|
|
|
- * two link trainings
|
|
|
|
- */
|
|
|
|
|
|
+ if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT &&
|
|
|
|
+ sink_caps.transaction_type == DDC_TRANSACTION_TYPE_I2C_OVER_AUX &&
|
|
|
|
+ reason != DETECT_REASON_HPDRX) {
|
|
|
|
+ /*
|
|
|
|
+ * TODO debug why Dell 2413 doesn't like
|
|
|
|
+ * two link trainings
|
|
|
|
+ */
|
|
|
|
|
|
- /* deal with non-mst cases */
|
|
|
|
- for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) {
|
|
|
|
- int fail_count = 0;
|
|
|
|
|
|
+ /* deal with non-mst cases */
|
|
|
|
+ for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) {
|
|
|
|
+ int fail_count = 0;
|
|
|
|
|
|
- dp_verify_link_cap(link,
|
|
|
|
- &link->reported_link_cap,
|
|
|
|
- &fail_count);
|
|
|
|
|
|
+ dp_verify_link_cap(link,
|
|
|
|
+ &link->reported_link_cap,
|
|
|
|
+ &fail_count);
|
|
|
|
|
|
- if (fail_count == 0)
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ if (fail_count == 0)
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
- /* HDMI-DVI Dongle */
|
|
|
|
- if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
|
|
|
|
- !sink->edid_caps.edid_hdmi)
|
|
|
|
- sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
|
|
|
|
|
|
+ } else {
|
|
|
|
+ // If edid is the same, then discard new sink and revert back to original sink
|
|
|
|
+ if (same_edid) {
|
|
|
|
+ link_disconnect_remap(prev_sink, link);
|
|
|
|
+ sink = prev_sink;
|
|
|
|
+ prev_sink = NULL;
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* HDMI-DVI Dongle */
|
|
|
|
+ if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
|
|
|
|
+ !sink->edid_caps.edid_hdmi)
|
|
|
|
+ sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
|
|
|
|
+
|
|
/* Connectivity log: detection */
|
|
/* Connectivity log: detection */
|
|
for (i = 0; i < sink->dc_edid.length / EDID_BLOCK_SIZE; i++) {
|
|
for (i = 0; i < sink->dc_edid.length / EDID_BLOCK_SIZE; i++) {
|
|
CONN_DATA_DETECT(link,
|
|
CONN_DATA_DETECT(link,
|