diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 15 |
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index f245c588ae95..6042921fdf3f 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -262,6 +262,7 @@ enum intel_pch { | |||
262 | }; | 262 | }; |
263 | 263 | ||
264 | #define QUIRK_PIPEA_FORCE (1<<0) | 264 | #define QUIRK_PIPEA_FORCE (1<<0) |
265 | #define QUIRK_LVDS_SSC_DISABLE (1<<1) | ||
265 | 266 | ||
266 | struct intel_fbdev; | 267 | struct intel_fbdev; |
267 | 268 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 21b6f93fe919..0f1c799afea1 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -4305,7 +4305,8 @@ static void intel_update_watermarks(struct drm_device *dev) | |||
4305 | 4305 | ||
4306 | static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) | 4306 | static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) |
4307 | { | 4307 | { |
4308 | return dev_priv->lvds_use_ssc && i915_panel_use_ssc; | 4308 | return dev_priv->lvds_use_ssc && i915_panel_use_ssc |
4309 | && !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE); | ||
4309 | } | 4310 | } |
4310 | 4311 | ||
4311 | static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | 4312 | static int i9xx_crtc_mode_set(struct drm_crtc *crtc, |
@@ -7810,6 +7811,15 @@ static void quirk_pipea_force (struct drm_device *dev) | |||
7810 | DRM_DEBUG_DRIVER("applying pipe a force quirk\n"); | 7811 | DRM_DEBUG_DRIVER("applying pipe a force quirk\n"); |
7811 | } | 7812 | } |
7812 | 7813 | ||
7814 | /* | ||
7815 | * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason | ||
7816 | */ | ||
7817 | static void quirk_ssc_force_disable(struct drm_device *dev) | ||
7818 | { | ||
7819 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
7820 | dev_priv->quirks |= QUIRK_LVDS_SSC_DISABLE; | ||
7821 | } | ||
7822 | |||
7813 | struct intel_quirk { | 7823 | struct intel_quirk { |
7814 | int device; | 7824 | int device; |
7815 | int subsystem_vendor; | 7825 | int subsystem_vendor; |
@@ -7838,6 +7848,9 @@ struct intel_quirk intel_quirks[] = { | |||
7838 | /* 855 & before need to leave pipe A & dpll A up */ | 7848 | /* 855 & before need to leave pipe A & dpll A up */ |
7839 | { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force }, | 7849 | { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force }, |
7840 | { 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force }, | 7850 | { 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force }, |
7851 | |||
7852 | /* Lenovo U160 cannot use SSC on LVDS */ | ||
7853 | { 0x0046, 0x17aa, 0x3920, quirk_ssc_force_disable }, | ||
7841 | }; | 7854 | }; |
7842 | 7855 | ||
7843 | static void intel_init_quirks(struct drm_device *dev) | 7856 | static void intel_init_quirks(struct drm_device *dev) |