aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches/0163-clk-return-probe-defer-when-DT-clock-not-yet-ready.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ipq806x/patches/0163-clk-return-probe-defer-when-DT-clock-not-yet-ready.patch')
-rw-r--r--target/linux/ipq806x/patches/0163-clk-return-probe-defer-when-DT-clock-not-yet-ready.patch49
1 files changed, 49 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches/0163-clk-return-probe-defer-when-DT-clock-not-yet-ready.patch b/target/linux/ipq806x/patches/0163-clk-return-probe-defer-when-DT-clock-not-yet-ready.patch
new file mode 100644
index 0000000000..7ea69f331b
--- /dev/null
+++ b/target/linux/ipq806x/patches/0163-clk-return-probe-defer-when-DT-clock-not-yet-ready.patch
@@ -0,0 +1,49 @@
+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(-)
+
+diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
+index 0582068..a3facad 100644
+--- a/drivers/clk/clk.c
++++ b/drivers/clk/clk.c
+@@ -2502,7 +2502,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) {
+diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
+index 48f6721..a360b2e 100644
+--- a/drivers/clk/clkdev.c
++++ b/drivers/clk/clkdev.c
+@@ -167,6 +167,8 @@ struct clk *clk_get(struct device *dev, const char *con_id)
+ 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);
+--
+1.7.10.4
+