|
@@ -132,6 +132,33 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv)
|
|
|
return AE_OK;
|
|
|
}
|
|
|
|
|
|
+/* Force to use vendor driver when the ACPI device is known to be
|
|
|
+ * buggy */
|
|
|
+static int video_detect_force_vendor(const struct dmi_system_id *d)
|
|
|
+{
|
|
|
+ acpi_video_support |= ACPI_VIDEO_BACKLIGHT_DMI_VENDOR;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct dmi_system_id video_detect_dmi_table[] = {
|
|
|
+ /* On Samsung X360, the BIOS will set a flag (VDRV) if generic
|
|
|
+ * ACPI backlight device is used. This flag will definitively break
|
|
|
+ * the backlight interface (even the vendor interface) untill next
|
|
|
+ * reboot. It's why we should prevent video.ko from being used here
|
|
|
+ * and we can't rely on a later call to acpi_video_unregister().
|
|
|
+ */
|
|
|
+ {
|
|
|
+ .callback = video_detect_force_vendor,
|
|
|
+ .ident = "X360",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "X360"),
|
|
|
+ DMI_MATCH(DMI_BOARD_NAME, "X360"),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ { },
|
|
|
+};
|
|
|
+
|
|
|
/*
|
|
|
* Returns the video capabilities of a specific ACPI graphics device
|
|
|
*
|
|
@@ -164,6 +191,8 @@ long acpi_video_get_capabilities(acpi_handle graphics_handle)
|
|
|
* ACPI_VIDEO_BACKLIGHT_DMI_VENDOR;
|
|
|
*}
|
|
|
*/
|
|
|
+
|
|
|
+ dmi_check_system(video_detect_dmi_table);
|
|
|
} else {
|
|
|
status = acpi_bus_get_device(graphics_handle, &tmp_dev);
|
|
|
if (ACPI_FAILURE(status)) {
|