diff options
-rw-r--r-- | drivers/acpi/video.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index b5e35cd559ea..970c01a7f8f4 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -730,11 +730,40 @@ static void acpi_video_bus_find_cap(struct acpi_video_bus *video) | |||
730 | static int acpi_video_bus_check(struct acpi_video_bus *video) | 730 | static int acpi_video_bus_check(struct acpi_video_bus *video) |
731 | { | 731 | { |
732 | acpi_status status = -ENOENT; | 732 | acpi_status status = -ENOENT; |
733 | 733 | long device_id; | |
734 | struct device *dev; | ||
735 | struct acpi_device *device; | ||
734 | 736 | ||
735 | if (!video) | 737 | if (!video) |
736 | return -EINVAL; | 738 | return -EINVAL; |
737 | 739 | ||
740 | device = video->device; | ||
741 | |||
742 | status = | ||
743 | acpi_evaluate_integer(device->handle, "_ADR", NULL, &device_id); | ||
744 | |||
745 | if (!ACPI_SUCCESS(status)) | ||
746 | return -ENODEV; | ||
747 | |||
748 | /* We need to attempt to determine whether the _ADR refers to a | ||
749 | PCI device or not. There's no terribly good way to do this, | ||
750 | so the best we can hope for is to assume that there'll never | ||
751 | be a video device in the host bridge */ | ||
752 | if (device_id >= 0x10000) { | ||
753 | /* It looks like a PCI device. Does it exist? */ | ||
754 | dev = acpi_get_physical_device(device->handle); | ||
755 | } else { | ||
756 | /* It doesn't look like a PCI device. Does its parent | ||
757 | exist? */ | ||
758 | acpi_handle phandle; | ||
759 | if (acpi_get_parent(device->handle, &phandle)) | ||
760 | return -ENODEV; | ||
761 | dev = acpi_get_physical_device(phandle); | ||
762 | } | ||
763 | if (!dev) | ||
764 | return -ENODEV; | ||
765 | put_device(dev); | ||
766 | |||
738 | /* Since there is no HID, CID and so on for VGA driver, we have | 767 | /* Since there is no HID, CID and so on for VGA driver, we have |
739 | * to check well known required nodes. | 768 | * to check well known required nodes. |
740 | */ | 769 | */ |