-static void __device_links_supplier_sync_state(struct device *dev)
-{
- struct device_link *link;
-
- if (dev->state_synced)
- return;
-
- list_for_each_entry(link, &dev->links.consumers, s_node) {
- if (!(link->flags & DL_FLAG_MANAGED))
- continue;
- if (link->status != DL_STATE_ACTIVE)
- return;
- }
-
- if (dev->bus->sync_state)
- dev->bus->sync_state(dev);
- else if (dev->driver && dev->driver->sync_state)
- dev->driver->sync_state(dev);
-
- dev->state_synced = true;
-}
-
-void device_links_supplier_sync_state_pause(void)
-{
- device_links_write_lock();
- supplier_sync_state_disabled++;
- device_links_write_unlock();
-}
-
-void device_links_supplier_sync_state_resume(void)
-{
- struct device *dev, *tmp;
-
- device_links_write_lock();
- if (!supplier_sync_state_disabled) {
- WARN(true, "Unmatched sync_state pause/resume!");
- goto out;
- }
- supplier_sync_state_disabled--;
- if (supplier_sync_state_disabled)
- goto out;
-
- list_for_each_entry_safe(dev, tmp, &deferred_sync, links.defer_sync) {
- __device_links_supplier_sync_state(dev);
- list_del_init(&dev->links.defer_sync);
- }
-out:
- device_links_write_unlock();
-}
-
-static void __device_links_supplier_defer_sync(struct device *sup)
-{
- if (list_empty(&sup->links.defer_sync))
- list_add_tail(&sup->links.defer_sync, &deferred_sync);
-}
-