diff options
| author | Egbert Eich <eich@suse.de> | 2012-10-14 09:46:38 -0400 |
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-16 03:38:59 -0400 |
| commit | 5f85f176c2f1c9d2a23f60ca0b99e4d0aa5a26a7 (patch) | |
| tree | 5b2e31beb1b4766a49de470b15d02dc4d197fbe3 /drivers/gpu | |
| parent | 6478d414fe4ee3114e760fb6d6df0f8e2f66186a (diff) | |
DRM/i915: Add QUIRK_INVERT_BRIGHTNESS for NCR machines.
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>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 3511effa01ec..68495da433e6 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -7892,6 +7892,34 @@ struct intel_quirk { | |||
| 7892 | void (*hook)(struct drm_device *dev); | 7892 | void (*hook)(struct drm_device *dev); |
| 7893 | }; | 7893 | }; |
| 7894 | 7894 | ||
| 7895 | /* For systems that don't have a meaningful PCI subdevice/subvendor ID */ | ||
| 7896 | struct intel_dmi_quirk { | ||
| 7897 | void (*hook)(struct drm_device *dev); | ||
| 7898 | const struct dmi_system_id (*dmi_id_list)[]; | ||
| 7899 | }; | ||
| 7900 | |||
| 7901 | static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) | ||
| 7902 | { | ||
| 7903 | DRM_INFO("Backlight polarity reversed on %s\n", id->ident); | ||
| 7904 | return 1; | ||
| 7905 | } | ||
| 7906 | |||
| 7907 | static const struct intel_dmi_quirk intel_dmi_quirks[] = { | ||
| 7908 | { | ||
| 7909 | .dmi_id_list = &(const struct dmi_system_id[]) { | ||
| 7910 | { | ||
| 7911 | .callback = intel_dmi_reverse_brightness, | ||
| 7912 | .ident = "NCR Corporation", | ||
| 7913 | .matches = {DMI_MATCH(DMI_SYS_VENDOR, "NCR Corporation"), | ||
| 7914 | DMI_MATCH(DMI_PRODUCT_NAME, ""), | ||
| 7915 | }, | ||
| 7916 | }, | ||
| 7917 | { } /* terminating entry */ | ||
| 7918 | }, | ||
| 7919 | .hook = quirk_invert_brightness, | ||
| 7920 | }, | ||
| 7921 | }; | ||
| 7922 | |||
| 7895 | static struct intel_quirk intel_quirks[] = { | 7923 | static struct intel_quirk intel_quirks[] = { |
| 7896 | /* HP Mini needs pipe A force quirk (LP: #322104) */ | 7924 | /* HP Mini needs pipe A force quirk (LP: #322104) */ |
| 7897 | { 0x27ae, 0x103c, 0x361a, quirk_pipea_force }, | 7925 | { 0x27ae, 0x103c, 0x361a, quirk_pipea_force }, |
| @@ -7931,6 +7959,10 @@ static void intel_init_quirks(struct drm_device *dev) | |||
| 7931 | q->subsystem_device == PCI_ANY_ID)) | 7959 | q->subsystem_device == PCI_ANY_ID)) |
| 7932 | q->hook(dev); | 7960 | q->hook(dev); |
| 7933 | } | 7961 | } |
| 7962 | for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) { | ||
| 7963 | if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0) | ||
| 7964 | intel_dmi_quirks[i].hook(dev); | ||
| 7965 | } | ||
| 7934 | } | 7966 | } |
| 7935 | 7967 | ||
| 7936 | /* Disable the VGA plane that we never use */ | 7968 | /* Disable the VGA plane that we never use */ |
