|author||Linus Torvalds <email@example.com>||2012-05-21 15:59:46 -0700|
|committer||Linus Torvalds <firstname.lastname@example.org>||2012-05-21 15:59:46 -0700|
Merge branch 'clkdev' of git://git.linaro.org/people/rmk/linux-arm
Pull clkdev updates from Russell King: "This supplements clkdev with a device-managed API, allowing drivers cleanup paths to be simplified. We also optimize clk_find() so that it exits as soon as it finds a perfect match, and we provide a way to minimise the amount of code platforms need to register clkdev entries. Some of the code in arm-soc depends on these changes." * 'clkdev' of git://git.linaro.org/people/rmk/linux-arm: CLKDEV: provide helpers for common clock framework ARM: 7392/1: CLKDEV: Optimize clk_find() ARM: 7376/1: clkdev: Implement managed clk_get()
Diffstat (limited to 'include')
2 files changed, 35 insertions, 0 deletions
diff --git a/include/linux/clk.h b/include/linux/clk.h
index b0252726df6..70cf722ac3a 100644
@@ -101,6 +101,26 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb);
struct clk *clk_get(struct device *dev, const char *id);
+ * devm_clk_get - lookup and obtain a managed reference to a clock producer.
+ * @dev: device for clock "consumer"
+ * @id: clock comsumer ID
+ * Returns a struct clk corresponding to the clock producer, or
+ * valid IS_ERR() condition containing errno. The implementation
+ * uses @dev and @id to determine the clock consumer, and thereby
+ * the clock producer. (IOW, @id may be identical strings, but
+ * clk_get may return different clock producers depending on @dev.)
+ * Drivers must assume that the clock source is not enabled.
+ * devm_clk_get should not be called from within interrupt context.
+ * The clock will automatically be freed when the device is unbound
+ * from the bus.
+struct clk *devm_clk_get(struct device *dev, const char *id);
* clk_prepare - prepare a clock source
* @clk: clock source
@@ -206,6 +226,18 @@ unsigned long clk_get_rate(struct clk *clk);
void clk_put(struct clk *clk);
+ * devm_clk_put - "free" a managed clock source
+ * @dev: device used to acuqire the clock
+ * @clk: clock source acquired with devm_clk_get()
+ * Note: drivers must ensure that all clk_enable calls made on this
+ * clock source are balanced by clk_disable calls prior to calling
+ * this function.
+ * clk_put should not be called from within interrupt context.
+void devm_clk_put(struct device *dev, struct clk *clk);
* The remaining APIs are optional for machine class support.
diff --git a/include/linux/clkdev.h b/include/linux/clkdev.h
index d9a4fd028c9..a6a6f603103 100644
@@ -40,4 +40,7 @@ void clkdev_drop(struct clk_lookup *cl);
void clkdev_add_table(struct clk_lookup *, size_t);
int clk_add_alias(const char *, const char *, char *, struct device *);
+int clk_register_clkdev(struct clk *, const char *, const char *, ...);
+int clk_register_clkdevs(struct clk *, struct clk_lookup *, size_t);