Skip to content

Commit 336aae5

Browse files
committed
ACPI: scan: Register platform devices for backlight device objects
ACPI device objects associated with backlight interfaces are special because they are ACPI companions of PCI devices (GPUs), but the interfaces exposed by them resemble platform device one. Currently, the ACPI video driver binds to them with the help of a special "synthetic" device ID regardless of the pairing with the PCI devices, but since it is generally better to use platform drivers for handling such interfaces, the plan is to convert that drviver into a platform one. However, for this purpose, platform devices corresponding to the ACPI backlight device objects need to be registered, so update acpi_bus_attach() to apply the default ACPI enumeration to them and modify acpi_create_platform_device() to avoid bailing out early if a "physical" device is already attached to a backlight ACPI device object. In addition, update acpi_companion_match() to return a valid struct acpi_device pointer if the ACPI companion of the given device is a backlight ACPI device object, which will facilitate driver matching for platform devices corresponding to those objects. No intentional functional impact. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/5081593.31r3eYUQgx@rafael.j.wysocki
1 parent 9460eaa commit 336aae5

3 files changed

Lines changed: 7 additions & 3 deletions

File tree

drivers/acpi/acpi_platform.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
118118
int count = 0;
119119

120120
/* If the ACPI node already has a physical device attached, skip it. */
121-
if (adev->physical_node_count)
121+
if (adev->physical_node_count && !adev->pnp.type.backlight)
122122
return NULL;
123123

124124
match = acpi_match_acpi_device(forbidden_id_list, adev);
@@ -135,7 +135,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
135135
}
136136
}
137137

138-
if (adev->device_type == ACPI_BUS_TYPE_DEVICE) {
138+
if (adev->device_type == ACPI_BUS_TYPE_DEVICE && !adev->pnp.type.backlight) {
139139
struct list_head resource_list = LIST_HEAD_INIT(resource_list);
140140

141141
count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);

drivers/acpi/bus.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,9 @@ const struct acpi_device *acpi_companion_match(const struct device *dev)
761761
if (list_empty(&adev->pnp.ids))
762762
return NULL;
763763

764+
if (adev->pnp.type.backlight)
765+
return adev;
766+
764767
return acpi_primary_dev_companion(adev, dev);
765768
}
766769

drivers/acpi/scan.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2350,7 +2350,8 @@ static int acpi_bus_attach(struct acpi_device *device, void *first_pass)
23502350
if (ret < 0)
23512351
return 0;
23522352

2353-
if (device->pnp.type.platform_id || device->flags.enumeration_by_parent)
2353+
if (device->pnp.type.platform_id || device->pnp.type.backlight ||
2354+
device->flags.enumeration_by_parent)
23542355
acpi_default_enumeration(device);
23552356
else
23562357
acpi_device_set_enumerated(device);

0 commit comments

Comments
 (0)