Subversion Repositories Kolibri OS

Rev

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

Rev 2997 Rev 3120
Line 939... Line 939...
939
	struct drm_encoder *encoder = NULL;
939
	struct drm_encoder *encoder = NULL;
940
	struct drm_encoder_helper_funcs *encoder_funcs;
940
	struct drm_encoder_helper_funcs *encoder_funcs;
941
	struct drm_mode_object *obj;
941
	struct drm_mode_object *obj;
942
	int i;
942
	int i;
943
	enum drm_connector_status ret = connector_status_disconnected;
943
	enum drm_connector_status ret = connector_status_disconnected;
944
	bool dret = false;
944
	bool dret = false, broken_edid = false;
-
 
945
 
Line 945... Line 946...
945
 
946
 
946
	if (!force && radeon_check_hpd_status_unchanged(connector))
947
	if (!force && radeon_check_hpd_status_unchanged(connector))
Line 947... Line 948...
947
		return connector->status;
948
		return connector->status;
Line 963... Line 964...
963
			 * return a block of 0's. If we see this just stop polling on this output */
964
			 * return a block of 0's. If we see this just stop polling on this output */
964
			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && radeon_connector->base.null_edid_counter) {
965
			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && radeon_connector->base.null_edid_counter) {
965
				ret = connector_status_disconnected;
966
				ret = connector_status_disconnected;
966
				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", drm_get_connector_name(connector));
967
				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", drm_get_connector_name(connector));
967
				radeon_connector->ddc_bus = NULL;
968
				radeon_connector->ddc_bus = NULL;
-
 
969
			} else {
-
 
970
				ret = connector_status_connected;
-
 
971
				broken_edid = true; /* defer use_digital to later */
968
			}
972
			}
969
		} else {
973
		} else {
970
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
974
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
Line 971... Line 975...
971
 
975
 
Line 1045... Line 1049...
1045
			    encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
1049
			    encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
1046
				continue;
1050
				continue;
Line 1047... Line 1051...
1047
 
1051
 
1048
			encoder_funcs = encoder->helper_private;
1052
			encoder_funcs = encoder->helper_private;
-
 
1053
			if (encoder_funcs->detect) {
1049
			if (encoder_funcs->detect) {
1054
				if (!broken_edid) {
-
 
1055
				if (ret != connector_status_connected) {
1050
				if (ret != connector_status_connected) {
1056
						/* deal with analog monitors without DDC */
1051
				ret = encoder_funcs->detect(encoder, connector);
1057
				ret = encoder_funcs->detect(encoder, connector);
1052
				if (ret == connector_status_connected) {
1058
				if (ret == connector_status_connected) {
1053
						radeon_connector->use_digital = false;
1059
						radeon_connector->use_digital = false;
1054
					}
1060
					}
1055
					if (ret != connector_status_disconnected)
1061
					if (ret != connector_status_disconnected)
1056
						radeon_connector->detected_by_load = true;
1062
						radeon_connector->detected_by_load = true;
-
 
1063
				}
-
 
1064
				} else {
-
 
1065
					enum drm_connector_status lret;
-
 
1066
					/* assume digital unless load detected otherwise */
-
 
1067
					radeon_connector->use_digital = true;
-
 
1068
					lret = encoder_funcs->detect(encoder, connector);
-
 
1069
					DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret);
-
 
1070
					if (lret == connector_status_connected)
-
 
1071
						radeon_connector->use_digital = false;
1057
				}
1072
				}
1058
					break;
1073
					break;
1059
				}
1074
				}
1060
			}
1075
			}