diff options
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. */ |