Dell laptops seem to address video devices without the device_id_scheme bit,
which means that Linux doesn't know the device types of the video devices.
This patch makes the ACPI video driver guess the device type based on the
device name for devices which do not have the device_id_scheme set. This
fixes the flags field for all 4 of my video devices on this laptop
(Inspiron 640m).
Signed-off-by: Daniel Drake <[EMAIL PROTECTED]>
Index: linux/drivers/acpi/video.c
===================================================================
--- linux.orig/drivers/acpi/video.c
+++ linux/drivers/acpi/video.c
@@ -1343,26 +1343,46 @@ acpi_video_bus_get_one_device(struct acp
attribute = acpi_video_get_device_attr(video, device_id);
- if((attribute != NULL) && attribute->device_id_scheme) {
- switch (attribute->display_type) {
- case ACPI_VIDEO_DISPLAY_CRT:
- data->flags.crt = 1;
- break;
- case ACPI_VIDEO_DISPLAY_TV:
- data->flags.tvout = 1;
- break;
- case ACPI_VIDEO_DISPLAY_DVI:
- data->flags.dvi = 1;
- break;
- case ACPI_VIDEO_DISPLAY_LCD:
- data->flags.lcd = 1;
- break;
- default:
- data->flags.unknown = 1;
- break;
+ if (attribute) {
+ if (!attribute->device_id_scheme) {
+ char *name = acpi_device_bid(device);
+
+ /* Dell laptops seem to follow standard video
+ * device addressing but do not set the
+ * device_id_scheme bit.
+ * Guess the flags based on the device names.
+ */
+ if (strcmp(name, "CRT") == 0)
+ data->flags.crt = 1;
+ else if (strcmp(name, "TV") == 0)
+ data->flags.tvout = 1;
+ else if (strcmp(name, "DVI") == 0)
+ data->flags.dvi = 1;
+ else if (strcmp(name, "LCD") == 0)
+ data->flags.lcd = 1;
+ else
+ data->flags.unknown = 1;
+ } else {
+ switch (attribute->display_type) {
+ case ACPI_VIDEO_DISPLAY_CRT:
+ data->flags.crt = 1;
+ break;
+ case ACPI_VIDEO_DISPLAY_TV:
+ data->flags.tvout = 1;
+ break;
+ case ACPI_VIDEO_DISPLAY_DVI:
+ data->flags.dvi = 1;
+ break;
+ case ACPI_VIDEO_DISPLAY_LCD:
+ data->flags.lcd = 1;
+ break;
+ default:
+ data->flags.unknown = 1;
+ break;
+ }
+ if(attribute->bios_can_detect)
+ data->flags.bios = 1;
}
- if(attribute->bios_can_detect)
- data->flags.bios = 1;
} else
data->flags.unknown = 1;
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html