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 <[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;
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 [EMAIL PROTECTED]
> 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 [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html