|
@@ -1068,6 +1068,77 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct drm_mode_object *obj;
|
|
|
+ struct drm_encoder *encoder;
|
|
|
+ struct radeon_encoder *radeon_encoder;
|
|
|
+ int i;
|
|
|
+ bool found = false;
|
|
|
+
|
|
|
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
|
|
|
+ if (connector->encoder_ids[i] == 0)
|
|
|
+ break;
|
|
|
+
|
|
|
+ obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
|
|
|
+ if (!obj)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ encoder = obj_to_encoder(obj);
|
|
|
+ radeon_encoder = to_radeon_encoder(encoder);
|
|
|
+
|
|
|
+ switch (radeon_encoder->encoder_id) {
|
|
|
+ case ENCODER_OBJECT_ID_TRAVIS:
|
|
|
+ case ENCODER_OBJECT_ID_NUTMEG:
|
|
|
+ found = true;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return found;
|
|
|
+}
|
|
|
+
|
|
|
+bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct drm_mode_object *obj;
|
|
|
+ struct drm_encoder *encoder;
|
|
|
+ struct radeon_encoder *radeon_encoder;
|
|
|
+ int i;
|
|
|
+ bool found = false;
|
|
|
+
|
|
|
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
|
|
|
+ if (connector->encoder_ids[i] == 0)
|
|
|
+ break;
|
|
|
+
|
|
|
+ obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
|
|
|
+ if (!obj)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ encoder = obj_to_encoder(obj);
|
|
|
+ radeon_encoder = to_radeon_encoder(encoder);
|
|
|
+ if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
|
|
|
+ found = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return found;
|
|
|
+}
|
|
|
+
|
|
|
+bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct drm_device *dev = connector->dev;
|
|
|
+ struct radeon_device *rdev = dev->dev_private;
|
|
|
+
|
|
|
+ if (ASIC_IS_DCE5(rdev) &&
|
|
|
+ (rdev->clock.dp_extclk >= 53900) &&
|
|
|
+ radeon_connector_encoder_is_hbr2(connector)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
static enum drm_connector_status
|
|
|
radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
|
{
|