diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2012-10-15 14:51:42 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-18 15:24:38 -0400 |
commit | a7902ac548190654c58e2491ff8646701772caa8 (patch) | |
tree | f8e78ba3ea3f4f7849a1f543bd86d23d347a8406 /drivers/gpu/drm/i915/intel_dp.c | |
parent | c19b0669925cb00dc1c7b2362bfa85128afba882 (diff) |
drm/i915: set the correct function pointers for Haswell DP
This is the final remaining piece of Haswell DP enablement. After this
patch, just calling intel_dp_init on any port will make DP work. We
still do not do this because we're currently initializing HDMI on all
the ports, so if we replace intel_hdmi_init with intel_dp_init, we
will break HDMI, and we can't call both because they share the same
registers.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index f6d86492ba3e..697b1768e5c3 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -2553,6 +2553,12 @@ static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = { | |||
2553 | .disable = intel_encoder_noop, | 2553 | .disable = intel_encoder_noop, |
2554 | }; | 2554 | }; |
2555 | 2555 | ||
2556 | static const struct drm_encoder_helper_funcs intel_dp_helper_funcs_hsw = { | ||
2557 | .mode_fixup = intel_dp_mode_fixup, | ||
2558 | .mode_set = intel_ddi_mode_set, | ||
2559 | .disable = intel_encoder_noop, | ||
2560 | }; | ||
2561 | |||
2556 | static const struct drm_connector_funcs intel_dp_connector_funcs = { | 2562 | static const struct drm_connector_funcs intel_dp_connector_funcs = { |
2557 | .dpms = intel_connector_dpms, | 2563 | .dpms = intel_connector_dpms, |
2558 | .detect = intel_dp_detect, | 2564 | .detect = intel_dp_detect, |
@@ -2688,16 +2694,30 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port) | |||
2688 | 2694 | ||
2689 | drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs, | 2695 | drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs, |
2690 | DRM_MODE_ENCODER_TMDS); | 2696 | DRM_MODE_ENCODER_TMDS); |
2691 | drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs); | 2697 | |
2698 | if (IS_HASWELL(dev)) | ||
2699 | drm_encoder_helper_add(&intel_encoder->base, | ||
2700 | &intel_dp_helper_funcs_hsw); | ||
2701 | else | ||
2702 | drm_encoder_helper_add(&intel_encoder->base, | ||
2703 | &intel_dp_helper_funcs); | ||
2692 | 2704 | ||
2693 | intel_connector_attach_encoder(intel_connector, intel_encoder); | 2705 | intel_connector_attach_encoder(intel_connector, intel_encoder); |
2694 | drm_sysfs_connector_add(connector); | 2706 | drm_sysfs_connector_add(connector); |
2695 | 2707 | ||
2696 | intel_encoder->enable = intel_enable_dp; | 2708 | if (IS_HASWELL(dev)) { |
2697 | intel_encoder->pre_enable = intel_pre_enable_dp; | 2709 | intel_encoder->enable = intel_enable_ddi; |
2698 | intel_encoder->disable = intel_disable_dp; | 2710 | intel_encoder->pre_enable = intel_ddi_pre_enable; |
2699 | intel_encoder->post_disable = intel_post_disable_dp; | 2711 | intel_encoder->disable = intel_disable_ddi; |
2700 | intel_encoder->get_hw_state = intel_dp_get_hw_state; | 2712 | intel_encoder->post_disable = intel_ddi_post_disable; |
2713 | intel_encoder->get_hw_state = intel_ddi_get_hw_state; | ||
2714 | } else { | ||
2715 | intel_encoder->enable = intel_enable_dp; | ||
2716 | intel_encoder->pre_enable = intel_pre_enable_dp; | ||
2717 | intel_encoder->disable = intel_disable_dp; | ||
2718 | intel_encoder->post_disable = intel_post_disable_dp; | ||
2719 | intel_encoder->get_hw_state = intel_dp_get_hw_state; | ||
2720 | } | ||
2701 | intel_connector->get_hw_state = intel_connector_get_hw_state; | 2721 | intel_connector->get_hw_state = intel_connector_get_hw_state; |
2702 | 2722 | ||
2703 | /* Set up the DDC bus. */ | 2723 | /* Set up the DDC bus. */ |