OSDN Git Service

toshiba_acpi: Do not register vendor backlight when acpi_video bl is available
[uclinux-h8/linux.git] / drivers / platform / x86 / toshiba_acpi.c
index f624dd5..9956b99 100644 (file)
@@ -49,7 +49,9 @@
 #include <linux/workqueue.h>
 #include <linux/i8042.h>
 #include <linux/acpi.h>
+#include <linux/dmi.h>
 #include <linux/uaccess.h>
+#include <acpi/video.h>
 
 MODULE_AUTHOR("John Belmonte");
 MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
@@ -264,6 +266,14 @@ static const struct key_entry toshiba_acpi_alt_keymap[] = {
 };
 
 /*
+ * List of models which have a broken acpi-video backlight interface and thus
+ * need to use the toshiba (vendor) interface instead.
+ */
+static const struct dmi_system_id toshiba_vendor_backlight_dmi[] = {
+       {}
+};
+
+/*
  * Utility
  */
 
@@ -2624,6 +2634,20 @@ static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
        ret = get_tr_backlight_status(dev, &enabled);
        dev->tr_backlight_supported = !ret;
 
+       /*
+        * Tell acpi-video-detect code to prefer vendor backlight on all
+        * systems with transflective backlight and on dmi matched systems.
+        */
+       if (dev->tr_backlight_supported ||
+           dmi_check_system(toshiba_vendor_backlight_dmi))
+               acpi_video_dmi_promote_vendor();
+
+       if (acpi_video_backlight_support())
+               return 0;
+
+       /* acpi-video may have loaded before we called dmi_promote_vendor() */
+       acpi_video_unregister_backlight();
+
        memset(&props, 0, sizeof(props));
        props.type = BACKLIGHT_PLATFORM;
        props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1;