Lines Matching refs:fwnode

139 static void fwnode_links_purge_suppliers(struct fwnode_handle *fwnode)  in fwnode_links_purge_suppliers()  argument
145 list_for_each_entry_safe(link, tmp, &fwnode->suppliers, c_hook) in fwnode_links_purge_suppliers()
155 static void fwnode_links_purge_consumers(struct fwnode_handle *fwnode) in fwnode_links_purge_consumers() argument
161 list_for_each_entry_safe(link, tmp, &fwnode->consumers, s_hook) in fwnode_links_purge_consumers()
171 void fwnode_links_purge(struct fwnode_handle *fwnode) in fwnode_links_purge() argument
173 fwnode_links_purge_suppliers(fwnode); in fwnode_links_purge()
174 fwnode_links_purge_consumers(fwnode); in fwnode_links_purge()
177 void fw_devlink_purge_absent_suppliers(struct fwnode_handle *fwnode) in fw_devlink_purge_absent_suppliers() argument
182 if (fwnode->dev) in fw_devlink_purge_absent_suppliers()
185 fwnode->flags |= FWNODE_FLAG_NOT_DEVICE; in fw_devlink_purge_absent_suppliers()
186 fwnode_links_purge_consumers(fwnode); in fw_devlink_purge_absent_suppliers()
188 fwnode_for_each_available_child_node(fwnode, child) in fw_devlink_purge_absent_suppliers()
223 static void __fw_devlink_pickup_dangling_consumers(struct fwnode_handle *fwnode, in __fw_devlink_pickup_dangling_consumers() argument
228 if (fwnode->dev && fwnode->dev->bus) in __fw_devlink_pickup_dangling_consumers()
231 fwnode->flags |= FWNODE_FLAG_NOT_DEVICE; in __fw_devlink_pickup_dangling_consumers()
232 __fwnode_links_move_consumers(fwnode, new_sup); in __fw_devlink_pickup_dangling_consumers()
234 fwnode_for_each_available_child_node(fwnode, child) in __fw_devlink_pickup_dangling_consumers()
1015 (dev->fwnode && (dev->fwnode->flags & FWNODE_FLAG_BEST_EFFORT)); in dev_is_best_effort()
1019 struct fwnode_handle *fwnode) in fwnode_links_check_suppliers()
1023 if (!fwnode || fw_devlink_is_permissive()) in fwnode_links_check_suppliers()
1026 list_for_each_entry(link, &fwnode->suppliers, c_hook) in fwnode_links_check_suppliers()
1061 sup_fw = fwnode_links_check_suppliers(dev->fwnode); in device_links_check_suppliers()
1243 val = !!fwnode_links_check_suppliers(dev->fwnode); in waiting_for_supplier_show()
1314 if (dev->fwnode && dev->fwnode->dev == dev) { in device_links_driver_bound()
1317 fwnode_links_purge_suppliers(dev->fwnode); in device_links_driver_bound()
1321 fwnode_for_each_available_child_node(dev->fwnode, child) in device_links_driver_bound()
1323 dev->fwnode); in device_links_driver_bound()
1724 static void fw_devlink_parse_fwnode(struct fwnode_handle *fwnode) in fw_devlink_parse_fwnode() argument
1726 if (fwnode->flags & FWNODE_FLAG_LINKS_ADDED) in fw_devlink_parse_fwnode()
1729 fwnode_call_int_op(fwnode, add_links); in fw_devlink_parse_fwnode()
1730 fwnode->flags |= FWNODE_FLAG_LINKS_ADDED; in fw_devlink_parse_fwnode()
1733 static void fw_devlink_parse_fwtree(struct fwnode_handle *fwnode) in fw_devlink_parse_fwtree() argument
1737 fw_devlink_parse_fwnode(fwnode); in fw_devlink_parse_fwtree()
1739 while ((child = fwnode_get_next_available_child_node(fwnode, child))) in fw_devlink_parse_fwtree()
1883 static bool fwnode_init_without_drv(struct fwnode_handle *fwnode) in fwnode_init_without_drv() argument
1888 if (!(fwnode->flags & FWNODE_FLAG_INITIALIZED)) in fwnode_init_without_drv()
1891 dev = get_dev_from_fwnode(fwnode); in fwnode_init_without_drv()
1898 static bool fwnode_ancestor_init_without_drv(struct fwnode_handle *fwnode) in fwnode_ancestor_init_without_drv() argument
1902 fwnode_for_each_parent_node(fwnode, parent) { in fwnode_ancestor_init_without_drv()
1954 static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwnode) in fwnode_get_next_parent_dev() argument
1959 fwnode_for_each_parent_node(fwnode, parent) { in fwnode_get_next_parent_dev()
2048 if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { in __fw_devlink_relax_cycles()
2050 par_dev->fwnode); in __fw_devlink_relax_cycles()
2067 dev_link->supplier->fwnode)) { in __fw_devlink_relax_cycles()
2069 dev_link->supplier->fwnode); in __fw_devlink_relax_cycles()
2131 fwnode_is_ancestor_of(sup_handle, con->fwnode)) in fw_devlink_create_devlink()
2148 if (con->fwnode == link->consumer) in fw_devlink_create_devlink()
2217 struct fwnode_handle *fwnode = dev->fwnode; in __fw_devlink_link_to_consumers() local
2220 list_for_each_entry_safe(link, tmp, &fwnode->consumers, s_hook) { in __fw_devlink_link_to_consumers()
2245 fwnode_is_ancestor_of(con_dev->fwnode, fwnode)) { in __fw_devlink_link_to_consumers()
2256 ret = fw_devlink_create_devlink(con_dev, fwnode, link); in __fw_devlink_link_to_consumers()
2289 struct fwnode_handle *fwnode) in __fw_devlink_link_to_suppliers() argument
2291 bool own_link = (dev->fwnode == fwnode); in __fw_devlink_link_to_suppliers()
2295 list_for_each_entry_safe(link, tmp, &fwnode->suppliers, c_hook) { in __fw_devlink_link_to_suppliers()
2312 while ((child = fwnode_get_next_available_child_node(fwnode, child))) in __fw_devlink_link_to_suppliers()
2318 struct fwnode_handle *fwnode = dev->fwnode; in fw_devlink_link_device() local
2323 fw_devlink_parse_fwtree(fwnode); in fw_devlink_link_device()
2328 __fw_devlink_link_to_suppliers(dev, fwnode); in fw_devlink_link_device()
2921 if (fw_devlink_flags && !fw_devlink_is_permissive() && dev->fwnode) { in device_add_attrs()
3684 if (dev->fwnode && !dev->fwnode->dev) { in device_add()
3685 dev->fwnode->dev = dev; in device_add()
3696 if (dev->fwnode && fw_devlink_drv_reg_done && !dev->can_match) in device_add()
3844 if (dev->fwnode && dev->fwnode->dev == dev) in device_del()
3845 dev->fwnode->dev = NULL; in device_del()
5126 static inline bool fwnode_is_primary(struct fwnode_handle *fwnode) in fwnode_is_primary() argument
5128 return fwnode && !IS_ERR(fwnode->secondary); in fwnode_is_primary()
5145 void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) in set_primary_fwnode() argument
5148 struct fwnode_handle *fn = dev->fwnode; in set_primary_fwnode()
5150 if (fwnode) { in set_primary_fwnode()
5155 WARN_ON(fwnode->secondary); in set_primary_fwnode()
5156 fwnode->secondary = fn; in set_primary_fwnode()
5158 dev->fwnode = fwnode; in set_primary_fwnode()
5161 dev->fwnode = fn->secondary; in set_primary_fwnode()
5164 if (parent && fn == parent->fwnode) in set_primary_fwnode()
5170 dev->fwnode = NULL; in set_primary_fwnode()
5185 void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode) in set_secondary_fwnode() argument
5187 if (fwnode) in set_secondary_fwnode()
5188 fwnode->secondary = ERR_PTR(-ENODEV); in set_secondary_fwnode()
5190 if (fwnode_is_primary(dev->fwnode)) in set_secondary_fwnode()
5191 dev->fwnode->secondary = fwnode; in set_secondary_fwnode()
5193 dev->fwnode = fwnode; in set_secondary_fwnode()
5210 if (dev->fwnode == of_fwnode_handle(dev->of_node)) in device_remove_of_node()
5211 dev->fwnode = NULL; in device_remove_of_node()
5248 if (!dev->fwnode) in device_add_of_node()
5249 dev->fwnode = of_fwnode_handle(of_node); in device_add_of_node()
5274 void device_set_node(struct device *dev, struct fwnode_handle *fwnode) in device_set_node() argument
5276 dev->fwnode = fwnode; in device_set_node()
5277 dev->of_node = to_of_node(fwnode); in device_set_node()
5281 struct device *get_dev_from_fwnode(struct fwnode_handle *fwnode) in get_dev_from_fwnode() argument
5283 return get_device((fwnode)->dev); in get_dev_from_fwnode()
5305 int device_match_fwnode(struct device *dev, const void *fwnode) in device_match_fwnode() argument
5307 return fwnode && dev_fwnode(dev) == fwnode; in device_match_fwnode()