devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jagan Teki <jagan@edgeble.ai>
To: Heiko Stuebner <heiko@sntech.de>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Kever Yang <kever.yang@rock-chips.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org,
	Elaine Zhang <zhangqing@rock-chips.com>,
	linux-clk@vger.kernel.org,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>, Jagan Teki <jagan@edgeble.ai>
Subject: [PATCH 08/22] clk: rockchip: Add MUXTBL variant
Date: Sun, 24 Jul 2022 02:13:21 +0530	[thread overview]
Message-ID: <20220723204335.750095-9-jagan@edgeble.ai> (raw)
In-Reply-To: <20220723204335.750095-1-jagan@edgeble.ai>

From: Elaine Zhang <zhangqing@rock-chips.com>

A clock branch consisting of a mux with non-standard
select values.
The parent in Mux table is sorted by priority.

Cc: linux-clk@vger.kernel.org
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
Signed-off-by: Jagan Teki <jagan@edgeble.ai>
---
 drivers/clk/rockchip/clk.c | 27 +++++++++++++++++++++------
 drivers/clk/rockchip/clk.h | 17 +++++++++++++++++
 2 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
index bb8a844309bf..e63d4f20b479 100644
--- a/drivers/clk/rockchip/clk.c
+++ b/drivers/clk/rockchip/clk.c
@@ -40,6 +40,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
 		const char *const *parent_names, u8 num_parents,
 		void __iomem *base,
 		int muxdiv_offset, u8 mux_shift, u8 mux_width, u8 mux_flags,
+		u32 *mux_table,
 		int div_offset, u8 div_shift, u8 div_width, u8 div_flags,
 		struct clk_div_table *div_table, int gate_offset,
 		u8 gate_shift, u8 gate_flags, unsigned long flags,
@@ -62,6 +63,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
 		mux->shift = mux_shift;
 		mux->mask = BIT(mux_width) - 1;
 		mux->flags = mux_flags;
+		mux->table = mux_table;
 		mux->lock = lock;
 		mux_ops = (mux_flags & CLK_MUX_READ_ONLY) ? &clk_mux_ro_ops
 							: &clk_mux_ops;
@@ -270,6 +272,8 @@ static struct clk *rockchip_clk_register_frac_branch(
 		frac_mux->shift = child->mux_shift;
 		frac_mux->mask = BIT(child->mux_width) - 1;
 		frac_mux->flags = child->mux_flags;
+		if (child->mux_table)
+			frac_mux->table = child->mux_table;
 		frac_mux->lock = lock;
 		frac_mux->hw.init = &init;
 
@@ -444,11 +448,21 @@ void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
 		/* catch simple muxes */
 		switch (list->branch_type) {
 		case branch_mux:
-			clk = clk_register_mux(NULL, list->name,
-				list->parent_names, list->num_parents,
-				flags, ctx->reg_base + list->muxdiv_offset,
-				list->mux_shift, list->mux_width,
-				list->mux_flags, &ctx->lock);
+			if (list->mux_table)
+				clk = clk_register_mux_table(NULL, list->name,
+					list->parent_names, list->num_parents,
+					flags,
+					ctx->reg_base + list->muxdiv_offset,
+					list->mux_shift, list->mux_width,
+					list->mux_flags, list->mux_table,
+					&ctx->lock);
+			else
+				clk = clk_register_mux(NULL, list->name,
+					list->parent_names, list->num_parents,
+					flags,
+					ctx->reg_base + list->muxdiv_offset,
+					list->mux_shift, list->mux_width,
+					list->mux_flags, &ctx->lock);
 			break;
 		case branch_muxgrf:
 			clk = rockchip_clk_register_muxgrf(list->name,
@@ -506,7 +520,8 @@ void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
 				ctx->reg_base, list->muxdiv_offset,
 				list->mux_shift,
 				list->mux_width, list->mux_flags,
-				list->div_offset, list->div_shift, list->div_width,
+				list->mux_table, list->div_offset,
+				list->div_shift, list->div_width,
 				list->div_flags, list->div_table,
 				list->gate_offset, list->gate_shift,
 				list->gate_flags, flags, &ctx->lock);
diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
index 7aa45cc70287..93937fb1d368 100644
--- a/drivers/clk/rockchip/clk.h
+++ b/drivers/clk/rockchip/clk.h
@@ -448,6 +448,7 @@ struct rockchip_clk_branch {
 	u8				mux_shift;
 	u8				mux_width;
 	u8				mux_flags;
+	u32				*mux_table;
 	int				div_offset;
 	u8				div_shift;
 	u8				div_width;
@@ -680,6 +681,22 @@ struct rockchip_clk_branch {
 		.gate_offset	= -1,				\
 	}
 
+#define MUXTBL(_id, cname, pnames, f, o, s, w, mf, mt)		\
+	{							\
+		.id		= _id,				\
+		.branch_type	= branch_mux,			\
+		.name		= cname,			\
+		.parent_names	= pnames,			\
+		.num_parents	= ARRAY_SIZE(pnames),		\
+		.flags		= f,				\
+		.muxdiv_offset	= o,				\
+		.mux_shift	= s,				\
+		.mux_width	= w,				\
+		.mux_flags	= mf,				\
+		.gate_offset	= -1,				\
+		.mux_table	= mt,				\
+	}
+
 #define MUXGRF(_id, cname, pnames, f, o, s, w, mf)		\
 	{							\
 		.id		= _id,				\
-- 
2.25.1


  parent reply	other threads:[~2022-07-23 20:44 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-23 20:43 [PATCH 00/22] ARM: Add Rockchip RV1126 support Jagan Teki
2022-07-23 20:43 ` [PATCH 01/22] dt-bindings: power: rockchip: Document RV1126 power-controller Jagan Teki
2022-07-23 20:57   ` Krzysztof Kozlowski
2022-07-23 20:43 ` [PATCH 02/22] dt-bindings: power: Add power-domain header for RV1126 Jagan Teki
2022-07-23 20:58   ` Krzysztof Kozlowski
2022-07-26 13:44     ` Jagan Teki
2022-07-26 13:52       ` Krzysztof Kozlowski
2022-07-27  6:52         ` Jagan Teki
2022-07-27  7:01           ` Krzysztof Kozlowski
2022-07-27  7:09             ` Jagan Teki
2022-07-27  7:15               ` Krzysztof Kozlowski
2022-07-27  7:31                 ` Jagan Teki
2022-07-23 20:43 ` [PATCH 03/22] soc: rockchip: power-domain: Add RV1126 power domains Jagan Teki
2022-07-23 20:43 ` [PATCH 04/22] dt-bindings: power: rockchip: Document RV1126 PMU IO domains Jagan Teki
2022-07-23 20:59   ` Krzysztof Kozlowski
2022-07-23 20:43 ` [PATCH 05/22] soc: rockchip: io-domain: Add RV1126 " Jagan Teki
2022-07-23 20:43 ` [PATCH 06/22] dt-bindings: pinctrl: rockchip: Document RV1126 pinctrl Jagan Teki
2022-07-23 20:59   ` Krzysztof Kozlowski
2022-07-23 20:43 ` [PATCH 07/22] pinctrl: rockchip: Add RV1126 pinctrl support Jagan Teki
2022-07-23 20:43 ` Jagan Teki [this message]
2022-07-23 20:43 ` [PATCH 09/22] dt-bindings: clock: rockchip: Document RV1126 CRU Jagan Teki
2022-07-23 21:01   ` Krzysztof Kozlowski
2022-07-23 20:43 ` [PATCH 10/22] clk: rockchip: Add RV1126 clock controller Jagan Teki
2022-07-25  1:31   ` kernel test robot
2022-07-25 23:25   ` Rob Herring
2022-07-23 20:43 ` [PATCH 11/22] dt-bindings: mmc: rockchip-dw-mshc: Document Rockchip RV1126 Jagan Teki
2022-07-25 23:25   ` Rob Herring
2022-07-26 15:00   ` Ulf Hansson
2022-07-23 20:43 ` [PATCH 12/22] dt-bindings: serial: snps-dw-apb-uart: " Jagan Teki
2022-07-25 23:26   ` Rob Herring
2022-07-23 20:43 ` [PATCH 13/22] dt-bindings: i2c: i2c-rk3x: " Jagan Teki
2022-07-25 23:26   ` Rob Herring
2022-07-26 21:10   ` Wolfram Sang
2022-07-23 20:43 ` [PATCH 14/22] dt-bindings: soc: rockchip: Document RV1126 grf Jagan Teki
2022-07-25 23:26   ` Rob Herring
2022-07-23 20:43 ` [PATCH 15/22] dt-bindings: soc: rockchip: Document RV1126 pmugrf Jagan Teki
2022-07-25 23:26   ` Rob Herring
2022-07-23 20:43 ` [PATCH 16/22] dt-bindings: mfd: syscon: Add Rockchip RV1126 QoS register Jagan Teki
2022-07-25 23:26   ` Rob Herring
2022-08-08 15:24   ` Lee Jones
2022-07-23 20:43 ` [PATCH 17/22] ARM: dts: rockchip: Add Rockchip RV1126 SoC Jagan Teki
2022-07-23 20:43 ` [PATCH 18/22] dt-bindings: vendor-prefixes: Add Edgeble AI Technologies Pvt. Ltd Jagan Teki
2022-07-25 23:27   ` Rob Herring
2022-07-23 20:43 ` [PATCH 19/22] dt-bindings: arm: rockchip: Add Edgeble AI Edge Compute Module 0 Carrier Jagan Teki
2022-07-25 23:27   ` Rob Herring
2022-07-23 20:43 ` [PATCH 20/22] ARM: dts: rockchip: rv1126: Add Edgeble AI Edge Compute Module 0 Jagan Teki
2022-07-23 20:43 ` [PATCH 21/22] ARM: dts: rockchip: rv1126: Add Edgeble AI Edge Compute Module 0 Carrier Jagan Teki
2022-07-23 20:43 ` [PATCH 22/22] ARM: configs: Add RV1126 ECM0 fragment config Jagan Teki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220723204335.750095-9-jagan@edgeble.ai \
    --to=jagan@edgeble.ai \
    --cc=devicetree@vger.kernel.org \
    --cc=heiko@sntech.de \
    --cc=kever.yang@rock-chips.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mturquette@baylibre.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    --cc=zhangqing@rock-chips.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).