Blob Blame History Raw
Hi All,

This patch series (which I'm forwarding from the intel-gfx mailing list) fixes
a bunch of backlight regressions in 3.15+ and as such should probably
be added to the stabilization branch.

I expect these to land in 3.16 soon enough, but just to be sure we should
keep an eye on that too.

Regards,

Hans


diff -ruNp a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
--- a/drivers/gpu/drm/i915/i915_drv.h	2014-06-08 13:19:54.000000000 -0500
+++ b/drivers/gpu/drm/i915/i915_drv.h	2014-07-01 10:18:57.167645053 -0500
@@ -803,6 +803,7 @@ enum intel_sbi_destination {
 #define QUIRK_PIPEA_FORCE (1<<0)
 #define QUIRK_LVDS_SSC_DISABLE (1<<1)
 #define QUIRK_INVERT_BRIGHTNESS (1<<2)
+#define QUIRK_BACKLIGHT_PRESENT (1<<3)
 
 struct intel_fbdev;
 struct intel_fbc_work;
diff -ruNp a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
--- a/drivers/gpu/drm/i915/intel_display.c	2014-07-01 10:17:06.084680359 -0500
+++ b/drivers/gpu/drm/i915/intel_display.c	2014-07-01 10:24:56.961768058 -0500
@@ -11165,6 +11165,13 @@ static void quirk_invert_brightness(stru
 	dev_priv->quirks |= QUIRK_INVERT_BRIGHTNESS;
 	DRM_INFO("applying inverted panel brightness quirk\n");
 }
+/* Some VBT's incorrectly indicate no backlight is present */
+static void quirk_backlight_present(struct drm_device *dev)
+{
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	dev_priv->quirks |= QUIRK_BACKLIGHT_PRESENT;
+	DRM_INFO("applying backlight present quirk\n");
+}
 
 struct intel_quirk {
 	int device;
@@ -11237,6 +11244,18 @@ static struct intel_quirk intel_quirks[]
 
 	/* Acer Aspire 5336 */
 	{ 0x2a42, 0x1025, 0x048a, quirk_invert_brightness },
+
+	/* Acer C720 Chromebook has a controllable backlight */
+	{ 0x0a06, 0x1025, 0x0a11, quirk_backlight_present },
+
+	/* Dell 11 Chromebook */
+	{ 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
+
+	/* HP 14 (Celeron 2955U) Chromebook */
+	{ 0x0a06, 0x103c, 0x21ed, quirk_backlight_present },
+
+	/* Toshiba CB35 Chromebook */
+	{ 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
 };
 
 static void intel_init_quirks(struct drm_device *dev)
diff -ruNp a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
--- a/drivers/gpu/drm/i915/intel_panel.c	2014-07-01 10:17:06.153680958 -0500
+++ b/drivers/gpu/drm/i915/intel_panel.c	2014-07-01 10:28:03.578386955 -0500
@@ -1065,8 +1065,13 @@ int intel_panel_setup_backlight(struct d
 	int ret;
 
 	if (!dev_priv->vbt.backlight.present) {
-		DRM_DEBUG_KMS("native backlight control not available per VBT\n");
-		return 0;
+		if (dev_priv->quirks & QUIRK_BACKLIGHT_PRESENT) {
+			DRM_DEBUG_KMS("no backlight present per VBT, but "
+				      "present per quirk\n");
+		} else {
+			DRM_DEBUG_KMS("no backlight present per VBT\n");
+			return 0;
+		}
 	}
 
 	/* set level and max in panel struct */