78 lines
2.3 KiB
Diff
78 lines
2.3 KiB
Diff
From: Egbert Eich <eich@suse.de>
|
|
Date: Sun, 14 Oct 2012 15:46:38 +0200
|
|
Subject: DRM/i915: Add QUIRK_INVERT_BRIGHTNESS for NCR machines.
|
|
|
|
commit 5f85f176c2f1c9d2a23f60ca0b99e4d0aa5a26a7 upstream.
|
|
|
|
NCR machines with LVDS panels using Intel chipsets need to have the
|
|
QUIRK_INVERT_BRIGHTNESS bit set.
|
|
Unfortunately NCR doesn't set a meaningful subvendor/subdevice ID,
|
|
therefore we add a DMI dependent quirk list.
|
|
|
|
Signed-off-by: Egbert Eich <eich@suse.de>
|
|
[danvet: fixup whitespace fail.]
|
|
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
|
[bwh: Backported to 3.2:
|
|
- Adjust context
|
|
- Add #include <linux/dmi.h>]
|
|
---
|
|
drivers/gpu/drm/i915/intel_display.c | 32 ++++++++++++++++++++++++++++++++
|
|
1 file changed, 32 insertions(+)
|
|
|
|
--- a/drivers/gpu/drm/i915/intel_display.c
|
|
+++ b/drivers/gpu/drm/i915/intel_display.c
|
|
@@ -25,6 +25,7 @@
|
|
*/
|
|
|
|
#include <linux/cpufreq.h>
|
|
+#include <linux/dmi.h>
|
|
#include <linux/module.h>
|
|
#include <linux/input.h>
|
|
#include <linux/i2c.h>
|
|
@@ -8839,6 +8840,34 @@ struct intel_quirk {
|
|
void (*hook)(struct drm_device *dev);
|
|
};
|
|
|
|
+/* For systems that don't have a meaningful PCI subdevice/subvendor ID */
|
|
+struct intel_dmi_quirk {
|
|
+ void (*hook)(struct drm_device *dev);
|
|
+ const struct dmi_system_id (*dmi_id_list)[];
|
|
+};
|
|
+
|
|
+static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
|
|
+{
|
|
+ DRM_INFO("Backlight polarity reversed on %s\n", id->ident);
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+static const struct intel_dmi_quirk intel_dmi_quirks[] = {
|
|
+ {
|
|
+ .dmi_id_list = &(const struct dmi_system_id[]) {
|
|
+ {
|
|
+ .callback = intel_dmi_reverse_brightness,
|
|
+ .ident = "NCR Corporation",
|
|
+ .matches = {DMI_MATCH(DMI_SYS_VENDOR, "NCR Corporation"),
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, ""),
|
|
+ },
|
|
+ },
|
|
+ { } /* terminating entry */
|
|
+ },
|
|
+ .hook = quirk_invert_brightness,
|
|
+ },
|
|
+};
|
|
+
|
|
struct intel_quirk intel_quirks[] = {
|
|
/* HP Compaq 2730p needs pipe A force quirk (LP: #291555) */
|
|
{ 0x2a42, 0x103c, 0x30eb, quirk_pipea_force },
|
|
@@ -8886,6 +8915,10 @@ static void intel_init_quirks(struct drm
|
|
q->subsystem_device == PCI_ANY_ID))
|
|
q->hook(dev);
|
|
}
|
|
+ for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) {
|
|
+ if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0)
|
|
+ intel_dmi_quirks[i].hook(dev);
|
|
+ }
|
|
}
|
|
|
|
/* Disable the VGA plane that we never use */
|