aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-04-19 18:10:58 -0400
committerKeith Packard <keithp@keithp.com>2011-05-10 16:19:13 -0400
commit7173188d5d5e50b95c588dbae3b3bc78fde4138e (patch)
tree2659db8e43421bdc75e0406796a446b12fd82708 /drivers/gpu
parentb259f6730c09bc356df932ba9188f291de816808 (diff)
drm/i915: Simplify return value from intel_get_load_detect_pipe
... and so remove the confusion as to whether to use the returned crtc or intel_encoder->base.crtc with the subsequent load-detection. Even though they were the same, the two instances of load-detection code disagreed over which was the more correct. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c17
-rw-r--r--drivers/gpu/drm/i915/intel_display.c16
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h8
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c6
4 files changed, 22 insertions, 25 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index d03fc05b39c0..2eb60cd47b33 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -305,13 +305,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
305} 305}
306 306
307static enum drm_connector_status 307static enum drm_connector_status
308intel_crt_load_detect(struct drm_crtc *crtc, struct intel_crt *crt) 308intel_crt_load_detect(struct intel_crt *crt)
309{ 309{
310 struct drm_encoder *encoder = &crt->base.base; 310 struct drm_device *dev = crt->base.base.dev;
311 struct drm_device *dev = encoder->dev;
312 struct drm_i915_private *dev_priv = dev->dev_private; 311 struct drm_i915_private *dev_priv = dev->dev_private;
313 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 312 uint32_t pipe = to_intel_crtc(crt->base.base.crtc)->pipe;
314 uint32_t pipe = intel_crtc->pipe;
315 uint32_t save_bclrpat; 313 uint32_t save_bclrpat;
316 uint32_t save_vtotal; 314 uint32_t save_vtotal;
317 uint32_t vtotal, vactive; 315 uint32_t vtotal, vactive;
@@ -454,15 +452,14 @@ intel_crt_detect(struct drm_connector *connector, bool force)
454 /* for pre-945g platforms use load detect */ 452 /* for pre-945g platforms use load detect */
455 crtc = crt->base.base.crtc; 453 crtc = crt->base.base.crtc;
456 if (crtc && crtc->enabled) { 454 if (crtc && crtc->enabled) {
457 status = intel_crt_load_detect(crtc, crt); 455 status = intel_crt_load_detect(crt);
458 } else { 456 } else {
459 crtc = intel_get_load_detect_pipe(&crt->base, connector, 457 if (intel_get_load_detect_pipe(&crt->base, connector,
460 NULL, &dpms_mode); 458 NULL, &dpms_mode)) {
461 if (crtc) {
462 if (intel_crt_detect_ddc(connector)) 459 if (intel_crt_detect_ddc(connector))
463 status = connector_status_connected; 460 status = connector_status_connected;
464 else 461 else
465 status = intel_crt_load_detect(crtc, crt); 462 status = intel_crt_load_detect(crt);
466 intel_release_load_detect_pipe(&crt->base, 463 intel_release_load_detect_pipe(&crt->base,
467 connector, dpms_mode); 464 connector, dpms_mode);
468 } else 465 } else
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 373c2a005ec1..228621d07743 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5481,10 +5481,10 @@ static struct drm_display_mode load_detect_mode = {
5481 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 5481 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
5482}; 5482};
5483 5483
5484struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder, 5484bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
5485 struct drm_connector *connector, 5485 struct drm_connector *connector,
5486 struct drm_display_mode *mode, 5486 struct drm_display_mode *mode,
5487 int *dpms_mode) 5487 int *dpms_mode)
5488{ 5488{
5489 struct intel_crtc *intel_crtc; 5489 struct intel_crtc *intel_crtc;
5490 struct drm_crtc *possible_crtc; 5490 struct drm_crtc *possible_crtc;
@@ -5517,7 +5517,7 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
5517 crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON); 5517 crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
5518 encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON); 5518 encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
5519 } 5519 }
5520 return crtc; 5520 return true;
5521 } 5521 }
5522 5522
5523 /* Find an unused one (if possible) */ 5523 /* Find an unused one (if possible) */
@@ -5537,7 +5537,8 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
5537 * If we didn't find an unused CRTC, don't use any. 5537 * If we didn't find an unused CRTC, don't use any.
5538 */ 5538 */
5539 if (!crtc) { 5539 if (!crtc) {
5540 return NULL; 5540 DRM_DEBUG_KMS("no pipe available for load-detect\n");
5541 return false;
5541 } 5542 }
5542 5543
5543 encoder->crtc = crtc; 5544 encoder->crtc = crtc;
@@ -5561,10 +5562,11 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
5561 encoder_funcs->mode_set(encoder, &crtc->mode, &crtc->mode); 5562 encoder_funcs->mode_set(encoder, &crtc->mode, &crtc->mode);
5562 encoder_funcs->commit(encoder); 5563 encoder_funcs->commit(encoder);
5563 } 5564 }
5565
5564 /* let the connector get through one full cycle before testing */ 5566 /* let the connector get through one full cycle before testing */
5565 intel_wait_for_vblank(dev, intel_crtc->pipe); 5567 intel_wait_for_vblank(dev, intel_crtc->pipe);
5566 5568
5567 return crtc; 5569 return true;
5568} 5570}
5569 5571
5570void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, 5572void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 1d20712d527f..fa46d329a8ea 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -291,10 +291,10 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
291 struct drm_file *file_priv); 291 struct drm_file *file_priv);
292extern void intel_wait_for_vblank(struct drm_device *dev, int pipe); 292extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
293extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe); 293extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe);
294extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder, 294extern bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
295 struct drm_connector *connector, 295 struct drm_connector *connector,
296 struct drm_display_mode *mode, 296 struct drm_display_mode *mode,
297 int *dpms_mode); 297 int *dpms_mode);
298extern void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, 298extern void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
299 struct drm_connector *connector, 299 struct drm_connector *connector,
300 int dpms_mode); 300 int dpms_mode);
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 6b22c1dcc015..3322582ba3ec 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1361,12 +1361,10 @@ intel_tv_detect(struct drm_connector *connector, bool force)
1361 if (intel_tv->base.base.crtc && intel_tv->base.base.crtc->enabled) { 1361 if (intel_tv->base.base.crtc && intel_tv->base.base.crtc->enabled) {
1362 type = intel_tv_detect_type(intel_tv, connector); 1362 type = intel_tv_detect_type(intel_tv, connector);
1363 } else if (force) { 1363 } else if (force) {
1364 struct drm_crtc *crtc;
1365 int dpms_mode; 1364 int dpms_mode;
1366 1365
1367 crtc = intel_get_load_detect_pipe(&intel_tv->base, connector, 1366 if (intel_get_load_detect_pipe(&intel_tv->base, connector,
1368 &mode, &dpms_mode); 1367 &mode, &dpms_mode)) {
1369 if (crtc) {
1370 type = intel_tv_detect_type(intel_tv, connector); 1368 type = intel_tv_detect_type(intel_tv, connector);
1371 intel_release_load_detect_pipe(&intel_tv->base, connector, 1369 intel_release_load_detect_pipe(&intel_tv->base, connector,
1372 dpms_mode); 1370 dpms_mode);