On Tue, Jun 24, 2014 at 03:12:51PM -0700, Todd Previte wrote: > 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@xxxxxxxxx> > --- > 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 Checkpatch isn't approving of // style comments, and there's other issues. -Daniel > + 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 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx