diff options
Diffstat (limited to 'drivers/reset/core.c')
| -rw-r--r-- | drivers/reset/core.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/reset/core.c b/drivers/reset/core.c index d1887c0ed5d3..9582efb70025 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c | |||
| @@ -795,3 +795,45 @@ devm_reset_control_array_get(struct device *dev, bool shared, bool optional) | |||
| 795 | return rstc; | 795 | return rstc; |
| 796 | } | 796 | } |
| 797 | EXPORT_SYMBOL_GPL(devm_reset_control_array_get); | 797 | EXPORT_SYMBOL_GPL(devm_reset_control_array_get); |
| 798 | |||
| 799 | static int reset_control_get_count_from_lookup(struct device *dev) | ||
| 800 | { | ||
| 801 | const struct reset_control_lookup *lookup; | ||
| 802 | const char *dev_id; | ||
| 803 | int count = 0; | ||
| 804 | |||
| 805 | if (!dev) | ||
| 806 | return -EINVAL; | ||
| 807 | |||
| 808 | dev_id = dev_name(dev); | ||
| 809 | mutex_lock(&reset_lookup_mutex); | ||
| 810 | |||
| 811 | list_for_each_entry(lookup, &reset_lookup_list, list) { | ||
| 812 | if (!strcmp(lookup->dev_id, dev_id)) | ||
| 813 | count++; | ||
| 814 | } | ||
| 815 | |||
| 816 | mutex_unlock(&reset_lookup_mutex); | ||
| 817 | |||
| 818 | if (count == 0) | ||
| 819 | count = -ENOENT; | ||
| 820 | |||
| 821 | return count; | ||
| 822 | } | ||
| 823 | |||
| 824 | /** | ||
| 825 | * reset_control_get_count - Count number of resets available with a device | ||
| 826 | * | ||
| 827 | * @dev: device for which to return the number of resets | ||
| 828 | * | ||
| 829 | * Returns positive reset count on success, or error number on failure and | ||
| 830 | * on count being zero. | ||
| 831 | */ | ||
| 832 | int reset_control_get_count(struct device *dev) | ||
| 833 | { | ||
| 834 | if (dev->of_node) | ||
| 835 | return of_reset_control_get_count(dev->of_node); | ||
| 836 | |||
| 837 | return reset_control_get_count_from_lookup(dev); | ||
| 838 | } | ||
| 839 | EXPORT_SYMBOL_GPL(reset_control_get_count); | ||
