提交 a7902ac5 编写于 作者: P Paulo Zanoni 提交者: Daniel Vetter

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: NPaulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: NDamien Lespiau <damien.lespiau@intel.com>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 c19b0669
...@@ -2553,6 +2553,12 @@ static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = { ...@@ -2553,6 +2553,12 @@ static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = {
.disable = intel_encoder_noop, .disable = intel_encoder_noop,
}; };
static const struct drm_encoder_helper_funcs intel_dp_helper_funcs_hsw = {
.mode_fixup = intel_dp_mode_fixup,
.mode_set = intel_ddi_mode_set,
.disable = intel_encoder_noop,
};
static const struct drm_connector_funcs intel_dp_connector_funcs = { static const struct drm_connector_funcs intel_dp_connector_funcs = {
.dpms = intel_connector_dpms, .dpms = intel_connector_dpms,
.detect = intel_dp_detect, .detect = intel_dp_detect,
...@@ -2688,16 +2694,30 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port) ...@@ -2688,16 +2694,30 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port)
drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs, drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
DRM_MODE_ENCODER_TMDS); DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs);
if (IS_HASWELL(dev))
drm_encoder_helper_add(&intel_encoder->base,
&intel_dp_helper_funcs_hsw);
else
drm_encoder_helper_add(&intel_encoder->base,
&intel_dp_helper_funcs);
intel_connector_attach_encoder(intel_connector, intel_encoder); intel_connector_attach_encoder(intel_connector, intel_encoder);
drm_sysfs_connector_add(connector); drm_sysfs_connector_add(connector);
intel_encoder->enable = intel_enable_dp; if (IS_HASWELL(dev)) {
intel_encoder->pre_enable = intel_pre_enable_dp; intel_encoder->enable = intel_enable_ddi;
intel_encoder->disable = intel_disable_dp; intel_encoder->pre_enable = intel_ddi_pre_enable;
intel_encoder->post_disable = intel_post_disable_dp; intel_encoder->disable = intel_disable_ddi;
intel_encoder->get_hw_state = intel_dp_get_hw_state; intel_encoder->post_disable = intel_ddi_post_disable;
intel_encoder->get_hw_state = intel_ddi_get_hw_state;
} else {
intel_encoder->enable = intel_enable_dp;
intel_encoder->pre_enable = intel_pre_enable_dp;
intel_encoder->disable = intel_disable_dp;
intel_encoder->post_disable = intel_post_disable_dp;
intel_encoder->get_hw_state = intel_dp_get_hw_state;
}
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
/* Set up the DDC bus. */ /* Set up the DDC bus. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册