[PATCH RESEND] ACPI video: guess flags for devices with non-standard addressing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <dsd@xxxxxxxxxx>

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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux