aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clk/clk.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r--drivers/clk/clk.c32
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
2857static LIST_HEAD(of_clk_providers); 2857static LIST_HEAD(of_clk_providers);
2858static DEFINE_MUTEX(of_clk_mutex); 2858static DEFINE_MUTEX(of_clk_mutex);
2859 2859
2860/* of_clk_provider list locking helpers */
2861void of_clk_lock(void)
2862{
2863 mutex_lock(&of_clk_mutex);
2864}
2865
2866void of_clk_unlock(void)
2867{
2868 mutex_unlock(&of_clk_mutex);
2869}
2870
2871struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, 2860struct 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 */
2974struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec) 2976struct 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
2985int of_clk_get_parent_count(struct device_node *np) 2981int of_clk_get_parent_count(struct device_node *np)