Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f05e28f authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mike Turquette
Browse files

clk: Add of_clk_get_by_clkspec() helper



This patch adds of_clk_get_by_clkspec() helper function, which does only
a struct clk lookup from the clock providers. It is used in the subsequent
patch where parsing of a clock from device tree and the lookup from
providers needed to be split.

Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent 222cb1bf
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -10,6 +10,7 @@
 */
 */


#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
struct clk *of_clk_get_by_clkspec(struct of_phandle_args *clkspec);
struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec);
struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec);
void of_clk_lock(void);
void of_clk_lock(void);
void of_clk_unlock(void);
void of_clk_unlock(void);
+27 −7
Original line number Original line Diff line number Diff line
@@ -27,6 +27,32 @@ static LIST_HEAD(clocks);
static DEFINE_MUTEX(clocks_mutex);
static DEFINE_MUTEX(clocks_mutex);


#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)

/**
 * of_clk_get_by_clkspec() - Lookup a clock form a clock provider
 * @clkspec: pointer to a clock specifier data structure
 *
 * This function looks up a struct clk from the registered list of clock
 * providers, an input is a clock specifier data structure as returned
 * from the of_parse_phandle_with_args() function call.
 */
struct clk *of_clk_get_by_clkspec(struct of_phandle_args *clkspec)
{
	struct clk *clk;

	if (!clkspec)
		return ERR_PTR(-EINVAL);

	of_clk_lock();
	clk = __of_clk_get_from_provider(clkspec);

	if (!IS_ERR(clk) && !__clk_get(clk))
		clk = ERR_PTR(-ENOENT);

	of_clk_unlock();
	return clk;
}

struct clk *of_clk_get(struct device_node *np, int index)
struct clk *of_clk_get(struct device_node *np, int index)
{
{
	struct of_phandle_args clkspec;
	struct of_phandle_args clkspec;
@@ -41,13 +67,7 @@ struct clk *of_clk_get(struct device_node *np, int index)
	if (rc)
	if (rc)
		return ERR_PTR(rc);
		return ERR_PTR(rc);


	of_clk_lock();
	clk = of_clk_get_by_clkspec(&clkspec);
	clk = __of_clk_get_from_provider(&clkspec);

	if (!IS_ERR(clk) && !__clk_get(clk))
		clk = ERR_PTR(-ENOENT);

	of_clk_unlock();
	of_node_put(clkspec.np);
	of_node_put(clkspec.np);
	return clk;
	return clk;
}
}