Subversion Repositories Kolibri OS

Rev

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

Rev 1963 Rev 1986
Line 365... Line 365...
365
				radeon_atom_get_tv_timings(rdev, 1, adjusted_mode);
365
				radeon_atom_get_tv_timings(rdev, 1, adjusted_mode);
366
		}
366
		}
367
	}
367
	}
Line 368... Line 368...
368
 
368
 
369
	if (ASIC_IS_DCE3(rdev) &&
369
	if (ASIC_IS_DCE3(rdev) &&
-
 
370
	    ((radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
370
	    (radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT))) {
371
	     radeon_encoder_is_dp_bridge(encoder))) {
371
		struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
372
		struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
372
		radeon_dp_set_link_config(connector, mode);
373
		radeon_dp_set_link_config(connector, mode);
Line 373... Line 374...
373
	}
374
	}
Line 658... Line 659...
658
 
659
 
659
	/* dp bridges are always DP */
660
	/* dp bridges are always DP */
660
	if (radeon_encoder_is_dp_bridge(encoder))
661
	if (radeon_encoder_is_dp_bridge(encoder))
Line -... Line 662...
-
 
662
		return ATOM_ENCODER_MODE_DP;
-
 
663
 
-
 
664
	/* DVO is always DVO */
-
 
665
	if (radeon_encoder->encoder_id == ATOM_ENCODER_MODE_DVO)
661
		return ATOM_ENCODER_MODE_DP;
666
		return ATOM_ENCODER_MODE_DVO;
662
 
-
 
663
	connector = radeon_get_connector_for_encoder(encoder);
667
 
664
	if (!connector) {
668
	connector = radeon_get_connector_for_encoder(encoder);
665
		switch (radeon_encoder->encoder_id) {
-
 
666
		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
-
 
667
		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
-
 
668
		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
-
 
669
		case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
669
	/* if we don't have an active device yet, just use one of
670
		case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1:
-
 
671
			return ATOM_ENCODER_MODE_DVI;
-
 
672
		case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
670
	 * the connectors tied to the encoder.
673
		case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
671
	 */
674
		default:
-
 
675
			return ATOM_ENCODER_MODE_CRT;
-
 
676
		}
672
	if (!connector)
Line 677... Line 673...
677
	}
673
		connector = radeon_get_connector_for_encoder_init(encoder);
678
	radeon_connector = to_radeon_connector(connector);
674
	radeon_connector = to_radeon_connector(connector);
679
 
675
 
Line 1092... Line 1088...
1092
		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1088
		case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1093
			args.v2.acConfig.ucTransmitterSel = 2;
1089
			args.v2.acConfig.ucTransmitterSel = 2;
1094
			break;
1090
			break;
1095
		}
1091
		}
Line 1096... Line 1092...
1096
 
1092
 
1097
		if (is_dp)
1093
		if (is_dp) {
-
 
1094
			args.v2.acConfig.fCoherentMode = 1;
1098
			args.v2.acConfig.fCoherentMode = 1;
1095
			args.v2.acConfig.fDPConnector = 1;
1099
		else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
1096
		} else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
1100
			if (dig->coherent_mode)
1097
			if (dig->coherent_mode)
1101
				args.v2.acConfig.fCoherentMode = 1;
1098
				args.v2.acConfig.fCoherentMode = 1;
1102
			if (radeon_encoder->pixel_clock > 165000)
1099
			if (radeon_encoder->pixel_clock > 165000)
1103
				args.v2.acConfig.fDualLinkConnector = 1;
1100
				args.v2.acConfig.fDualLinkConnector = 1;
Line 1433... Line 1430...
1433
	}
1430
	}
Line 1434... Line 1431...
1434
 
1431
 
1435
	if (is_dig) {
1432
	if (is_dig) {
1436
		switch (mode) {
1433
		switch (mode) {
-
 
1434
		case DRM_MODE_DPMS_ON:
-
 
1435
			/* some early dce3.2 boards have a bug in their transmitter control table */
-
 
1436
			if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730))
-
 
1437
				atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
1437
		case DRM_MODE_DPMS_ON:
1438
			else
1438
				atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
1439
				atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
1439
			if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) {
1440
			if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) {
Line 1440... Line 1441...
1440
				struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
1441
				struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
Line 1524... Line 1525...
1524
			break;
1525
			break;
1525
		}
1526
		}
1526
	}
1527
	}
Line 1527... Line 1528...
1527
 
1528
 
1528
	if (ext_encoder) {
-
 
1529
		int action;
-
 
1530
 
1529
	if (ext_encoder) {
1531
		switch (mode) {
1530
		switch (mode) {
1532
		case DRM_MODE_DPMS_ON:
1531
		case DRM_MODE_DPMS_ON:
1533
		default:
1532
		default:
-
 
1533
			if (ASIC_IS_DCE41(rdev)) {
1534
			if (ASIC_IS_DCE41(rdev))
1534
				atombios_external_encoder_setup(encoder, ext_encoder,
-
 
1535
								EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT);
-
 
1536
				atombios_external_encoder_setup(encoder, ext_encoder,
1535
				action = EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT;
1537
								EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF);
1536
			else
1538
			} else
1537
			action = ATOM_ENABLE;
1539
				atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
1538
			break;
1540
			break;
1539
		case DRM_MODE_DPMS_STANDBY:
1541
		case DRM_MODE_DPMS_STANDBY:
1540
		case DRM_MODE_DPMS_SUSPEND:
1542
		case DRM_MODE_DPMS_SUSPEND:
1541
		case DRM_MODE_DPMS_OFF:
1543
		case DRM_MODE_DPMS_OFF:
-
 
1544
			if (ASIC_IS_DCE41(rdev)) {
-
 
1545
				atombios_external_encoder_setup(encoder, ext_encoder,
-
 
1546
								EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING);
1542
			if (ASIC_IS_DCE41(rdev))
1547
				atombios_external_encoder_setup(encoder, ext_encoder,
1543
				action = EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT;
1548
								EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT);
1544
			else
1549
			} else
1545
			action = ATOM_DISABLE;
1550
				atombios_external_encoder_setup(encoder, ext_encoder, ATOM_DISABLE);
1546
			break;
1551
			break;
1547
		}
-
 
1548
		atombios_external_encoder_setup(encoder, ext_encoder, action);
1552
		}
Line 1549... Line 1553...
1549
	}
1553
	}
Line 1550... Line 1554...
1550
 
1554
 
Line 2002... Line 2006...
2002
			return connector_status_connected; /* STV */
2006
			return connector_status_connected; /* STV */
2003
	}
2007
	}
2004
	return connector_status_disconnected;
2008
	return connector_status_disconnected;
2005
}
2009
}
Line -... Line 2010...
-
 
2010
 
-
 
2011
static enum drm_connector_status
-
 
2012
radeon_atom_dig_detect(struct drm_encoder *encoder, struct drm_connector *connector)
-
 
2013
{
-
 
2014
	struct drm_device *dev = encoder->dev;
-
 
2015
	struct radeon_device *rdev = dev->dev_private;
-
 
2016
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
-
 
2017
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
2018
	struct drm_encoder *ext_encoder = radeon_atom_get_external_encoder(encoder);
-
 
2019
	u32 bios_0_scratch;
-
 
2020
 
-
 
2021
	if (!ASIC_IS_DCE4(rdev))
-
 
2022
		return connector_status_unknown;
-
 
2023
 
-
 
2024
	if (!ext_encoder)
-
 
2025
		return connector_status_unknown;
-
 
2026
 
-
 
2027
	if ((radeon_connector->devices & ATOM_DEVICE_CRT_SUPPORT) == 0)
-
 
2028
		return connector_status_unknown;
-
 
2029
 
-
 
2030
	/* load detect on the dp bridge */
-
 
2031
	atombios_external_encoder_setup(encoder, ext_encoder,
-
 
2032
					EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION);
-
 
2033
 
-
 
2034
	bios_0_scratch = RREG32(R600_BIOS_0_SCRATCH);
-
 
2035
 
-
 
2036
	DRM_DEBUG_KMS("Bios 0 scratch %x %08x\n", bios_0_scratch, radeon_encoder->devices);
-
 
2037
	if (radeon_connector->devices & ATOM_DEVICE_CRT1_SUPPORT) {
-
 
2038
		if (bios_0_scratch & ATOM_S0_CRT1_MASK)
-
 
2039
			return connector_status_connected;
-
 
2040
	}
-
 
2041
	if (radeon_connector->devices & ATOM_DEVICE_CRT2_SUPPORT) {
-
 
2042
		if (bios_0_scratch & ATOM_S0_CRT2_MASK)
-
 
2043
			return connector_status_connected;
-
 
2044
	}
-
 
2045
	if (radeon_connector->devices & ATOM_DEVICE_CV_SUPPORT) {
-
 
2046
		if (bios_0_scratch & (ATOM_S0_CV_MASK|ATOM_S0_CV_MASK_A))
-
 
2047
			return connector_status_connected;
-
 
2048
	}
-
 
2049
	if (radeon_connector->devices & ATOM_DEVICE_TV1_SUPPORT) {
-
 
2050
		if (bios_0_scratch & (ATOM_S0_TV1_COMPOSITE | ATOM_S0_TV1_COMPOSITE_A))
-
 
2051
			return connector_status_connected; /* CTV */
-
 
2052
		else if (bios_0_scratch & (ATOM_S0_TV1_SVIDEO | ATOM_S0_TV1_SVIDEO_A))
-
 
2053
			return connector_status_connected; /* STV */
-
 
2054
	}
-
 
2055
	return connector_status_disconnected;
-
 
2056
}
-
 
2057
 
-
 
2058
void
-
 
2059
radeon_atom_ext_encoder_setup_ddc(struct drm_encoder *encoder)
-
 
2060
{
-
 
2061
	struct drm_encoder *ext_encoder = radeon_atom_get_external_encoder(encoder);
-
 
2062
 
-
 
2063
	if (ext_encoder)
-
 
2064
		/* ddc_setup on the dp bridge */
-
 
2065
		atombios_external_encoder_setup(encoder, ext_encoder,
-
 
2066
						EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP);
-
 
2067
 
-
 
2068
}
2006
 
2069
 
2007
static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
2070
static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
2008
{
2071
{
2009
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
2072
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
Line 2165... Line 2228...
2165
	.mode_fixup = radeon_atom_mode_fixup,
2228
	.mode_fixup = radeon_atom_mode_fixup,
2166
	.prepare = radeon_atom_encoder_prepare,
2229
	.prepare = radeon_atom_encoder_prepare,
2167
	.mode_set = radeon_atom_encoder_mode_set,
2230
	.mode_set = radeon_atom_encoder_mode_set,
2168
	.commit = radeon_atom_encoder_commit,
2231
	.commit = radeon_atom_encoder_commit,
2169
	.disable = radeon_atom_encoder_disable,
2232
	.disable = radeon_atom_encoder_disable,
2170
	/* no detect for TMDS/LVDS yet */
2233
	.detect = radeon_atom_dig_detect,
2171
};
2234
};
Line 2172... Line 2235...
2172
 
2235
 
2173
static const struct drm_encoder_helper_funcs radeon_atom_dac_helper_funcs = {
2236
static const struct drm_encoder_helper_funcs radeon_atom_dac_helper_funcs = {
2174
	.dpms = radeon_atom_encoder_dpms,
2237
	.dpms = radeon_atom_encoder_dpms,