diff options
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r-- | drivers/clk/clk.c | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 024d78316b38..9872ec255f9a 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c | |||
@@ -2857,17 +2857,6 @@ static const struct of_device_id __clk_of_table_sentinel | |||
2857 | static LIST_HEAD(of_clk_providers); | 2857 | static LIST_HEAD(of_clk_providers); |
2858 | static DEFINE_MUTEX(of_clk_mutex); | 2858 | static DEFINE_MUTEX(of_clk_mutex); |
2859 | 2859 | ||
2860 | /* of_clk_provider list locking helpers */ | ||
2861 | void of_clk_lock(void) | ||
2862 | { | ||
2863 | mutex_lock(&of_clk_mutex); | ||
2864 | } | ||
2865 | |||
2866 | void of_clk_unlock(void) | ||
2867 | { | ||
2868 | mutex_unlock(&of_clk_mutex); | ||
2869 | } | ||
2870 | |||
2871 | struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, | 2860 | struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, |
2872 | void *data) | 2861 | void *data) |
2873 | { | 2862 | { |
@@ -2951,7 +2940,11 @@ struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec, | |||
2951 | struct of_clk_provider *provider; | 2940 | struct of_clk_provider *provider; |
2952 | struct clk *clk = ERR_PTR(-EPROBE_DEFER); | 2941 | struct clk *clk = ERR_PTR(-EPROBE_DEFER); |
2953 | 2942 | ||
2943 | if (!clkspec) | ||
2944 | return ERR_PTR(-EINVAL); | ||
2945 | |||
2954 | /* Check if we have such a provider in our array */ | 2946 | /* Check if we have such a provider in our array */ |
2947 | mutex_lock(&of_clk_mutex); | ||
2955 | list_for_each_entry(provider, &of_clk_providers, link) { | 2948 | list_for_each_entry(provider, &of_clk_providers, link) { |
2956 | if (provider->node == clkspec->np) | 2949 | if (provider->node == clkspec->np) |
2957 | clk = provider->get(clkspec, provider->data); | 2950 | clk = provider->get(clkspec, provider->data); |
@@ -2967,19 +2960,22 @@ struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec, | |||
2967 | break; | 2960 | break; |
2968 | } | 2961 | } |
2969 | } | 2962 | } |
2963 | mutex_unlock(&of_clk_mutex); | ||
2970 | 2964 | ||
2971 | return clk; | 2965 | return clk; |
2972 | } | 2966 | } |
2973 | 2967 | ||
2968 | /** | ||
2969 | * of_clk_get_from_provider() - Lookup a clock from a clock provider | ||
2970 | * @clkspec: pointer to a clock specifier data structure | ||
2971 | * | ||
2972 | * This function looks up a struct clk from the registered list of clock | ||
2973 | * providers, an input is a clock specifier data structure as returned | ||
2974 | * from the of_parse_phandle_with_args() function call. | ||
2975 | */ | ||
2974 | struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec) | 2976 | struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec) |
2975 | { | 2977 | { |
2976 | struct clk *clk; | 2978 | return __of_clk_get_from_provider(clkspec, NULL, __func__); |
2977 | |||
2978 | mutex_lock(&of_clk_mutex); | ||
2979 | clk = __of_clk_get_from_provider(clkspec, NULL, __func__); | ||
2980 | mutex_unlock(&of_clk_mutex); | ||
2981 | |||
2982 | return clk; | ||
2983 | } | 2979 | } |
2984 | 2980 | ||
2985 | int of_clk_get_parent_count(struct device_node *np) | 2981 | int of_clk_get_parent_count(struct device_node *np) |