device property: Check fwnode->secondary when finding properties
authorDaniel Scally <djrscally@gmail.com>
Sun, 28 Nov 2021 23:24:55 +0000 (23:24 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:22:47 +0000 (10:22 +0200)
[ Upstream commit c097af1d0a8483b44fa30e86b311991d76b6ae67 ]

fwnode_property_get_reference_args() searches for named properties
against a fwnode_handle, but these could instead be against the fwnode's
secondary. If the property isn't found against the primary, check the
secondary to see if it's there instead.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Daniel Scally <djrscally@gmail.com>
Link: https://lore.kernel.org/r/20211128232455.39332-1-djrscally@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/base/property.c

index 4c77837..c29fa92 100644 (file)
@@ -479,8 +479,17 @@ int fwnode_property_get_reference_args(const struct fwnode_handle *fwnode,
                                       unsigned int nargs, unsigned int index,
                                       struct fwnode_reference_args *args)
 {
-       return fwnode_call_int_op(fwnode, get_reference_args, prop, nargs_prop,
-                                 nargs, index, args);
+       int ret;
+
+       ret = fwnode_call_int_op(fwnode, get_reference_args, prop, nargs_prop,
+                                nargs, index, args);
+
+       if (ret < 0 && !IS_ERR_OR_NULL(fwnode) &&
+           !IS_ERR_OR_NULL(fwnode->secondary))
+               ret = fwnode_call_int_op(fwnode->secondary, get_reference_args,
+                                        prop, nargs_prop, nargs, index, args);
+
+       return ret;
 }
 EXPORT_SYMBOL_GPL(fwnode_property_get_reference_args);