On Sun, 2007-06-17 at 08:02 +0800, Daniel Drake wrote: > 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; Thinkpad laptops don't set the device_id_scheme bit as well. And they use LCD0/CRT0/TV0/DVI0 as the device name. can we use strncmp(name, "CRT", 3) here? > + 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; ditto > + 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 > > - 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