devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] clk: sunxi: Extend the simple gates and handle the Allwinner H3
@ 2015-12-06  9:04 Jean-Francois Moine
       [not found] ` <20151206100412.1a74b71da8e9ca28c6e61589-GANU6spQydw@public.gmane.org>
  0 siblings, 1 reply; 5+ messages in thread
From: Jean-Francois Moine @ 2015-12-06  9:04 UTC (permalink / raw)
  To: Maxime Ripard, Chen-Yu Tsai, Rob Herring, Michael Turquette,
	Stephen Boyd, Linus Walleij
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, Vishnu Patekar,
	Emilio López, Reinder de Haan,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Hans de Goede,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Jens Kuske,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

The H3 has a clock gate definition similar to the other Allwinner SoCs,
but with a different parent clock for each single gate.

Adding the names of the parent clocks in both the source and output clocks
permits the use of the simple-gates driver to define the bus gates
of all known Allwinner SoCs.

Signed-off-by: Jean-Francois Moine <moinejf-GANU6spQydw@public.gmane.org>
---
This patch replaces a part of Jens Kuske's patch
	[PATCH v5 1/4] clk: sunxi: Add H3 clocks support
---
 Documentation/devicetree/bindings/clock/sunxi.txt | 25 +++++++++++++++++++++++
 drivers/clk/sunxi/clk-simple-gates.c              | 14 ++++++++++++-
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt
index 8a47b77..5736e6d 100644
--- a/Documentation/devicetree/bindings/clock/sunxi.txt
+++ b/Documentation/devicetree/bindings/clock/sunxi.txt
@@ -70,6 +70,7 @@ Required properties:
 	"allwinner,sun8i-a23-usb-clk" - for usb gates + resets on A23
 	"allwinner,sun9i-a80-usb-mod-clk" - for usb gates + resets on A80
 	"allwinner,sun9i-a80-usb-phy-clk" - for usb phy gates + resets on A80
+	"allwinner,sunxi-gates-clk" - simple gates
 
 Required properties for all clocks:
 - reg : shall be the control register address for the clock.
@@ -93,6 +94,12 @@ The "allwinner,sun9i-a80-mmc-config-clk" clock also requires:
 - #reset-cells : shall be set to 1
 - resets : shall be the reset control phandle for the mmc block.
 
+The "allwinner,sunxi-gates-clk" clock also requires:
+- clock-names : corresponding names of the parent clocks
+when the output clocks have different parents.
+These names must be 4 characters long and must appear as a prefix in
+the names of the output clocks. See example.
+
 For "allwinner,sun7i-a20-gmac-clk", the parent clocks shall be fixed rate
 dummy clocks at 25 MHz and 125 MHz, respectively. See example.
 
@@ -203,3 +210,21 @@ mmc_config_clk: clk@01c13000 {
 	clock-output-names = "mmc0_config", "mmc1_config",
 			     "mmc2_config", "mmc3_config";
 };
+
+bus_gates: clk@01c20060 {
+	compatible = "allwinner,sunxi-gates-clk";
+	reg = <0x01c20060 0x14>;
+	clocks = <&ahb1>, <&ahb2>;
+	clock-names = "ahb1", "ahb2";
+	clock-indices = <5>, <6>, <8>,
+			<17>, <18>,
+			<26>, <27>,
+			<28>, <29>,
+			<128>, <135>;
+	clock-output-names = "ahb1_ce", "ahb1_dma", "ahb1_mmc0",
+			     "ahb2_emac", "ahb1_ts",
+			     "ahb1_ehci2", "ahb1_ehci3",
+			     "ahb1_otg_ohci0", "ahb2_ohci1",
+			     "ahb1_ephy", "ahb1_dbg";
+	};
+};
diff --git a/drivers/clk/sunxi/clk-simple-gates.c b/drivers/clk/sunxi/clk-simple-gates.c
index 0214c65..81c4cb0 100644
--- a/drivers/clk/sunxi/clk-simple-gates.c
+++ b/drivers/clk/sunxi/clk-simple-gates.c
@@ -29,12 +29,14 @@ static void __init sunxi_simple_gates_setup(struct device_node *node,
 {
 	struct clk_onecell_data *clk_data;
 	const char *clk_parent, *clk_name;
+	char dyn_clk_parent[8];
 	struct property *prop;
 	struct resource res;
 	void __iomem *clk_reg;
 	void __iomem *reg;
 	const __be32 *p;
 	int number, i = 0, j;
+	bool parent_per_gate;
 	u8 clk_bit;
 	u32 index;
 
@@ -42,7 +44,13 @@ static void __init sunxi_simple_gates_setup(struct device_node *node,
 	if (IS_ERR(reg))
 		return;
 
-	clk_parent = of_clk_get_parent_name(node, 0);
+	parent_per_gate = of_clk_get_parent_count(node) != 1;
+	if (parent_per_gate) {
+		clk_parent = dyn_clk_parent;
+		dyn_clk_parent[4] = '\0';
+	} else {
+		clk_parent = of_clk_get_parent_name(node, 0);
+	}
 
 	clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL);
 	if (!clk_data)
@@ -58,6 +66,8 @@ static void __init sunxi_simple_gates_setup(struct device_node *node,
 	of_property_for_each_u32(node, "clock-indices", prop, p, index) {
 		of_property_read_string_index(node, "clock-output-names",
 					      i, &clk_name);
+		if (parent_per_gate)
+			strncpy(dyn_clk_parent, clk_name, 4);
 
 		clk_reg = reg + 4 * (index / 32);
 		clk_bit = index % 32;
@@ -140,6 +150,8 @@ CLK_OF_DECLARE(sun9i_a80_apb0, "allwinner,sun9i-a80-apb0-gates-clk",
 	       sunxi_simple_gates_init);
 CLK_OF_DECLARE(sun9i_a80_apb1, "allwinner,sun9i-a80-apb1-gates-clk",
 	       sunxi_simple_gates_init);
+CLK_OF_DECLARE(sunxi_gates, "allwinner,sunxi-gates-clk",sunxi-gates
+	       sunxi_simple_gates_init);
 
 static const int sun4i_a10_ahb_critical_clocks[] __initconst = {
 	14,	/* ahb_sdram */

-- 
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-12-08  8:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-06  9:04 [PATCH] clk: sunxi: Extend the simple gates and handle the Allwinner H3 Jean-Francois Moine
     [not found] ` <20151206100412.1a74b71da8e9ca28c6e61589-GANU6spQydw@public.gmane.org>
2015-12-07 14:31   ` Rob Herring
2015-12-08  6:42     ` Jean-Francois Moine
     [not found]       ` <20151208074226.17c75247f9eed69c9cac1d2d-GANU6spQydw@public.gmane.org>
2015-12-08  7:53         ` Maxime Ripard
2015-12-08  8:09           ` Jean-Francois Moine

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).