drm/i915: Read eDP Display control capability registers
authorYetunde Adebisi <yetundex.adebisi@intel.com>
Tue, 5 Apr 2016 14:10:51 +0000 (15:10 +0100)
committerJani Nikula <jani.nikula@intel.com>
Tue, 26 Apr 2016 12:04:06 +0000 (15:04 +0300)
Add new edp_dpcd variable to intel_dp.
Read and save eDP Display control capability registers to edp_dpcd.

Signed-off-by: Yetunde Adebisi <yetundex.adebisi@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1459865452-9138-3-git-send-email-yetundex.adebisi@intel.com
drivers/gpu/drm/i915/intel_dp.c
drivers/gpu/drm/i915/intel_drv.h

index a3fc49430c264f8b844c80fb76d4cbc30266d7b0..6bb0b2340e7c2da05a3e7e8c847267cb5f0a3d73 100644 (file)
@@ -3747,7 +3747,6 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
        struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
        struct drm_device *dev = dig_port->base.base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       uint8_t rev;
 
        if (intel_dp_dpcd_read_wake(&intel_dp->aux, 0x000, intel_dp->dpcd,
                                    sizeof(intel_dp->dpcd)) < 0)
@@ -3804,6 +3803,15 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
                        DRM_DEBUG_KMS("PSR2 %s on sink",
                                dev_priv->psr.psr2_support ? "supported" : "not supported");
                }
+
+               /* Read the eDP Display control capabilities registers */
+               memset(intel_dp->edp_dpcd, 0, sizeof(intel_dp->edp_dpcd));
+               if ((intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
+                               (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_EDP_DPCD_REV,
+                                               intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
+                                                               sizeof(intel_dp->edp_dpcd)))
+                       DRM_DEBUG_KMS("EDP DPCD : %*ph\n", (int) sizeof(intel_dp->edp_dpcd),
+                                       intel_dp->edp_dpcd);
        }
 
        DRM_DEBUG_KMS("Display Port TPS3 support: source %s, sink %s\n",
@@ -3811,10 +3819,7 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
                      yesno(drm_dp_tps3_supported(intel_dp->dpcd)));
 
        /* Intermediate frequency support */
-       if (is_edp(intel_dp) &&
-           (intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
-           (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_EDP_DPCD_REV, &rev, 1) == 1) &&
-           (rev >= 0x03)) { /* eDp v1.4 or higher */
+       if (is_edp(intel_dp) && (intel_dp->edp_dpcd[0] >= 0x03)) { /* eDp v1.4 or higher */
                __le16 sink_rates[DP_MAX_SUPPORTED_RATES];
                int i;
 
index b9f1304439e200a296a564d850b8d19f283e4b2c..99db8bb0084bef9ebe08add0aa6c2c86ed527c70 100644 (file)
@@ -810,6 +810,7 @@ struct intel_dp {
        uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
        uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
        uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
+       uint8_t edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE];
        /* sink rates as reported by DP_SUPPORTED_LINK_RATES */
        uint8_t num_sink_rates;
        int sink_rates[DP_MAX_SUPPORTED_RATES];