|
@@ -1687,10 +1687,6 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
|
|
set_bit(KEY_BRIGHTNESS_ZERO, input->keybit);
|
|
|
set_bit(KEY_DISPLAY_OFF, input->keybit);
|
|
|
|
|
|
- error = input_register_device(input);
|
|
|
- if (error)
|
|
|
- goto err_stop_video;
|
|
|
-
|
|
|
printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s rom: %s post: %s)\n",
|
|
|
ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
|
|
|
video->flags.multihead ? "yes" : "no",
|
|
@@ -1701,12 +1697,16 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
|
|
video->pm_nb.priority = 0;
|
|
|
error = register_pm_notifier(&video->pm_nb);
|
|
|
if (error)
|
|
|
- goto err_unregister_input_dev;
|
|
|
+ goto err_stop_video;
|
|
|
+
|
|
|
+ error = input_register_device(input);
|
|
|
+ if (error)
|
|
|
+ goto err_unregister_pm_notifier;
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
- err_unregister_input_dev:
|
|
|
- input_unregister_device(input);
|
|
|
+ err_unregister_pm_notifier:
|
|
|
+ unregister_pm_notifier(&video->pm_nb);
|
|
|
err_stop_video:
|
|
|
acpi_video_bus_stop_devices(video);
|
|
|
err_free_input_dev:
|
|
@@ -1743,9 +1743,18 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int __init is_i740(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ if (dev->device == 0x00D1)
|
|
|
+ return 1;
|
|
|
+ if (dev->device == 0x7000)
|
|
|
+ return 1;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int __init intel_opregion_present(void)
|
|
|
{
|
|
|
-#if defined(CONFIG_DRM_I915) || defined(CONFIG_DRM_I915_MODULE)
|
|
|
+ int opregion = 0;
|
|
|
struct pci_dev *dev = NULL;
|
|
|
u32 address;
|
|
|
|
|
@@ -1754,13 +1763,15 @@ static int __init intel_opregion_present(void)
|
|
|
continue;
|
|
|
if (dev->vendor != PCI_VENDOR_ID_INTEL)
|
|
|
continue;
|
|
|
+ /* We don't want to poke around undefined i740 registers */
|
|
|
+ if (is_i740(dev))
|
|
|
+ continue;
|
|
|
pci_read_config_dword(dev, 0xfc, &address);
|
|
|
if (!address)
|
|
|
continue;
|
|
|
- return 1;
|
|
|
+ opregion = 1;
|
|
|
}
|
|
|
-#endif
|
|
|
- return 0;
|
|
|
+ return opregion;
|
|
|
}
|
|
|
|
|
|
int acpi_video_register(void)
|