Lines Matching refs:dev
62 struct device *dev; in deferred_probe_work_func() local
79 typeof(*dev->p), deferred_probe); in deferred_probe_work_func()
80 dev = private->device; in deferred_probe_work_func()
83 get_device(dev); in deferred_probe_work_func()
98 device_pm_move_last(dev); in deferred_probe_work_func()
101 dev_dbg(dev, "Retrying from deferred list\n"); in deferred_probe_work_func()
102 bus_probe_device(dev); in deferred_probe_work_func()
106 put_device(dev); in deferred_probe_work_func()
112 static void driver_deferred_probe_add(struct device *dev) in driver_deferred_probe_add() argument
115 if (list_empty(&dev->p->deferred_probe)) { in driver_deferred_probe_add()
116 dev_dbg(dev, "Added to deferred list\n"); in driver_deferred_probe_add()
117 list_add_tail(&dev->p->deferred_probe, &deferred_probe_pending_list); in driver_deferred_probe_add()
122 void driver_deferred_probe_del(struct device *dev) in driver_deferred_probe_del() argument
125 if (!list_empty(&dev->p->deferred_probe)) { in driver_deferred_probe_del()
126 dev_dbg(dev, "Removed from deferred list\n"); in driver_deferred_probe_del()
127 list_del_init(&dev->p->deferred_probe); in driver_deferred_probe_del()
195 static void driver_bound(struct device *dev) in driver_bound() argument
197 if (klist_node_attached(&dev->p->knode_driver)) { in driver_bound()
199 __func__, kobject_name(&dev->kobj)); in driver_bound()
203 pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->driver->name, in driver_bound()
204 __func__, dev_name(dev)); in driver_bound()
206 klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices); in driver_bound()
212 driver_deferred_probe_del(dev); in driver_bound()
215 if (dev->bus) in driver_bound()
216 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, in driver_bound()
217 BUS_NOTIFY_BOUND_DRIVER, dev); in driver_bound()
220 static int driver_sysfs_add(struct device *dev) in driver_sysfs_add() argument
224 if (dev->bus) in driver_sysfs_add()
225 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, in driver_sysfs_add()
226 BUS_NOTIFY_BIND_DRIVER, dev); in driver_sysfs_add()
228 ret = sysfs_create_link(&dev->driver->p->kobj, &dev->kobj, in driver_sysfs_add()
229 kobject_name(&dev->kobj)); in driver_sysfs_add()
231 ret = sysfs_create_link(&dev->kobj, &dev->driver->p->kobj, in driver_sysfs_add()
234 sysfs_remove_link(&dev->driver->p->kobj, in driver_sysfs_add()
235 kobject_name(&dev->kobj)); in driver_sysfs_add()
240 static void driver_sysfs_remove(struct device *dev) in driver_sysfs_remove() argument
242 struct device_driver *drv = dev->driver; in driver_sysfs_remove()
245 sysfs_remove_link(&drv->p->kobj, kobject_name(&dev->kobj)); in driver_sysfs_remove()
246 sysfs_remove_link(&dev->kobj, "driver"); in driver_sysfs_remove()
264 int device_bind_driver(struct device *dev) in device_bind_driver() argument
268 ret = driver_sysfs_add(dev); in device_bind_driver()
270 driver_bound(dev); in device_bind_driver()
278 static int really_probe(struct device *dev, struct device_driver *drv) in really_probe() argument
285 drv->bus->name, __func__, drv->name, dev_name(dev)); in really_probe()
286 WARN_ON(!list_empty(&dev->devres_head)); in really_probe()
288 dev->driver = drv; in really_probe()
291 ret = pinctrl_bind_pins(dev); in really_probe()
295 if (driver_sysfs_add(dev)) { in really_probe()
297 __func__, dev_name(dev)); in really_probe()
301 if (dev->pm_domain && dev->pm_domain->activate) { in really_probe()
302 ret = dev->pm_domain->activate(dev); in really_probe()
307 if (dev->bus->probe) { in really_probe()
308 ret = dev->bus->probe(dev); in really_probe()
312 ret = drv->probe(dev); in really_probe()
317 if (dev->pm_domain && dev->pm_domain->sync) in really_probe()
318 dev->pm_domain->sync(dev); in really_probe()
320 driver_bound(dev); in really_probe()
323 drv->bus->name, __func__, dev_name(dev), drv->name); in really_probe()
327 devres_release_all(dev); in really_probe()
328 driver_sysfs_remove(dev); in really_probe()
329 dev->driver = NULL; in really_probe()
330 dev_set_drvdata(dev, NULL); in really_probe()
331 if (dev->pm_domain && dev->pm_domain->dismiss) in really_probe()
332 dev->pm_domain->dismiss(dev); in really_probe()
337 dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name); in really_probe()
338 driver_deferred_probe_add(dev); in really_probe()
346 drv->name, dev_name(dev), ret); in really_probe()
352 drv->name, dev_name(dev), ret); in really_probe()
403 int driver_probe_device(struct device_driver *drv, struct device *dev) in driver_probe_device() argument
407 if (!device_is_registered(dev)) in driver_probe_device()
411 drv->bus->name, __func__, dev_name(dev), drv->name); in driver_probe_device()
413 pm_runtime_barrier(dev); in driver_probe_device()
414 ret = really_probe(dev, drv); in driver_probe_device()
415 pm_request_idle(dev); in driver_probe_device()
422 struct device *dev = data; in __device_attach() local
424 if (!driver_match_device(drv, dev)) in __device_attach()
427 return driver_probe_device(drv, dev); in __device_attach()
444 int device_attach(struct device *dev) in device_attach() argument
448 device_lock(dev); in device_attach()
449 if (dev->driver) { in device_attach()
450 if (klist_node_attached(&dev->p->knode_driver)) { in device_attach()
454 ret = device_bind_driver(dev); in device_attach()
458 dev->driver = NULL; in device_attach()
462 ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach); in device_attach()
463 pm_request_idle(dev); in device_attach()
466 device_unlock(dev); in device_attach()
471 static int __driver_attach(struct device *dev, void *data) in __driver_attach() argument
485 if (!driver_match_device(drv, dev)) in __driver_attach()
488 if (dev->parent) /* Needed for USB */ in __driver_attach()
489 device_lock(dev->parent); in __driver_attach()
490 device_lock(dev); in __driver_attach()
491 if (!dev->driver) in __driver_attach()
492 driver_probe_device(drv, dev); in __driver_attach()
493 device_unlock(dev); in __driver_attach()
494 if (dev->parent) in __driver_attach()
495 device_unlock(dev->parent); in __driver_attach()
519 static void __device_release_driver(struct device *dev) in __device_release_driver() argument
523 drv = dev->driver; in __device_release_driver()
525 pm_runtime_get_sync(dev); in __device_release_driver()
527 driver_sysfs_remove(dev); in __device_release_driver()
529 if (dev->bus) in __device_release_driver()
530 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, in __device_release_driver()
532 dev); in __device_release_driver()
534 pm_runtime_put_sync(dev); in __device_release_driver()
536 if (dev->bus && dev->bus->remove) in __device_release_driver()
537 dev->bus->remove(dev); in __device_release_driver()
539 drv->remove(dev); in __device_release_driver()
540 devres_release_all(dev); in __device_release_driver()
541 dev->driver = NULL; in __device_release_driver()
542 dev_set_drvdata(dev, NULL); in __device_release_driver()
543 if (dev->pm_domain && dev->pm_domain->dismiss) in __device_release_driver()
544 dev->pm_domain->dismiss(dev); in __device_release_driver()
546 klist_remove(&dev->p->knode_driver); in __device_release_driver()
547 if (dev->bus) in __device_release_driver()
548 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, in __device_release_driver()
550 dev); in __device_release_driver()
562 void device_release_driver(struct device *dev) in device_release_driver() argument
569 device_lock(dev); in device_release_driver()
570 __device_release_driver(dev); in device_release_driver()
571 device_unlock(dev); in device_release_driver()
582 struct device *dev; in driver_detach() local
593 dev = dev_prv->device; in driver_detach()
594 get_device(dev); in driver_detach()
597 if (dev->parent) /* Needed for USB */ in driver_detach()
598 device_lock(dev->parent); in driver_detach()
599 device_lock(dev); in driver_detach()
600 if (dev->driver == drv) in driver_detach()
601 __device_release_driver(dev); in driver_detach()
602 device_unlock(dev); in driver_detach()
603 if (dev->parent) in driver_detach()
604 device_unlock(dev->parent); in driver_detach()
605 put_device(dev); in driver_detach()