diff options
author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2013-08-30 13:02:40 +0200 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-11-18 11:44:25 +0900 |
commit | 5a283447e07161a639c97463a40c903b454cbf80 (patch) | |
tree | b76cd5342d4707f15f6ad60322e07c6adf5788b7 /drivers/clk | |
parent | 5f01e52facffd1040bf796d98244970f1a211887 (diff) | |
download | linux-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.c | 20 |
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 ***/ /** |