Lines Matching refs:dev

42 	struct udevice *dev;  in device_bind_common()  local
59 dev = calloc(1, sizeof(struct udevice)); in device_bind_common()
60 if (!dev) in device_bind_common()
63 INIT_LIST_HEAD(&dev->sibling_node); in device_bind_common()
64 INIT_LIST_HEAD(&dev->child_head); in device_bind_common()
65 INIT_LIST_HEAD(&dev->uclass_node); in device_bind_common()
67 INIT_LIST_HEAD(&dev->devres_head); in device_bind_common()
69 dev_set_plat(dev, plat); in device_bind_common()
70 dev->driver_data = driver_data; in device_bind_common()
71 dev->name = name; in device_bind_common()
72 dev_set_ofnode(dev, node); in device_bind_common()
73 dev->parent = parent; in device_bind_common()
74 dev->driver = drv; in device_bind_common()
75 dev->uclass = uc; in device_bind_common()
77 dev->seq_ = -1; in device_bind_common()
87 if (!dev_read_alias_seq(dev, &dev->seq_)) in device_bind_common()
93 dev->seq_ = uclass_find_next_free_seq(uc); in device_bind_common()
105 dev_or_flags(dev, DM_FLAG_OF_PLATDATA); in device_bind_common()
110 dev_or_flags(dev, DM_FLAG_ALLOC_PDATA); in device_bind_common()
123 dev_set_plat(dev, ptr); in device_bind_common()
129 dev_or_flags(dev, DM_FLAG_ALLOC_UCLASS_PDATA); in device_bind_common()
135 dev_set_uclass_plat(dev, ptr); in device_bind_common()
143 dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA); in device_bind_common()
149 dev_set_parent_plat(dev, ptr); in device_bind_common()
152 list_add_tail(&dev->sibling_node, &parent->child_head); in device_bind_common()
155 ret = uclass_bind_device(dev); in device_bind_common()
161 ret = drv->bind(dev); in device_bind_common()
166 ret = parent->driver->child_post_bind(dev); in device_bind_common()
171 ret = uc->uc_drv->post_bind(dev); in device_bind_common()
177 pr_debug("Bound device %s to %s\n", dev->name, parent->name); in device_bind_common()
179 *devp = dev; in device_bind_common()
181 dev_or_flags(dev, DM_FLAG_BOUND); in device_bind_common()
189 if (drv->unbind && drv->unbind(dev)) { in device_bind_common()
191 dev->name); in device_bind_common()
197 if (uclass_unbind_device(dev)) { in device_bind_common()
199 dev->name); in device_bind_common()
204 list_del(&dev->sibling_node); in device_bind_common()
205 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PARENT_PDATA) { in device_bind_common()
206 free(dev_get_parent_plat(dev)); in device_bind_common()
207 dev_set_parent_plat(dev, NULL); in device_bind_common()
212 if (dev_get_flags(dev) & DM_FLAG_ALLOC_UCLASS_PDATA) { in device_bind_common()
213 free(dev_get_uclass_plat(dev)); in device_bind_common()
214 dev_set_uclass_plat(dev, NULL); in device_bind_common()
219 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PDATA) { in device_bind_common()
220 free(dev_get_plat(dev)); in device_bind_common()
221 dev_set_plat(dev, NULL); in device_bind_common()
225 devres_release_all(dev); in device_bind_common()
227 free(dev); in device_bind_common()
273 int device_reparent(struct udevice *dev, struct udevice *new_parent) in device_reparent() argument
277 assert(dev); in device_reparent()
280 list_for_each_entry_safe(pos, n, &dev->parent->child_head, in device_reparent()
282 if (pos->driver != dev->driver) in device_reparent()
285 list_del(&dev->sibling_node); in device_reparent()
286 list_add_tail(&dev->sibling_node, &new_parent->child_head); in device_reparent()
287 dev->parent = new_parent; in device_reparent()
345 static int device_alloc_priv(struct udevice *dev) in device_alloc_priv() argument
351 drv = dev->driver; in device_alloc_priv()
355 if (drv->priv_auto && !dev_get_priv(dev)) { in device_alloc_priv()
359 dev_set_priv(dev, ptr); in device_alloc_priv()
363 size = dev->uclass->uc_drv->per_device_auto; in device_alloc_priv()
364 if (size && !dev_get_uclass_priv(dev)) { in device_alloc_priv()
365 ptr = alloc_priv(size, dev->uclass->uc_drv->flags); in device_alloc_priv()
368 dev_set_uclass_priv(dev, ptr); in device_alloc_priv()
372 if (dev->parent) { in device_alloc_priv()
373 size = dev->parent->driver->per_child_auto; in device_alloc_priv()
375 size = dev->parent->uclass->uc_drv->per_child_auto; in device_alloc_priv()
376 if (size && !dev_get_parent_priv(dev)) { in device_alloc_priv()
380 dev_set_parent_priv(dev, ptr); in device_alloc_priv()
387 int device_of_to_plat(struct udevice *dev) in device_of_to_plat() argument
392 if (!dev) in device_of_to_plat()
395 if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID) in device_of_to_plat()
399 if (dev->parent) { in device_of_to_plat()
400 ret = device_of_to_plat(dev->parent); in device_of_to_plat()
410 if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID) in device_of_to_plat()
414 ret = device_alloc_priv(dev); in device_of_to_plat()
418 drv = dev->driver; in device_of_to_plat()
422 (CONFIG_IS_ENABLED(OF_PLATDATA) || dev_has_ofnode(dev))) { in device_of_to_plat()
423 ret = drv->of_to_plat(dev); in device_of_to_plat()
428 dev_or_flags(dev, DM_FLAG_PLATDATA_VALID); in device_of_to_plat()
432 device_free(dev); in device_of_to_plat()
447 static int device_get_dma_constraints(struct udevice *dev) in device_get_dma_constraints() argument
449 struct udevice *parent = dev->parent; in device_get_dma_constraints()
465 dm_warn("%s: failed to get DMA range, %d\n", dev->name, ret); in device_get_dma_constraints()
469 dev_set_dma_offset(dev, cpu - bus); in device_get_dma_constraints()
474 int device_probe(struct udevice *dev) in device_probe() argument
479 if (!dev) in device_probe()
482 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) in device_probe()
485 drv = dev->driver; in device_probe()
488 ret = device_of_to_plat(dev); in device_probe()
493 if (dev->parent) { in device_probe()
494 ret = device_probe(dev->parent); in device_probe()
504 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) in device_probe()
508 dev_or_flags(dev, DM_FLAG_ACTIVATED); in device_probe()
525 if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) in device_probe()
526 pinctrl_select_state(dev, "default"); in device_probe()
528 if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent && in device_probe()
529 (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) && in device_probe()
531 ret = dev_power_domain_on(dev); in device_probe()
536 ret = device_get_dma_constraints(dev); in device_probe()
540 ret = uclass_pre_probe_device(dev); in device_probe()
544 if (dev->parent && dev->parent->driver->child_pre_probe) { in device_probe()
545 ret = dev->parent->driver->child_pre_probe(dev); in device_probe()
551 if (dev_has_ofnode(dev)) { in device_probe()
556 ret = clk_set_defaults(dev, 0); in device_probe()
562 ret = drv->probe(dev); in device_probe()
567 ret = uclass_post_probe_device(dev); in device_probe()
571 if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) in device_probe()
572 pinctrl_select_state(dev, "default"); in device_probe()
576 if (device_remove(dev, DM_REMOVE_NORMAL)) { in device_probe()
578 __func__, dev->name); in device_probe()
581 dev_bic_flags(dev, DM_FLAG_ACTIVATED); in device_probe()
583 device_free(dev); in device_probe()
588 void *dev_get_plat(const struct udevice *dev) in dev_get_plat() argument
590 if (!dev) { in dev_get_plat()
595 return dev->plat_; in dev_get_plat()
598 void *dev_get_parent_plat(const struct udevice *dev) in dev_get_parent_plat() argument
600 if (!dev) { in dev_get_parent_plat()
605 return dev->parent_plat_; in dev_get_parent_plat()
608 void *dev_get_uclass_plat(const struct udevice *dev) in dev_get_uclass_plat() argument
610 if (!dev) { in dev_get_uclass_plat()
615 return dev->uclass_plat_; in dev_get_uclass_plat()
618 void *dev_get_priv(const struct udevice *dev) in dev_get_priv() argument
620 if (!dev) { in dev_get_priv()
625 return dev->priv_; in dev_get_priv()
628 void *dev_get_uclass_priv(const struct udevice *dev) in dev_get_uclass_priv() argument
630 if (!dev) { in dev_get_uclass_priv()
635 return dev->uclass_priv_; in dev_get_uclass_priv()
638 void *dev_get_parent_priv(const struct udevice *dev) in dev_get_parent_priv() argument
640 if (!dev) { in dev_get_parent_priv()
645 return dev->parent_priv_; in dev_get_parent_priv()
648 static int device_get_device_tail(struct udevice *dev, int ret, in device_get_device_tail() argument
654 ret = device_probe(dev); in device_get_device_tail()
658 *devp = dev; in device_get_device_tail()
676 struct udevice *dev; in device_find_by_ofnode() local
681 &dev); in device_find_by_ofnode()
682 if (!ret || dev) { in device_find_by_ofnode()
683 *devp = dev; in device_find_by_ofnode()
695 struct udevice *dev; in device_get_child() local
697 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_get_child()
699 return device_get_device_tail(dev, 0, devp); in device_get_child()
707 struct udevice *dev; in device_get_child_count() local
710 list_for_each_entry(dev, &parent->child_head, sibling_node) in device_get_child_count()
719 struct udevice *dev; in device_find_child_by_seq() local
723 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_seq()
724 if (dev->seq_ == seq) { in device_find_child_by_seq()
725 *devp = dev; in device_find_child_by_seq()
736 struct udevice *dev; in device_get_child_by_seq() local
740 ret = device_find_child_by_seq(parent, seq, &dev); in device_get_child_by_seq()
742 return device_get_device_tail(dev, ret, devp); in device_get_child_by_seq()
748 struct udevice *dev; in device_find_child_by_of_offset() local
752 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_of_offset()
753 if (dev_of_offset(dev) == of_offset) { in device_find_child_by_of_offset()
754 *devp = dev; in device_find_child_by_of_offset()
765 struct udevice *dev; in device_get_child_by_of_offset() local
769 ret = device_find_child_by_of_offset(parent, node, &dev); in device_get_child_by_of_offset()
770 return device_get_device_tail(dev, ret, devp); in device_get_child_by_of_offset()
776 struct udevice *dev, *found; in _device_find_global_by_ofnode() local
781 list_for_each_entry(dev, &parent->child_head, sibling_node) { in _device_find_global_by_ofnode()
782 found = _device_find_global_by_ofnode(dev, ofnode); in _device_find_global_by_ofnode()
799 struct udevice *dev; in device_get_global_by_ofnode() local
801 dev = _device_find_global_by_ofnode(gd->dm_root, ofnode); in device_get_global_by_ofnode()
802 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_global_by_ofnode()
813 struct udevice *dev; in device_get_by_driver_info() local
815 dev = drt->dev; in device_get_by_driver_info()
818 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_by_driver_info()
824 struct udevice *dev; in device_get_by_driver_info_idx() local
826 dev = drt->dev; in device_get_by_driver_info_idx()
829 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_by_driver_info_idx()
847 struct udevice *dev = *devp; in device_find_next_child() local
848 struct udevice *parent = dev->parent; in device_find_next_child()
850 if (list_is_last(&dev->sibling_node, &parent->child_head)) { in device_find_next_child()
853 *devp = list_entry(dev->sibling_node.next, struct udevice, in device_find_next_child()
864 struct udevice *dev; in device_find_first_inactive_child() local
867 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_first_inactive_child()
868 if (!device_active(dev) && in device_find_first_inactive_child()
869 device_get_uclass_id(dev) == uclass_id) { in device_find_first_inactive_child()
870 *devp = dev; in device_find_first_inactive_child()
882 struct udevice *dev; in device_find_first_child_by_uclass() local
885 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_first_child_by_uclass()
886 if (device_get_uclass_id(dev) == uclass_id) { in device_find_first_child_by_uclass()
887 *devp = dev; in device_find_first_child_by_uclass()
898 struct udevice *dev; in device_find_child_by_name() local
902 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_name()
903 if (!strcmp(dev->name, name)) { in device_find_child_by_name()
904 *devp = dev; in device_find_child_by_name()
914 struct udevice *dev; in device_first_child_err() local
916 device_find_first_child(parent, &dev); in device_first_child_err()
917 if (!dev) in device_first_child_err()
920 return device_get_device_tail(dev, 0, devp); in device_first_child_err()
925 struct udevice *dev = *devp; in device_next_child_err() local
927 device_find_next_child(&dev); in device_next_child_err()
928 if (!dev) in device_next_child_err()
931 return device_get_device_tail(dev, 0, devp); in device_next_child_err()
936 struct udevice *dev; in device_first_child_ofdata_err() local
939 device_find_first_child(parent, &dev); in device_first_child_ofdata_err()
940 if (!dev) in device_first_child_ofdata_err()
943 ret = device_of_to_plat(dev); in device_first_child_ofdata_err()
947 *devp = dev; in device_first_child_ofdata_err()
954 struct udevice *dev = *devp; in device_next_child_ofdata_err() local
957 device_find_next_child(&dev); in device_next_child_ofdata_err()
958 if (!dev) in device_next_child_ofdata_err()
961 ret = device_of_to_plat(dev); in device_next_child_ofdata_err()
965 *devp = dev; in device_next_child_ofdata_err()
975 ulong dev_get_driver_data(const struct udevice *dev) in dev_get_driver_data() argument
977 return dev->driver_data; in dev_get_driver_data()
980 const void *dev_get_driver_ops(const struct udevice *dev) in dev_get_driver_ops() argument
982 if (!dev || !dev->driver->ops) in dev_get_driver_ops()
985 return dev->driver->ops; in dev_get_driver_ops()
988 enum uclass_id device_get_uclass_id(const struct udevice *dev) in device_get_uclass_id() argument
990 return dev->uclass->uc_drv->id; in device_get_uclass_id()
993 const char *dev_get_uclass_name(const struct udevice *dev) in dev_get_uclass_name() argument
995 if (!dev) in dev_get_uclass_name()
998 return dev->uclass->uc_drv->name; in dev_get_uclass_name()
1001 bool device_has_children(const struct udevice *dev) in device_has_children() argument
1003 return !list_empty(&dev->child_head); in device_has_children()
1006 bool device_has_active_children(const struct udevice *dev) in device_has_active_children() argument
1010 for (device_find_first_child(dev, &child); in device_has_active_children()
1020 bool device_is_last_sibling(const struct udevice *dev) in device_is_last_sibling() argument
1022 struct udevice *parent = dev->parent; in device_is_last_sibling()
1026 return list_is_last(&dev->sibling_node, &parent->child_head); in device_is_last_sibling()
1029 void device_set_name_alloced(struct udevice *dev) in device_set_name_alloced() argument
1031 dev_or_flags(dev, DM_FLAG_NAME_ALLOCED); in device_set_name_alloced()
1034 int device_set_name(struct udevice *dev, const char *name) in device_set_name() argument
1039 dev->name = name; in device_set_name()
1040 device_set_name_alloced(dev); in device_set_name()
1045 void dev_set_priv(struct udevice *dev, void *priv) in dev_set_priv() argument
1047 dev->priv_ = priv; in dev_set_priv()
1050 void dev_set_parent_priv(struct udevice *dev, void *parent_priv) in dev_set_parent_priv() argument
1052 dev->parent_priv_ = parent_priv; in dev_set_parent_priv()
1055 void dev_set_uclass_priv(struct udevice *dev, void *uclass_priv) in dev_set_uclass_priv() argument
1057 dev->uclass_priv_ = uclass_priv; in dev_set_uclass_priv()
1060 void dev_set_plat(struct udevice *dev, void *plat) in dev_set_plat() argument
1062 dev->plat_ = plat; in dev_set_plat()
1065 void dev_set_parent_plat(struct udevice *dev, void *parent_plat) in dev_set_parent_plat() argument
1067 dev->parent_plat_ = parent_plat; in dev_set_parent_plat()
1070 void dev_set_uclass_plat(struct udevice *dev, void *uclass_plat) in dev_set_uclass_plat() argument
1072 dev->uclass_plat_ = uclass_plat; in dev_set_uclass_plat()
1076 bool device_is_compatible(const struct udevice *dev, const char *compat) in device_is_compatible() argument
1078 return ofnode_device_is_compatible(dev_ofnode(dev), compat); in device_is_compatible()
1092 struct udevice *dev; in dev_disable_by_path() local
1099 ret = uclass_find_device_by_ofnode(uc->uc_drv->id, node, &dev); in dev_disable_by_path()
1107 ret = device_remove(dev, DM_REMOVE_NORMAL); in dev_disable_by_path()
1111 ret = device_unbind(dev); in dev_disable_by_path()