diff options
author | Shobhit Kumar <shobhit.kumar@intel.com> | 2013-07-11 17:44:56 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-07-18 03:59:26 -0400 |
commit | 2293bb5c0383f522ac659946ccfadb0e6d2f03c5 (patch) | |
tree | a7201285495400ec2a18dba8e8cfe5a067fc6c7a /drivers/gpu/drm/i915 | |
parent | 52604b1ffabac61eb07cce711f18e18ac74fbeae (diff) |
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>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 11eb697dec01..fe206a4a0f9e 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -1364,6 +1364,12 @@ static void intel_dp_get_config(struct intel_encoder *encoder, | |||
1364 | } | 1364 | } |
1365 | } | 1365 | } |
1366 | 1366 | ||
1367 | static bool is_edp_psr(struct intel_dp *intel_dp) | ||
1368 | { | ||
1369 | return is_edp(intel_dp) && | ||
1370 | intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED; | ||
1371 | } | ||
1372 | |||
1367 | static void intel_disable_dp(struct intel_encoder *encoder) | 1373 | static void intel_disable_dp(struct intel_encoder *encoder) |
1368 | { | 1374 | { |
1369 | struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); | 1375 | struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); |
@@ -2277,6 +2283,13 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) | |||
2277 | if (intel_dp->dpcd[DP_DPCD_REV] == 0) | 2283 | if (intel_dp->dpcd[DP_DPCD_REV] == 0) |
2278 | return false; /* DPCD not present */ | 2284 | return false; /* DPCD not present */ |
2279 | 2285 | ||
2286 | /* Check if the panel supports PSR */ | ||
2287 | memset(intel_dp->psr_dpcd, 0, sizeof(intel_dp->psr_dpcd)); | ||
2288 | intel_dp_aux_native_read_retry(intel_dp, DP_PSR_SUPPORT, | ||
2289 | intel_dp->psr_dpcd, | ||
2290 | sizeof(intel_dp->psr_dpcd)); | ||
2291 | if (is_edp_psr(intel_dp)) | ||
2292 | DRM_DEBUG_KMS("Detected EDP PSR Panel.\n"); | ||
2280 | if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] & | 2293 | if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] & |
2281 | DP_DWN_STRM_PORT_PRESENT)) | 2294 | DP_DWN_STRM_PORT_PRESENT)) |
2282 | return true; /* native DP sink */ | 2295 | return true; /* native DP sink */ |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 5dfc1a0f2351..d25726d5307f 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -487,6 +487,7 @@ struct intel_dp { | |||
487 | uint8_t link_bw; | 487 | uint8_t link_bw; |
488 | uint8_t lane_count; | 488 | uint8_t lane_count; |
489 | uint8_t dpcd[DP_RECEIVER_CAP_SIZE]; | 489 | uint8_t dpcd[DP_RECEIVER_CAP_SIZE]; |
490 | uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE]; | ||
490 | uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; | 491 | uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; |
491 | struct i2c_adapter adapter; | 492 | struct i2c_adapter adapter; |
492 | struct i2c_algo_dp_aux_data algo; | 493 | struct i2c_algo_dp_aux_data algo; |