diff options
author | Mark Brown <broonie@kernel.org> | 2018-08-10 12:31:24 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-08-10 12:31:24 -0400 |
commit | d22d59362b7b2c749245f1269d447011c76ca41d (patch) | |
tree | b3fc0673f62394dc5ed417eac6bad485a28baf25 /drivers/base/core.c | |
parent | a8afa92ec0d9312b23fd291aa8db95da266f2d5f (diff) | |
parent | 46fc033eba42f5a4fb583b2ab53f0a9918468452 (diff) |
Merge branch 'regulator-4.19' into regulator-next
Diffstat (limited to 'drivers/base/core.c')
-rw-r--r-- | drivers/base/core.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c index df3e1a44707a..2ab316d85651 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
@@ -372,6 +372,36 @@ void device_link_del(struct device_link *link) | |||
372 | } | 372 | } |
373 | EXPORT_SYMBOL_GPL(device_link_del); | 373 | EXPORT_SYMBOL_GPL(device_link_del); |
374 | 374 | ||
375 | /** | ||
376 | * device_link_remove - remove a link between two devices. | ||
377 | * @consumer: Consumer end of the link. | ||
378 | * @supplier: Supplier end of the link. | ||
379 | * | ||
380 | * The caller must ensure proper synchronization of this function with runtime | ||
381 | * PM. | ||
382 | */ | ||
383 | void device_link_remove(void *consumer, struct device *supplier) | ||
384 | { | ||
385 | struct device_link *link; | ||
386 | |||
387 | if (WARN_ON(consumer == supplier)) | ||
388 | return; | ||
389 | |||
390 | device_links_write_lock(); | ||
391 | device_pm_lock(); | ||
392 | |||
393 | list_for_each_entry(link, &supplier->links.consumers, s_node) { | ||
394 | if (link->consumer == consumer) { | ||
395 | kref_put(&link->kref, __device_link_del); | ||
396 | break; | ||
397 | } | ||
398 | } | ||
399 | |||
400 | device_pm_unlock(); | ||
401 | device_links_write_unlock(); | ||
402 | } | ||
403 | EXPORT_SYMBOL_GPL(device_link_remove); | ||
404 | |||
375 | static void device_links_missing_supplier(struct device *dev) | 405 | static void device_links_missing_supplier(struct device *dev) |
376 | { | 406 | { |
377 | struct device_link *link; | 407 | struct device_link *link; |