[Intel-gfx] [PATCH 3/6] drm/i915: Implement basic Displayport automated testing function for EDID operations

Todd Previte tprevite at gmail.com
Wed Jun 25 00:12:51 CEST 2014


Implements some of the basic EDID tests for Displayport compliance. These tests
include reading the EDID, verifying the checksum and writing the test responses
back to the sink device.

Signed-off-by: Todd Previte <tprevite at gmail.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 43fcabe..d060853 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -3352,8 +3352,42 @@ intel_dp_autotest_video_pattern(struct intel_dp *intel_dp)
 static uint8_t
 intel_dp_autotest_edid(struct intel_dp *intel_dp)
 {
+	struct drm_connector *connector = &intel_dp->attached_connector->base;
+	struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+	struct edid *edid_read = NULL;
+	uint8_t *edid_data = NULL;
 	uint8_t test_result = DP_TEST_NAK;
-	return test_result;
+	uint32_t i = 0, ret = 0, checksum = 0;
+	struct drm_display_mode *use_mode = NULL;
+	dp_compliance_mode comp_mode_type = DP_COMPLIANCE_MODE_PREFERRED;
+	int mode_count = 0;
+
+	edid_read = drm_get_edid(connector, adapter);
+
+	DRM_DEBUG_KMS("Displayport: EDID automated test\n");
+
+	if (edid_read) {
+		test_result = true;
+		edid_data = (uint8_t*) edid_read;
+		// Compute checksum
+		for (i = 0; i < 128; i++)
+				checksum += edid_data[i];
+
+		DRM_DEBUG_KMS("Displayport: EDID test - computed byte sum = %02x\n", checksum);
+		// Verify EDID checksum
+		if (checksum % 256 == 0) {
+			/* Write the checksum to EDID checksum register */
+			ret = drm_dp_dpcd_write(&intel_dp->aux, DP_TEST_EDID_CHECKSUM, &edid_read->checksum, 1);
+			// Reponse is ACK and and checksum written
+			test_result = DP_TEST_ACK | DP_TEST_EDID_CHECKSUM_WRITE;
+			DRM_DEBUG_KMS("Displayport: EDID test - checksum = %02x\n", edid_read->checksum);
+		}
+		else {
+			// Invalid checksum, set for failsafe mode
+			comp_mode_type = DP_COMPLIANCE_MODE_FAILSAFE;
+		}
+	}
+        return test_result;
 }
 
 /* Displayport compliance testing - PHY pattern testing */
-- 
1.9.1




More information about the Intel-gfx mailing list