Thread (7 messages) 7 messages, 3 authors, 2015-06-16

[PATCH v3 1/3] clk: Add regmap support

From: matthias.bgg@gmail.com (Matthias Brugger)
Date: 2015-06-16 14:13:24
Also in: linux-clk, linux-mediatek, lkml

2015-06-16 12:23 GMT+02:00 Joachim  Eastwood [off-list ref]:
On 9 June 2015 at 17:38, Matthias Brugger [off-list ref] wrote:
quoted
Some devices like SoCs from Mediatek need to use the clock
through a regmap interface.
This patch adds regmap support for the simple multiplexer clock,
the divider clock and the clock gate code.

Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
---
 drivers/clk/Makefile         |   1 +
 drivers/clk/clk-divider.c    |  71 ++++++++++++++++++++------
 drivers/clk/clk-gate.c       |  60 +++++++++++++++++-----
 drivers/clk/clk-io.c         |  62 +++++++++++++++++++++++
 drivers/clk/clk-io.h         |  13 +++++
 drivers/clk/clk-mux.c        |  94 +++++++++++++++++++++++++++++------
 include/linux/clk-provider.h | 115 +++++++++++++++++++++++++++++++++++++++++--
 7 files changed, 373 insertions(+), 43 deletions(-)
 create mode 100644 drivers/clk/clk-io.c
 create mode 100644 drivers/clk/clk-io.h
[...]
quoted
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 2e5df06..22acfd5 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -14,6 +14,7 @@
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/of.h>
+#include <linux/regmap.h>

 #ifdef CONFIG_COMMON_CLK
@@ -31,6 +32,7 @@
 #define CLK_GET_RATE_NOCACHE   BIT(6) /* do not use the cached clk rate */
 #define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */
 #define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */
+#define CLK_USE_REGMAP BIT(9) /* clock uses regmap to access its registers */

 struct clk_hw;
 struct clk_core;
@@ -271,6 +273,8 @@ void of_fixed_clk_setup(struct device_node *np);
  *
  * @hw:                handle between common and hardware-specific interfaces
  * @reg:       register controlling gate
+ * @regmap:    regmap used to control the gate
+ * @offset:    offset inside the regmap
  * @bit_idx:   single bit controlling gate
  * @flags:     hardware-specific flags
  * @lock:      register lock
@@ -288,7 +292,11 @@ void of_fixed_clk_setup(struct device_node *np);
  */
 struct clk_gate {
        struct clk_hw hw;
-       void __iomem    *reg;
+       union {
+               void __iomem    *reg;
+               struct regmap   *regmap;
+       };
+       u32             offset;
Maybe using a named union here would be nice here. Something like:
union clk_io {
               void __iomem    *reg;
               struct regmap   *regmap;
};

And you could use this in the clk_gate, clk_mux, and clk_div
structures as well as your clk_io_* functions.
Having both void __iomem *reg and struct regmap *regmap as function
parameters seems a bit awkward to me.

Or maybe even as a structure:
struct clk_io {
               union {
                              void __iomem    *reg;
                              struct regmap   *regmap;
               };
               u32 offset;
}

What do you think?
The problem with this approach is, that I would have to change all
clocks which use clk_mux, clk_gate or clk_divider.
Up to now, i tried to find a solution which does not change the
existing interface.
So I would pretty much prefer to hear the opinion from the clk
maintainers first before starting the crusade. :)

Thanks,
Matthias

-- 
motzblog.wordpress.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help