summaryrefslogtreecommitdiff
path: root/drivers/clk
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2013-08-30 13:02:40 +0200
committerChanho Park <chanho61.park@samsung.com>2014-11-18 11:44:25 +0900
commit5a283447e07161a639c97463a40c903b454cbf80 (patch)
treeb76cd5342d4707f15f6ad60322e07c6adf5788b7 /drivers/clk
parent5f01e52facffd1040bf796d98244970f1a211887 (diff)
downloadlinux-3.10-5a283447e07161a639c97463a40c903b454cbf80.tar.gz
linux-3.10-5a283447e07161a639c97463a40c903b454cbf80.tar.bz2
linux-3.10-5a283447e07161a639c97463a40c903b454cbf80.zip
clk: Add common __clk_get(), __clk_put() implementations
This patch adds common __clk_get(), __clk_put() clkdev helpers which replace their platform specific counterparts when the common clock API is enabled. The owner module pointer field is added to struct clk so a reference to the clock supplier module can be taken by the clock consumers. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- Changes since v5: - none. Changes since v4: - dropped unnecessary struct module forward declaration from clk-provider.h Changes since v3: - dropped exporting of __clk_get(), __clk_put(). Changes since v2: - fixed handling of NULL clock pointers in __clk_get(), __clk_put();
Diffstat (limited to 'drivers/clk')
-rw-r--r--drivers/clk/clk.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 8f56e3d80a3..05a60cf6e27 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1857,6 +1857,26 @@ void devm_clk_unregister(struct device *dev, struct clk *clk)
}
EXPORT_SYMBOL_GPL(devm_clk_unregister);
+/*
+ * clkdev helpers
+ */
+int __clk_get(struct clk *clk)
+{
+ if (clk && !try_module_get(clk->owner))
+ return 0;
+
+ return 1;
+}
+
+void __clk_put(struct clk *clk)
+{
+ if (WARN_ON_ONCE(IS_ERR(clk)))
+ return;
+
+ if (clk)
+ module_put(clk->owner);
+}
+
/*** clk rate change notifiers ***/
/**