Lines Matching refs:dev
38 struct udevice *dev; in device_bind_common() local
70 list_for_each_entry(dev, &uc->dev_head, uclass_node) { in device_bind_common()
71 if (!strcmp(name, dev->name)) { in device_bind_common()
73 __func__, dev->name); in device_bind_common()
80 dev->node = node; in device_bind_common()
89 list_for_each_entry_safe(dev, n, &uc->dev_head, uclass_node) { in device_bind_common()
90 if (!strcmp(name, dev->name) && in device_bind_common()
91 (dev_read_bool(dev, "u-boot,dm-pre-reloc") || in device_bind_common()
92 dev_read_bool(dev, "u-boot,dm-spl"))) { in device_bind_common()
98 __func__, dev->name); in device_bind_common()
101 list_del_init(&dev->uclass_node); in device_bind_common()
107 dev = calloc(1, sizeof(struct udevice)); in device_bind_common()
108 if (!dev) in device_bind_common()
111 INIT_LIST_HEAD(&dev->sibling_node); in device_bind_common()
112 INIT_LIST_HEAD(&dev->child_head); in device_bind_common()
113 INIT_LIST_HEAD(&dev->uclass_node); in device_bind_common()
115 INIT_LIST_HEAD(&dev->devres_head); in device_bind_common()
117 dev->platdata = platdata; in device_bind_common()
118 dev->driver_data = driver_data; in device_bind_common()
119 dev->name = name; in device_bind_common()
120 dev->node = node; in device_bind_common()
121 dev->parent = parent; in device_bind_common()
122 dev->driver = drv; in device_bind_common()
123 dev->uclass = uc; in device_bind_common()
125 dev->seq = -1; in device_bind_common()
126 dev->req_seq = -1; in device_bind_common()
137 dev_read_alias_seq(dev, &dev->req_seq); in device_bind_common()
147 dev->flags |= DM_FLAG_OF_PLATDATA; in device_bind_common()
154 dev->flags |= DM_FLAG_ALLOC_PDATA; in device_bind_common()
155 dev->platdata = calloc(1, in device_bind_common()
157 if (!dev->platdata) { in device_bind_common()
162 memcpy(dev->platdata, platdata, in device_bind_common()
170 dev->flags |= DM_FLAG_ALLOC_UCLASS_PDATA; in device_bind_common()
171 dev->uclass_platdata = calloc(1, size); in device_bind_common()
172 if (!dev->uclass_platdata) { in device_bind_common()
185 dev->flags |= DM_FLAG_ALLOC_PARENT_PDATA; in device_bind_common()
186 dev->parent_platdata = calloc(1, size); in device_bind_common()
187 if (!dev->parent_platdata) { in device_bind_common()
196 list_add_tail(&dev->sibling_node, &parent->child_head); in device_bind_common()
229 dev->flags |= DM_FLAG_KNRL_DTB; in device_bind_common()
239 if (!dev->uclass->u_boot_dev_head) in device_bind_common()
240 dev->uclass->u_boot_dev_head = &uc->dev_head; in device_bind_common()
242 if (!dev->uclass->u_boot_dev_head) in device_bind_common()
243 dev->uclass->u_boot_dev_head = &dev->uclass_node; in device_bind_common()
247 dev->flags |= DM_FLAG_KNRL_DTB; in device_bind_common()
250 ret = uclass_bind_device(dev, after_u_boot_dev); in device_bind_common()
256 ret = drv->bind(dev); in device_bind_common()
261 ret = parent->driver->child_post_bind(dev); in device_bind_common()
266 ret = uc->uc_drv->post_bind(dev); in device_bind_common()
272 pr_debug("Bound device %s to %s\n", dev->name, parent->name); in device_bind_common()
274 *devp = dev; in device_bind_common()
276 dev->flags |= DM_FLAG_BOUND; in device_bind_common()
284 if (drv->unbind && drv->unbind(dev)) { in device_bind_common()
286 dev->name); in device_bind_common()
292 if (uclass_unbind_device(dev)) { in device_bind_common()
294 dev->name); in device_bind_common()
299 list_del(&dev->sibling_node); in device_bind_common()
300 if (dev->flags & DM_FLAG_ALLOC_PARENT_PDATA) { in device_bind_common()
301 free(dev->parent_platdata); in device_bind_common()
302 dev->parent_platdata = NULL; in device_bind_common()
306 if (dev->flags & DM_FLAG_ALLOC_UCLASS_PDATA) { in device_bind_common()
307 free(dev->uclass_platdata); in device_bind_common()
308 dev->uclass_platdata = NULL; in device_bind_common()
311 if (dev->flags & DM_FLAG_ALLOC_PDATA) { in device_bind_common()
312 free(dev->platdata); in device_bind_common()
313 dev->platdata = NULL; in device_bind_common()
316 devres_release_all(dev); in device_bind_common()
318 free(dev); in device_bind_common()
404 int device_probe(struct udevice *dev) in device_probe() argument
411 if (!dev) in device_probe()
414 if (dev->flags & DM_FLAG_ACTIVATED) in device_probe()
417 drv = dev->driver; in device_probe()
421 if (drv->priv_auto_alloc_size && !dev->priv) { in device_probe()
422 dev->priv = alloc_priv(drv->priv_auto_alloc_size, drv->flags); in device_probe()
423 if (!dev->priv) { in device_probe()
429 size = dev->uclass->uc_drv->per_device_auto_alloc_size; in device_probe()
430 if (size && !dev->uclass_priv) { in device_probe()
431 dev->uclass_priv = calloc(1, size); in device_probe()
432 if (!dev->uclass_priv) { in device_probe()
439 if (dev->parent) { in device_probe()
440 size = dev->parent->driver->per_child_auto_alloc_size; in device_probe()
442 size = dev->parent->uclass->uc_drv-> in device_probe()
445 if (size && !dev->parent_priv) { in device_probe()
446 dev->parent_priv = alloc_priv(size, drv->flags); in device_probe()
447 if (!dev->parent_priv) { in device_probe()
453 ret = device_probe(dev->parent); in device_probe()
463 if (dev->flags & DM_FLAG_ACTIVATED) in device_probe()
467 seq = uclass_resolve_seq(dev); in device_probe()
472 dev->seq = seq; in device_probe()
474 dev->flags |= DM_FLAG_ACTIVATED; in device_probe()
482 if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) in device_probe()
483 pinctrl_select_state(dev, "default"); in device_probe()
485 ret = uclass_pre_probe_device(dev); in device_probe()
489 if (dev->parent && dev->parent->driver->child_pre_probe) { in device_probe()
490 ret = dev->parent->driver->child_pre_probe(dev); in device_probe()
495 if (drv->ofdata_to_platdata && dev_has_of_node(dev)) { in device_probe()
496 ret = drv->ofdata_to_platdata(dev); in device_probe()
502 ret = drv->probe(dev); in device_probe()
504 dev->flags &= ~DM_FLAG_ACTIVATED; in device_probe()
509 ret = uclass_post_probe_device(dev); in device_probe()
513 if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) { in device_probe()
514 pinctrl_select_state(dev, "init"); in device_probe()
515 pinctrl_select_state(dev, "default"); in device_probe()
520 if (device_remove(dev, DM_REMOVE_NORMAL)) { in device_probe()
522 __func__, dev->name); in device_probe()
525 dev->flags &= ~DM_FLAG_ACTIVATED; in device_probe()
527 dev->seq = -1; in device_probe()
528 device_free(dev); in device_probe()
533 void *dev_get_platdata(struct udevice *dev) in dev_get_platdata() argument
535 if (!dev) { in dev_get_platdata()
540 return dev->platdata; in dev_get_platdata()
543 void *dev_get_parent_platdata(struct udevice *dev) in dev_get_parent_platdata() argument
545 if (!dev) { in dev_get_parent_platdata()
550 return dev->parent_platdata; in dev_get_parent_platdata()
553 void *dev_get_uclass_platdata(struct udevice *dev) in dev_get_uclass_platdata() argument
555 if (!dev) { in dev_get_uclass_platdata()
560 return dev->uclass_platdata; in dev_get_uclass_platdata()
563 void *dev_get_priv(struct udevice *dev) in dev_get_priv() argument
565 if (!dev) { in dev_get_priv()
570 return dev->priv; in dev_get_priv()
573 void *dev_get_uclass_priv(struct udevice *dev) in dev_get_uclass_priv() argument
575 if (!dev) { in dev_get_uclass_priv()
580 return dev->uclass_priv; in dev_get_uclass_priv()
583 void *dev_get_parent_priv(struct udevice *dev) in dev_get_parent_priv() argument
585 if (!dev) { in dev_get_parent_priv()
590 return dev->parent_priv; in dev_get_parent_priv()
593 static int device_get_device_tail(struct udevice *dev, int ret, in device_get_device_tail() argument
599 ret = device_probe(dev); in device_get_device_tail()
603 *devp = dev; in device_get_device_tail()
610 struct udevice *dev; in device_get_child() local
612 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_get_child()
614 return device_get_device_tail(dev, 0, devp); in device_get_child()
623 struct udevice *dev; in device_find_child_by_seq() local
629 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_seq()
630 if ((find_req_seq ? dev->req_seq : dev->seq) == in device_find_child_by_seq()
632 *devp = dev; in device_find_child_by_seq()
643 struct udevice *dev; in device_get_child_by_seq() local
647 ret = device_find_child_by_seq(parent, seq, false, &dev); in device_get_child_by_seq()
653 ret = device_find_child_by_seq(parent, seq, true, &dev); in device_get_child_by_seq()
655 return device_get_device_tail(dev, ret, devp); in device_get_child_by_seq()
661 struct udevice *dev; in device_find_child_by_of_offset() local
665 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_of_offset()
666 if (dev_of_offset(dev) == of_offset) { in device_find_child_by_of_offset()
667 *devp = dev; in device_find_child_by_of_offset()
678 struct udevice *dev; in device_get_child_by_of_offset() local
682 ret = device_find_child_by_of_offset(parent, node, &dev); in device_get_child_by_of_offset()
683 return device_get_device_tail(dev, ret, devp); in device_get_child_by_of_offset()
689 struct udevice *dev, *found; in _device_find_global_by_of_offset() local
694 list_for_each_entry(dev, &parent->child_head, sibling_node) { in _device_find_global_by_of_offset()
695 found = _device_find_global_by_of_offset(dev, of_offset); in _device_find_global_by_of_offset()
705 struct udevice *dev; in device_get_global_by_of_offset() local
707 dev = _device_find_global_by_of_offset(gd->dm_root, of_offset); in device_get_global_by_of_offset()
708 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_global_by_of_offset()
725 struct udevice *dev = *devp; in device_find_next_child() local
726 struct udevice *parent = dev->parent; in device_find_next_child()
728 if (list_is_last(&dev->sibling_node, &parent->child_head)) { in device_find_next_child()
731 *devp = list_entry(dev->sibling_node.next, struct udevice, in device_find_next_child()
743 ulong dev_get_driver_data(struct udevice *dev) in dev_get_driver_data() argument
745 return dev->driver_data; in dev_get_driver_data()
748 const void *dev_get_driver_ops(struct udevice *dev) in dev_get_driver_ops() argument
750 if (!dev || !dev->driver->ops) in dev_get_driver_ops()
753 return dev->driver->ops; in dev_get_driver_ops()
756 enum uclass_id device_get_uclass_id(struct udevice *dev) in device_get_uclass_id() argument
758 return dev->uclass->uc_drv->id; in device_get_uclass_id()
761 const char *dev_get_uclass_name(struct udevice *dev) in dev_get_uclass_name() argument
763 if (!dev) in dev_get_uclass_name()
766 return dev->uclass->uc_drv->name; in dev_get_uclass_name()
769 bool device_has_children(struct udevice *dev) in device_has_children() argument
771 return !list_empty(&dev->child_head); in device_has_children()
774 bool device_has_active_children(struct udevice *dev) in device_has_active_children() argument
778 for (device_find_first_child(dev, &child); in device_has_active_children()
788 bool device_is_last_sibling(struct udevice *dev) in device_is_last_sibling() argument
790 struct udevice *parent = dev->parent; in device_is_last_sibling()
794 return list_is_last(&dev->sibling_node, &parent->child_head); in device_is_last_sibling()
797 void device_set_name_alloced(struct udevice *dev) in device_set_name_alloced() argument
799 dev->flags |= DM_FLAG_NAME_ALLOCED; in device_set_name_alloced()
802 int device_set_name(struct udevice *dev, const char *name) in device_set_name() argument
807 dev->name = name; in device_set_name()
808 device_set_name_alloced(dev); in device_set_name()
813 bool device_is_compatible(struct udevice *dev, const char *compat) in device_is_compatible() argument
816 ofnode node = dev_ofnode(dev); in device_is_compatible()