Subversion Repositories Kolibri OS

Rev

Rev 3192 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3192 Rev 3764
Line 665... Line 665...
665
}
665
}
Line 666... Line 666...
666
 
666
 
667
int
667
int
668
atombios_get_encoder_mode(struct drm_encoder *encoder)
668
atombios_get_encoder_mode(struct drm_encoder *encoder)
-
 
669
{
-
 
670
	struct drm_device *dev = encoder->dev;
669
{
671
	struct radeon_device *rdev = dev->dev_private;
670
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
672
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
671
	struct drm_connector *connector;
673
	struct drm_connector *connector;
672
	struct radeon_connector *radeon_connector;
674
	struct radeon_connector *radeon_connector;
Line 691... Line 693...
691
 
693
 
692
	switch (connector->connector_type) {
694
	switch (connector->connector_type) {
693
	case DRM_MODE_CONNECTOR_DVII:
695
	case DRM_MODE_CONNECTOR_DVII:
694
	case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
696
	case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
695
		if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
697
		if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
-
 
698
		    radeon_audio &&
696
		    radeon_audio)
699
		    !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
697
			return ATOM_ENCODER_MODE_HDMI;
700
			return ATOM_ENCODER_MODE_HDMI;
698
		else if (radeon_connector->use_digital)
701
		else if (radeon_connector->use_digital)
699
			return ATOM_ENCODER_MODE_DVI;
702
			return ATOM_ENCODER_MODE_DVI;
700
		else
703
		else
701
			return ATOM_ENCODER_MODE_CRT;
704
			return ATOM_ENCODER_MODE_CRT;
702
		break;
705
		break;
703
	case DRM_MODE_CONNECTOR_DVID:
706
	case DRM_MODE_CONNECTOR_DVID:
704
	case DRM_MODE_CONNECTOR_HDMIA:
707
	case DRM_MODE_CONNECTOR_HDMIA:
705
	default:
708
	default:
706
		if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
709
		if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
-
 
710
		    radeon_audio &&
707
		    radeon_audio)
711
		    !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
708
			return ATOM_ENCODER_MODE_HDMI;
712
			return ATOM_ENCODER_MODE_HDMI;
709
		else
713
		else
710
			return ATOM_ENCODER_MODE_DVI;
714
			return ATOM_ENCODER_MODE_DVI;
711
		break;
715
		break;
Line 716... Line 720...
716
		dig_connector = radeon_connector->con_priv;
720
		dig_connector = radeon_connector->con_priv;
717
		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
721
		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
718
		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
722
		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
719
			return ATOM_ENCODER_MODE_DP;
723
			return ATOM_ENCODER_MODE_DP;
720
		else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
724
		else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
721
			 radeon_audio)
725
			 radeon_audio &&
-
 
726
			 !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
722
			return ATOM_ENCODER_MODE_HDMI;
727
			return ATOM_ENCODER_MODE_HDMI;
723
		else
728
		else
724
			return ATOM_ENCODER_MODE_DVI;
729
			return ATOM_ENCODER_MODE_DVI;
725
		break;
730
		break;
726
	case DRM_MODE_CONNECTOR_eDP:
731
	case DRM_MODE_CONNECTOR_eDP:
Line 2148... Line 2153...
2148
	}
2153
	}
Line 2149... Line 2154...
2149
 
2154
 
Line 2150... Line 2155...
2150
	atombios_apply_encoder_quirks(encoder, adjusted_mode);
2155
	atombios_apply_encoder_quirks(encoder, adjusted_mode);
2151
 
-
 
2152
	if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) {
2156
 
2153
		r600_hdmi_enable(encoder);
2157
	if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) {
2154
		if (ASIC_IS_DCE6(rdev))
-
 
2155
			; /* TODO (use pointers instead of if-s?) */
2158
		if (rdev->asic->display.hdmi_enable)
2156
		else if (ASIC_IS_DCE4(rdev))
-
 
2157
			evergreen_hdmi_setmode(encoder, adjusted_mode);
2159
			radeon_hdmi_enable(rdev, encoder, true);
2158
		else
2160
		if (rdev->asic->display.hdmi_setmode)
2159
			r600_hdmi_setmode(encoder, adjusted_mode);
2161
			radeon_hdmi_setmode(rdev, encoder, adjusted_mode);
Line 2160... Line 2162...
2160
	}
2162
	}
2161
}
2163
}
Line 2411... Line 2413...
2411
		break;
2413
		break;
2412
	}
2414
	}
Line 2413... Line 2415...
2413
 
2415
 
2414
disable_done:
2416
disable_done:
2415
	if (radeon_encoder_is_digital(encoder)) {
2417
	if (radeon_encoder_is_digital(encoder)) {
-
 
2418
		if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) {
2416
		if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI)
2419
			if (rdev->asic->display.hdmi_enable)
-
 
2420
				radeon_hdmi_enable(rdev, encoder, false);
2417
			r600_hdmi_disable(encoder);
2421
		}
2418
		dig = radeon_encoder->enc_priv;
2422
		dig = radeon_encoder->enc_priv;
2419
		dig->dig_encoder = -1;
2423
		dig->dig_encoder = -1;
2420
	}
2424
	}
2421
	radeon_encoder->active_device = 0;
2425
	radeon_encoder->active_device = 0;