diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_crt.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_crt.c | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index e115bcc6766f..5819d524d917 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c | |||
@@ -67,7 +67,7 @@ static bool intel_crt_get_hw_state(struct intel_encoder *encoder, | |||
67 | enum pipe *pipe) | 67 | enum pipe *pipe) |
68 | { | 68 | { |
69 | struct drm_device *dev = encoder->base.dev; | 69 | struct drm_device *dev = encoder->base.dev; |
70 | struct drm_i915_private *dev_priv = dev->dev_private; | 70 | struct drm_i915_private *dev_priv = to_i915(dev); |
71 | struct intel_crt *crt = intel_encoder_to_crt(encoder); | 71 | struct intel_crt *crt = intel_encoder_to_crt(encoder); |
72 | enum intel_display_power_domain power_domain; | 72 | enum intel_display_power_domain power_domain; |
73 | u32 tmp; | 73 | u32 tmp; |
@@ -98,7 +98,7 @@ out: | |||
98 | 98 | ||
99 | static unsigned int intel_crt_get_flags(struct intel_encoder *encoder) | 99 | static unsigned int intel_crt_get_flags(struct intel_encoder *encoder) |
100 | { | 100 | { |
101 | struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; | 101 | struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); |
102 | struct intel_crt *crt = intel_encoder_to_crt(encoder); | 102 | struct intel_crt *crt = intel_encoder_to_crt(encoder); |
103 | u32 tmp, flags = 0; | 103 | u32 tmp, flags = 0; |
104 | 104 | ||
@@ -146,7 +146,7 @@ static void hsw_crt_get_config(struct intel_encoder *encoder, | |||
146 | static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode) | 146 | static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode) |
147 | { | 147 | { |
148 | struct drm_device *dev = encoder->base.dev; | 148 | struct drm_device *dev = encoder->base.dev; |
149 | struct drm_i915_private *dev_priv = dev->dev_private; | 149 | struct drm_i915_private *dev_priv = to_i915(dev); |
150 | struct intel_crt *crt = intel_encoder_to_crt(encoder); | 150 | struct intel_crt *crt = intel_encoder_to_crt(encoder); |
151 | struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); | 151 | struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); |
152 | const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; | 152 | const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; |
@@ -281,7 +281,7 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector) | |||
281 | { | 281 | { |
282 | struct drm_device *dev = connector->dev; | 282 | struct drm_device *dev = connector->dev; |
283 | struct intel_crt *crt = intel_attached_crt(connector); | 283 | struct intel_crt *crt = intel_attached_crt(connector); |
284 | struct drm_i915_private *dev_priv = dev->dev_private; | 284 | struct drm_i915_private *dev_priv = to_i915(dev); |
285 | u32 adpa; | 285 | u32 adpa; |
286 | bool ret; | 286 | bool ret; |
287 | 287 | ||
@@ -301,8 +301,10 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector) | |||
301 | 301 | ||
302 | I915_WRITE(crt->adpa_reg, adpa); | 302 | I915_WRITE(crt->adpa_reg, adpa); |
303 | 303 | ||
304 | if (wait_for((I915_READ(crt->adpa_reg) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0, | 304 | if (intel_wait_for_register(dev_priv, |
305 | 1000)) | 305 | crt->adpa_reg, |
306 | ADPA_CRT_HOTPLUG_FORCE_TRIGGER, 0, | ||
307 | 1000)) | ||
306 | DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER"); | 308 | DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER"); |
307 | 309 | ||
308 | if (turn_off_dac) { | 310 | if (turn_off_dac) { |
@@ -326,7 +328,7 @@ static bool valleyview_crt_detect_hotplug(struct drm_connector *connector) | |||
326 | { | 328 | { |
327 | struct drm_device *dev = connector->dev; | 329 | struct drm_device *dev = connector->dev; |
328 | struct intel_crt *crt = intel_attached_crt(connector); | 330 | struct intel_crt *crt = intel_attached_crt(connector); |
329 | struct drm_i915_private *dev_priv = dev->dev_private; | 331 | struct drm_i915_private *dev_priv = to_i915(dev); |
330 | u32 adpa; | 332 | u32 adpa; |
331 | bool ret; | 333 | bool ret; |
332 | u32 save_adpa; | 334 | u32 save_adpa; |
@@ -338,8 +340,10 @@ static bool valleyview_crt_detect_hotplug(struct drm_connector *connector) | |||
338 | 340 | ||
339 | I915_WRITE(crt->adpa_reg, adpa); | 341 | I915_WRITE(crt->adpa_reg, adpa); |
340 | 342 | ||
341 | if (wait_for((I915_READ(crt->adpa_reg) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0, | 343 | if (intel_wait_for_register(dev_priv, |
342 | 1000)) { | 344 | crt->adpa_reg, |
345 | ADPA_CRT_HOTPLUG_FORCE_TRIGGER, 0, | ||
346 | 1000)) { | ||
343 | DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER"); | 347 | DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER"); |
344 | I915_WRITE(crt->adpa_reg, save_adpa); | 348 | I915_WRITE(crt->adpa_reg, save_adpa); |
345 | } | 349 | } |
@@ -367,7 +371,7 @@ static bool valleyview_crt_detect_hotplug(struct drm_connector *connector) | |||
367 | static bool intel_crt_detect_hotplug(struct drm_connector *connector) | 371 | static bool intel_crt_detect_hotplug(struct drm_connector *connector) |
368 | { | 372 | { |
369 | struct drm_device *dev = connector->dev; | 373 | struct drm_device *dev = connector->dev; |
370 | struct drm_i915_private *dev_priv = dev->dev_private; | 374 | struct drm_i915_private *dev_priv = to_i915(dev); |
371 | u32 stat; | 375 | u32 stat; |
372 | bool ret = false; | 376 | bool ret = false; |
373 | int i, tries = 0; | 377 | int i, tries = 0; |
@@ -394,9 +398,9 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector) | |||
394 | CRT_HOTPLUG_FORCE_DETECT, | 398 | CRT_HOTPLUG_FORCE_DETECT, |
395 | CRT_HOTPLUG_FORCE_DETECT); | 399 | CRT_HOTPLUG_FORCE_DETECT); |
396 | /* wait for FORCE_DETECT to go off */ | 400 | /* wait for FORCE_DETECT to go off */ |
397 | if (wait_for((I915_READ(PORT_HOTPLUG_EN) & | 401 | if (intel_wait_for_register(dev_priv, PORT_HOTPLUG_EN, |
398 | CRT_HOTPLUG_FORCE_DETECT) == 0, | 402 | CRT_HOTPLUG_FORCE_DETECT, 0, |
399 | 1000)) | 403 | 1000)) |
400 | DRM_DEBUG_KMS("timed out waiting for FORCE_DETECT to go off"); | 404 | DRM_DEBUG_KMS("timed out waiting for FORCE_DETECT to go off"); |
401 | } | 405 | } |
402 | 406 | ||
@@ -449,7 +453,7 @@ static int intel_crt_ddc_get_modes(struct drm_connector *connector, | |||
449 | static bool intel_crt_detect_ddc(struct drm_connector *connector) | 453 | static bool intel_crt_detect_ddc(struct drm_connector *connector) |
450 | { | 454 | { |
451 | struct intel_crt *crt = intel_attached_crt(connector); | 455 | struct intel_crt *crt = intel_attached_crt(connector); |
452 | struct drm_i915_private *dev_priv = crt->base.base.dev->dev_private; | 456 | struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev); |
453 | struct edid *edid; | 457 | struct edid *edid; |
454 | struct i2c_adapter *i2c; | 458 | struct i2c_adapter *i2c; |
455 | 459 | ||
@@ -485,7 +489,7 @@ static enum drm_connector_status | |||
485 | intel_crt_load_detect(struct intel_crt *crt, uint32_t pipe) | 489 | intel_crt_load_detect(struct intel_crt *crt, uint32_t pipe) |
486 | { | 490 | { |
487 | struct drm_device *dev = crt->base.base.dev; | 491 | struct drm_device *dev = crt->base.base.dev; |
488 | struct drm_i915_private *dev_priv = dev->dev_private; | 492 | struct drm_i915_private *dev_priv = to_i915(dev); |
489 | uint32_t save_bclrpat; | 493 | uint32_t save_bclrpat; |
490 | uint32_t save_vtotal; | 494 | uint32_t save_vtotal; |
491 | uint32_t vtotal, vactive; | 495 | uint32_t vtotal, vactive; |
@@ -600,7 +604,7 @@ static enum drm_connector_status | |||
600 | intel_crt_detect(struct drm_connector *connector, bool force) | 604 | intel_crt_detect(struct drm_connector *connector, bool force) |
601 | { | 605 | { |
602 | struct drm_device *dev = connector->dev; | 606 | struct drm_device *dev = connector->dev; |
603 | struct drm_i915_private *dev_priv = dev->dev_private; | 607 | struct drm_i915_private *dev_priv = to_i915(dev); |
604 | struct intel_crt *crt = intel_attached_crt(connector); | 608 | struct intel_crt *crt = intel_attached_crt(connector); |
605 | struct intel_encoder *intel_encoder = &crt->base; | 609 | struct intel_encoder *intel_encoder = &crt->base; |
606 | enum intel_display_power_domain power_domain; | 610 | enum intel_display_power_domain power_domain; |
@@ -681,7 +685,7 @@ static void intel_crt_destroy(struct drm_connector *connector) | |||
681 | static int intel_crt_get_modes(struct drm_connector *connector) | 685 | static int intel_crt_get_modes(struct drm_connector *connector) |
682 | { | 686 | { |
683 | struct drm_device *dev = connector->dev; | 687 | struct drm_device *dev = connector->dev; |
684 | struct drm_i915_private *dev_priv = dev->dev_private; | 688 | struct drm_i915_private *dev_priv = to_i915(dev); |
685 | struct intel_crt *crt = intel_attached_crt(connector); | 689 | struct intel_crt *crt = intel_attached_crt(connector); |
686 | struct intel_encoder *intel_encoder = &crt->base; | 690 | struct intel_encoder *intel_encoder = &crt->base; |
687 | enum intel_display_power_domain power_domain; | 691 | enum intel_display_power_domain power_domain; |
@@ -716,7 +720,7 @@ static int intel_crt_set_property(struct drm_connector *connector, | |||
716 | static void intel_crt_reset(struct drm_connector *connector) | 720 | static void intel_crt_reset(struct drm_connector *connector) |
717 | { | 721 | { |
718 | struct drm_device *dev = connector->dev; | 722 | struct drm_device *dev = connector->dev; |
719 | struct drm_i915_private *dev_priv = dev->dev_private; | 723 | struct drm_i915_private *dev_priv = to_i915(dev); |
720 | struct intel_crt *crt = intel_attached_crt(connector); | 724 | struct intel_crt *crt = intel_attached_crt(connector); |
721 | 725 | ||
722 | if (INTEL_INFO(dev)->gen >= 5) { | 726 | if (INTEL_INFO(dev)->gen >= 5) { |
@@ -743,6 +747,7 @@ static const struct drm_connector_funcs intel_crt_connector_funcs = { | |||
743 | .dpms = drm_atomic_helper_connector_dpms, | 747 | .dpms = drm_atomic_helper_connector_dpms, |
744 | .detect = intel_crt_detect, | 748 | .detect = intel_crt_detect, |
745 | .fill_modes = drm_helper_probe_single_connector_modes, | 749 | .fill_modes = drm_helper_probe_single_connector_modes, |
750 | .late_register = intel_connector_register, | ||
746 | .early_unregister = intel_connector_unregister, | 751 | .early_unregister = intel_connector_unregister, |
747 | .destroy = intel_crt_destroy, | 752 | .destroy = intel_crt_destroy, |
748 | .set_property = intel_crt_set_property, | 753 | .set_property = intel_crt_set_property, |
@@ -791,7 +796,7 @@ void intel_crt_init(struct drm_device *dev) | |||
791 | struct drm_connector *connector; | 796 | struct drm_connector *connector; |
792 | struct intel_crt *crt; | 797 | struct intel_crt *crt; |
793 | struct intel_connector *intel_connector; | 798 | struct intel_connector *intel_connector; |
794 | struct drm_i915_private *dev_priv = dev->dev_private; | 799 | struct drm_i915_private *dev_priv = to_i915(dev); |
795 | i915_reg_t adpa_reg; | 800 | i915_reg_t adpa_reg; |
796 | u32 adpa; | 801 | u32 adpa; |
797 | 802 | ||
@@ -879,8 +884,6 @@ void intel_crt_init(struct drm_device *dev) | |||
879 | 884 | ||
880 | drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); | 885 | drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); |
881 | 886 | ||
882 | drm_connector_register(connector); | ||
883 | |||
884 | if (!I915_HAS_HOTPLUG(dev)) | 887 | if (!I915_HAS_HOTPLUG(dev)) |
885 | intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT; | 888 | intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT; |
886 | 889 | ||