drm/i915: preserve other DP_TEST_SINK bits.
authorRodrigo Vivi <rodrigo.vivi@intel.com>
Mon, 29 Sep 2014 22:29:52 +0000 (18:29 -0400)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 30 Sep 2014 07:39:02 +0000 (09:39 +0200)
Sink crc was implemented based on dp 1.1 spec that had all TEST_SINK bits
reserved reading all 0s. But when reviewing my latest changes on sink crc
Todd warned me that on new specs we have other valid bits on this reg that we
might want to preserve.

Cc: Todd Previte <tprevite@gmail.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Todd Previte <tprevite@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_dp.c

index 3caac0f01265c9d1645ba74f784ff316553775b9..342d624f8312599f4d7df2f430aada8c2ff24d16 100644 (file)
@@ -3817,8 +3817,9 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
        if (!(buf & DP_TEST_CRC_SUPPORTED))
                return -ENOTTY;
 
+       drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_SINK, &buf);
        if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_SINK,
-                              DP_TEST_SINK_START) < 0)
+                               buf | DP_TEST_SINK_START) < 0)
                return -EIO;
 
        drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_SINK_MISC, &buf);
@@ -3837,7 +3838,10 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
        if (drm_dp_dpcd_read(&intel_dp->aux, DP_TEST_CRC_R_CR, crc, 6) < 0)
                return -EIO;
 
-       drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_SINK, 0);
+       drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_SINK, &buf);
+       drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_SINK,
+                       buf & ~DP_TEST_SINK_START);
+
        return 0;
 }