|
@@ -1256,8 +1256,37 @@ acpi_video_bus_write_DOS(struct file *file,
|
|
|
|
|
|
static int acpi_video_bus_add_fs(struct acpi_device *device)
|
|
|
{
|
|
|
+ long device_id;
|
|
|
+ int status;
|
|
|
struct proc_dir_entry *entry = NULL;
|
|
|
struct acpi_video_bus *video;
|
|
|
+ struct device *dev;
|
|
|
+
|
|
|
+ status =
|
|
|
+ acpi_evaluate_integer(device->handle, "_ADR", NULL, &device_id);
|
|
|
+
|
|
|
+ if (!ACPI_SUCCESS(status))
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ /* We need to attempt to determine whether the _ADR refers to a
|
|
|
+ PCI device or not. There's no terribly good way to do this,
|
|
|
+ so the best we can hope for is to assume that there'll never
|
|
|
+ be a video device in the host bridge */
|
|
|
+ if (device_id >= 0x10000) {
|
|
|
+ /* It looks like a PCI device. Does it exist? */
|
|
|
+ dev = acpi_get_physical_device(device->handle);
|
|
|
+ } else {
|
|
|
+ /* It doesn't look like a PCI device. Does its parent
|
|
|
+ exist? */
|
|
|
+ acpi_handle phandle;
|
|
|
+ if (acpi_get_parent(device->handle, &phandle))
|
|
|
+ return -ENODEV;
|
|
|
+ dev = acpi_get_physical_device(phandle);
|
|
|
+ }
|
|
|
+ if (!dev)
|
|
|
+ return -ENODEV;
|
|
|
+ put_device(dev);
|
|
|
+
|
|
|
|
|
|
|
|
|
video = acpi_driver_data(device);
|