|
|
|
@@ -725,6 +725,30 @@ static int radeon_connector_set_property(struct drm_connector *connector, struct
|
|
|
|
|
radeon_property_change_mode(&radeon_encoder->base);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (property == rdev->mode_info.output_csc_property) {
|
|
|
|
|
if (connector->encoder)
|
|
|
|
|
radeon_encoder = to_radeon_encoder(connector->encoder);
|
|
|
|
|
else {
|
|
|
|
|
struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
|
|
|
|
radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (radeon_encoder->output_csc == val)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
radeon_encoder->output_csc = val;
|
|
|
|
|
|
|
|
|
|
if (connector->encoder->crtc) {
|
|
|
|
|
struct drm_crtc *crtc = connector->encoder->crtc;
|
|
|
|
|
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
|
|
|
|
struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
|
|
|
|
|
|
|
|
|
radeon_crtc->output_csc = radeon_encoder->output_csc;
|
|
|
|
|
|
|
|
|
|
(*crtc_funcs->load_lut)(crtc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1872,6 +1896,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
dev->mode_config.scaling_mode_property,
|
|
|
|
|
DRM_MODE_SCALE_NONE);
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
break;
|
|
|
|
|
case DRM_MODE_CONNECTOR_DVII:
|
|
|
|
|
case DRM_MODE_CONNECTOR_DVID:
|
|
|
|
@@ -1904,6 +1932,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.audio_property,
|
|
|
|
|
RADEON_AUDIO_AUTO);
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
|
|
|
|
|
subpixel_order = SubPixelHorizontalRGB;
|
|
|
|
|
connector->interlace_allowed = true;
|
|
|
|
@@ -1950,6 +1982,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
dev->mode_config.scaling_mode_property,
|
|
|
|
|
DRM_MODE_SCALE_NONE);
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
/* no HPD on analog connectors */
|
|
|
|
|
radeon_connector->hpd.hpd = RADEON_HPD_NONE;
|
|
|
|
|
connector->polled = DRM_CONNECTOR_POLL_CONNECT;
|
|
|
|
@@ -1972,6 +2008,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
dev->mode_config.scaling_mode_property,
|
|
|
|
|
DRM_MODE_SCALE_NONE);
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
/* no HPD on analog connectors */
|
|
|
|
|
radeon_connector->hpd.hpd = RADEON_HPD_NONE;
|
|
|
|
|
connector->interlace_allowed = true;
|
|
|
|
@@ -2023,6 +2063,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
rdev->mode_info.load_detect_property,
|
|
|
|
|
1);
|
|
|
|
|
}
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
connector->interlace_allowed = true;
|
|
|
|
|
if (connector_type == DRM_MODE_CONNECTOR_DVII)
|
|
|
|
|
connector->doublescan_allowed = true;
|
|
|
|
@@ -2068,6 +2112,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
rdev->mode_info.audio_property,
|
|
|
|
|
RADEON_AUDIO_AUTO);
|
|
|
|
|
}
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
subpixel_order = SubPixelHorizontalRGB;
|
|
|
|
|
connector->interlace_allowed = true;
|
|
|
|
|
if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
|
|
|
|
@@ -2116,6 +2164,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
|
|
|
rdev->mode_info.audio_property,
|
|
|
|
|
RADEON_AUDIO_AUTO);
|
|
|
|
|
}
|
|
|
|
|
if (ASIC_IS_DCE5(rdev))
|
|
|
|
|
drm_object_attach_property(&radeon_connector->base.base,
|
|
|
|
|
rdev->mode_info.output_csc_property,
|
|
|
|
|
RADEON_OUTPUT_CSC_BYPASS);
|
|
|
|
|
connector->interlace_allowed = true;
|
|
|
|
|
/* in theory with a DP to VGA converter... */
|
|
|
|
|
connector->doublescan_allowed = false;
|
|
|
|
|