OSDN Git Service

ACPI: property: Switch node property referencing from ifs to a switch
authorSakari Ailus <sakari.ailus@linux.intel.com>
Mon, 11 Jul 2022 11:26:03 +0000 (14:26 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 27 Jul 2022 19:16:32 +0000 (21:16 +0200)
__acpi_node_get_property_reference() uses a series of if () statements for
testing the same variable. There's soon going to be one more value to be
tested.

Switch to use switch() instead.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/property.c

index a741e6c..43bd3f6 100644 (file)
@@ -778,11 +778,9 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
        if (ret)
                return ret == -EINVAL ? -ENOENT : -EINVAL;
 
-       /*
-        * The simplest case is when the value is a single reference.  Just
-        * return that reference then.
-        */
-       if (obj->type == ACPI_TYPE_LOCAL_REFERENCE) {
+       switch (obj->type) {
+       case ACPI_TYPE_LOCAL_REFERENCE:
+               /* Plain single reference without arguments. */
                if (index)
                        return -ENOENT;
 
@@ -793,19 +791,21 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
                args->fwnode = acpi_fwnode_handle(device);
                args->nargs = 0;
                return 0;
+       case ACPI_TYPE_PACKAGE:
+               /*
+                * If it is not a single reference, then it is a package of
+                * references followed by number of ints as follows:
+                *
+                *  Package () { REF, INT, REF, INT, INT }
+                *
+                * The index argument is then used to determine which reference
+                * the caller wants (along with the arguments).
+                */
+               break;
+       default:
+               return -EINVAL;
        }
 
-       /*
-        * If it is not a single reference, then it is a package of
-        * references followed by number of ints as follows:
-        *
-        *  Package () { REF, INT, REF, INT, INT }
-        *
-        * The index argument is then used to determine which reference
-        * the caller wants (along with the arguments).
-        */
-       if (obj->type != ACPI_TYPE_PACKAGE)
-               return -EINVAL;
        if (index >= obj->package.count)
                return -ENOENT;
 
@@ -813,7 +813,8 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
        end = element + obj->package.count;
 
        while (element < end) {
-               if (element->type == ACPI_TYPE_LOCAL_REFERENCE) {
+               switch (element->type) {
+               case ACPI_TYPE_LOCAL_REFERENCE:
                        device = acpi_fetch_acpi_dev(element->reference.handle);
                        if (!device)
                                return -EINVAL;
@@ -829,11 +830,13 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
                        if (idx == index)
                                return 0;
 
-               } else if (element->type == ACPI_TYPE_INTEGER) {
+                       break;
+               case ACPI_TYPE_INTEGER:
                        if (idx == index)
                                return -ENOENT;
                        element++;
-               } else {
+                       break;
+               default:
                        return -EINVAL;
                }