| From dae792591097723957e5b0824f38c7803052876b Mon Sep 17 00:00:00 2001 |
| From: Shobhit Kumar <shobhit.kumar@intel.com> |
| Date: Thu, 11 Jul 2013 18:44:56 -0300 |
| Subject: drm/i915: Read the EDP DPCD and PSR Capability |
| |
| v2: reuse of just created is_edp_psr and put it at right place. |
| v3: move is_edp_psr above intel_edp_disable |
| v4: remove parentheses. Noticed by Paulo. |
| |
| Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> |
| Reviewed-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com> |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 2293bb5c0383f522ac659946ccfadb0e6d2f03c5) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_dp.c | 13 +++++++++++++ |
| drivers/gpu/drm/i915/intel_drv.h | 1 + |
| 2 files changed, 14 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c |
| index 9d90d4350ebf..71c7e9ef8152 100644 |
| --- a/drivers/gpu/drm/i915/intel_dp.c |
| +++ b/drivers/gpu/drm/i915/intel_dp.c |
| @@ -1380,6 +1380,12 @@ static void intel_dp_get_config(struct intel_encoder *encoder, |
| } |
| } |
| |
| +static bool is_edp_psr(struct intel_dp *intel_dp) |
| +{ |
| + return is_edp(intel_dp) && |
| + intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED; |
| +} |
| + |
| static void intel_disable_dp(struct intel_encoder *encoder) |
| { |
| struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); |
| @@ -2293,6 +2299,13 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) |
| if (intel_dp->dpcd[DP_DPCD_REV] == 0) |
| return false; /* DPCD not present */ |
| |
| + /* Check if the panel supports PSR */ |
| + memset(intel_dp->psr_dpcd, 0, sizeof(intel_dp->psr_dpcd)); |
| + intel_dp_aux_native_read_retry(intel_dp, DP_PSR_SUPPORT, |
| + intel_dp->psr_dpcd, |
| + sizeof(intel_dp->psr_dpcd)); |
| + if (is_edp_psr(intel_dp)) |
| + DRM_DEBUG_KMS("Detected EDP PSR Panel.\n"); |
| if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] & |
| DP_DWN_STRM_PORT_PRESENT)) |
| return true; /* native DP sink */ |
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h |
| index 02fee4364e8a..fdb71b445bf9 100644 |
| --- a/drivers/gpu/drm/i915/intel_drv.h |
| +++ b/drivers/gpu/drm/i915/intel_drv.h |
| @@ -487,6 +487,7 @@ struct intel_dp { |
| uint8_t link_bw; |
| uint8_t lane_count; |
| uint8_t dpcd[DP_RECEIVER_CAP_SIZE]; |
| + uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE]; |
| uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; |
| struct i2c_adapter adapter; |
| struct i2c_algo_dp_aux_data algo; |
| -- |
| 1.8.5.rc3 |
| |