@@ -1166,6 +1166,7 @@ enum intel_sbi_destination {
#define QUIRK_INVERT_BRIGHTNESS (1<<2)
#define QUIRK_BACKLIGHT_PRESENT (1<<3)
#define QUIRK_PIN_SWIZZLED_PAGES (1<<5)
+#define QUIRK_SKIP_DP_DPMS_D3 (1<<15)
struct intel_fbdev;
struct intel_fbc_work;
@@ -14758,6 +14758,16 @@ static void quirk_backlight_present(struct drm_device *dev)
DRM_INFO("applying backlight present quirk\n");
}
+/* Dell Wyse 3040 doesn't work well with some Dell monitors (E-series).
+ * Workaround this by skipping DP DPMS D3 transition.
+ */
+static void quirk_disable_dp_dpms_d3(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = to_i915(dev);
+ dev_priv->quirks |= QUIRK_SKIP_DP_DPMS_D3;
+ DRM_INFO("Applying Wyse 3040 quirk\n");
+}
+
struct intel_quirk {
int device;
int subsystem_vendor;
@@ -14841,6 +14851,9 @@ static struct intel_quirk intel_quirks[] = {
/* Dell Chromebook 11 (2015 version) */
{ 0x0a16, 0x1028, 0x0a35, quirk_backlight_present },
+
+ /* Dell Wyse 3040 */
+ { 0x22b0, 0x1028, 0x07c1, quirk_disable_dp_dpms_d3 },
};
static void intel_init_quirks(struct drm_device *dev)
@@ -2660,7 +2660,8 @@ static void intel_disable_dp(struct intel_encoder *encoder,
* ensure that we have vdd while we switch off the panel. */
intel_edp_panel_vdd_on(intel_dp);
intel_edp_backlight_off(old_conn_state);
- intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
+ if (!(dev_priv->quirks & QUIRK_SKIP_DP_DPMS_D3))
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
intel_edp_panel_off(intel_dp);
/* disable the port before the pipe on g4x */
BugLink: https://launchpad.net/bugs/1723915 Dell Wyse 3040 box with Cherry Trail shows a blank monitor output and other display issues with a certain Dell DP monitors (E-series). The only reliable workaround so far is to skip DP DPMS D3 transition. Based on the patch in opensuse created by Takashi Iwai <tiwai@suse.de>. Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com> --- drivers/gpu/drm/i915/i915_drv.h | 1 + drivers/gpu/drm/i915/intel_display.c | 13 +++++++++++++ drivers/gpu/drm/i915/intel_dp.c | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-)