On Friday, January 14, 2011, Matthew Garrett wrote:
Dual-GPU machines may provide more than one ACPI backlight interface. Tie the backlight device to the GPU in order to allow userspace to identify the correct interface.
Signed-off-by: Matthew Garrett mjg@redhat.com
Sorry for the late response, but I've just realized there's a problem with this patch.
drivers/acpi/video.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index a9eec8c..a18e497 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c @@ -782,6 +782,9 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
if (acpi_video_backlight_support()) { struct backlight_properties props;
struct pci_dev *pdev;
acpi_handle acpi_parent;
int result; static int count = 0; char *name;struct device *parent = NULL;
@@ -794,10 +797,20 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device) return; count++;
acpi_get_parent(device->dev->handle, &acpi_parent);
pdev = acpi_get_pci_dev(acpi_parent);
if (pdev) {
parent = &pdev->dev;
pci_dev_put(pdev);
}
I'm afraid you can't do that or suspend problems will happen.
Namely, the PM core assumes that parents will be registered before their children and it is a very strong assumption. If violated, it may lead to a suspend sequence deadlock.
Unfortunately, it looks like the ACPI video device is registered before the PCI device that's becoming it's parent, so the above assumption will be violated.
Thanks, Rafael