Lines Matching refs:dev

38 	struct udevice *dev;  in device_bind_common()  local
53 dev = calloc(1, sizeof(struct udevice)); in device_bind_common()
54 if (!dev) in device_bind_common()
57 INIT_LIST_HEAD(&dev->sibling_node); in device_bind_common()
58 INIT_LIST_HEAD(&dev->child_head); in device_bind_common()
59 INIT_LIST_HEAD(&dev->uclass_node); in device_bind_common()
61 INIT_LIST_HEAD(&dev->devres_head); in device_bind_common()
63 dev->platdata = platdata; in device_bind_common()
64 dev->driver_data = driver_data; in device_bind_common()
65 dev->name = name; in device_bind_common()
66 dev->node = node; in device_bind_common()
67 dev->parent = parent; in device_bind_common()
68 dev->driver = drv; in device_bind_common()
69 dev->uclass = uc; in device_bind_common()
71 dev->seq = -1; in device_bind_common()
72 dev->req_seq = -1; in device_bind_common()
84 dev_read_alias_seq(dev, &dev->req_seq); in device_bind_common()
86 dev->req_seq = uclass_find_next_free_req_seq(drv->id); in device_bind_common()
95 dev->flags |= DM_FLAG_OF_PLATDATA; in device_bind_common()
102 dev->flags |= DM_FLAG_ALLOC_PDATA; in device_bind_common()
103 dev->platdata = calloc(1, in device_bind_common()
105 if (!dev->platdata) { in device_bind_common()
110 memcpy(dev->platdata, platdata, in device_bind_common()
118 dev->flags |= DM_FLAG_ALLOC_UCLASS_PDATA; in device_bind_common()
119 dev->uclass_platdata = calloc(1, size); in device_bind_common()
120 if (!dev->uclass_platdata) { in device_bind_common()
133 dev->flags |= DM_FLAG_ALLOC_PARENT_PDATA; in device_bind_common()
134 dev->parent_platdata = calloc(1, size); in device_bind_common()
135 if (!dev->parent_platdata) { in device_bind_common()
144 list_add_tail(&dev->sibling_node, &parent->child_head); in device_bind_common()
146 ret = uclass_bind_device(dev); in device_bind_common()
152 ret = drv->bind(dev); in device_bind_common()
157 ret = parent->driver->child_post_bind(dev); in device_bind_common()
162 ret = uc->uc_drv->post_bind(dev); in device_bind_common()
168 pr_debug("Bound device %s to %s\n", dev->name, parent->name); in device_bind_common()
170 *devp = dev; in device_bind_common()
172 dev->flags |= DM_FLAG_BOUND; in device_bind_common()
180 if (drv->unbind && drv->unbind(dev)) { in device_bind_common()
182 dev->name); in device_bind_common()
188 if (uclass_unbind_device(dev)) { in device_bind_common()
190 dev->name); in device_bind_common()
195 list_del(&dev->sibling_node); in device_bind_common()
196 if (dev->flags & DM_FLAG_ALLOC_PARENT_PDATA) { in device_bind_common()
197 free(dev->parent_platdata); in device_bind_common()
198 dev->parent_platdata = NULL; in device_bind_common()
202 if (dev->flags & DM_FLAG_ALLOC_UCLASS_PDATA) { in device_bind_common()
203 free(dev->uclass_platdata); in device_bind_common()
204 dev->uclass_platdata = NULL; in device_bind_common()
207 if (dev->flags & DM_FLAG_ALLOC_PDATA) { in device_bind_common()
208 free(dev->platdata); in device_bind_common()
209 dev->platdata = NULL; in device_bind_common()
212 devres_release_all(dev); in device_bind_common()
214 free(dev); in device_bind_common()
308 int device_probe(struct udevice *dev) in device_probe() argument
316 if (!dev) in device_probe()
319 if (dev->flags & DM_FLAG_ACTIVATED) in device_probe()
322 drv = dev->driver; in device_probe()
326 if (drv->priv_auto_alloc_size && !dev->priv) { in device_probe()
327 dev->priv = alloc_priv(drv->priv_auto_alloc_size, drv->flags); in device_probe()
328 if (!dev->priv) { in device_probe()
334 size = dev->uclass->uc_drv->per_device_auto_alloc_size; in device_probe()
335 if (size && !dev->uclass_priv) { in device_probe()
336 dev->uclass_priv = alloc_priv(size, in device_probe()
337 dev->uclass->uc_drv->flags); in device_probe()
338 if (!dev->uclass_priv) { in device_probe()
345 if (dev->parent) { in device_probe()
346 size = dev->parent->driver->per_child_auto_alloc_size; in device_probe()
348 size = dev->parent->uclass->uc_drv-> in device_probe()
351 if (size && !dev->parent_priv) { in device_probe()
352 dev->parent_priv = alloc_priv(size, drv->flags); in device_probe()
353 if (!dev->parent_priv) { in device_probe()
359 ret = device_probe(dev->parent); in device_probe()
369 if (dev->flags & DM_FLAG_ACTIVATED) in device_probe()
373 seq = uclass_resolve_seq(dev); in device_probe()
378 dev->seq = seq; in device_probe()
380 dev->flags |= DM_FLAG_ACTIVATED; in device_probe()
388 if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) in device_probe()
389 pinctrl_select_state(dev, "default"); in device_probe()
391 if (dev->parent && device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) { in device_probe()
392 if (!power_domain_get(dev, &pd)) in device_probe()
396 ret = uclass_pre_probe_device(dev); in device_probe()
400 if (dev->parent && dev->parent->driver->child_pre_probe) { in device_probe()
401 ret = dev->parent->driver->child_pre_probe(dev); in device_probe()
406 if (drv->ofdata_to_platdata && dev_has_of_node(dev)) { in device_probe()
407 ret = drv->ofdata_to_platdata(dev); in device_probe()
413 ret = clk_set_defaults(dev); in device_probe()
418 ret = drv->probe(dev); in device_probe()
420 dev->flags &= ~DM_FLAG_ACTIVATED; in device_probe()
425 ret = uclass_post_probe_device(dev); in device_probe()
429 if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) in device_probe()
430 pinctrl_select_state(dev, "default"); in device_probe()
434 if (device_remove(dev, DM_REMOVE_NORMAL)) { in device_probe()
436 __func__, dev->name); in device_probe()
439 dev->flags &= ~DM_FLAG_ACTIVATED; in device_probe()
441 dev->seq = -1; in device_probe()
442 device_free(dev); in device_probe()
447 void *dev_get_platdata(const struct udevice *dev) in dev_get_platdata() argument
449 if (!dev) { in dev_get_platdata()
454 return dev->platdata; in dev_get_platdata()
457 void *dev_get_parent_platdata(const struct udevice *dev) in dev_get_parent_platdata() argument
459 if (!dev) { in dev_get_parent_platdata()
464 return dev->parent_platdata; in dev_get_parent_platdata()
467 void *dev_get_uclass_platdata(const struct udevice *dev) in dev_get_uclass_platdata() argument
469 if (!dev) { in dev_get_uclass_platdata()
474 return dev->uclass_platdata; in dev_get_uclass_platdata()
477 void *dev_get_priv(const struct udevice *dev) in dev_get_priv() argument
479 if (!dev) { in dev_get_priv()
484 return dev->priv; in dev_get_priv()
487 void *dev_get_uclass_priv(const struct udevice *dev) in dev_get_uclass_priv() argument
489 if (!dev) { in dev_get_uclass_priv()
494 return dev->uclass_priv; in dev_get_uclass_priv()
497 void *dev_get_parent_priv(const struct udevice *dev) in dev_get_parent_priv() argument
499 if (!dev) { in dev_get_parent_priv()
504 return dev->parent_priv; in dev_get_parent_priv()
507 static int device_get_device_tail(struct udevice *dev, int ret, in device_get_device_tail() argument
513 ret = device_probe(dev); in device_get_device_tail()
517 *devp = dev; in device_get_device_tail()
534 struct udevice *dev; in device_find_by_ofnode() local
539 &dev); in device_find_by_ofnode()
540 if (!ret || dev) { in device_find_by_ofnode()
541 *devp = dev; in device_find_by_ofnode()
551 struct udevice *dev; in device_get_child() local
553 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_get_child()
555 return device_get_device_tail(dev, 0, devp); in device_get_child()
564 struct udevice *dev; in device_find_child_by_seq() local
570 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_seq()
571 if ((find_req_seq ? dev->req_seq : dev->seq) == in device_find_child_by_seq()
573 *devp = dev; in device_find_child_by_seq()
584 struct udevice *dev; in device_get_child_by_seq() local
588 ret = device_find_child_by_seq(parent, seq, false, &dev); in device_get_child_by_seq()
594 ret = device_find_child_by_seq(parent, seq, true, &dev); in device_get_child_by_seq()
596 return device_get_device_tail(dev, ret, devp); in device_get_child_by_seq()
602 struct udevice *dev; in device_find_child_by_of_offset() local
606 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_of_offset()
607 if (dev_of_offset(dev) == of_offset) { in device_find_child_by_of_offset()
608 *devp = dev; in device_find_child_by_of_offset()
619 struct udevice *dev; in device_get_child_by_of_offset() local
623 ret = device_find_child_by_of_offset(parent, node, &dev); in device_get_child_by_of_offset()
624 return device_get_device_tail(dev, ret, devp); in device_get_child_by_of_offset()
630 struct udevice *dev, *found; in _device_find_global_by_ofnode() local
635 list_for_each_entry(dev, &parent->child_head, sibling_node) { in _device_find_global_by_ofnode()
636 found = _device_find_global_by_ofnode(dev, ofnode); in _device_find_global_by_ofnode()
653 struct udevice *dev; in device_get_global_by_ofnode() local
655 dev = _device_find_global_by_ofnode(gd->dm_root, ofnode); in device_get_global_by_ofnode()
656 return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); in device_get_global_by_ofnode()
673 struct udevice *dev = *devp; in device_find_next_child() local
674 struct udevice *parent = dev->parent; in device_find_next_child()
676 if (list_is_last(&dev->sibling_node, &parent->child_head)) { in device_find_next_child()
679 *devp = list_entry(dev->sibling_node.next, struct udevice, in device_find_next_child()
690 struct udevice *dev; in device_find_first_inactive_child() local
693 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_first_inactive_child()
694 if (!device_active(dev) && in device_find_first_inactive_child()
695 device_get_uclass_id(dev) == uclass_id) { in device_find_first_inactive_child()
696 *devp = dev; in device_find_first_inactive_child()
708 struct udevice *dev; in device_find_first_child_by_uclass() local
711 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_first_child_by_uclass()
712 if (device_get_uclass_id(dev) == uclass_id) { in device_find_first_child_by_uclass()
713 *devp = dev; in device_find_first_child_by_uclass()
724 struct udevice *dev; in device_find_child_by_name() local
728 list_for_each_entry(dev, &parent->child_head, sibling_node) { in device_find_child_by_name()
729 if (!strcmp(dev->name, name)) { in device_find_child_by_name()
730 *devp = dev; in device_find_child_by_name()
743 ulong dev_get_driver_data(const 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(const 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(const 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(const 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(const 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
815 return ofnode_device_is_compatible(dev_ofnode(dev), compat); in device_is_compatible()
829 struct udevice *dev; in dev_disable_by_path() local
836 ret = uclass_find_device_by_ofnode(uc->uc_drv->id, node, &dev); in dev_disable_by_path()
844 ret = device_remove(dev, DM_REMOVE_NORMAL); in dev_disable_by_path()
848 ret = device_unbind(dev); in dev_disable_by_path()