diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2014-04-05 14:51:35 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-04-09 08:48:19 -0400 |
commit | 13732ba7493fd4b28568f768ee12497e26a0c8af (patch) | |
tree | 655f48728d45a365cd60bbc5d6a8aa1e841c70a6 /drivers/gpu | |
parent | 759c85e778f4f99f2f7eaa599c57b0c0ada97d08 (diff) |
drm/i915: move infoframe setting to after pll enable v3
Needs to happen after clock is running or it doesn't behave correctly.
v2: fix subject (Ville)
make it clearer that this occurs in pre_enable (Paulo)
misc bikesheds (Paulo)
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index fb9839b0effa..fd940a7e6e2f 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
@@ -669,8 +669,6 @@ static void intel_hdmi_mode_set(struct intel_encoder *encoder) | |||
669 | 669 | ||
670 | I915_WRITE(intel_hdmi->hdmi_reg, hdmi_val); | 670 | I915_WRITE(intel_hdmi->hdmi_reg, hdmi_val); |
671 | POSTING_READ(intel_hdmi->hdmi_reg); | 671 | POSTING_READ(intel_hdmi->hdmi_reg); |
672 | |||
673 | intel_hdmi->set_infoframes(&encoder->base, adjusted_mode); | ||
674 | } | 672 | } |
675 | 673 | ||
676 | static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, | 674 | static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, |
@@ -1115,13 +1113,26 @@ done: | |||
1115 | return 0; | 1113 | return 0; |
1116 | } | 1114 | } |
1117 | 1115 | ||
1116 | static void intel_hdmi_pre_enable(struct intel_encoder *encoder) | ||
1117 | { | ||
1118 | struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); | ||
1119 | struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); | ||
1120 | struct drm_display_mode *adjusted_mode = | ||
1121 | &intel_crtc->config.adjusted_mode; | ||
1122 | |||
1123 | intel_hdmi->set_infoframes(&encoder->base, adjusted_mode); | ||
1124 | } | ||
1125 | |||
1118 | static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) | 1126 | static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) |
1119 | { | 1127 | { |
1120 | struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); | 1128 | struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); |
1129 | struct intel_hdmi *intel_hdmi = &dport->hdmi; | ||
1121 | struct drm_device *dev = encoder->base.dev; | 1130 | struct drm_device *dev = encoder->base.dev; |
1122 | struct drm_i915_private *dev_priv = dev->dev_private; | 1131 | struct drm_i915_private *dev_priv = dev->dev_private; |
1123 | struct intel_crtc *intel_crtc = | 1132 | struct intel_crtc *intel_crtc = |
1124 | to_intel_crtc(encoder->base.crtc); | 1133 | to_intel_crtc(encoder->base.crtc); |
1134 | struct drm_display_mode *adjusted_mode = | ||
1135 | &intel_crtc->config.adjusted_mode; | ||
1125 | enum dpio_channel port = vlv_dport_to_channel(dport); | 1136 | enum dpio_channel port = vlv_dport_to_channel(dport); |
1126 | int pipe = intel_crtc->pipe; | 1137 | int pipe = intel_crtc->pipe; |
1127 | u32 val; | 1138 | u32 val; |
@@ -1155,6 +1166,8 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) | |||
1155 | vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW23(port), 0x00400888); | 1166 | vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW23(port), 0x00400888); |
1156 | mutex_unlock(&dev_priv->dpio_lock); | 1167 | mutex_unlock(&dev_priv->dpio_lock); |
1157 | 1168 | ||
1169 | intel_hdmi->set_infoframes(&encoder->base, adjusted_mode); | ||
1170 | |||
1158 | intel_enable_hdmi(encoder); | 1171 | intel_enable_hdmi(encoder); |
1159 | 1172 | ||
1160 | vlv_wait_port_ready(dev_priv, dport); | 1173 | vlv_wait_port_ready(dev_priv, dport); |
@@ -1350,6 +1363,7 @@ void intel_hdmi_init(struct drm_device *dev, int hdmi_reg, enum port port) | |||
1350 | intel_encoder->enable = vlv_enable_hdmi; | 1363 | intel_encoder->enable = vlv_enable_hdmi; |
1351 | intel_encoder->post_disable = vlv_hdmi_post_disable; | 1364 | intel_encoder->post_disable = vlv_hdmi_post_disable; |
1352 | } else { | 1365 | } else { |
1366 | intel_encoder->pre_enable = intel_hdmi_pre_enable; | ||
1353 | intel_encoder->enable = intel_enable_hdmi; | 1367 | intel_encoder->enable = intel_enable_hdmi; |
1354 | } | 1368 | } |
1355 | 1369 | ||