]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
drm/i915/dp: do not proceed with autotests if we don't ACK them
authorJani Nikula <jani.nikula@intel.com>
Fri, 20 Jan 2017 17:04:06 +0000 (19:04 +0200)
committerJani Nikula <jani.nikula@intel.com>
Tue, 24 Jan 2017 13:27:34 +0000 (15:27 +0200)
There is no point in setting intel_dp->compliance.test_type, and
proceeding with the autotests, if we're about to NAK the request. Some
drive-by cleanups while at it.

v2: look at the ACK bit, as the result may also contain
    TEST_EDID_CHECKSUM_WRITE

Cc: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>
Tested-by: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1484931846-25390-1-git-send-email-jani.nikula@intel.com
drivers/gpu/drm/i915/intel_dp.c

index e80d620846c8310fc88bbb0ac07a66e5a820ff87..247fbf3525762779c0d284074689768fea8fb0a4 100644 (file)
@@ -3985,45 +3985,42 @@ static uint8_t intel_dp_autotest_phy_pattern(struct intel_dp *intel_dp)
 static void intel_dp_handle_test_request(struct intel_dp *intel_dp)
 {
        uint8_t response = DP_TEST_NAK;
-       uint8_t rxdata = 0;
-       int status = 0;
+       uint8_t request = 0;
+       int status;
 
-       status = drm_dp_dpcd_read(&intel_dp->aux, DP_TEST_REQUEST, &rxdata, 1);
+       status = drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_REQUEST, &request);
        if (status <= 0) {
                DRM_DEBUG_KMS("Could not read test request from sink\n");
                goto update_status;
        }
 
-       switch (rxdata) {
+       switch (request) {
        case DP_TEST_LINK_TRAINING:
                DRM_DEBUG_KMS("LINK_TRAINING test requested\n");
-               intel_dp->compliance.test_type = DP_TEST_LINK_TRAINING;
                response = intel_dp_autotest_link_training(intel_dp);
                break;
        case DP_TEST_LINK_VIDEO_PATTERN:
                DRM_DEBUG_KMS("TEST_PATTERN test requested\n");
-               intel_dp->compliance.test_type = DP_TEST_LINK_VIDEO_PATTERN;
                response = intel_dp_autotest_video_pattern(intel_dp);
                break;
        case DP_TEST_LINK_EDID_READ:
                DRM_DEBUG_KMS("EDID test requested\n");
-               intel_dp->compliance.test_type = DP_TEST_LINK_EDID_READ;
                response = intel_dp_autotest_edid(intel_dp);
                break;
        case DP_TEST_LINK_PHY_TEST_PATTERN:
                DRM_DEBUG_KMS("PHY_PATTERN test requested\n");
-               intel_dp->compliance.test_type = DP_TEST_LINK_PHY_TEST_PATTERN;
                response = intel_dp_autotest_phy_pattern(intel_dp);
                break;
        default:
-               DRM_DEBUG_KMS("Invalid test request '%02x'\n", rxdata);
+               DRM_DEBUG_KMS("Invalid test request '%02x'\n", request);
                break;
        }
 
+       if (response & DP_TEST_ACK)
+               intel_dp->compliance.test_type = request;
+
 update_status:
-       status = drm_dp_dpcd_write(&intel_dp->aux,
-                                  DP_TEST_RESPONSE,
-                                  &response, 1);
+       status = drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_RESPONSE, response);
        if (status <= 0)
                DRM_DEBUG_KMS("Could not write test response to sink\n");
 }