aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2012-10-15 14:51:42 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-10-18 15:24:38 -0400
commita7902ac548190654c58e2491ff8646701772caa8 (patch)
treef8e78ba3ea3f4f7849a1f543bd86d23d347a8406 /drivers/gpu/drm/i915/intel_dp.c
parentc19b0669925cb00dc1c7b2362bfa85128afba882 (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.c32
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
2556static 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
2556static const struct drm_connector_funcs intel_dp_connector_funcs = { 2562static 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. */