mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 10:14:23 +08:00
drm/i915: Disable LVDS port after the pipe on PCH
Follow the correct pipe vs port disable sequence for the PCH LVDS ports, ie. disable the port after the pipe. Other PCH port were already converted in the following commits:1ea56e269e
drm/i915: Disable CRT port after pipe on PCH platforms3c65d1d1bb
drm/i915: Disable SDVO port after the pipe on PCH platformsa4790cec3a
drm/i915: Disable HDMI port after the pipe on PCH platforms08aff3fe26
drm/i915: Move DP port disable to post_disable for pch platforms but LVDS was forgotten. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
c07a2d1194
commit
d26a5b6e80
@ -239,8 +239,6 @@ static void intel_disable_lvds(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_device *dev = encoder->base.dev;
|
||||
struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
|
||||
struct intel_connector *intel_connector =
|
||||
&lvds_encoder->attached_connector->base;
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
u32 ctl_reg, stat_reg;
|
||||
|
||||
@ -252,8 +250,6 @@ static void intel_disable_lvds(struct intel_encoder *encoder)
|
||||
stat_reg = PP_STATUS;
|
||||
}
|
||||
|
||||
intel_panel_disable_backlight(intel_connector);
|
||||
|
||||
I915_WRITE(ctl_reg, I915_READ(ctl_reg) & ~POWER_TARGET_ON);
|
||||
if (wait_for((I915_READ(stat_reg) & PP_ON) == 0, 1000))
|
||||
DRM_ERROR("timed out waiting for panel to power off\n");
|
||||
@ -262,6 +258,31 @@ static void intel_disable_lvds(struct intel_encoder *encoder)
|
||||
POSTING_READ(lvds_encoder->reg);
|
||||
}
|
||||
|
||||
static void gmch_disable_lvds(struct intel_encoder *encoder)
|
||||
{
|
||||
struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
|
||||
struct intel_connector *intel_connector =
|
||||
&lvds_encoder->attached_connector->base;
|
||||
|
||||
intel_panel_disable_backlight(intel_connector);
|
||||
|
||||
intel_disable_lvds(encoder);
|
||||
}
|
||||
|
||||
static void pch_disable_lvds(struct intel_encoder *encoder)
|
||||
{
|
||||
struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
|
||||
struct intel_connector *intel_connector =
|
||||
&lvds_encoder->attached_connector->base;
|
||||
|
||||
intel_panel_disable_backlight(intel_connector);
|
||||
}
|
||||
|
||||
static void pch_post_disable_lvds(struct intel_encoder *encoder)
|
||||
{
|
||||
intel_disable_lvds(encoder);
|
||||
}
|
||||
|
||||
static enum drm_mode_status
|
||||
intel_lvds_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
@ -992,7 +1013,12 @@ void intel_lvds_init(struct drm_device *dev)
|
||||
intel_encoder->enable = intel_enable_lvds;
|
||||
intel_encoder->pre_enable = intel_pre_enable_lvds;
|
||||
intel_encoder->compute_config = intel_lvds_compute_config;
|
||||
intel_encoder->disable = intel_disable_lvds;
|
||||
if (HAS_PCH_SPLIT(dev_priv)) {
|
||||
intel_encoder->disable = pch_disable_lvds;
|
||||
intel_encoder->post_disable = pch_post_disable_lvds;
|
||||
} else {
|
||||
intel_encoder->disable = gmch_disable_lvds;
|
||||
}
|
||||
intel_encoder->get_hw_state = intel_lvds_get_hw_state;
|
||||
intel_encoder->get_config = intel_lvds_get_config;
|
||||
intel_connector->get_hw_state = intel_connector_get_hw_state;
|
||||
|
Loading…
Reference in New Issue
Block a user