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) |
