Merge tag 'driver-core-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / of / property.c
index f61de622f870b70d4bf1525a813245b5a16f7c98..a6358ee99b74b99a90df38c63e08943b628a7b80 100644 (file)
@@ -1072,7 +1072,8 @@ of_fwnode_device_get_match_data(const struct fwnode_handle *fwnode,
 }
 
 static void of_link_to_phandle(struct device_node *con_np,
-                             struct device_node *sup_np)
+                             struct device_node *sup_np,
+                             u8 flags)
 {
        struct device_node *tmp_np = of_node_get(sup_np);
 
@@ -1091,7 +1092,7 @@ static void of_link_to_phandle(struct device_node *con_np,
                tmp_np = of_get_next_parent(tmp_np);
        }
 
-       fwnode_link_add(of_fwnode_handle(con_np), of_fwnode_handle(sup_np));
+       fwnode_link_add(of_fwnode_handle(con_np), of_fwnode_handle(sup_np), flags);
 }
 
 /**
@@ -1204,6 +1205,8 @@ static struct device_node *parse_##fname(struct device_node *np,       \
  *              to a struct device, implement this ops so fw_devlink can use it
  *              to find the true consumer.
  * @optional: Describes whether a supplier is mandatory or not
+ * @fwlink_flags: Optional fwnode link flags to use when creating a fwnode link
+ *               for this property.
  *
  * Returns:
  * parse_prop() return values are
@@ -1216,6 +1219,7 @@ struct supplier_bindings {
                                          const char *prop_name, int index);
        struct device_node *(*get_con_dev)(struct device_node *np);
        bool optional;
+       u8 fwlink_flags;
 };
 
 DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells")
@@ -1247,6 +1251,7 @@ DEFINE_SIMPLE_PROP(leds, "leds", NULL)
 DEFINE_SIMPLE_PROP(backlight, "backlight", NULL)
 DEFINE_SIMPLE_PROP(panel, "panel", NULL)
 DEFINE_SIMPLE_PROP(msi_parent, "msi-parent", "#msi-cells")
+DEFINE_SIMPLE_PROP(post_init_providers, "post-init-providers", NULL)
 DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
 DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells")
 
@@ -1357,6 +1362,10 @@ static const struct supplier_bindings of_supplier_bindings[] = {
        { .parse_prop = parse_regulators, },
        { .parse_prop = parse_gpio, },
        { .parse_prop = parse_gpios, },
+       {
+               .parse_prop = parse_post_init_providers,
+               .fwlink_flags = FWLINK_FLAG_IGNORE,
+       },
        {}
 };
 
@@ -1401,7 +1410,7 @@ static int of_link_property(struct device_node *con_np, const char *prop_name)
                                        : of_node_get(con_np);
                        matched = true;
                        i++;
-                       of_link_to_phandle(con_dev_np, phandle);
+                       of_link_to_phandle(con_dev_np, phandle, s->fwlink_flags);
                        of_node_put(phandle);
                        of_node_put(con_dev_np);
                }