drm/radeon/kms: try to detect tv vs monitor for underscan
When enabling underscan for hdmi monitors, attempt to detect whether we are driving a TV or a monitor. The should hopefully prevent underscan from being enabled on monitors attached via hdmi that do not overscan the image. Only enable underscan if the mode is a common hdtv mode (480p, 720p, etc.). Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
committed by
Dave Airlie
parent
4b80d954a7
commit
039ed2d9a2
@ -1094,6 +1094,18 @@ void radeon_modeset_fini(struct radeon_device *rdev)
|
||||
radeon_i2c_fini(rdev);
|
||||
}
|
||||
|
||||
static bool is_hdtv_mode(struct drm_display_mode *mode)
|
||||
{
|
||||
/* try and guess if this is a tv or a monitor */
|
||||
if ((mode->vdisplay == 480 && mode->hdisplay == 720) || /* 480p */
|
||||
(mode->vdisplay == 576) || /* 576p */
|
||||
(mode->vdisplay == 720) || /* 720p */
|
||||
(mode->vdisplay == 1080)) /* 1080p */
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
|
||||
struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
@ -1141,7 +1153,8 @@ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
|
||||
if (ASIC_IS_AVIVO(rdev) &&
|
||||
((radeon_encoder->underscan_type == UNDERSCAN_ON) ||
|
||||
((radeon_encoder->underscan_type == UNDERSCAN_AUTO) &&
|
||||
drm_detect_hdmi_monitor(radeon_connector->edid)))) {
|
||||
drm_detect_hdmi_monitor(radeon_connector->edid) &&
|
||||
is_hdtv_mode(mode)))) {
|
||||
radeon_crtc->h_border = (mode->hdisplay >> 5) + 16;
|
||||
radeon_crtc->v_border = (mode->vdisplay >> 5) + 16;
|
||||
radeon_crtc->rmx_type = RMX_FULL;
|
||||
|
Reference in New Issue
Block a user