Commit b76cf76bfa76246c8acce104de8f2fdd001069fb
Committed by
Daniel Vetter
1 parent
ab1f90f966
Exists in
master
and in
20 other branches
drm/i915: rearrange vlv hdmi enable and pre_enable callbacks
VLV wants encoder enabling before the pipe is up. This is currently achieved through calling the ->enable callback early, right after the ->pre_enable callback, in valleyview_crtc_enable(). This loses both the distinction between ->pre_enable and ->enable on VLV and the possibility to use a hook at the end of the modeset sequence. Rearrange the HDMI callbacks to make it possible to move ->enable call later. Basically do everything in ->pre_enable on VLV, and make ->enable a NOP. There should be no functional changes. v2: Rebase. v3: Explain why this is needed in the commit message (Chris). Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Showing 1 changed file with 11 additions and 9 deletions Side-by-side Diff
drivers/gpu/drm/i915/intel_hdmi.c
... | ... | @@ -718,14 +718,10 @@ |
718 | 718 | I915_WRITE(intel_hdmi->hdmi_reg, temp); |
719 | 719 | POSTING_READ(intel_hdmi->hdmi_reg); |
720 | 720 | } |
721 | +} | |
721 | 722 | |
722 | - if (IS_VALLEYVIEW(dev)) { | |
723 | - struct intel_digital_port *dport = | |
724 | - enc_to_dig_port(&encoder->base); | |
725 | - int channel = vlv_dport_to_channel(dport); | |
726 | - | |
727 | - vlv_wait_port_ready(dev_priv, channel); | |
728 | - } | |
723 | +static void vlv_enable_hdmi(struct intel_encoder *encoder) | |
724 | +{ | |
729 | 725 | } |
730 | 726 | |
731 | 727 | static void intel_disable_hdmi(struct intel_encoder *encoder) |
... | ... | @@ -1051,6 +1047,10 @@ |
1051 | 1047 | vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF8(port), |
1052 | 1048 | 0x00400888); |
1053 | 1049 | mutex_unlock(&dev_priv->dpio_lock); |
1050 | + | |
1051 | + intel_enable_hdmi(encoder); | |
1052 | + | |
1053 | + vlv_wait_port_ready(dev_priv, port); | |
1054 | 1054 | } |
1055 | 1055 | |
1056 | 1056 | static void intel_hdmi_pre_pll_enable(struct intel_encoder *encoder) |
1057 | 1057 | |
1058 | 1058 | |
1059 | 1059 | |
... | ... | @@ -1231,14 +1231,16 @@ |
1231 | 1231 | |
1232 | 1232 | intel_encoder->compute_config = intel_hdmi_compute_config; |
1233 | 1233 | intel_encoder->mode_set = intel_hdmi_mode_set; |
1234 | - intel_encoder->enable = intel_enable_hdmi; | |
1235 | 1234 | intel_encoder->disable = intel_disable_hdmi; |
1236 | 1235 | intel_encoder->get_hw_state = intel_hdmi_get_hw_state; |
1237 | 1236 | intel_encoder->get_config = intel_hdmi_get_config; |
1238 | 1237 | if (IS_VALLEYVIEW(dev)) { |
1239 | - intel_encoder->pre_enable = intel_hdmi_pre_enable; | |
1240 | 1238 | intel_encoder->pre_pll_enable = intel_hdmi_pre_pll_enable; |
1239 | + intel_encoder->pre_enable = intel_hdmi_pre_enable; | |
1240 | + intel_encoder->enable = vlv_enable_hdmi; | |
1241 | 1241 | intel_encoder->post_disable = intel_hdmi_post_disable; |
1242 | + } else { | |
1243 | + intel_encoder->enable = intel_enable_hdmi; | |
1242 | 1244 | } |
1243 | 1245 | |
1244 | 1246 | intel_encoder->type = INTEL_OUTPUT_HDMI; |