aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 25d96889d7d..98967f3b772 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3822,6 +3822,11 @@ static void intel_update_watermarks(struct drm_device *dev)
3822 sr_hdisplay, sr_htotal, pixel_size); 3822 sr_hdisplay, sr_htotal, pixel_size);
3823} 3823}
3824 3824
3825static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
3826{
3827 return dev_priv->lvds_use_ssc && i915_panel_use_ssc;
3828}
3829
3825static int intel_crtc_mode_set(struct drm_crtc *crtc, 3830static int intel_crtc_mode_set(struct drm_crtc *crtc,
3826 struct drm_display_mode *mode, 3831 struct drm_display_mode *mode,
3827 struct drm_display_mode *adjusted_mode, 3832 struct drm_display_mode *adjusted_mode,
@@ -3884,7 +3889,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
3884 num_connectors++; 3889 num_connectors++;
3885 } 3890 }
3886 3891
3887 if (is_lvds && dev_priv->lvds_use_ssc && num_connectors < 2) { 3892 if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
3888 refclk = dev_priv->lvds_ssc_freq * 1000; 3893 refclk = dev_priv->lvds_ssc_freq * 1000;
3889 DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n", 3894 DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
3890 refclk / 1000); 3895 refclk / 1000);
@@ -4059,7 +4064,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
4059 udelay(200); 4064 udelay(200);
4060 4065
4061 if (has_edp_encoder) { 4066 if (has_edp_encoder) {
4062 if (dev_priv->lvds_use_ssc) { 4067 if (intel_panel_use_ssc(dev_priv)) {
4063 temp |= DREF_SSC1_ENABLE; 4068 temp |= DREF_SSC1_ENABLE;
4064 I915_WRITE(PCH_DREF_CONTROL, temp); 4069 I915_WRITE(PCH_DREF_CONTROL, temp);
4065 4070
@@ -4070,13 +4075,13 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
4070 4075
4071 /* Enable CPU source on CPU attached eDP */ 4076 /* Enable CPU source on CPU attached eDP */
4072 if (!intel_encoder_is_pch_edp(&has_edp_encoder->base)) { 4077 if (!intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
4073 if (dev_priv->lvds_use_ssc) 4078 if (intel_panel_use_ssc(dev_priv))
4074 temp |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD; 4079 temp |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD;
4075 else 4080 else
4076 temp |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD; 4081 temp |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
4077 } else { 4082 } else {
4078 /* Enable SSC on PCH eDP if needed */ 4083 /* Enable SSC on PCH eDP if needed */
4079 if (dev_priv->lvds_use_ssc) { 4084 if (intel_panel_use_ssc(dev_priv)) {
4080 DRM_ERROR("enabling SSC on PCH\n"); 4085 DRM_ERROR("enabling SSC on PCH\n");
4081 temp |= DREF_SUPERSPREAD_SOURCE_ENABLE; 4086 temp |= DREF_SUPERSPREAD_SOURCE_ENABLE;
4082 } 4087 }
@@ -4104,7 +4109,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
4104 int factor = 21; 4109 int factor = 21;
4105 4110
4106 if (is_lvds) { 4111 if (is_lvds) {
4107 if ((dev_priv->lvds_use_ssc && 4112 if ((intel_panel_use_ssc(dev_priv) &&
4108 dev_priv->lvds_ssc_freq == 100) || 4113 dev_priv->lvds_ssc_freq == 100) ||
4109 (I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP) 4114 (I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP)
4110 factor = 25; 4115 factor = 25;
@@ -4183,7 +4188,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
4183 /* XXX: just matching BIOS for now */ 4188 /* XXX: just matching BIOS for now */
4184 /* dpll |= PLL_REF_INPUT_TVCLKINBC; */ 4189 /* dpll |= PLL_REF_INPUT_TVCLKINBC; */
4185 dpll |= 3; 4190 dpll |= 3;
4186 else if (is_lvds && dev_priv->lvds_use_ssc && num_connectors < 2) 4191 else if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2)
4187 dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; 4192 dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
4188 else 4193 else
4189 dpll |= PLL_REF_INPUT_DREFCLK; 4194 dpll |= PLL_REF_INPUT_DREFCLK;