Merge tag 'usb-5.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
[sfrench/cifs-2.6.git] / drivers / acpi / scan.c
index 1185ecea59d1182be3c4042461d085ab0fa06018..c215bc8723d05c266c401989f681d8999ec5de88 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/dma-map-ops.h>
 #include <linux/platform_data/x86/apple.h>
 #include <linux/pgtable.h>
+#include <linux/crc32.h>
 
 #include "internal.h"
 
@@ -667,6 +668,19 @@ static int acpi_tie_acpi_dev(struct acpi_device *adev)
        return 0;
 }
 
+static void acpi_store_pld_crc(struct acpi_device *adev)
+{
+       struct acpi_pld_info *pld;
+       acpi_status status;
+
+       status = acpi_get_physical_device_location(adev->handle, &pld);
+       if (ACPI_FAILURE(status))
+               return;
+
+       adev->pld_crc = crc32(~0, pld, sizeof(*pld));
+       ACPI_FREE(pld);
+}
+
 static int __acpi_device_add(struct acpi_device *device,
                             void (*release)(struct device *))
 {
@@ -725,6 +739,8 @@ static int __acpi_device_add(struct acpi_device *device,
        if (device->wakeup.flags.valid)
                list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list);
 
+       acpi_store_pld_crc(device);
+
        mutex_unlock(&acpi_device_lock);
 
        if (device->parent)