Lines Matching refs:dev
44 struct udevice *dev; in device_bind_common() local
64 dev = calloc(1, sizeof(struct udevice)); in device_bind_common()
65 if (!dev) in device_bind_common()
68 INIT_LIST_HEAD(&dev->sibling_node); in device_bind_common()
69 INIT_LIST_HEAD(&dev->child_head); in device_bind_common()
70 INIT_LIST_HEAD(&dev->uclass_node); in device_bind_common()
72 INIT_LIST_HEAD(&dev->devres_head); in device_bind_common()
74 dev_set_plat(dev, plat); in device_bind_common()
75 dev->driver_data = driver_data; in device_bind_common()
76 dev->name = name; in device_bind_common()
77 dev_set_ofnode(dev, node); in device_bind_common()
78 dev->parent = parent; in device_bind_common()
79 dev->driver = drv; in device_bind_common()
80 dev->uclass = uc; in device_bind_common()
82 dev->seq_ = -1; in device_bind_common()
92 if (!dev_read_alias_seq(dev, &dev->seq_)) { in device_bind_common()
94 log_debug(" - seq=%d\n", dev->seq_); in device_bind_common()
100 dev->seq_ = uclass_find_next_free_seq(uc); in device_bind_common()
112 dev_or_flags(dev, DM_FLAG_OF_PLATDATA); in device_bind_common()
117 dev_or_flags(dev, DM_FLAG_ALLOC_PDATA); in device_bind_common()
130 dev_set_plat(dev, ptr); in device_bind_common()
136 dev_or_flags(dev, DM_FLAG_ALLOC_UCLASS_PDATA); in device_bind_common()
142 dev_set_uclass_plat(dev, ptr); in device_bind_common()
150 dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA); in device_bind_common()
156 dev_set_parent_plat(dev, ptr); in device_bind_common()
159 list_add_tail(&dev->sibling_node, &parent->child_head); in device_bind_common()
162 ret = uclass_bind_device(dev); in device_bind_common()
168 ret = drv->bind(dev); in device_bind_common()
173 ret = parent->driver->child_post_bind(dev); in device_bind_common()
178 ret = uc->uc_drv->post_bind(dev); in device_bind_common()
184 pr_debug("Bound device %s to %s\n", dev->name, parent->name); in device_bind_common()
186 *devp = dev; in device_bind_common()
188 dev_or_flags(dev, DM_FLAG_BOUND); in device_bind_common()
196 if (drv->unbind && drv->unbind(dev)) { in device_bind_common()
198 dev->name); in device_bind_common()
204 if (uclass_unbind_device(dev)) { in device_bind_common()
206 dev->name); in device_bind_common()
211 list_del(&dev->sibling_node); in device_bind_common()
212 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PARENT_PDATA) { in device_bind_common()
213 free(dev_get_parent_plat(dev)); in device_bind_common()
214 dev_set_parent_plat(dev, NULL); in device_bind_common()
219 if (dev_get_flags(dev) & DM_FLAG_ALLOC_UCLASS_PDATA) { in device_bind_common()
220 free(dev_get_uclass_plat(dev)); in device_bind_common()
221 dev_set_uclass_plat(dev, NULL); in device_bind_common()
226 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PDATA) { in device_bind_common()
227 free(dev_get_plat(dev)); in device_bind_common()
228 dev_set_plat(dev, NULL); in device_bind_common()
232 devres_release_all(dev); in device_bind_common()
234 free(dev); in device_bind_common()
280 int device_reparent(struct udevice *dev, struct udevice *new_parent) in device_reparent() argument
284 assert(dev); in device_reparent()
287 device_foreach_child_safe(pos, n, dev->parent) { in device_reparent()
288 if (pos->driver != dev->driver) in device_reparent()
291 list_del(&dev->sibling_node); in device_reparent()
292 list_add_tail(&dev->sibling_node, &new_parent->child_head); in device_reparent()
293 dev->parent = new_parent; in device_reparent()
346 static int device_alloc_priv(struct udevice *dev) in device_alloc_priv() argument
352 drv = dev->driver; in device_alloc_priv()
356 if (drv->priv_auto && !dev_get_priv(dev)) { in device_alloc_priv()
360 dev_set_priv(dev, ptr); in device_alloc_priv()
364 size = dev->uclass->uc_drv->per_device_auto; in device_alloc_priv()
365 if (size && !dev_get_uclass_priv(dev)) { in device_alloc_priv()
366 ptr = alloc_priv(size, dev->uclass->uc_drv->flags); in device_alloc_priv()
369 dev_set_uclass_priv(dev, ptr); in device_alloc_priv()
373 if (dev->parent) { in device_alloc_priv()
374 size = dev->parent->driver->per_child_auto; in device_alloc_priv()
376 size = dev->parent->uclass->uc_drv->per_child_auto; in device_alloc_priv()
377 if (size && !dev_get_parent_priv(dev)) { in device_alloc_priv()
381 dev_set_parent_priv(dev, ptr); in device_alloc_priv()
388 int device_of_to_plat(struct udevice *dev) in device_of_to_plat() argument
393 if (!dev) in device_of_to_plat()
396 if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID) in device_of_to_plat()
405 if (dev->parent) { in device_of_to_plat()
406 ret = device_of_to_plat(dev->parent); in device_of_to_plat()
416 if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID) in device_of_to_plat()
420 ret = device_alloc_priv(dev); in device_of_to_plat()
424 drv = dev->driver; in device_of_to_plat()
428 (CONFIG_IS_ENABLED(OF_PLATDATA) || dev_has_ofnode(dev))) { in device_of_to_plat()
429 ret = drv->of_to_plat(dev); in device_of_to_plat()
434 dev_or_flags(dev, DM_FLAG_PLATDATA_VALID); in device_of_to_plat()
438 device_free(dev); in device_of_to_plat()
453 static int device_get_dma_constraints(struct udevice *dev) in device_get_dma_constraints() argument
455 struct udevice *parent = dev->parent; in device_get_dma_constraints()
471 dm_warn("%s: failed to get DMA range, %d\n", dev->name, ret); in device_get_dma_constraints()
475 dev_set_dma_offset(dev, cpu - bus); in device_get_dma_constraints()
480 int device_probe(struct udevice *dev) in device_probe() argument
485 if (!dev) in device_probe()
488 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) in device_probe()
491 ret = device_notify(dev, EVT_DM_PRE_PROBE); in device_probe()
495 drv = dev->driver; in device_probe()
498 ret = device_of_to_plat(dev); in device_probe()
503 if (dev->parent) { in device_probe()
504 ret = device_probe(dev->parent); in device_probe()
514 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) in device_probe()
518 dev_or_flags(dev, DM_FLAG_ACTIVATED); in device_probe()
520 if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent && in device_probe()
521 (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) && in device_probe()
523 ret = dev_power_domain_on(dev); in device_probe()
543 if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) { in device_probe()
544 ret = pinctrl_select_state(dev, "default"); in device_probe()
547 dev->name, ret, errno_str(ret)); in device_probe()
550 if (CONFIG_IS_ENABLED(IOMMU) && dev->parent && in device_probe()
551 (device_get_uclass_id(dev) != UCLASS_IOMMU)) { in device_probe()
552 ret = dev_iommu_enable(dev); in device_probe()
557 ret = device_get_dma_constraints(dev); in device_probe()
561 ret = uclass_pre_probe_device(dev); in device_probe()
565 if (dev->parent && dev->parent->driver->child_pre_probe) { in device_probe()
566 ret = dev->parent->driver->child_pre_probe(dev); in device_probe()
572 if (dev_has_ofnode(dev)) { in device_probe()
577 ret = clk_set_defaults(dev, CLK_DEFAULTS_PRE); in device_probe()
583 ret = drv->probe(dev); in device_probe()
588 ret = uclass_post_probe_device(dev); in device_probe()
592 if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) { in device_probe()
593 ret = pinctrl_select_state(dev, "default"); in device_probe()
596 dev->name, ret, errno_str(ret)); in device_probe()
599 ret = device_notify(dev, EVT_DM_POST_PROBE); in device_probe()
605 if (device_remove(dev, DM_REMOVE_NORMAL)) { in device_probe()
607 __func__, dev->name); in device_probe()
610 dev_bic_flags(dev, DM_FLAG_ACTIVATED); in device_probe()
612 device_free(dev); in device_probe()
617 void *dev_get_plat(const struct udevice *dev) in dev_get_plat() argument
619 if (!dev) { in dev_get_plat()
624 return dm_priv_to_rw(dev->plat_); in dev_get_plat()
627 void *dev_get_parent_plat(const struct udevice *dev) in dev_get_parent_plat() argument
629 if (!dev) { in dev_get_parent_plat()
634 return dm_priv_to_rw(dev->parent_plat_); in dev_get_parent_plat()
637 void *dev_get_uclass_plat(const struct udevice *dev) in dev_get_uclass_plat() argument
639 if (!dev) { in dev_get_uclass_plat()
644 return dm_priv_to_rw(dev->uclass_plat_); in dev_get_uclass_plat()
647 void *dev_get_priv(const struct udevice *dev) in dev_get_priv() argument
649 if (!dev) { in dev_get_priv()
654 return dm_priv_to_rw(dev->priv_); in dev_get_priv()
658 notrace void *dev_get_uclass_priv(const struct udevice *dev) in dev_get_uclass_priv() argument
660 if (!dev) { in dev_get_uclass_priv()
665 return dm_priv_to_rw(dev->uclass_priv_); in dev_get_uclass_priv()
668 void *dev_get_parent_priv(const struct udevice *dev) in dev_get_parent_priv() argument
670 if (!dev) { in dev_get_parent_priv()
675 return dm_priv_to_rw(dev->parent_priv_); in dev_get_parent_priv()
678 void *dev_get_attach_ptr(const struct udevice *dev, enum dm_tag_t tag) in dev_get_attach_ptr() argument
682 return dev_get_plat(dev); in dev_get_attach_ptr()
684 return dev_get_parent_plat(dev); in dev_get_attach_ptr()
686 return dev_get_uclass_plat(dev); in dev_get_attach_ptr()
688 return dev_get_priv(dev); in dev_get_attach_ptr()
690 return dev_get_parent_priv(dev); in dev_get_attach_ptr()
692 return dev_get_uclass_priv(dev); in dev_get_attach_ptr()
698 int dev_get_attach_size(const struct udevice *dev, enum dm_tag_t tag) in dev_get_attach_size() argument
700 const struct udevice *parent = dev_get_parent(dev); in dev_get_attach_size()
701 const struct uclass *uc = dev->uclass; in dev_get_attach_size()
711 size = dev->driver->plat_auto; in dev_get_attach_size()
724 size = dev->driver->priv_auto; in dev_get_attach_size()
743 static int device_get_device_tail(struct udevice *dev, int ret, in device_get_device_tail() argument
749 ret = device_probe(dev); in device_get_device_tail()
753 *devp = dev; in device_get_device_tail()
771 struct udevice *dev; in device_find_by_ofnode() local
776 &dev); in device_find_by_ofnode()
777 if (!ret || dev) { in device_find_by_ofnode()
778 *devp = dev; in device_find_by_ofnode()
790 struct udevice *dev; in device_get_child() local
792 device_foreach_child(dev, parent) { in device_get_child()
794 return device_get_device_tail(dev, 0, devp); in device_get_child()
802 struct udevice *dev; in device_get_child_count() local
805 device_foreach_child(dev, parent) in device_get_child_count()
813 const struct udevice *dev; in device_get_decendent_count() local
816 device_foreach_child(dev, parent) in device_get_decendent_count()
817 count += device_get_decendent_count(dev); in device_get_decendent_count()
825 struct udevice *dev; in device_find_child_by_seq() local
829 device_foreach_child(dev, parent) { in device_find_child_by_seq()
830 if (dev->seq_ == seq) { in device_find_child_by_seq()
831 *devp = dev; in device_find_child_by_seq()
842 struct udevice *dev; in device_get_child_by_seq() local
846 ret = device_find_child_by_seq(parent, seq, &dev); in device_get_child_by_seq()
848 return device_get_device_tail(dev, ret, devp); in device_get_child_by_seq()
854 struct udevice *dev; in device_find_child_by_of_offset() local
858 device_foreach_child(dev, parent) { in device_find_child_by_of_offset()
859 if (dev_of_offset(dev) == of_offset) { in device_find_child_by_of_offset()
860 *devp = dev; in device_find_child_by_of_offset()
871 struct udevice *dev; in device_get_child_by_of_offset() local
875 ret = device_find_child_by_of_offset(parent, node, &dev); in device_get_child_by_of_offset()
876 return device_get_device_tail(dev, ret, devp); in device_get_child_by_of_offset()
882 struct udevice *dev, *found; in _device_find_global_by_ofnode() local
887 device_foreach_child(dev, parent) { in _device_find_global_by_ofnode()
888 found = _device_find_global_by_ofnode(dev, ofnode); in _device_find_global_by_ofnode()
905 struct udevice *dev; in device_get_global_by_ofnode() local
907 dev = _device_find_global_by_ofnode(gd->dm_root, ofnode); in device_get_global_by_ofnode()
908 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_global_by_ofnode()
914 struct udevice *dev; in device_get_by_ofplat_idx() local
919 dev = base + idx; in device_get_by_ofplat_idx()
923 dev = drt->dev; in device_get_by_ofplat_idx()
927 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_by_ofplat_idx()
945 struct udevice *dev = *devp; in device_find_next_child() local
946 struct udevice *parent = dev->parent; in device_find_next_child()
948 if (list_is_last(&dev->sibling_node, &parent->child_head)) { in device_find_next_child()
951 *devp = list_entry(dev->sibling_node.next, struct udevice, in device_find_next_child()
962 struct udevice *dev; in device_find_first_inactive_child() local
965 device_foreach_child(dev, parent) { in device_find_first_inactive_child()
966 if (!device_active(dev) && in device_find_first_inactive_child()
967 device_get_uclass_id(dev) == uclass_id) { in device_find_first_inactive_child()
968 *devp = dev; in device_find_first_inactive_child()
980 struct udevice *dev; in device_find_first_child_by_uclass() local
983 device_foreach_child(dev, parent) { in device_find_first_child_by_uclass()
984 if (device_get_uclass_id(dev) == uclass_id) { in device_find_first_child_by_uclass()
985 *devp = dev; in device_find_first_child_by_uclass()
996 struct udevice *dev; in device_find_child_by_namelen() local
1000 device_foreach_child(dev, parent) { in device_find_child_by_namelen()
1001 if (!strncmp(dev->name, name, len) && in device_find_child_by_namelen()
1002 strlen(dev->name) == len) { in device_find_child_by_namelen()
1003 *devp = dev; in device_find_child_by_namelen()
1019 struct udevice *dev; in device_first_child_err() local
1021 device_find_first_child(parent, &dev); in device_first_child_err()
1022 if (!dev) in device_first_child_err()
1025 return device_get_device_tail(dev, 0, devp); in device_first_child_err()
1030 struct udevice *dev = *devp; in device_next_child_err() local
1032 device_find_next_child(&dev); in device_next_child_err()
1033 if (!dev) in device_next_child_err()
1036 return device_get_device_tail(dev, 0, devp); in device_next_child_err()
1041 struct udevice *dev; in device_first_child_ofdata_err() local
1044 device_find_first_child(parent, &dev); in device_first_child_ofdata_err()
1045 if (!dev) in device_first_child_ofdata_err()
1048 ret = device_of_to_plat(dev); in device_first_child_ofdata_err()
1052 *devp = dev; in device_first_child_ofdata_err()
1059 struct udevice *dev = *devp; in device_next_child_ofdata_err() local
1062 device_find_next_child(&dev); in device_next_child_ofdata_err()
1063 if (!dev) in device_next_child_ofdata_err()
1066 ret = device_of_to_plat(dev); in device_next_child_ofdata_err()
1070 *devp = dev; in device_next_child_ofdata_err()
1080 ulong dev_get_driver_data(const struct udevice *dev) in dev_get_driver_data() argument
1082 return dev->driver_data; in dev_get_driver_data()
1085 const void *dev_get_driver_ops(const struct udevice *dev) in dev_get_driver_ops() argument
1087 if (!dev || !dev->driver->ops) in dev_get_driver_ops()
1090 return dev->driver->ops; in dev_get_driver_ops()
1093 enum uclass_id device_get_uclass_id(const struct udevice *dev) in device_get_uclass_id() argument
1095 return dev->uclass->uc_drv->id; in device_get_uclass_id()
1098 const char *dev_get_uclass_name(const struct udevice *dev) in dev_get_uclass_name() argument
1100 if (!dev) in dev_get_uclass_name()
1103 return dev->uclass->uc_drv->name; in dev_get_uclass_name()
1106 bool device_has_children(const struct udevice *dev) in device_has_children() argument
1108 return !list_empty(&dev->child_head); in device_has_children()
1111 bool device_has_active_children(const struct udevice *dev) in device_has_active_children() argument
1115 for (device_find_first_child(dev, &child); in device_has_active_children()
1125 bool device_is_last_sibling(const struct udevice *dev) in device_is_last_sibling() argument
1127 struct udevice *parent = dev->parent; in device_is_last_sibling()
1131 return list_is_last(&dev->sibling_node, &parent->child_head); in device_is_last_sibling()
1134 void device_set_name_alloced(struct udevice *dev) in device_set_name_alloced() argument
1136 dev_or_flags(dev, DM_FLAG_NAME_ALLOCED); in device_set_name_alloced()
1139 int device_set_name(struct udevice *dev, const char *name) in device_set_name() argument
1144 dev->name = name; in device_set_name()
1145 device_set_name_alloced(dev); in device_set_name()
1150 void dev_set_priv(struct udevice *dev, void *priv) in dev_set_priv() argument
1152 dev->priv_ = priv; in dev_set_priv()
1155 void dev_set_parent_priv(struct udevice *dev, void *parent_priv) in dev_set_parent_priv() argument
1157 dev->parent_priv_ = parent_priv; in dev_set_parent_priv()
1160 void dev_set_uclass_priv(struct udevice *dev, void *uclass_priv) in dev_set_uclass_priv() argument
1162 dev->uclass_priv_ = uclass_priv; in dev_set_uclass_priv()
1165 void dev_set_plat(struct udevice *dev, void *plat) in dev_set_plat() argument
1167 dev->plat_ = plat; in dev_set_plat()
1170 void dev_set_parent_plat(struct udevice *dev, void *parent_plat) in dev_set_parent_plat() argument
1172 dev->parent_plat_ = parent_plat; in dev_set_parent_plat()
1175 void dev_set_uclass_plat(struct udevice *dev, void *uclass_plat) in dev_set_uclass_plat() argument
1177 dev->uclass_plat_ = uclass_plat; in dev_set_uclass_plat()
1181 bool device_is_compatible(const struct udevice *dev, const char *compat) in device_is_compatible() argument
1183 return ofnode_device_is_compatible(dev_ofnode(dev), compat); in device_is_compatible()
1195 struct udevice *dev; in dev_disable_by_path() local
1202 ret = uclass_find_device_by_ofnode(uc->uc_drv->id, node, &dev); in dev_disable_by_path()
1210 ret = device_remove(dev, DM_REMOVE_NORMAL); in dev_disable_by_path()
1214 ret = device_unbind(dev); in dev_disable_by_path()
1244 static struct udevice_rt *dev_get_rt(const struct udevice *dev) in dev_get_rt() argument
1248 int idx = ((void *)dev - (void *)base) / each_size; in dev_get_rt()
1255 u32 dev_get_flags(const struct udevice *dev) in dev_get_flags() argument
1257 const struct udevice_rt *urt = dev_get_rt(dev); in dev_get_flags()
1262 void dev_or_flags(const struct udevice *dev, u32 or) in dev_or_flags() argument
1264 struct udevice_rt *urt = dev_get_rt(dev); in dev_or_flags()
1269 void dev_bic_flags(const struct udevice *dev, u32 bic) in dev_bic_flags() argument
1271 struct udevice_rt *urt = dev_get_rt(dev); in dev_bic_flags()