From: "Rafael J. Wysocki" <rafael.j.wyso...@intel.com>

Move the extraction of _DSD properties from acpi_init_properties()
to a separate routine called acpi_extract_properties() to make the
subsequent changes more straightforward.

Signed-off-by: Rafael J. Wysocki <rafael.j.wyso...@intel.com>
Tested-by: Mika Westerberg <mika.westerb...@linux.intel.com>
(cherry picked from commit bd8191cc8a74018e255eb3efff5e02dc305a5ed1)
Signed-off-by: Voon, Weifeng <weifeng.v...@intel.com>
---
 drivers/acpi/property.c | 69 ++++++++++++++++++++++++++-----------------------
 1 file changed, 37 insertions(+), 32 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 6d99450..8163b4b 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -100,34 +100,13 @@ static void acpi_init_of_compatible(struct acpi_device 
*adev)
        adev->flags.of_compatible_ok = 1;
 }
 
-void acpi_init_properties(struct acpi_device *adev)
+static bool acpi_extract_properties(const union acpi_object *desc,
+                                   struct acpi_device_data *data)
 {
-       struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
-       bool acpi_of = false;
-       struct acpi_hardware_id *hwid;
-       const union acpi_object *desc;
-       acpi_status status;
        int i;
 
-       /*
-        * Check if ACPI_DT_NAMESPACE_HID is present and inthat case we fill in
-        * Device Tree compatible properties for this device.
-        */
-       list_for_each_entry(hwid, &adev->pnp.ids, list) {
-               if (!strcmp(hwid->id, ACPI_DT_NAMESPACE_HID)) {
-                       acpi_of = true;
-                       break;
-               }
-       }
-
-       status = acpi_evaluate_object_typed(adev->handle, "_DSD", NULL, &buf,
-                                           ACPI_TYPE_PACKAGE);
-       if (ACPI_FAILURE(status))
-               goto out;
-
-       desc = buf.pointer;
        if (desc->package.count % 2)
-               goto fail;
+               return false;
 
        /* Look for the device properties UUID. */
        for (i = 0; i < desc->package.count; i += 2) {
@@ -154,18 +133,44 @@ void acpi_init_properties(struct acpi_device *adev)
                if (!acpi_properties_format_valid(properties))
                        break;
 
-               adev->data.pointer = buf.pointer;
-               adev->data.properties = properties;
+               data->properties = properties;
+               return true;
+       }
 
-               if (acpi_of)
-                       acpi_init_of_compatible(adev);
+       return false;
+}
 
-               goto out;
+void acpi_init_properties(struct acpi_device *adev)
+{
+       struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
+       struct acpi_hardware_id *hwid;
+       acpi_status status;
+       bool acpi_of = false;
+
+       /*
+        * Check if ACPI_DT_NAMESPACE_HID is present and inthat case we fill in
+        * Device Tree compatible properties for this device.
+        */
+       list_for_each_entry(hwid, &adev->pnp.ids, list) {
+               if (!strcmp(hwid->id, ACPI_DT_NAMESPACE_HID)) {
+                       acpi_of = true;
+                       break;
+               }
        }
 
- fail:
-       dev_dbg(&adev->dev, "Returned _DSD data is not valid, skipping\n");
-       ACPI_FREE(buf.pointer);
+       status = acpi_evaluate_object_typed(adev->handle, "_DSD", NULL, &buf,
+                                           ACPI_TYPE_PACKAGE);
+       if (ACPI_FAILURE(status))
+               goto out;
+
+       if (acpi_extract_properties(buf.pointer, &adev->data)) {
+               adev->data.pointer = buf.pointer;
+               if (acpi_of)
+                       acpi_init_of_compatible(adev);
+       } else {
+               acpi_handle_debug(adev->handle, "Invalid _DSD data, 
skipping\n");
+               ACPI_FREE(buf.pointer);
+       }
 
  out:
        if (acpi_of && !adev->flags.of_compatible_ok)
-- 
1.9.1

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to