Lines Matching refs:dev

45 	struct udevice *dev;  in device_bind_common()  local
65 dev = calloc(1, sizeof(struct udevice)); in device_bind_common()
66 if (!dev) in device_bind_common()
69 INIT_LIST_HEAD(&dev->sibling_node); in device_bind_common()
70 INIT_LIST_HEAD(&dev->child_head); in device_bind_common()
71 INIT_LIST_HEAD(&dev->uclass_node); in device_bind_common()
73 INIT_LIST_HEAD(&dev->devres_head); in device_bind_common()
75 dev_set_plat(dev, plat); in device_bind_common()
76 dev->driver_data = driver_data; in device_bind_common()
77 dev->name = name; in device_bind_common()
78 dev_set_ofnode(dev, node); in device_bind_common()
79 dev->parent = parent; in device_bind_common()
80 dev->driver = drv; in device_bind_common()
81 dev->uclass = uc; in device_bind_common()
83 dev->seq_ = -1; in device_bind_common()
93 if (!dev_read_alias_seq(dev, &dev->seq_)) { in device_bind_common()
95 log_debug(" - seq=%d\n", dev->seq_); in device_bind_common()
101 dev->seq_ = uclass_find_next_free_seq(uc); in device_bind_common()
113 dev_or_flags(dev, DM_FLAG_OF_PLATDATA); in device_bind_common()
118 dev_or_flags(dev, DM_FLAG_ALLOC_PDATA); in device_bind_common()
131 dev_set_plat(dev, ptr); in device_bind_common()
137 dev_or_flags(dev, DM_FLAG_ALLOC_UCLASS_PDATA); in device_bind_common()
143 dev_set_uclass_plat(dev, ptr); in device_bind_common()
151 dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA); in device_bind_common()
157 dev_set_parent_plat(dev, ptr); in device_bind_common()
160 list_add_tail(&dev->sibling_node, &parent->child_head); in device_bind_common()
163 ret = uclass_bind_device(dev); in device_bind_common()
169 ret = drv->bind(dev); in device_bind_common()
174 ret = parent->driver->child_post_bind(dev); in device_bind_common()
179 ret = uc->uc_drv->post_bind(dev); in device_bind_common()
185 pr_debug("Bound device %s to %s\n", dev->name, parent->name); in device_bind_common()
187 *devp = dev; in device_bind_common()
189 dev_or_flags(dev, DM_FLAG_BOUND); in device_bind_common()
197 if (drv->unbind && drv->unbind(dev)) { in device_bind_common()
199 dev->name); in device_bind_common()
205 if (uclass_unbind_device(dev)) { in device_bind_common()
207 dev->name); in device_bind_common()
212 list_del(&dev->sibling_node); in device_bind_common()
213 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PARENT_PDATA) { in device_bind_common()
214 free(dev_get_parent_plat(dev)); in device_bind_common()
215 dev_set_parent_plat(dev, NULL); in device_bind_common()
220 if (dev_get_flags(dev) & DM_FLAG_ALLOC_UCLASS_PDATA) { in device_bind_common()
221 free(dev_get_uclass_plat(dev)); in device_bind_common()
222 dev_set_uclass_plat(dev, NULL); in device_bind_common()
227 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PDATA) { in device_bind_common()
228 free(dev_get_plat(dev)); in device_bind_common()
229 dev_set_plat(dev, NULL); in device_bind_common()
233 devres_release_all(dev); in device_bind_common()
235 free(dev); in device_bind_common()
281 int device_reparent(struct udevice *dev, struct udevice *new_parent) in device_reparent() argument
285 assert(dev); in device_reparent()
288 device_foreach_child_safe(pos, n, dev->parent) { in device_reparent()
289 if (pos->driver != dev->driver) in device_reparent()
292 list_del(&dev->sibling_node); in device_reparent()
293 list_add_tail(&dev->sibling_node, &new_parent->child_head); in device_reparent()
294 dev->parent = new_parent; in device_reparent()
347 static int device_alloc_priv(struct udevice *dev) in device_alloc_priv() argument
353 drv = dev->driver; in device_alloc_priv()
357 if (drv->priv_auto && !dev_get_priv(dev)) { in device_alloc_priv()
361 dev_set_priv(dev, ptr); in device_alloc_priv()
365 size = dev->uclass->uc_drv->per_device_auto; in device_alloc_priv()
366 if (size && !dev_get_uclass_priv(dev)) { in device_alloc_priv()
367 ptr = alloc_priv(size, dev->uclass->uc_drv->flags); in device_alloc_priv()
370 dev_set_uclass_priv(dev, ptr); in device_alloc_priv()
374 if (dev->parent) { in device_alloc_priv()
375 size = dev->parent->driver->per_child_auto; in device_alloc_priv()
377 size = dev->parent->uclass->uc_drv->per_child_auto; in device_alloc_priv()
378 if (size && !dev_get_parent_priv(dev)) { in device_alloc_priv()
382 dev_set_parent_priv(dev, ptr); in device_alloc_priv()
389 int device_of_to_plat(struct udevice *dev) in device_of_to_plat() argument
394 if (!dev) in device_of_to_plat()
397 if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID) in device_of_to_plat()
406 if (dev->parent) { in device_of_to_plat()
407 ret = device_of_to_plat(dev->parent); in device_of_to_plat()
417 if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID) in device_of_to_plat()
421 ret = device_alloc_priv(dev); in device_of_to_plat()
425 drv = dev->driver; in device_of_to_plat()
429 (CONFIG_IS_ENABLED(OF_PLATDATA) || dev_has_ofnode(dev))) { in device_of_to_plat()
430 ret = drv->of_to_plat(dev); in device_of_to_plat()
435 dev_or_flags(dev, DM_FLAG_PLATDATA_VALID); in device_of_to_plat()
439 device_free(dev); in device_of_to_plat()
454 static int device_get_dma_constraints(struct udevice *dev) in device_get_dma_constraints() argument
456 struct udevice *parent = dev->parent; in device_get_dma_constraints()
472 dm_warn("%s: failed to get DMA range, %d\n", dev->name, ret); in device_get_dma_constraints()
476 dev_set_dma_offset(dev, cpu - bus); in device_get_dma_constraints()
481 int device_probe(struct udevice *dev) in device_probe() argument
486 if (!dev) in device_probe()
489 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) in device_probe()
492 ret = device_notify(dev, EVT_DM_PRE_PROBE); in device_probe()
496 drv = dev->driver; in device_probe()
499 ret = device_of_to_plat(dev); in device_probe()
504 if (dev->parent) { in device_probe()
505 ret = device_probe(dev->parent); in device_probe()
515 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) in device_probe()
519 dev_or_flags(dev, DM_FLAG_ACTIVATED); in device_probe()
521 if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent && in device_probe()
522 (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) && in device_probe()
524 ret = dev_power_domain_on(dev); in device_probe()
544 if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) { in device_probe()
545 ret = pinctrl_select_state(dev, "default"); in device_probe()
548 dev->name, ret, errno_str(ret)); in device_probe()
551 if (CONFIG_IS_ENABLED(IOMMU) && dev->parent && in device_probe()
552 (device_get_uclass_id(dev) != UCLASS_IOMMU)) { in device_probe()
553 ret = dev_iommu_enable(dev); in device_probe()
558 ret = device_get_dma_constraints(dev); in device_probe()
562 ret = uclass_pre_probe_device(dev); in device_probe()
566 if (dev->parent && dev->parent->driver->child_pre_probe) { in device_probe()
567 ret = dev->parent->driver->child_pre_probe(dev); in device_probe()
573 if (dev_has_ofnode(dev)) { in device_probe()
578 ret = clk_set_defaults(dev, CLK_DEFAULTS_PRE); in device_probe()
584 ret = drv->probe(dev); in device_probe()
589 ret = uclass_post_probe_device(dev); in device_probe()
593 if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) { in device_probe()
594 ret = pinctrl_select_state(dev, "default"); in device_probe()
597 dev->name, ret, errno_str(ret)); in device_probe()
600 ret = device_notify(dev, EVT_DM_POST_PROBE); in device_probe()
607 if (device_remove(dev, DM_REMOVE_NORMAL)) { in device_probe()
609 __func__, dev->name); in device_probe()
612 dev_bic_flags(dev, DM_FLAG_ACTIVATED); in device_probe()
614 device_free(dev); in device_probe()
619 void *dev_get_plat(const struct udevice *dev) in dev_get_plat() argument
621 if (!dev) { in dev_get_plat()
626 return dm_priv_to_rw(dev->plat_); in dev_get_plat()
629 void *dev_get_parent_plat(const struct udevice *dev) in dev_get_parent_plat() argument
631 if (!dev) { in dev_get_parent_plat()
636 return dm_priv_to_rw(dev->parent_plat_); in dev_get_parent_plat()
639 void *dev_get_uclass_plat(const struct udevice *dev) in dev_get_uclass_plat() argument
641 if (!dev) { in dev_get_uclass_plat()
646 return dm_priv_to_rw(dev->uclass_plat_); in dev_get_uclass_plat()
649 void *dev_get_priv(const struct udevice *dev) in dev_get_priv() argument
651 if (!dev) { in dev_get_priv()
656 return dm_priv_to_rw(dev->priv_); in dev_get_priv()
660 notrace void *dev_get_uclass_priv(const struct udevice *dev) in dev_get_uclass_priv() argument
662 if (!dev) { in dev_get_uclass_priv()
667 return dm_priv_to_rw(dev->uclass_priv_); in dev_get_uclass_priv()
670 void *dev_get_parent_priv(const struct udevice *dev) in dev_get_parent_priv() argument
672 if (!dev) { in dev_get_parent_priv()
677 return dm_priv_to_rw(dev->parent_priv_); in dev_get_parent_priv()
680 void *dev_get_attach_ptr(const struct udevice *dev, enum dm_tag_t tag) in dev_get_attach_ptr() argument
684 return dev_get_plat(dev); in dev_get_attach_ptr()
686 return dev_get_parent_plat(dev); in dev_get_attach_ptr()
688 return dev_get_uclass_plat(dev); in dev_get_attach_ptr()
690 return dev_get_priv(dev); in dev_get_attach_ptr()
692 return dev_get_parent_priv(dev); in dev_get_attach_ptr()
694 return dev_get_uclass_priv(dev); in dev_get_attach_ptr()
700 int dev_get_attach_size(const struct udevice *dev, enum dm_tag_t tag) in dev_get_attach_size() argument
702 const struct udevice *parent = dev_get_parent(dev); in dev_get_attach_size()
703 const struct uclass *uc = dev->uclass; in dev_get_attach_size()
713 size = dev->driver->plat_auto; in dev_get_attach_size()
726 size = dev->driver->priv_auto; in dev_get_attach_size()
745 static int device_get_device_tail(struct udevice *dev, int ret, in device_get_device_tail() argument
751 ret = device_probe(dev); in device_get_device_tail()
755 *devp = dev; in device_get_device_tail()
773 struct udevice *dev; in device_find_by_ofnode() local
778 &dev); in device_find_by_ofnode()
779 if (!ret || dev) { in device_find_by_ofnode()
780 *devp = dev; in device_find_by_ofnode()
792 struct udevice *dev; in device_get_child() local
794 device_foreach_child(dev, parent) { in device_get_child()
796 return device_get_device_tail(dev, 0, devp); in device_get_child()
804 struct udevice *dev; in device_get_child_count() local
807 device_foreach_child(dev, parent) in device_get_child_count()
815 const struct udevice *dev; in device_get_decendent_count() local
818 device_foreach_child(dev, parent) in device_get_decendent_count()
819 count += device_get_decendent_count(dev); in device_get_decendent_count()
827 struct udevice *dev; in device_find_child_by_seq() local
831 device_foreach_child(dev, parent) { in device_find_child_by_seq()
832 if (dev->seq_ == seq) { in device_find_child_by_seq()
833 *devp = dev; in device_find_child_by_seq()
844 struct udevice *dev; in device_get_child_by_seq() local
848 ret = device_find_child_by_seq(parent, seq, &dev); in device_get_child_by_seq()
850 return device_get_device_tail(dev, ret, devp); in device_get_child_by_seq()
856 struct udevice *dev; in device_find_child_by_of_offset() local
860 device_foreach_child(dev, parent) { in device_find_child_by_of_offset()
861 if (dev_of_offset(dev) == of_offset) { in device_find_child_by_of_offset()
862 *devp = dev; in device_find_child_by_of_offset()
873 struct udevice *dev; in device_get_child_by_of_offset() local
877 ret = device_find_child_by_of_offset(parent, node, &dev); in device_get_child_by_of_offset()
878 return device_get_device_tail(dev, ret, devp); in device_get_child_by_of_offset()
884 struct udevice *dev, *found; in _device_find_global_by_ofnode() local
889 device_foreach_child(dev, parent) { in _device_find_global_by_ofnode()
890 found = _device_find_global_by_ofnode(dev, ofnode); in _device_find_global_by_ofnode()
907 struct udevice *dev; in device_get_global_by_ofnode() local
909 dev = _device_find_global_by_ofnode(gd->dm_root, ofnode); in device_get_global_by_ofnode()
910 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_global_by_ofnode()
916 struct udevice *dev; in device_get_by_ofplat_idx() local
921 dev = base + idx; in device_get_by_ofplat_idx()
925 dev = drt->dev; in device_get_by_ofplat_idx()
929 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_by_ofplat_idx()
947 struct udevice *dev = *devp; in device_find_next_child() local
948 struct udevice *parent = dev->parent; in device_find_next_child()
950 if (list_is_last(&dev->sibling_node, &parent->child_head)) { in device_find_next_child()
953 *devp = list_entry(dev->sibling_node.next, struct udevice, in device_find_next_child()
964 struct udevice *dev; in device_find_first_inactive_child() local
967 device_foreach_child(dev, parent) { in device_find_first_inactive_child()
968 if (!device_active(dev) && in device_find_first_inactive_child()
969 device_get_uclass_id(dev) == uclass_id) { in device_find_first_inactive_child()
970 *devp = dev; in device_find_first_inactive_child()
982 struct udevice *dev; in device_find_first_child_by_uclass() local
985 device_foreach_child(dev, parent) { in device_find_first_child_by_uclass()
986 if (device_get_uclass_id(dev) == uclass_id) { in device_find_first_child_by_uclass()
987 *devp = dev; in device_find_first_child_by_uclass()
998 struct udevice *dev; in device_find_child_by_namelen() local
1002 device_foreach_child(dev, parent) { in device_find_child_by_namelen()
1003 if (!strncmp(dev->name, name, len) && in device_find_child_by_namelen()
1004 strlen(dev->name) == len) { in device_find_child_by_namelen()
1005 *devp = dev; in device_find_child_by_namelen()
1021 struct udevice *dev; in device_first_child_err() local
1023 device_find_first_child(parent, &dev); in device_first_child_err()
1024 if (!dev) in device_first_child_err()
1027 return device_get_device_tail(dev, 0, devp); in device_first_child_err()
1032 struct udevice *dev = *devp; in device_next_child_err() local
1034 device_find_next_child(&dev); in device_next_child_err()
1035 if (!dev) in device_next_child_err()
1038 return device_get_device_tail(dev, 0, devp); in device_next_child_err()
1043 struct udevice *dev; in device_first_child_ofdata_err() local
1046 device_find_first_child(parent, &dev); in device_first_child_ofdata_err()
1047 if (!dev) in device_first_child_ofdata_err()
1050 ret = device_of_to_plat(dev); in device_first_child_ofdata_err()
1054 *devp = dev; in device_first_child_ofdata_err()
1061 struct udevice *dev = *devp; in device_next_child_ofdata_err() local
1064 device_find_next_child(&dev); in device_next_child_ofdata_err()
1065 if (!dev) in device_next_child_ofdata_err()
1068 ret = device_of_to_plat(dev); in device_next_child_ofdata_err()
1072 *devp = dev; in device_next_child_ofdata_err()
1082 ulong dev_get_driver_data(const struct udevice *dev) in dev_get_driver_data() argument
1084 return dev->driver_data; in dev_get_driver_data()
1087 const void *dev_get_driver_ops(const struct udevice *dev) in dev_get_driver_ops() argument
1089 if (!dev || !dev->driver->ops) in dev_get_driver_ops()
1092 return dev->driver->ops; in dev_get_driver_ops()
1095 enum uclass_id device_get_uclass_id(const struct udevice *dev) in device_get_uclass_id() argument
1097 return dev->uclass->uc_drv->id; in device_get_uclass_id()
1100 const char *dev_get_uclass_name(const struct udevice *dev) in dev_get_uclass_name() argument
1102 if (!dev) in dev_get_uclass_name()
1105 return dev->uclass->uc_drv->name; in dev_get_uclass_name()
1108 bool device_has_children(const struct udevice *dev) in device_has_children() argument
1110 return !list_empty(&dev->child_head); in device_has_children()
1113 bool device_has_active_children(const struct udevice *dev) in device_has_active_children() argument
1117 for (device_find_first_child(dev, &child); in device_has_active_children()
1127 bool device_is_last_sibling(const struct udevice *dev) in device_is_last_sibling() argument
1129 struct udevice *parent = dev->parent; in device_is_last_sibling()
1133 return list_is_last(&dev->sibling_node, &parent->child_head); in device_is_last_sibling()
1136 void device_set_name_alloced(struct udevice *dev) in device_set_name_alloced() argument
1138 dev_or_flags(dev, DM_FLAG_NAME_ALLOCED); in device_set_name_alloced()
1141 int device_set_name(struct udevice *dev, const char *name) in device_set_name() argument
1146 dev->name = name; in device_set_name()
1147 device_set_name_alloced(dev); in device_set_name()
1152 void dev_set_priv(struct udevice *dev, void *priv) in dev_set_priv() argument
1154 dev->priv_ = priv; in dev_set_priv()
1157 void dev_set_parent_priv(struct udevice *dev, void *parent_priv) in dev_set_parent_priv() argument
1159 dev->parent_priv_ = parent_priv; in dev_set_parent_priv()
1162 void dev_set_uclass_priv(struct udevice *dev, void *uclass_priv) in dev_set_uclass_priv() argument
1164 dev->uclass_priv_ = uclass_priv; in dev_set_uclass_priv()
1167 void dev_set_plat(struct udevice *dev, void *plat) in dev_set_plat() argument
1169 dev->plat_ = plat; in dev_set_plat()
1172 void dev_set_parent_plat(struct udevice *dev, void *parent_plat) in dev_set_parent_plat() argument
1174 dev->parent_plat_ = parent_plat; in dev_set_parent_plat()
1177 void dev_set_uclass_plat(struct udevice *dev, void *uclass_plat) in dev_set_uclass_plat() argument
1179 dev->uclass_plat_ = uclass_plat; in dev_set_uclass_plat()
1183 bool device_is_compatible(const struct udevice *dev, const char *compat) in device_is_compatible() argument
1185 return ofnode_device_is_compatible(dev_ofnode(dev), compat); in device_is_compatible()
1197 struct udevice *dev; in dev_disable_by_path() local
1204 ret = uclass_find_device_by_ofnode(uc->uc_drv->id, node, &dev); in dev_disable_by_path()
1212 ret = device_remove(dev, DM_REMOVE_NORMAL); in dev_disable_by_path()
1216 ret = device_unbind(dev); in dev_disable_by_path()
1246 static struct udevice_rt *dev_get_rt(const struct udevice *dev) in dev_get_rt() argument
1250 int idx = ((void *)dev - (void *)base) / each_size; in dev_get_rt()
1257 u32 dev_get_flags(const struct udevice *dev) in dev_get_flags() argument
1259 const struct udevice_rt *urt = dev_get_rt(dev); in dev_get_flags()
1264 void dev_or_flags(const struct udevice *dev, u32 or) in dev_or_flags() argument
1266 struct udevice_rt *urt = dev_get_rt(dev); in dev_or_flags()
1271 void dev_bic_flags(const struct udevice *dev, u32 bic) in dev_bic_flags() argument
1273 struct udevice_rt *urt = dev_get_rt(dev); in dev_bic_flags()