You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
Diff
43 lines
1.5 KiB
Diff
From 1ce8667062bc7b8813adf6103ad2374d9dd52fb0 Mon Sep 17 00:00:00 2001
|
|
From: Jean-Francois Moine <moinejf@free.fr>
|
|
Date: Mon, 25 Nov 2013 19:47:04 +0100
|
|
Subject: [PATCH 163/182] clk: return probe defer when DT clock not yet ready
|
|
|
|
At probe time, a clock device may not be ready when some other device
|
|
wants to use it.
|
|
|
|
This patch lets the functions clk_get/devm_clk_get return a probe defer
|
|
when the clock is defined in the DT but not yet available.
|
|
|
|
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
|
|
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
|
Tested-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
|
Signed-off-by: Mike Turquette <mturquette@linaro.org>
|
|
---
|
|
drivers/clk/clk.c | 2 +-
|
|
drivers/clk/clkdev.c | 2 ++
|
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/clk/clk.c
|
|
+++ b/drivers/clk/clk.c
|
|
@@ -2507,7 +2507,7 @@ EXPORT_SYMBOL_GPL(of_clk_del_provider);
|
|
struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec)
|
|
{
|
|
struct of_clk_provider *provider;
|
|
- struct clk *clk = ERR_PTR(-ENOENT);
|
|
+ struct clk *clk = ERR_PTR(-EPROBE_DEFER);
|
|
|
|
/* Check if we have such a provider in our array */
|
|
list_for_each_entry(provider, &of_clk_providers, link) {
|
|
--- a/drivers/clk/clkdev.c
|
|
+++ b/drivers/clk/clkdev.c
|
|
@@ -167,6 +167,8 @@ struct clk *clk_get(struct device *dev,
|
|
clk = of_clk_get_by_name(dev->of_node, con_id);
|
|
if (!IS_ERR(clk))
|
|
return clk;
|
|
+ if (PTR_ERR(clk) == -EPROBE_DEFER)
|
|
+ return clk;
|
|
}
|
|
|
|
return clk_get_sys(dev_id, con_id);
|