return DRM_MODE_CONNECTOR_VGA;
case SIGNAL_TYPE_DISPLAY_PORT:
case SIGNAL_TYPE_DISPLAY_PORT_MST:
+ /* External DP bridges have a different connector type. */
+ if (connector_id == CONNECTOR_ID_VGA)
+ return DRM_MODE_CONNECTOR_VGA;
+ else if (connector_id == CONNECTOR_ID_LVDS)
+ return DRM_MODE_CONNECTOR_LVDS;
+
return DRM_MODE_CONNECTOR_DisplayPort;
case SIGNAL_TYPE_DVI_DUAL_LINK:
case SIGNAL_TYPE_DVI_SINGLE_LINK:
connector_type == DRM_MODE_CONNECTOR_HDMIB)
amdgpu_dm_initialize_hdmi_connector(aconnector);
- if (connector_type == DRM_MODE_CONNECTOR_DisplayPort
- || connector_type == DRM_MODE_CONNECTOR_eDP)
+ if (dc_is_dp_signal(link->connector_signal))
amdgpu_dm_initialize_dp_connector(dm, aconnector, link->link_index);
out_free:
}
}
+static bool encoder_is_external_dp(
+ struct graphics_object_id encoder)
+{
+ switch (encoder.id) {
+ case ENCODER_ID_EXTERNAL_NUTMEG:
+ case ENCODER_ID_EXTERNAL_TRAVIS:
+ return true;
+ default:
+ return false;
+ }
+}
+
static void link_destruct(struct dc_link *link)
{
int i;
* so that we avoid initializing DDC and HPD, etc.
*/
bp_funcs->get_src_obj(bios, link->link_id, 0, &link_encoder);
+
+ if (encoder_is_external_dp(link_encoder)) {
+ /* External DP bridge encoders: find the actual link encoder and use that. */
+ link->ext_enc_id = link_encoder;
+ bp_funcs->get_src_obj(bios, link->ext_enc_id, 0, &link_encoder);
+ }
+
transmitter_from_encoder = translate_encoder_to_transmitter(link_encoder);
link_analog_engine = find_analog_engine(link, &enc_init_data.analog_encoder);
goto create_fail;
}
+ /* For external DP bridge encoders:
+ * Set the connector signal to DisplayPort so that they can work with
+ * the pre-existing code paths for DP without a lot of code churn.
+ */
+ if (link->ext_enc_id.id != ENCODER_ID_UNKNOWN)
+ link->connector_signal = SIGNAL_TYPE_DISPLAY_PORT;
+
LINK_INFO("Connector[%d] description: signal: %s\n",
init_params->connector_index,
signal_type_to_string(link->connector_signal));
link->device_tag.dev_id))
continue;
if (link->device_tag.dev_id.device_type == DEVICE_TYPE_CRT &&
- link->connector_signal != SIGNAL_TYPE_RGB)
+ link->connector_signal != SIGNAL_TYPE_RGB &&
+ link->ext_enc_id.id == ENCODER_ID_UNKNOWN)
continue;
if (link->device_tag.dev_id.device_type == DEVICE_TYPE_LCD &&
link->connector_signal == SIGNAL_TYPE_RGB)