* [PATCH v5 0/6] Add support for S4 audio
@ 2025-07-10 3:35 jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc jiebing chen via B4 Relay
` (7 more replies)
0 siblings, 8 replies; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
This series completes the end-to-end audio support
for S4 SoC from hardware bindings to driver implementation
and system integration.
1 Device Tree Bindings Updates
Added audio power domain support for S4 SoC.Defined mclk/sclk pad clock IDs in AXG audio bindings.
Add S4 audio tocodec binding support.
2 Driver Implementation
Implemented S4 tocodec driver for G12A architecture.
Add mclk pad divider support for S4 in AXG audio clock.
3 Device Tree Integration
Add Amlogic S4 audio subsystem support in arm64 DTS.
Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
---
Changes in v5:
- Fix warning Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yam when make dt_binding_check
- The audio reg is mounted below the APB bus in dts file.
- Deal with pad clock in a distinct controller.
- Fix warning for sound/soc/meson/g12a-toacodec.c
- Link to v4: https://lore.kernel.org/r/20250319-audio_drvier-v4-0-686867fad719@amlogic.com
Changes in v4:
- fix dtb check warning
- add maxItems of power domain for dt-bindings
- fixed audio clock pads regmap base and reg offset
- use dapm widget to control tocodec bclk and mclk enable
- Link to v3: https://lore.kernel.org/r/20250228-audio_drvier-v3-0-dbfd30507e4c@amlogic.com
Changes in v3:
- remove g12a tocodec switch event
- Modify the incorrect title for dt-bindings
- Link to v2: https://lore.kernel.org/r/20250214-audio_drvier-v2-0-37881fa37c9e@amlogic.com
Changes in v2:
- remove tdm pad control and change tocodec base on g12a
- change hifipll rate to support 24bit
- add s4 audio clock
- Link to v1: https://lore.kernel.org/r/20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com
---
jiebing chen (6):
dt-bindings: clock: meson: Add audio power domain for s4 soc
dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids
dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
ASoC: meson: g12a-toacodec: Add s4 tocodec driver
clk: meson: axg-audio: Add the mclk pad div for s4 chip
arm64: dts: amlogic: Add Amlogic S4 Audio
.../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 ++-
.../bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
.../boot/dts/amlogic/meson-s4-s805x2-aq222.dts | 218 +++++++++++
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 387 ++++++++++++++++++
drivers/clk/meson/axg-audio.c | 435 ++++++++++++++++++++-
drivers/clk/meson/axg-audio.h | 6 +
include/dt-bindings/clock/axg-audio-clkc.h | 11 +
sound/soc/meson/g12a-toacodec.c | 42 ++
8 files changed, 1152 insertions(+), 3 deletions(-)
---
base-commit: 6ecd20965bdc21b265a0671ccf36d9ad8043f5ab
change-id: 20250110-audio_drvier-07a5381c494b
Best regards,
--
Jiebing Chen <jiebing.chen@amlogic.com>
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
@ 2025-07-10 3:35 ` jiebing chen via B4 Relay
2025-07-10 8:57 ` Jerome Brunet
2025-07-10 9:56 ` Krzysztof Kozlowski
2025-07-10 3:35 ` [PATCH v5 2/6] dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids jiebing chen via B4 Relay
` (6 subsequent siblings)
7 siblings, 2 replies; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
From: jiebing chen <jiebing.chen@amlogic.com>
The audio power domain has been detected on S4 device.
It must be enabled prior to audio operations.
Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
---
.../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 +++++++++++++++++++++-
1 file changed, 54 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
index fd7982dd4ceab82389167079c2258a9acff51a76..c3f0bb9b2ff050394828ba339a7be0c9c48e9a76 100644
--- a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
+++ b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
@@ -21,6 +21,8 @@ properties:
- amlogic,axg-audio-clkc
- amlogic,g12a-audio-clkc
- amlogic,sm1-audio-clkc
+ - amlogic,s4-audio-clkc
+ - amlogic,clock-pads-clkc
'#clock-cells':
const: 1
@@ -100,13 +102,15 @@ properties:
resets:
description: internal reset line
+ power-domains:
+ maxItems: 1
+
required:
- compatible
- '#clock-cells'
- reg
- clocks
- clock-names
- - resets
allOf:
- if:
@@ -116,12 +120,37 @@ allOf:
enum:
- amlogic,g12a-audio-clkc
- amlogic,sm1-audio-clkc
+ - amlogic,s4-audio-clkc
then:
required:
- '#reset-cells'
else:
properties:
'#reset-cells': false
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - amlogic,s4-audio-clkc
+ then:
+ required:
+ - power-domains
+ else:
+ properties:
+ power-domains: false
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - amlogic,clock-pads-clkc
+ then:
+ properties:
+ resets: false
+ else:
+ required:
+ - resets
additionalProperties: false
@@ -129,6 +158,7 @@ examples:
- |
#include <dt-bindings/clock/axg-clkc.h>
#include <dt-bindings/reset/amlogic,meson-axg-reset.h>
+ #include <dt-bindings/power/meson-s4-power.h>
apb {
#address-cells = <2>;
#size-cells = <2>;
@@ -198,4 +228,27 @@ examples:
"slv_lrclk9";
resets = <&reset RESET_AUDIO>;
};
+ clk_pad: clock-controller@330e80 {
+ compatible = "amlogic,clock-pads-clkc";
+ reg = <0x0 0x330e80 0x0 0x10>;
+ #clock-cells = <1>;
+ clocks = <&clkc_periphs CLKID_AUDIO>,
+ <&clkc_pll CLKID_MPLL0>,
+ <&clkc_pll CLKID_MPLL1>,
+ <&clkc_pll CLKID_MPLL2>,
+ <&clkc_pll CLKID_MPLL3>,
+ <&clkc_pll CLKID_HIFI_PLL>,
+ <&clkc_pll CLKID_FCLK_DIV3>,
+ <&clkc_pll CLKID_FCLK_DIV4>,
+ <&clkc_pll CLKID_FCLK_DIV5>;
+ clock-names = "pclk",
+ "mst_in0",
+ "mst_in1",
+ "mst_in2",
+ "mst_in3",
+ "mst_in4",
+ "mst_in5",
+ "mst_in6",
+ "mst_in7";
+ };
};
--
2.43.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v5 2/6] dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc jiebing chen via B4 Relay
@ 2025-07-10 3:35 ` jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec jiebing chen via B4 Relay
` (5 subsequent siblings)
7 siblings, 0 replies; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
From: jiebing chen <jiebing.chen@amlogic.com>
Add clock ID definitions for the MCLK pads on S4 SoCs.
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
---
include/dt-bindings/clock/axg-audio-clkc.h | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/include/dt-bindings/clock/axg-audio-clkc.h b/include/dt-bindings/clock/axg-audio-clkc.h
index 607f23b83fa7287fe0403682ebf827e2df26a1ce..75dde05343d1fa74304ee21c9ec0541a8f51b15e 100644
--- a/include/dt-bindings/clock/axg-audio-clkc.h
+++ b/include/dt-bindings/clock/axg-audio-clkc.h
@@ -162,5 +162,16 @@
#define AUD_CLKID_EARCRX_DMAC_SEL 182
#define AUD_CLKID_EARCRX_DMAC_DIV 183
#define AUD_CLKID_EARCRX_DMAC 184
+#define AUD_CLKID_TDM_MCLK_PAD0_SEL 185
+#define AUD_CLKID_TDM_MCLK_PAD1_SEL 186
+#define AUD_CLKID_TDM_MCLK_PAD0_DIV 187
+#define AUD_CLKID_TDM_MCLK_PAD1_DIV 188
+#define AUD_CLKID_TDM_MCLK_PAD2 189
+#define AUD_CLKID_TDM_MCLK_PAD2_SEL 190
+#define AUD_CLKID_TDM_MCLK_PAD2_DIV 191
+#define AUD_CLKID_TDM_SCLK_PAD3 192
+#define AUD_CLKID_TDM_SCLK_PAD4 193
+#define AUD_CLKID_TDM_LRCLK_PAD3 194
+#define AUD_CLKID_TDM_LRCLK_PAD4 195
#endif /* __AXG_AUDIO_CLKC_BINDINGS_H */
--
2.43.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 2/6] dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids jiebing chen via B4 Relay
@ 2025-07-10 3:35 ` jiebing chen via B4 Relay
2025-07-10 9:57 ` Krzysztof Kozlowski
2025-07-14 6:10 ` Krzysztof Kozlowski
2025-07-10 3:35 ` [PATCH v5 4/6] ASoC: meson: g12a-toacodec: Add s4 tocodec driver jiebing chen via B4 Relay
` (4 subsequent siblings)
7 siblings, 2 replies; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
From: jiebing chen <jiebing.chen@amlogic.com>
Add S4 SoC tocodec compatibility support.
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
---
Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml b/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
index 23f82bb89750898d20c866015bc2e1a4b0554846..ea669f4359bc81b0f45bc2105c832fc2b11d8441 100644
--- a/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
+++ b/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
@@ -26,6 +26,7 @@ properties:
- items:
- enum:
- amlogic,sm1-toacodec
+ - amlogic,s4-toacodec
- const: amlogic,g12a-toacodec
reg:
--
2.43.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v5 4/6] ASoC: meson: g12a-toacodec: Add s4 tocodec driver
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
` (2 preceding siblings ...)
2025-07-10 3:35 ` [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec jiebing chen via B4 Relay
@ 2025-07-10 3:35 ` jiebing chen via B4 Relay
2025-07-10 9:29 ` Jerome Brunet
2025-07-10 3:35 ` [PATCH v5 5/6] clk: meson: axg-audio: Add the mclk pad div for s4 chip jiebing chen via B4 Relay
` (3 subsequent siblings)
7 siblings, 1 reply; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
From: jiebing chen <jiebing.chen@amlogic.com>
The S4 tocodec supports 8-lane input configuration, requiring BCLK
and MCLK control bits to be enabled during operation.
Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
---
sound/soc/meson/g12a-toacodec.c | 42 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/sound/soc/meson/g12a-toacodec.c b/sound/soc/meson/g12a-toacodec.c
index 531bb8707a3ec4c47814d6a0676d5c62c705da75..cb2169293f0e800bd9c0893087ffc4813f3360e2 100644
--- a/sound/soc/meson/g12a-toacodec.c
+++ b/sound/soc/meson/g12a-toacodec.c
@@ -41,6 +41,9 @@
#define CTRL0_BCLK_SEL_LSB 4
#define CTRL0_MCLK_SEL GENMASK(2, 0)
+#define CTRL0_BCLK_ENABLE_SHIFT 30
+#define CTRL0_MCLK_ENABLE_SHIFT 29
+
#define TOACODEC_OUT_CHMAX 2
struct g12a_toacodec {
@@ -143,6 +146,19 @@ static const struct snd_soc_dapm_widget sm1_toacodec_widgets[] = {
&g12a_toacodec_out_enable),
};
+/*
+ * FIXME:
+ * On this soc, tocodec need enable mclk and bclk control
+ * just enable it when dapm power widget power on.
+ */
+
+static const struct snd_soc_dapm_widget s4_toacodec_widgets[] = {
+ SND_SOC_DAPM_MUX("SRC", TOACODEC_CTRL0, CTRL0_BCLK_ENABLE_SHIFT, 0,
+ &sm1_toacodec_mux),
+ SND_SOC_DAPM_SWITCH("OUT EN", TOACODEC_CTRL0, CTRL0_MCLK_ENABLE_SHIFT, 0,
+ &g12a_toacodec_out_enable),
+};
+
static int g12a_toacodec_input_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
@@ -236,6 +252,10 @@ static const struct snd_kcontrol_new sm1_toacodec_controls[] = {
SOC_SINGLE("Lane Select", TOACODEC_CTRL0, CTRL0_LANE_SEL_SM1, 3, 0),
};
+static const struct snd_kcontrol_new s4_toacodec_controls[] = {
+ SOC_SINGLE("Lane Select", TOACODEC_CTRL0, CTRL0_LANE_SEL_SM1, 7, 0),
+};
+
static const struct snd_soc_component_driver g12a_toacodec_component_drv = {
.probe = g12a_toacodec_component_probe,
.controls = g12a_toacodec_controls,
@@ -258,6 +278,17 @@ static const struct snd_soc_component_driver sm1_toacodec_component_drv = {
.endianness = 1,
};
+static const struct snd_soc_component_driver s4_toacodec_component_drv = {
+ .probe = sm1_toacodec_component_probe,
+ .controls = s4_toacodec_controls,
+ .num_controls = ARRAY_SIZE(s4_toacodec_controls),
+ .dapm_widgets = s4_toacodec_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(s4_toacodec_widgets),
+ .dapm_routes = g12a_toacodec_routes,
+ .num_dapm_routes = ARRAY_SIZE(g12a_toacodec_routes),
+ .endianness = 1,
+};
+
static const struct regmap_config g12a_toacodec_regmap_cfg = {
.reg_bits = 32,
.val_bits = 32,
@@ -278,6 +309,13 @@ static const struct g12a_toacodec_match_data sm1_toacodec_match_data = {
.field_bclk_sel = REG_FIELD(TOACODEC_CTRL0, 4, 6),
};
+static const struct g12a_toacodec_match_data s4_toacodec_match_data = {
+ .component_drv = &s4_toacodec_component_drv,
+ .field_dat_sel = REG_FIELD(TOACODEC_CTRL0, 19, 20),
+ .field_lrclk_sel = REG_FIELD(TOACODEC_CTRL0, 12, 14),
+ .field_bclk_sel = REG_FIELD(TOACODEC_CTRL0, 4, 6),
+};
+
static const struct of_device_id g12a_toacodec_of_match[] = {
{
.compatible = "amlogic,g12a-toacodec",
@@ -287,6 +325,10 @@ static const struct of_device_id g12a_toacodec_of_match[] = {
.compatible = "amlogic,sm1-toacodec",
.data = &sm1_toacodec_match_data,
},
+ {
+ .compatible = "amlogic,s4-toacodec",
+ .data = &s4_toacodec_match_data,
+ },
{}
};
MODULE_DEVICE_TABLE(of, g12a_toacodec_of_match);
--
2.43.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v5 5/6] clk: meson: axg-audio: Add the mclk pad div for s4 chip
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
` (3 preceding siblings ...)
2025-07-10 3:35 ` [PATCH v5 4/6] ASoC: meson: g12a-toacodec: Add s4 tocodec driver jiebing chen via B4 Relay
@ 2025-07-10 3:35 ` jiebing chen via B4 Relay
2025-07-10 9:11 ` Jerome Brunet
2025-07-10 3:35 ` [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio jiebing chen via B4 Relay
` (2 subsequent siblings)
7 siblings, 1 reply; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
From: jiebing chen <jiebing.chen@amlogic.com>
Add MCLK pad divider support and expanded LRCLK/SCLK pad count to five.
Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
---
drivers/clk/meson/axg-audio.c | 435 +++++++++++++++++++++++++++++++++++++++++-
drivers/clk/meson/axg-audio.h | 6 +
2 files changed, 439 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/meson/axg-audio.c b/drivers/clk/meson/axg-audio.c
index 9df627b142f89788966ede0262aaaf39e13f0b49..7dc1f464bd55fa33ca3260002ed1b3929061f99b 100644
--- a/drivers/clk/meson/axg-audio.c
+++ b/drivers/clk/meson/axg-audio.c
@@ -323,6 +323,16 @@ static const struct clk_parent_data lrclk_pad_ctrl_parent_data[] = {
AUD_MUX(_name, _reg, 0x7, _shift, 0, _parents, \
CLK_SET_RATE_NO_REPARENT)
+#define AUD_MCLK_PAD_MUX(_name, _reg, _shift) \
+ AUD_MUX(_name##_sel, _reg, 0x7, _shift, CLK_MUX_ROUND_CLOSEST, \
+ mclk_pad_ctrl_parent_data, 0)
+#define AUD_MCLK_PAD_DIV(_name, _reg, _shift) \
+ AUD_DIV(_name##_div, _reg, _shift, 8, CLK_DIVIDER_ROUND_CLOSEST, \
+ aud_##_name##_sel, CLK_SET_RATE_PARENT)
+#define AUD_MCLK_PAD_GATE(_name, _reg, _shift) \
+ AUD_GATE(_name, _reg, _shift, aud_##_name##_div, \
+ CLK_SET_RATE_PARENT)
+
/* Common Clocks */
static struct clk_regmap ddr_arb =
AUD_PCLK_GATE(ddr_arb, AUDIO_CLK_GATE_EN, 0);
@@ -826,6 +836,49 @@ static struct clk_regmap sm1_tdm_sclk_pad_1 = AUD_TDM_PAD_CTRL(
static struct clk_regmap sm1_tdm_sclk_pad_2 = AUD_TDM_PAD_CTRL(
tdm_sclk_pad_2, AUDIO_SM1_MST_PAD_CTRL1, 8, sclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_mclk_pad0_sel =
+ AUD_MCLK_PAD_MUX(mclk_pad0, AUDIO_S4_MCLK_PAD_CTRL0, 8);
+static struct clk_regmap s4_tdm_mclk_pad1_sel =
+ AUD_MCLK_PAD_MUX(mclk_pad1, AUDIO_S4_MCLK_PAD_CTRL0, 24);
+static struct clk_regmap s4_tdm_mclk_pad2_sel =
+ AUD_MCLK_PAD_MUX(mclk_pad2, AUDIO_S4_MCLK_PAD_CTRL1, 8);
+
+static struct clk_regmap s4_tdm_mclk_pad0_div =
+ AUD_MCLK_PAD_DIV(mclk_pad0, AUDIO_S4_MCLK_PAD_CTRL0, 0);
+static struct clk_regmap s4_tdm_mclk_pad1_div =
+ AUD_MCLK_PAD_DIV(mclk_pad1, AUDIO_S4_MCLK_PAD_CTRL0, 16);
+static struct clk_regmap s4_tdm_mclk_pad2_div =
+ AUD_MCLK_PAD_DIV(mclk_pad2, AUDIO_S4_MCLK_PAD_CTRL1, 0);
+
+static struct clk_regmap s4_tdm_mclk_pad_0 =
+ AUD_MCLK_PAD_GATE(mclk_pad0, AUDIO_S4_MCLK_PAD_CTRL0, 15);
+static struct clk_regmap s4_tdm_mclk_pad_1 =
+ AUD_MCLK_PAD_GATE(mclk_pad1, AUDIO_S4_MCLK_PAD_CTRL0, 31);
+static struct clk_regmap s4_tdm_mclk_pad_2 =
+ AUD_MCLK_PAD_GATE(mclk_pad2, AUDIO_S4_MCLK_PAD_CTRL1, 15);
+
+static struct clk_regmap s4_tdm_sclk_pad_0 =
+ AUD_TDM_PAD_CTRL(tdm_sclk_pad_0, AUDIO_S4_SCLK_PAD_CTRL0, 0, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_sclk_pad_1 =
+ AUD_TDM_PAD_CTRL(tdm_sclk_pad_1, AUDIO_S4_SCLK_PAD_CTRL0, 4, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_sclk_pad_2 =
+ AUD_TDM_PAD_CTRL(tdm_sclk_pad_2, AUDIO_S4_SCLK_PAD_CTRL0, 8, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_sclk_pad_3 =
+ AUD_TDM_PAD_CTRL(tdm_sclk_pad_3, AUDIO_S4_SCLK_PAD_CTRL0, 16, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_sclk_pad_4 =
+ AUD_TDM_PAD_CTRL(tdm_sclk_pad_4, AUDIO_S4_SCLK_PAD_CTRL0, 20, lrclk_pad_ctrl_parent_data);
+
+static struct clk_regmap s4_tdm_lrclk_pad_0 =
+ AUD_TDM_PAD_CTRL(tdm_lrclk_pad_0, AUDIO_S4_SCLK_PAD_CTRL1, 0, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_lrclk_pad_1 =
+ AUD_TDM_PAD_CTRL(tdm_lrclk_pad_1, AUDIO_S4_SCLK_PAD_CTRL1, 4, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_lrclk_pad_2 =
+ AUD_TDM_PAD_CTRL(tdm_lrclk_pad_2, AUDIO_S4_SCLK_PAD_CTRL1, 8, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_lrclk_pad_3 =
+ AUD_TDM_PAD_CTRL(tdm_lrclk_pad_3, AUDIO_S4_SCLK_PAD_CTRL1, 16, lrclk_pad_ctrl_parent_data);
+static struct clk_regmap s4_tdm_lrclk_pad_4 =
+ AUD_TDM_PAD_CTRL(tdm_lrclk_pad_4, AUDIO_S4_SCLK_PAD_CTRL1, 20, lrclk_pad_ctrl_parent_data);
+
/*
* Array of all clocks provided by this provider
* The input clocks of the controller will be populated at runtime
@@ -1257,6 +1310,182 @@ static struct clk_hw *sm1_audio_hw_clks[] = {
[AUD_CLKID_EARCRX_DMAC] = &sm1_earcrx_dmac_clk.hw,
};
+/*
+ * Array of all S4 clocks provided by this provider
+ * The input clocks of the controller will be populated at runtime
+ */
+static struct clk_hw *s4_audio_hw_clks[] = {
+ [AUD_CLKID_DDR_ARB] = &ddr_arb.hw,
+ [AUD_CLKID_PDM] = &pdm.hw,
+ [AUD_CLKID_TDMIN_A] = &tdmin_a.hw,
+ [AUD_CLKID_TDMIN_B] = &tdmin_b.hw,
+ [AUD_CLKID_TDMIN_C] = &tdmin_c.hw,
+ [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw,
+ [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw,
+ [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw,
+ [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw,
+ [AUD_CLKID_FRDDR_A] = &frddr_a.hw,
+ [AUD_CLKID_FRDDR_B] = &frddr_b.hw,
+ [AUD_CLKID_FRDDR_C] = &frddr_c.hw,
+ [AUD_CLKID_TODDR_A] = &toddr_a.hw,
+ [AUD_CLKID_TODDR_B] = &toddr_b.hw,
+ [AUD_CLKID_TODDR_C] = &toddr_c.hw,
+ [AUD_CLKID_LOOPBACK] = &loopback.hw,
+ [AUD_CLKID_SPDIFIN] = &spdifin.hw,
+ [AUD_CLKID_SPDIFOUT] = &spdifout.hw,
+ [AUD_CLKID_RESAMPLE] = &resample.hw,
+ [AUD_CLKID_SPDIFOUT_B] = &spdifout_b.hw,
+ [AUD_CLKID_MST_A_MCLK_SEL] = &sm1_mst_a_mclk_sel.hw,
+ [AUD_CLKID_MST_B_MCLK_SEL] = &sm1_mst_b_mclk_sel.hw,
+ [AUD_CLKID_MST_C_MCLK_SEL] = &sm1_mst_c_mclk_sel.hw,
+ [AUD_CLKID_MST_D_MCLK_SEL] = &sm1_mst_d_mclk_sel.hw,
+ [AUD_CLKID_MST_E_MCLK_SEL] = &sm1_mst_e_mclk_sel.hw,
+ [AUD_CLKID_MST_F_MCLK_SEL] = &sm1_mst_f_mclk_sel.hw,
+ [AUD_CLKID_MST_A_MCLK_DIV] = &sm1_mst_a_mclk_div.hw,
+ [AUD_CLKID_MST_B_MCLK_DIV] = &sm1_mst_b_mclk_div.hw,
+ [AUD_CLKID_MST_C_MCLK_DIV] = &sm1_mst_c_mclk_div.hw,
+ [AUD_CLKID_MST_D_MCLK_DIV] = &sm1_mst_d_mclk_div.hw,
+ [AUD_CLKID_MST_E_MCLK_DIV] = &sm1_mst_e_mclk_div.hw,
+ [AUD_CLKID_MST_F_MCLK_DIV] = &sm1_mst_f_mclk_div.hw,
+ [AUD_CLKID_MST_A_MCLK] = &sm1_mst_a_mclk.hw,
+ [AUD_CLKID_MST_B_MCLK] = &sm1_mst_b_mclk.hw,
+ [AUD_CLKID_MST_C_MCLK] = &sm1_mst_c_mclk.hw,
+ [AUD_CLKID_MST_D_MCLK] = &sm1_mst_d_mclk.hw,
+ [AUD_CLKID_MST_E_MCLK] = &sm1_mst_e_mclk.hw,
+ [AUD_CLKID_MST_F_MCLK] = &sm1_mst_f_mclk.hw,
+ [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw,
+ [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw,
+ [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw,
+ [AUD_CLKID_SPDIFOUT_B_CLK_SEL] = &spdifout_b_clk_sel.hw,
+ [AUD_CLKID_SPDIFOUT_B_CLK_DIV] = &spdifout_b_clk_div.hw,
+ [AUD_CLKID_SPDIFOUT_B_CLK] = &spdifout_b_clk.hw,
+ [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw,
+ [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw,
+ [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw,
+ [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw,
+ [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw,
+ [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw,
+ [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw,
+ [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw,
+ [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw,
+ [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw,
+ [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw,
+ [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw,
+ [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw,
+ [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw,
+ [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw,
+ [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw,
+ [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw,
+ [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw,
+ [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw,
+ [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw,
+ [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw,
+ [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw,
+ [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw,
+ [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw,
+ [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw,
+ [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw,
+ [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw,
+ [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw,
+ [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw,
+ [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw,
+ [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw,
+ [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw,
+ [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw,
+ [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw,
+ [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw,
+ [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw,
+ [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw,
+ [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw,
+ [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw,
+ [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw,
+ [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw,
+ [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw,
+ [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw,
+ [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw,
+ [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw,
+ [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw,
+ [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw,
+ [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw,
+ [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw,
+ [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw,
+ [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw,
+ [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw,
+ [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw,
+ [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw,
+ [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw,
+ [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw,
+ [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw,
+ [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw,
+ [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw,
+ [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw,
+ [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw,
+ [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw,
+ [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw,
+ [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw,
+ [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw,
+ [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw,
+ [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw,
+ [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw,
+ [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw,
+ [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw,
+ [AUD_CLKID_TDMOUT_A_SCLK] = &g12a_tdmout_a_sclk.hw,
+ [AUD_CLKID_TDMOUT_B_SCLK] = &g12a_tdmout_b_sclk.hw,
+ [AUD_CLKID_TDMOUT_C_SCLK] = &g12a_tdmout_c_sclk.hw,
+ [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw,
+ [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw,
+ [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw,
+ [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw,
+ [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw,
+ [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw,
+ [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw,
+ [AUD_CLKID_TOP] = &sm1_aud_top.hw,
+ [AUD_CLKID_TORAM] = &toram.hw,
+ [AUD_CLKID_EQDRC] = &eqdrc.hw,
+ [AUD_CLKID_RESAMPLE_B] = &resample_b.hw,
+ [AUD_CLKID_TOVAD] = &tovad.hw,
+ [AUD_CLKID_LOCKER] = &locker.hw,
+ [AUD_CLKID_SPDIFIN_LB] = &spdifin_lb.hw,
+ [AUD_CLKID_FRDDR_D] = &frddr_d.hw,
+ [AUD_CLKID_TODDR_D] = &toddr_d.hw,
+ [AUD_CLKID_LOOPBACK_B] = &loopback_b.hw,
+ [AUD_CLKID_CLK81_EN] = &sm1_clk81_en.hw,
+ [AUD_CLKID_SYSCLK_A_DIV] = &sm1_sysclk_a_div.hw,
+ [AUD_CLKID_SYSCLK_A_EN] = &sm1_sysclk_a_en.hw,
+ [AUD_CLKID_SYSCLK_B_DIV] = &sm1_sysclk_b_div.hw,
+ [AUD_CLKID_SYSCLK_B_EN] = &sm1_sysclk_b_en.hw,
+ [AUD_CLKID_EARCRX] = &earcrx.hw,
+ [AUD_CLKID_EARCRX_CMDC_SEL] = &sm1_earcrx_cmdc_clk_sel.hw,
+ [AUD_CLKID_EARCRX_CMDC_DIV] = &sm1_earcrx_cmdc_clk_div.hw,
+ [AUD_CLKID_EARCRX_CMDC] = &sm1_earcrx_cmdc_clk.hw,
+ [AUD_CLKID_EARCRX_DMAC_SEL] = &sm1_earcrx_dmac_clk_sel.hw,
+ [AUD_CLKID_EARCRX_DMAC_DIV] = &sm1_earcrx_dmac_clk_div.hw,
+ [AUD_CLKID_EARCRX_DMAC] = &sm1_earcrx_dmac_clk.hw,
+
+};
+
+static struct clk_hw *audio_clock_pads_hw_clks[] = {
+ [AUD_CLKID_TDM_MCLK_PAD0] = &s4_tdm_mclk_pad_0.hw,
+ [AUD_CLKID_TDM_MCLK_PAD1] = &s4_tdm_mclk_pad_1.hw,
+ [AUD_CLKID_TDM_LRCLK_PAD0] = &s4_tdm_lrclk_pad_0.hw,
+ [AUD_CLKID_TDM_LRCLK_PAD1] = &s4_tdm_lrclk_pad_1.hw,
+ [AUD_CLKID_TDM_LRCLK_PAD2] = &s4_tdm_lrclk_pad_2.hw,
+ [AUD_CLKID_TDM_SCLK_PAD0] = &s4_tdm_sclk_pad_0.hw,
+ [AUD_CLKID_TDM_SCLK_PAD1] = &s4_tdm_sclk_pad_1.hw,
+ [AUD_CLKID_TDM_SCLK_PAD2] = &s4_tdm_sclk_pad_2.hw,
+ [AUD_CLKID_TDM_MCLK_PAD0_SEL] = &s4_tdm_mclk_pad0_sel.hw,
+ [AUD_CLKID_TDM_MCLK_PAD1_SEL] = &s4_tdm_mclk_pad1_sel.hw,
+ [AUD_CLKID_TDM_MCLK_PAD0_DIV] = &s4_tdm_mclk_pad0_div.hw,
+ [AUD_CLKID_TDM_MCLK_PAD1_DIV] = &s4_tdm_mclk_pad1_div.hw,
+ [AUD_CLKID_TDM_MCLK_PAD2] = &s4_tdm_mclk_pad_2.hw,
+ [AUD_CLKID_TDM_MCLK_PAD2_SEL] = &s4_tdm_mclk_pad2_sel.hw,
+ [AUD_CLKID_TDM_MCLK_PAD2_DIV] = &s4_tdm_mclk_pad2_div.hw,
+ [AUD_CLKID_TDM_SCLK_PAD3] = &s4_tdm_sclk_pad_3.hw,
+ [AUD_CLKID_TDM_SCLK_PAD4] = &s4_tdm_sclk_pad_4.hw,
+ [AUD_CLKID_TDM_LRCLK_PAD3] = &s4_tdm_lrclk_pad_3.hw,
+ [AUD_CLKID_TDM_LRCLK_PAD4] = &s4_tdm_lrclk_pad_4.hw,
+
+};
/* Convenience table to populate regmap in .probe(). */
static struct clk_regmap *const axg_clk_regmaps[] = {
@@ -1678,6 +1907,177 @@ static struct clk_regmap *const sm1_clk_regmaps[] = {
&sm1_earcrx_dmac_clk,
};
+static struct clk_regmap *const s4_clk_regmaps[] = {
+ &ddr_arb,
+ &pdm,
+ &tdmin_a,
+ &tdmin_b,
+ &tdmin_c,
+ &tdmin_lb,
+ &tdmout_a,
+ &tdmout_b,
+ &tdmout_c,
+ &frddr_a,
+ &frddr_b,
+ &frddr_c,
+ &toddr_a,
+ &toddr_b,
+ &toddr_c,
+ &loopback,
+ &spdifin,
+ &spdifout,
+ &resample,
+ &spdifout_b,
+ &sm1_mst_a_mclk_sel,
+ &sm1_mst_b_mclk_sel,
+ &sm1_mst_c_mclk_sel,
+ &sm1_mst_d_mclk_sel,
+ &sm1_mst_e_mclk_sel,
+ &sm1_mst_f_mclk_sel,
+ &sm1_mst_a_mclk_div,
+ &sm1_mst_b_mclk_div,
+ &sm1_mst_c_mclk_div,
+ &sm1_mst_d_mclk_div,
+ &sm1_mst_e_mclk_div,
+ &sm1_mst_f_mclk_div,
+ &sm1_mst_a_mclk,
+ &sm1_mst_b_mclk,
+ &sm1_mst_c_mclk,
+ &sm1_mst_d_mclk,
+ &sm1_mst_e_mclk,
+ &sm1_mst_f_mclk,
+ &spdifout_clk_sel,
+ &spdifout_clk_div,
+ &spdifout_clk,
+ &spdifin_clk_sel,
+ &spdifin_clk_div,
+ &spdifin_clk,
+ &pdm_dclk_sel,
+ &pdm_dclk_div,
+ &pdm_dclk,
+ &pdm_sysclk_sel,
+ &pdm_sysclk_div,
+ &pdm_sysclk,
+ &mst_a_sclk_pre_en,
+ &mst_b_sclk_pre_en,
+ &mst_c_sclk_pre_en,
+ &mst_d_sclk_pre_en,
+ &mst_e_sclk_pre_en,
+ &mst_f_sclk_pre_en,
+ &mst_a_sclk_div,
+ &mst_b_sclk_div,
+ &mst_c_sclk_div,
+ &mst_d_sclk_div,
+ &mst_e_sclk_div,
+ &mst_f_sclk_div,
+ &mst_a_sclk_post_en,
+ &mst_b_sclk_post_en,
+ &mst_c_sclk_post_en,
+ &mst_d_sclk_post_en,
+ &mst_e_sclk_post_en,
+ &mst_f_sclk_post_en,
+ &mst_a_sclk,
+ &mst_b_sclk,
+ &mst_c_sclk,
+ &mst_d_sclk,
+ &mst_e_sclk,
+ &mst_f_sclk,
+ &mst_a_lrclk_div,
+ &mst_b_lrclk_div,
+ &mst_c_lrclk_div,
+ &mst_d_lrclk_div,
+ &mst_e_lrclk_div,
+ &mst_f_lrclk_div,
+ &mst_a_lrclk,
+ &mst_b_lrclk,
+ &mst_c_lrclk,
+ &mst_d_lrclk,
+ &mst_e_lrclk,
+ &mst_f_lrclk,
+ &tdmin_a_sclk_sel,
+ &tdmin_b_sclk_sel,
+ &tdmin_c_sclk_sel,
+ &tdmin_lb_sclk_sel,
+ &tdmout_a_sclk_sel,
+ &tdmout_b_sclk_sel,
+ &tdmout_c_sclk_sel,
+ &tdmin_a_sclk_pre_en,
+ &tdmin_b_sclk_pre_en,
+ &tdmin_c_sclk_pre_en,
+ &tdmin_lb_sclk_pre_en,
+ &tdmout_a_sclk_pre_en,
+ &tdmout_b_sclk_pre_en,
+ &tdmout_c_sclk_pre_en,
+ &tdmin_a_sclk_post_en,
+ &tdmin_b_sclk_post_en,
+ &tdmin_c_sclk_post_en,
+ &tdmin_lb_sclk_post_en,
+ &tdmout_a_sclk_post_en,
+ &tdmout_b_sclk_post_en,
+ &tdmout_c_sclk_post_en,
+ &tdmin_a_sclk,
+ &tdmin_b_sclk,
+ &tdmin_c_sclk,
+ &tdmin_lb_sclk,
+ &g12a_tdmout_a_sclk,
+ &g12a_tdmout_b_sclk,
+ &g12a_tdmout_c_sclk,
+ &tdmin_a_lrclk,
+ &tdmin_b_lrclk,
+ &tdmin_c_lrclk,
+ &tdmin_lb_lrclk,
+ &tdmout_a_lrclk,
+ &tdmout_b_lrclk,
+ &tdmout_c_lrclk,
+ &spdifout_b_clk_sel,
+ &spdifout_b_clk_div,
+ &spdifout_b_clk,
+ &sm1_aud_top,
+ &toram,
+ &eqdrc,
+ &resample_b,
+ &tovad,
+ &locker,
+ &spdifin_lb,
+ &frddr_d,
+ &toddr_d,
+ &loopback_b,
+ &sm1_clk81_en,
+ &sm1_sysclk_a_div,
+ &sm1_sysclk_a_en,
+ &sm1_sysclk_b_div,
+ &sm1_sysclk_b_en,
+ &earcrx,
+ &sm1_earcrx_cmdc_clk_sel,
+ &sm1_earcrx_cmdc_clk_div,
+ &sm1_earcrx_cmdc_clk,
+ &sm1_earcrx_dmac_clk_sel,
+ &sm1_earcrx_dmac_clk_div,
+ &sm1_earcrx_dmac_clk,
+};
+
+static struct clk_regmap *const clk_pads_regmaps[] = {
+ &s4_tdm_mclk_pad_0,
+ &s4_tdm_mclk_pad_1,
+ &s4_tdm_mclk_pad_2,
+ &s4_tdm_lrclk_pad_0,
+ &s4_tdm_lrclk_pad_1,
+ &s4_tdm_lrclk_pad_2,
+ &s4_tdm_lrclk_pad_3,
+ &s4_tdm_lrclk_pad_4,
+ &s4_tdm_sclk_pad_0,
+ &s4_tdm_sclk_pad_1,
+ &s4_tdm_sclk_pad_2,
+ &s4_tdm_sclk_pad_3,
+ &s4_tdm_sclk_pad_4,
+ &s4_tdm_mclk_pad0_sel,
+ &s4_tdm_mclk_pad1_sel,
+ &s4_tdm_mclk_pad0_div,
+ &s4_tdm_mclk_pad1_div,
+ &s4_tdm_mclk_pad2_sel,
+ &s4_tdm_mclk_pad2_div,
+};
+
struct axg_audio_reset_data {
struct reset_controller_dev rstc;
struct regmap *map;
@@ -1802,7 +2202,8 @@ static int axg_audio_clkc_probe(struct platform_device *pdev)
if (IS_ERR(clk))
return PTR_ERR(clk);
- ret = device_reset(dev);
+ /*some clock control might be no reset*/
+ ret = device_reset_optional(dev);
if (ret) {
dev_err_probe(dev, ret, "failed to reset device\n");
return ret;
@@ -1886,6 +2287,30 @@ static const struct audioclk_data sm1_audioclk_data = {
.max_register = AUDIO_EARCRX_DMAC_CLK_CTRL,
};
+static const struct audioclk_data s4_audioclk_data = {
+ .regmap_clks = s4_clk_regmaps,
+ .regmap_clk_num = ARRAY_SIZE(s4_clk_regmaps),
+ .hw_clks = {
+ .hws = s4_audio_hw_clks,
+ .num = ARRAY_SIZE(s4_audio_hw_clks),
+ },
+ .reset_offset = AUDIO_SM1_SW_RESET0,
+ .reset_num = 39,
+ .max_register = AUDIO_EARCRX_DMAC_CLK_CTRL,
+};
+
+static const struct audioclk_data audioclk_pads_data = {
+ .regmap_clks = clk_pads_regmaps,
+ .regmap_clk_num = ARRAY_SIZE(clk_pads_regmaps),
+ .hw_clks = {
+ .hws = audio_clock_pads_hw_clks,
+ .num = ARRAY_SIZE(audio_clock_pads_hw_clks),
+ },
+ .reset_offset = AUDIO_SM1_SW_RESET0,
+ .reset_num = 0,
+ .max_register = AUDIO_S4_SCLK_PAD_CTRL1,
+};
+
static const struct of_device_id clkc_match_table[] = {
{
.compatible = "amlogic,axg-audio-clkc",
@@ -1896,7 +2321,13 @@ static const struct of_device_id clkc_match_table[] = {
}, {
.compatible = "amlogic,sm1-audio-clkc",
.data = &sm1_audioclk_data
- }, {}
+ }, {
+ .compatible = "amlogic,s4-audio-clkc",
+ .data = &s4_audioclk_data
+ }, {
+ .compatible = "amlogic,clock-pads-clkc",
+ .data = &audioclk_pads_data
+ }, { },
};
MODULE_DEVICE_TABLE(of, clkc_match_table);
diff --git a/drivers/clk/meson/axg-audio.h b/drivers/clk/meson/axg-audio.h
index 9e7765b630c96a8029140539ffda789b7db5277a..24233c40171034eba86c699db0200f07555926af 100644
--- a/drivers/clk/meson/axg-audio.h
+++ b/drivers/clk/meson/axg-audio.h
@@ -67,4 +67,10 @@
#define AUDIO_EARCRX_CMDC_CLK_CTRL 0x0D0
#define AUDIO_EARCRX_DMAC_CLK_CTRL 0x0D4
+/* s4 clock pads use new reg base */
+#define AUDIO_S4_MCLK_PAD_CTRL0 0x0
+#define AUDIO_S4_MCLK_PAD_CTRL1 0x4
+#define AUDIO_S4_SCLK_PAD_CTRL0 0x8
+#define AUDIO_S4_SCLK_PAD_CTRL1 0xC
+
#endif /*__AXG_AUDIO_CLKC_H */
--
2.43.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
` (4 preceding siblings ...)
2025-07-10 3:35 ` [PATCH v5 5/6] clk: meson: axg-audio: Add the mclk pad div for s4 chip jiebing chen via B4 Relay
@ 2025-07-10 3:35 ` jiebing chen via B4 Relay
2025-07-10 9:20 ` Jerome Brunet
2025-07-10 9:32 ` [PATCH v5 0/6] Add support for S4 audio Jerome Brunet
2025-07-10 19:05 ` Rob Herring (Arm)
7 siblings, 1 reply; 20+ messages in thread
From: jiebing chen via B4 Relay @ 2025-07-10 3:35 UTC (permalink / raw)
To: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang,
jiebing chen
From: jiebing chen <jiebing.chen@amlogic.com>
Add basic audio driver support for the Amlogic S4 based
Amlogic AQ222 board.
Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
---
.../boot/dts/amlogic/meson-s4-s805x2-aq222.dts | 218 ++++++++++++
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 387 +++++++++++++++++++++
2 files changed, 605 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
index 6730c44642d2910d42ec0c4adf49fefc3514dbec..47c6b8d63fdfca01281f0935f3dc419af6d86a25 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
@@ -75,6 +75,19 @@ vddio_ao1v8: regulator-vddio-ao1v8 {
regulator-always-on;
};
+ vcc5v_reg: regulator-vcc-5v {
+ compatible = "regulator-fixed";
+ vin-supply = <&main_12v>;
+ regulator-name = "VCC5V";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&gpio GPIOH_7 GPIO_ACTIVE_HIGH>;
+ startup-delay-us = <7000>;
+ enable-active-high;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
/* SY8120B1ABC DC/DC Regulator. */
vddcpu: regulator-vddcpu {
compatible = "pwm-regulator";
@@ -129,6 +142,211 @@ vddcpu: regulator-vddcpu {
<699000 98>,
<689000 100>;
};
+ dmics: audio-codec-1 {
+ compatible = "dmic-codec";
+ #sound-dai-cells = <0>;
+ num-channels = <2>;
+ wakeup-delay-ms = <50>;
+ sound-name-prefix = "MIC";
+ };
+
+ dioo2133: audio-amplifier-0 {
+ compatible = "simple-audio-amplifier";
+ enable-gpios = <&gpio GPIOH_8 GPIO_ACTIVE_HIGH>;
+ VCC-supply = <&vcc5v_reg>;
+ sound-name-prefix = "10U2";
+ };
+
+ spdif_dir: audio-spdif-in {
+ compatible = "linux,spdif-dir";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "DIR";
+ };
+
+ spdif_dit: audio-spdif-out {
+ compatible = "linux,spdif-dit";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "DIT";
+ };
+
+ sound {
+ compatible = "amlogic,axg-sound-card";
+ model = "aq222";
+ audio-widgets = "Line", "Lineout";
+ audio-aux-devs = <&tdmout_a>, <&tdmout_b>, <&tdmout_c>,
+ <&tdmin_a>, <&tdmin_b>, <&tdmin_c>,
+ <&tdmin_lb>, <&dioo2133>;
+ audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
+ "TDMOUT_A IN 1", "FRDDR_B OUT 0",
+ "TDMOUT_A IN 2", "FRDDR_C OUT 0",
+ "TDM_A Playback", "TDMOUT_A OUT",
+ "TDMOUT_B IN 0", "FRDDR_A OUT 1",
+ "TDMOUT_B IN 1", "FRDDR_B OUT 1",
+ "TDMOUT_B IN 2", "FRDDR_C OUT 1",
+ "TDM_B Playback", "TDMOUT_B OUT",
+ "TDMOUT_C IN 0", "FRDDR_A OUT 2",
+ "TDMOUT_C IN 1", "FRDDR_B OUT 2",
+ "TDMOUT_C IN 2", "FRDDR_C OUT 2",
+ "TDM_C Playback", "TDMOUT_C OUT",
+ "SPDIFOUT_A IN 0", "FRDDR_A OUT 3",
+ "SPDIFOUT_A IN 1", "FRDDR_B OUT 3",
+ "SPDIFOUT_A IN 2", "FRDDR_C OUT 3",
+ "SPDIFOUT_B IN 0", "FRDDR_A OUT 4",
+ "SPDIFOUT_B IN 1", "FRDDR_B OUT 4",
+ "SPDIFOUT_B IN 2", "FRDDR_C OUT 4",
+ "TDMIN_A IN 0", "TDM_A Capture",
+ "TDMIN_A IN 1", "TDM_B Capture",
+ "TDMIN_A IN 2", "TDM_C Capture",
+ "TDMIN_A IN 3", "TDM_A Loopback",
+ "TDMIN_A IN 4", "TDM_B Loopback",
+ "TDMIN_A IN 5", "TDM_C Loopback",
+ "TDMIN_B IN 0", "TDM_A Capture",
+ "TDMIN_B IN 1", "TDM_B Capture",
+ "TDMIN_B IN 2", "TDM_C Capture",
+ "TDMIN_B IN 3", "TDM_A Loopback",
+ "TDMIN_B IN 4", "TDM_B Loopback",
+ "TDMIN_B IN 5", "TDM_C Loopback",
+ "TDMIN_C IN 0", "TDM_A Capture",
+ "TDMIN_C IN 1", "TDM_B Capture",
+ "TDMIN_C IN 2", "TDM_C Capture",
+ "TDMIN_C IN 3", "TDM_A Loopback",
+ "TDMIN_C IN 4", "TDM_B Loopback",
+ "TDMIN_C IN 5", "TDM_C Loopback",
+ "TDMIN_LB IN 3", "TDM_A Capture",
+ "TDMIN_LB IN 4", "TDM_B Capture",
+ "TDMIN_LB IN 5", "TDM_C Capture",
+ "TDMIN_LB IN 0", "TDM_A Loopback",
+ "TDMIN_LB IN 1", "TDM_B Loopback",
+ "TDMIN_LB IN 2", "TDM_C Loopback",
+ "TODDR_A IN 0", "TDMIN_A OUT",
+ "TODDR_B IN 0", "TDMIN_A OUT",
+ "TODDR_C IN 0", "TDMIN_A OUT",
+ "TODDR_A IN 1", "TDMIN_B OUT",
+ "TODDR_B IN 1", "TDMIN_B OUT",
+ "TODDR_C IN 1", "TDMIN_B OUT",
+ "TODDR_A IN 2", "TDMIN_C OUT",
+ "TODDR_B IN 2", "TDMIN_C OUT",
+ "TODDR_C IN 2", "TDMIN_C OUT",
+ "TODDR_A IN 3", "SPDIFIN Capture",
+ "TODDR_B IN 3", "SPDIFIN Capture",
+ "TODDR_C IN 3", "SPDIFIN Capture",
+ "TODDR_A IN 6", "TDMIN_LB OUT",
+ "TODDR_B IN 6", "TDMIN_LB OUT",
+ "TODDR_C IN 6", "TDMIN_LB OUT",
+ "10U2 INL", "ACODEC LOLP",
+ "10U2 INR", "ACODEC LORP",
+ "Lineout", "10U2 OUTL",
+ "Lineout", "10U2 OUTR";
+ assigned-clocks = <&clkc_pll CLKID_HIFI_PLL>,
+ <&clkc_pll CLKID_MPLL0>,
+ <&clkc_pll CLKID_MPLL1>;
+ assigned-clock-rates = <1179648000>,
+ <270950400>,
+ <338688000>;
+
+ dai-link-0 {
+ sound-dai = <&frddr_a>;
+ };
+
+ dai-link-1 {
+ sound-dai = <&frddr_b>;
+ };
+
+ dai-link-2 {
+ sound-dai = <&frddr_c>;
+ };
+
+ dai-link-3 {
+ sound-dai = <&toddr_a>;
+ };
+
+ dai-link-4 {
+ sound-dai = <&toddr_b>;
+ };
+
+ dai-link-5 {
+ sound-dai = <&toddr_c>;
+ };
+
+ dai-link-6 {
+ sound-dai = <&tdmif_a>;
+ dai-format = "i2s";
+ dai-tdm-slot-tx-mask-0 = <1 1>;
+ mclk-fs = <256>;
+ codec-0 {
+ sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
+ };
+ codec-1 {
+ sound-dai = <&toacodec TOACODEC_IN_A>;
+ };
+ };
+
+ dai-link-7 {
+ sound-dai = <&tdmif_b>;
+ dai-format = "i2s";
+ dai-tdm-slot-tx-mask-0 = <1 1>;
+ mclk-fs = <256>;
+ codec-0 {
+ sound-dai = <&toacodec TOACODEC_IN_B>;
+ };
+ codec-1 {
+ sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
+ };
+ };
+
+ /* 8ch HDMI interface */
+ dai-link-8 {
+ sound-dai = <&tdmif_c>;
+ dai-format = "i2s";
+ dai-tdm-slot-tx-mask-0 = <1 1>;
+ dai-tdm-slot-tx-mask-1 = <1 1>;
+ dai-tdm-slot-tx-mask-2 = <1 1>;
+ dai-tdm-slot-tx-mask-3 = <1 1>;
+ mclk-fs = <256>;
+ codec-0 {
+ sound-dai = <&tohdmitx TOHDMITX_I2S_IN_C>;
+ };
+ };
+
+ /* spdif hdmi and coax output */
+ dai-link-9 {
+ sound-dai = <&spdifout_a>;
+
+ codec-0 {
+ sound-dai = <&spdif_dit>;
+ };
+
+ codec-1 {
+ sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_A>;
+ };
+ };
+
+ /* spdif hdmi interface */
+ dai-link-10 {
+ sound-dai = <&spdifout_b>;
+
+ codec {
+ sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_B>;
+ };
+ };
+
+ /* spdif coax input */
+ dai-link-11 {
+ sound-dai = <&spdifin>;
+
+ codec {
+ sound-dai = <&spdif_dir>;
+ };
+ };
+
+ dai-link-12 {
+ sound-dai = <&toacodec TOACODEC_OUT>;
+
+ codec {
+ sound-dai = <&acodec>;
+ };
+ };
+ };
};
&pwm_ef {
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 957577d986c0675a503115e1ccbc4387c2051620..3af2fb333cf7b1ca35f1ff7ad8479bcd859e608a 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -11,6 +11,11 @@
#include <dt-bindings/clock/amlogic,s4-peripherals-clkc.h>
#include <dt-bindings/power/meson-s4-power.h>
#include <dt-bindings/reset/amlogic,meson-s4-reset.h>
+#include <dt-bindings/clock/axg-audio-clkc.h>
+#include <dt-bindings/reset/amlogic,meson-axg-audio-arb.h>
+#include <dt-bindings/reset/amlogic,meson-g12a-audio-reset.h>
+#include <dt-bindings/sound/meson-g12a-toacodec.h>
+#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
/ {
cpus {
@@ -849,4 +854,386 @@ emmc: mmc@fe08c000 {
status = "disabled";
};
};
+
+ tdmif_a: audio-controller-0 {
+ compatible = "amlogic,axg-tdm-iface";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TDM_A";
+ clocks = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
+ <&clkc_audio AUD_CLKID_MST_A_LRCLK>,
+ <&clkc_audio AUD_CLKID_MST_A_MCLK>;
+ clock-names = "sclk", "lrclk","mclk";
+ };
+
+ tdmif_b: audio-controller-1 {
+ compatible = "amlogic,axg-tdm-iface";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TDM_B";
+ clocks = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
+ <&clkc_audio AUD_CLKID_MST_B_LRCLK>,
+ <&clkc_audio AUD_CLKID_MST_B_MCLK>;
+ clock-names = "sclk", "lrclk","mclk";
+ };
+
+ tdmif_c: audio-controller-2 {
+ compatible = "amlogic,axg-tdm-iface";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TDM_C";
+ clocks = <&clkc_audio AUD_CLKID_MST_C_SCLK>,
+ <&clkc_audio AUD_CLKID_MST_C_LRCLK>,
+ <&clkc_audio AUD_CLKID_MST_C_MCLK>;
+ clock-names = "sclk", "lrclk","mclk";
+ };
+};
+
+&apb4 {
+ acodec: audio-controller@1a000 {
+ compatible = "amlogic,t9015";
+ reg = <0x0 0x1A000 0x0 0x14>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "ACODEC";
+ clocks = <&clkc_periphs CLKID_ACODEC>;
+ clock-names = "pclk";
+ resets = <&reset RESET_ACODEC>;
+ AVDD-supply = <&vddio_ao1v8>;
+ };
+
+ clkc_audio: clock-controller@330000 {
+ compatible = "amlogic,s4-audio-clkc";
+ reg = <0x0 0x330000 0x0 0xd8>,
+ <0x0 0x330e80 0x0 0x10>;
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
+ clocks = <&clkc_periphs CLKID_AUDIO>,
+ <&clkc_pll CLKID_MPLL0>,
+ <&clkc_pll CLKID_MPLL1>,
+ <&clkc_pll CLKID_MPLL2>,
+ <&clkc_pll CLKID_MPLL3>,
+ <&clkc_pll CLKID_HIFI_PLL>,
+ <&clkc_pll CLKID_FCLK_DIV3>,
+ <&clkc_pll CLKID_FCLK_DIV4>,
+ <&clkc_pll CLKID_FCLK_DIV5>;
+ clock-names = "pclk",
+ "mst_in0",
+ "mst_in1",
+ "mst_in2",
+ "mst_in3",
+ "mst_in4",
+ "mst_in5",
+ "mst_in6",
+ "mst_in7";
+
+ resets = <&reset RESET_AUDIO>;
+ };
+
+ clock-controller@330e80 {
+ compatible = "amlogic,clock-pads-clkc";
+ reg = <0x0 0x330e80 0x0 0x10>;
+ #clock-cells = <1>;
+ power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
+ clocks = <&clkc_periphs CLKID_AUDIO>,
+ <&clkc_pll CLKID_MPLL0>,
+ <&clkc_pll CLKID_MPLL1>,
+ <&clkc_pll CLKID_MPLL2>,
+ <&clkc_pll CLKID_MPLL3>,
+ <&clkc_pll CLKID_HIFI_PLL>,
+ <&clkc_pll CLKID_FCLK_DIV3>,
+ <&clkc_pll CLKID_FCLK_DIV4>,
+ <&clkc_pll CLKID_FCLK_DIV5>;
+ clock-names = "pclk",
+ "mst_in0",
+ "mst_in1",
+ "mst_in2",
+ "mst_in3",
+ "mst_in4",
+ "mst_in5",
+ "mst_in6",
+ "mst_in7";
+ };
+
+ toddr_a: audio-controller@330100 {
+ compatible = "amlogic,sm1-toddr",
+ "amlogic,axg-toddr";
+ reg = <0x0 0x330100 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TODDR_A";
+ interrupts = <GIC_SPI 32 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_TODDR_A>;
+ resets = <&arb AXG_ARB_TODDR_A>,
+ <&clkc_audio AUD_RESET_TODDR_A>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <8192>;
+ };
+
+ toddr_b: audio-controller@330140 {
+ compatible = "amlogic,sm1-toddr",
+ "amlogic,axg-toddr";
+ reg = <0x0 0x330140 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TODDR_B";
+ interrupts = <GIC_SPI 33 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_TODDR_B>;
+ resets = <&arb AXG_ARB_TODDR_B>,
+ <&clkc_audio AUD_RESET_TODDR_B>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <256>;
+ };
+
+ toddr_c: audio-controller@330180 {
+ compatible = "amlogic,sm1-toddr",
+ "amlogic,axg-toddr";
+ reg = <0x0 0x330180 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TODDR_C";
+ interrupts = <GIC_SPI 34 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_TODDR_C>;
+ resets = <&arb AXG_ARB_TODDR_C>,
+ <&clkc_audio AUD_RESET_TODDR_C>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <256>;
+ };
+
+ frddr_a: audio-controller@3301c0 {
+ compatible = "amlogic,sm1-frddr",
+ "amlogic,axg-frddr";
+ reg = <0x0 0x3301c0 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "FRDDR_A";
+ interrupts = <GIC_SPI 36 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_FRDDR_A>;
+ resets = <&arb AXG_ARB_FRDDR_A>,
+ <&clkc_audio AUD_RESET_FRDDR_A>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <512>;
+ };
+
+ frddr_b: audio-controller@330200 {
+ compatible = "amlogic,sm1-frddr",
+ "amlogic,axg-frddr";
+ reg = <0x0 0x330200 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "FRDDR_B";
+ interrupts = <GIC_SPI 37 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_FRDDR_B>;
+ resets = <&arb AXG_ARB_FRDDR_B>,
+ <&clkc_audio AUD_RESET_FRDDR_B>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <256>;
+ };
+
+ frddr_c: audio-controller@330240 {
+ compatible = "amlogic,sm1-frddr",
+ "amlogic,axg-frddr";
+ reg = <0x0 0x330240 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "FRDDR_C";
+ interrupts = <GIC_SPI 38 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_FRDDR_C>;
+ resets = <&arb AXG_ARB_FRDDR_C>,
+ <&clkc_audio AUD_RESET_FRDDR_C>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <256>;
+ };
+
+ arb: reset-controller@330280 {
+ compatible = "amlogic,meson-sm1-audio-arb";
+ reg = <0x0 0x330280 0x0 0x4>;
+ #reset-cells = <1>;
+ clocks = <&clkc_audio AUD_CLKID_DDR_ARB>;
+ };
+
+ tdmin_a: audio-controller@330300 {
+ compatible = "amlogic,sm1-tdmin";
+ reg = <0x0 0x330300 0x0 0x40>;
+ sound-name-prefix = "TDMIN_A";
+ resets = <&clkc_audio AUD_RESET_TDMIN_A>;
+ clocks = <&clkc_audio AUD_CLKID_TDMIN_A>,
+ <&clkc_audio AUD_CLKID_TDMIN_A_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_A_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ tdmin_b: audio-controller@330340 {
+ compatible = "amlogic,sm1-tdmin";
+ reg = <0x0 0x330340 0x0 0x40>;
+ sound-name-prefix = "TDMIN_B";
+ resets = <&clkc_audio AUD_RESET_TDMIN_B>;
+ clocks = <&clkc_audio AUD_CLKID_TDMIN_B>,
+ <&clkc_audio AUD_CLKID_TDMIN_B_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_B_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ tdmin_c: audio-controller@330380 {
+ compatible = "amlogic,sm1-tdmin";
+ reg = <0x0 0x330380 0x0 0x40>;
+ sound-name-prefix = "TDMIN_C";
+ resets = <&clkc_audio AUD_RESET_TDMIN_C>;
+ clocks = <&clkc_audio AUD_CLKID_TDMIN_C>,
+ <&clkc_audio AUD_CLKID_TDMIN_C_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_C_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ tdmin_lb: audio-controller@3303c0 {
+ compatible = "amlogic,sm1-tdmin";
+ reg = <0x0 0x3303c0 0x0 0x40>;
+ sound-name-prefix = "TDMIN_LB";
+ resets = <&clkc_audio AUD_RESET_TDMIN_LB>;
+ clocks = <&clkc_audio AUD_CLKID_TDMIN_LB>,
+ <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ spdifin: audio-controller@330400 {
+ compatible = "amlogic,g12a-spdifin",
+ "amlogic,axg-spdifin";
+ reg = <0x0 0x330400 0x0 0x30>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "SPDIFIN";
+ interrupts = <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_SPDIFIN>,
+ <&clkc_audio AUD_CLKID_SPDIFIN_CLK>;
+ clock-names = "pclk", "refclk";
+ resets = <&clkc_audio AUD_RESET_SPDIFIN>;
+ };
+
+ spdifout_a: audio-controller@330480 {
+ compatible = "amlogic,g12a-spdifout",
+ "amlogic,axg-spdifout";
+ reg = <0x0 0x330480 0x0 0x50>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "SPDIFOUT_A";
+ clocks = <&clkc_audio AUD_CLKID_SPDIFOUT>,
+ <&clkc_audio AUD_CLKID_SPDIFOUT_CLK>;
+ clock-names = "pclk", "mclk";
+ resets = <&clkc_audio AUD_RESET_SPDIFOUT>;
+ };
+
+ tdmout_a: audio-controller@330500 {
+ compatible = "amlogic,sm1-tdmout";
+ reg = <0x0 0x330500 0x0 0x40>;
+ sound-name-prefix = "TDMOUT_A";
+ resets = <&clkc_audio AUD_RESET_TDMOUT_A>;
+ clocks = <&clkc_audio AUD_CLKID_TDMOUT_A>,
+ <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ tdmout_b: audio-controller@330540 {
+ compatible = "amlogic,sm1-tdmout";
+ reg = <0x0 0x330540 0x0 0x40>;
+ sound-name-prefix = "TDMOUT_B";
+ resets = <&clkc_audio AUD_RESET_TDMOUT_B>;
+ clocks = <&clkc_audio AUD_CLKID_TDMOUT_B>,
+ <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ tdmout_c: audio-controller@330580 {
+ compatible = "amlogic,sm1-tdmout";
+ reg = <0x0 0x330580 0x0 0x40>;
+ sound-name-prefix = "TDMOUT_C";
+ resets = <&clkc_audio AUD_RESET_TDMOUT_C>;
+ clocks = <&clkc_audio AUD_CLKID_TDMOUT_C>,
+ <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK>,
+ <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK_SEL>,
+ <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>,
+ <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>;
+ clock-names = "pclk", "sclk", "sclk_sel",
+ "lrclk", "lrclk_sel";
+ };
+
+ spdifout_b: audio-controller@330680 {
+ compatible = "amlogic,g12a-spdifout",
+ "amlogic,axg-spdifout";
+ reg = <0x0 0x330680 0x0 0x50>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "SPDIFOUT_B";
+ clocks = <&clkc_audio AUD_CLKID_SPDIFOUT_B>,
+ <&clkc_audio AUD_CLKID_SPDIFOUT_B_CLK>;
+ clock-names = "pclk", "mclk";
+ resets = <&clkc_audio AUD_RESET_SPDIFOUT_B>;
+ };
+
+ toacodec: audio-controller@330740 {
+ compatible = "amlogic,s4-toacodec",
+ "amlogic,g12a-toacodec";
+ reg = <0x0 0x330740 0x0 0x4>;
+ sound-name-prefix = "TOACODEC";
+ #sound-dai-cells = <1>;
+ resets = <&clkc_audio AUD_RESET_TOACODEC>;
+ };
+
+ tohdmitx: audio-controller@330744 {
+ compatible = "amlogic,sm1-tohdmitx",
+ "amlogic,g12a-tohdmitx";
+ reg = <0x0 0x330744 0x0 0x4>;
+ #sound-dai-cells = <1>;
+ sound-name-prefix = "TOHDMITX";
+ resets = <&clkc_audio AUD_RESET_TOHDMITX>;
+ };
+
+ toddr_d: audio-controller@330840 {
+ compatible = "amlogic,sm1-toddr",
+ "amlogic,axg-toddr";
+ reg = <0x0 0x330840 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "TODDR_D";
+ interrupts = <GIC_SPI 45 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_TODDR_D>;
+ resets = <&arb AXG_ARB_TODDR_D>,
+ <&clkc_audio AUD_RESET_TODDR_D>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <256>;
+ };
+
+ frddr_d: audio-controller@330880 {
+ compatible = "amlogic,sm1-frddr",
+ "amlogic,axg-frddr";
+ reg = <0x0 0x330880 0x0 0x2c>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "FRDDR_D";
+ interrupts = <GIC_SPI 46 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_audio AUD_CLKID_FRDDR_D>;
+ resets = <&arb AXG_ARB_FRDDR_D>,
+ <&clkc_audio AUD_RESET_FRDDR_D>;
+ reset-names = "arb", "rst";
+ amlogic,fifo-depth = <256>;
+ };
+
+ pdm: audio-controller@331000 {
+ compatible = "amlogic,sm1-pdm",
+ "amlogic,axg-pdm";
+ reg = <0x0 0x331000 0x0 0x34>;
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "PDM";
+ clocks = <&clkc_audio AUD_CLKID_PDM>,
+ <&clkc_audio AUD_CLKID_PDM_DCLK>,
+ <&clkc_audio AUD_CLKID_PDM_SYSCLK>;
+ clock-names = "pclk", "dclk", "sysclk";
+ resets = <&clkc_audio AUD_RESET_PDM>;
+ };
};
--
2.43.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc
2025-07-10 3:35 ` [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc jiebing chen via B4 Relay
@ 2025-07-10 8:57 ` Jerome Brunet
2025-07-10 9:56 ` Krzysztof Kozlowski
1 sibling, 0 replies; 20+ messages in thread
From: Jerome Brunet @ 2025-07-10 8:57 UTC (permalink / raw)
To: jiebing chen via B4 Relay
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Neil Armstrong,
Kevin Hilman, Martin Blumenstingl, Michael Turquette,
Stephen Boyd, jiebing.chen, linux-sound, devicetree, linux-kernel,
linux-arm-kernel, linux-amlogic, linux-clk, jian.xu, shuai.li,
zhe.wang
On Thu 10 Jul 2025 at 11:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@kernel.org> wrote:
> From: jiebing chen <jiebing.chen@amlogic.com>
>
> The audio power domain has been detected on S4 device.
detected ?
> It must be enabled prior to audio operations.
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> .../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 +++++++++++++++++++++-
> 1 file changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
> index fd7982dd4ceab82389167079c2258a9acff51a76..c3f0bb9b2ff050394828ba339a7be0c9c48e9a76 100644
> --- a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
> +++ b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
> @@ -21,6 +21,8 @@ properties:
> - amlogic,axg-audio-clkc
> - amlogic,g12a-audio-clkc
> - amlogic,sm1-audio-clkc
> + - amlogic,s4-audio-clkc
> + - amlogic,clock-pads-clkc
>
> '#clock-cells':
> const: 1
> @@ -100,13 +102,15 @@ properties:
> resets:
> description: internal reset line
>
> + power-domains:
> + maxItems: 1
> +
> required:
> - compatible
> - '#clock-cells'
> - reg
> - clocks
> - clock-names
> - - resets
Not related to the decription ... and fishy ...
>
> allOf:
> - if:
> @@ -116,12 +120,37 @@ allOf:
> enum:
> - amlogic,g12a-audio-clkc
> - amlogic,sm1-audio-clkc
> + - amlogic,s4-audio-clkc
> then:
> required:
> - '#reset-cells'
> else:
> properties:
> '#reset-cells': false
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - amlogic,s4-audio-clkc
> + then:
> + required:
> + - power-domains
> + else:
> + properties:
> + power-domains: false
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - amlogic,clock-pads-clkc
> + then:
> + properties:
> + resets: false
> + else:
> + required:
> + - resets
>
> additionalProperties: false
>
> @@ -129,6 +158,7 @@ examples:
> - |
> #include <dt-bindings/clock/axg-clkc.h>
> #include <dt-bindings/reset/amlogic,meson-axg-reset.h>
> + #include <dt-bindings/power/meson-s4-power.h>
> apb {
> #address-cells = <2>;
> #size-cells = <2>;
> @@ -198,4 +228,27 @@ examples:
> "slv_lrclk9";
> resets = <&reset RESET_AUDIO>;
> };
> + clk_pad: clock-controller@330e80 {
> + compatible = "amlogic,clock-pads-clkc";
> + reg = <0x0 0x330e80 0x0 0x10>;
> + #clock-cells = <1>;
> + clocks = <&clkc_periphs CLKID_AUDIO>,
> + <&clkc_pll CLKID_MPLL0>,
> + <&clkc_pll CLKID_MPLL1>,
> + <&clkc_pll CLKID_MPLL2>,
> + <&clkc_pll CLKID_MPLL3>,
> + <&clkc_pll CLKID_HIFI_PLL>,
> + <&clkc_pll CLKID_FCLK_DIV3>,
> + <&clkc_pll CLKID_FCLK_DIV4>,
> + <&clkc_pll CLKID_FCLK_DIV5>;
> + clock-names = "pclk",
> + "mst_in0",
> + "mst_in1",
> + "mst_in2",
> + "mst_in3",
> + "mst_in4",
> + "mst_in5",
> + "mst_in6",
> + "mst_in7";
> + };
> };
--
Jerome
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 5/6] clk: meson: axg-audio: Add the mclk pad div for s4 chip
2025-07-10 3:35 ` [PATCH v5 5/6] clk: meson: axg-audio: Add the mclk pad div for s4 chip jiebing chen via B4 Relay
@ 2025-07-10 9:11 ` Jerome Brunet
0 siblings, 0 replies; 20+ messages in thread
From: Jerome Brunet @ 2025-07-10 9:11 UTC (permalink / raw)
To: jiebing chen via B4 Relay
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Neil Armstrong,
Kevin Hilman, Martin Blumenstingl, Michael Turquette,
Stephen Boyd, jiebing.chen, linux-sound, devicetree, linux-kernel,
linux-arm-kernel, linux-amlogic, linux-clk, jian.xu, shuai.li,
zhe.wang
On Thu 10 Jul 2025 at 11:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@kernel.org> wrote:
> From: jiebing chen <jiebing.chen@amlogic.com>
>
> Add MCLK pad divider support and expanded LRCLK/SCLK pad count to five.
This does not describe what the change does and you have a fair amount
of rebasing to do
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> drivers/clk/meson/axg-audio.c | 435 +++++++++++++++++++++++++++++++++++++++++-
> drivers/clk/meson/axg-audio.h | 6 +
> 2 files changed, 439 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clk/meson/axg-audio.c b/drivers/clk/meson/axg-audio.c
> index 9df627b142f89788966ede0262aaaf39e13f0b49..7dc1f464bd55fa33ca3260002ed1b3929061f99b 100644
> --- a/drivers/clk/meson/axg-audio.c
> +++ b/drivers/clk/meson/axg-audio.c
> @@ -323,6 +323,16 @@ static const struct clk_parent_data lrclk_pad_ctrl_parent_data[] = {
> AUD_MUX(_name, _reg, 0x7, _shift, 0, _parents, \
> CLK_SET_RATE_NO_REPARENT)
>
> +#define AUD_MCLK_PAD_MUX(_name, _reg, _shift) \
> + AUD_MUX(_name##_sel, _reg, 0x7, _shift, CLK_MUX_ROUND_CLOSEST, \
> + mclk_pad_ctrl_parent_data, 0)
> +#define AUD_MCLK_PAD_DIV(_name, _reg, _shift) \
> + AUD_DIV(_name##_div, _reg, _shift, 8, CLK_DIVIDER_ROUND_CLOSEST, \
> + aud_##_name##_sel, CLK_SET_RATE_PARENT)
> +#define AUD_MCLK_PAD_GATE(_name, _reg, _shift) \
> + AUD_GATE(_name, _reg, _shift, aud_##_name##_div, \
> + CLK_SET_RATE_PARENT)
> +
> /* Common Clocks */
> static struct clk_regmap ddr_arb =
> AUD_PCLK_GATE(ddr_arb, AUDIO_CLK_GATE_EN, 0);
> @@ -826,6 +836,49 @@ static struct clk_regmap sm1_tdm_sclk_pad_1 = AUD_TDM_PAD_CTRL(
> static struct clk_regmap sm1_tdm_sclk_pad_2 = AUD_TDM_PAD_CTRL(
> tdm_sclk_pad_2, AUDIO_SM1_MST_PAD_CTRL1, 8, sclk_pad_ctrl_parent_data);
>
> +static struct clk_regmap s4_tdm_mclk_pad0_sel =
> + AUD_MCLK_PAD_MUX(mclk_pad0, AUDIO_S4_MCLK_PAD_CTRL0, 8);
> +static struct clk_regmap s4_tdm_mclk_pad1_sel =
> + AUD_MCLK_PAD_MUX(mclk_pad1, AUDIO_S4_MCLK_PAD_CTRL0, 24);
> +static struct clk_regmap s4_tdm_mclk_pad2_sel =
> + AUD_MCLK_PAD_MUX(mclk_pad2, AUDIO_S4_MCLK_PAD_CTRL1, 8);
> +
> +static struct clk_regmap s4_tdm_mclk_pad0_div =
> + AUD_MCLK_PAD_DIV(mclk_pad0, AUDIO_S4_MCLK_PAD_CTRL0, 0);
> +static struct clk_regmap s4_tdm_mclk_pad1_div =
> + AUD_MCLK_PAD_DIV(mclk_pad1, AUDIO_S4_MCLK_PAD_CTRL0, 16);
> +static struct clk_regmap s4_tdm_mclk_pad2_div =
> + AUD_MCLK_PAD_DIV(mclk_pad2, AUDIO_S4_MCLK_PAD_CTRL1, 0);
> +
> +static struct clk_regmap s4_tdm_mclk_pad_0 =
> + AUD_MCLK_PAD_GATE(mclk_pad0, AUDIO_S4_MCLK_PAD_CTRL0, 15);
> +static struct clk_regmap s4_tdm_mclk_pad_1 =
> + AUD_MCLK_PAD_GATE(mclk_pad1, AUDIO_S4_MCLK_PAD_CTRL0, 31);
> +static struct clk_regmap s4_tdm_mclk_pad_2 =
> + AUD_MCLK_PAD_GATE(mclk_pad2, AUDIO_S4_MCLK_PAD_CTRL1, 15);
> +
> +static struct clk_regmap s4_tdm_sclk_pad_0 =
> + AUD_TDM_PAD_CTRL(tdm_sclk_pad_0, AUDIO_S4_SCLK_PAD_CTRL0, 0, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_sclk_pad_1 =
> + AUD_TDM_PAD_CTRL(tdm_sclk_pad_1, AUDIO_S4_SCLK_PAD_CTRL0, 4, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_sclk_pad_2 =
> + AUD_TDM_PAD_CTRL(tdm_sclk_pad_2, AUDIO_S4_SCLK_PAD_CTRL0, 8, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_sclk_pad_3 =
> + AUD_TDM_PAD_CTRL(tdm_sclk_pad_3, AUDIO_S4_SCLK_PAD_CTRL0, 16, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_sclk_pad_4 =
> + AUD_TDM_PAD_CTRL(tdm_sclk_pad_4, AUDIO_S4_SCLK_PAD_CTRL0, 20, lrclk_pad_ctrl_parent_data);
> +
> +static struct clk_regmap s4_tdm_lrclk_pad_0 =
> + AUD_TDM_PAD_CTRL(tdm_lrclk_pad_0, AUDIO_S4_SCLK_PAD_CTRL1, 0, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_lrclk_pad_1 =
> + AUD_TDM_PAD_CTRL(tdm_lrclk_pad_1, AUDIO_S4_SCLK_PAD_CTRL1, 4, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_lrclk_pad_2 =
> + AUD_TDM_PAD_CTRL(tdm_lrclk_pad_2, AUDIO_S4_SCLK_PAD_CTRL1, 8, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_lrclk_pad_3 =
> + AUD_TDM_PAD_CTRL(tdm_lrclk_pad_3, AUDIO_S4_SCLK_PAD_CTRL1, 16, lrclk_pad_ctrl_parent_data);
> +static struct clk_regmap s4_tdm_lrclk_pad_4 =
> + AUD_TDM_PAD_CTRL(tdm_lrclk_pad_4, AUDIO_S4_SCLK_PAD_CTRL1, 20, lrclk_pad_ctrl_parent_data);
> +
> /*
> * Array of all clocks provided by this provider
> * The input clocks of the controller will be populated at runtime
> @@ -1257,6 +1310,182 @@ static struct clk_hw *sm1_audio_hw_clks[] = {
> [AUD_CLKID_EARCRX_DMAC] = &sm1_earcrx_dmac_clk.hw,
> };
>
> +/*
> + * Array of all S4 clocks provided by this provider
> + * The input clocks of the controller will be populated at runtime
> + */
> +static struct clk_hw *s4_audio_hw_clks[] = {
> + [AUD_CLKID_DDR_ARB] = &ddr_arb.hw,
> + [AUD_CLKID_PDM] = &pdm.hw,
> + [AUD_CLKID_TDMIN_A] = &tdmin_a.hw,
> + [AUD_CLKID_TDMIN_B] = &tdmin_b.hw,
> + [AUD_CLKID_TDMIN_C] = &tdmin_c.hw,
> + [AUD_CLKID_TDMIN_LB] = &tdmin_lb.hw,
> + [AUD_CLKID_TDMOUT_A] = &tdmout_a.hw,
> + [AUD_CLKID_TDMOUT_B] = &tdmout_b.hw,
> + [AUD_CLKID_TDMOUT_C] = &tdmout_c.hw,
> + [AUD_CLKID_FRDDR_A] = &frddr_a.hw,
> + [AUD_CLKID_FRDDR_B] = &frddr_b.hw,
> + [AUD_CLKID_FRDDR_C] = &frddr_c.hw,
> + [AUD_CLKID_TODDR_A] = &toddr_a.hw,
> + [AUD_CLKID_TODDR_B] = &toddr_b.hw,
> + [AUD_CLKID_TODDR_C] = &toddr_c.hw,
> + [AUD_CLKID_LOOPBACK] = &loopback.hw,
> + [AUD_CLKID_SPDIFIN] = &spdifin.hw,
> + [AUD_CLKID_SPDIFOUT] = &spdifout.hw,
> + [AUD_CLKID_RESAMPLE] = &resample.hw,
> + [AUD_CLKID_SPDIFOUT_B] = &spdifout_b.hw,
> + [AUD_CLKID_MST_A_MCLK_SEL] = &sm1_mst_a_mclk_sel.hw,
> + [AUD_CLKID_MST_B_MCLK_SEL] = &sm1_mst_b_mclk_sel.hw,
> + [AUD_CLKID_MST_C_MCLK_SEL] = &sm1_mst_c_mclk_sel.hw,
> + [AUD_CLKID_MST_D_MCLK_SEL] = &sm1_mst_d_mclk_sel.hw,
> + [AUD_CLKID_MST_E_MCLK_SEL] = &sm1_mst_e_mclk_sel.hw,
> + [AUD_CLKID_MST_F_MCLK_SEL] = &sm1_mst_f_mclk_sel.hw,
> + [AUD_CLKID_MST_A_MCLK_DIV] = &sm1_mst_a_mclk_div.hw,
> + [AUD_CLKID_MST_B_MCLK_DIV] = &sm1_mst_b_mclk_div.hw,
> + [AUD_CLKID_MST_C_MCLK_DIV] = &sm1_mst_c_mclk_div.hw,
> + [AUD_CLKID_MST_D_MCLK_DIV] = &sm1_mst_d_mclk_div.hw,
> + [AUD_CLKID_MST_E_MCLK_DIV] = &sm1_mst_e_mclk_div.hw,
> + [AUD_CLKID_MST_F_MCLK_DIV] = &sm1_mst_f_mclk_div.hw,
> + [AUD_CLKID_MST_A_MCLK] = &sm1_mst_a_mclk.hw,
> + [AUD_CLKID_MST_B_MCLK] = &sm1_mst_b_mclk.hw,
> + [AUD_CLKID_MST_C_MCLK] = &sm1_mst_c_mclk.hw,
> + [AUD_CLKID_MST_D_MCLK] = &sm1_mst_d_mclk.hw,
> + [AUD_CLKID_MST_E_MCLK] = &sm1_mst_e_mclk.hw,
> + [AUD_CLKID_MST_F_MCLK] = &sm1_mst_f_mclk.hw,
> + [AUD_CLKID_SPDIFOUT_CLK_SEL] = &spdifout_clk_sel.hw,
> + [AUD_CLKID_SPDIFOUT_CLK_DIV] = &spdifout_clk_div.hw,
> + [AUD_CLKID_SPDIFOUT_CLK] = &spdifout_clk.hw,
> + [AUD_CLKID_SPDIFOUT_B_CLK_SEL] = &spdifout_b_clk_sel.hw,
> + [AUD_CLKID_SPDIFOUT_B_CLK_DIV] = &spdifout_b_clk_div.hw,
> + [AUD_CLKID_SPDIFOUT_B_CLK] = &spdifout_b_clk.hw,
> + [AUD_CLKID_SPDIFIN_CLK_SEL] = &spdifin_clk_sel.hw,
> + [AUD_CLKID_SPDIFIN_CLK_DIV] = &spdifin_clk_div.hw,
> + [AUD_CLKID_SPDIFIN_CLK] = &spdifin_clk.hw,
> + [AUD_CLKID_PDM_DCLK_SEL] = &pdm_dclk_sel.hw,
> + [AUD_CLKID_PDM_DCLK_DIV] = &pdm_dclk_div.hw,
> + [AUD_CLKID_PDM_DCLK] = &pdm_dclk.hw,
> + [AUD_CLKID_PDM_SYSCLK_SEL] = &pdm_sysclk_sel.hw,
> + [AUD_CLKID_PDM_SYSCLK_DIV] = &pdm_sysclk_div.hw,
> + [AUD_CLKID_PDM_SYSCLK] = &pdm_sysclk.hw,
> + [AUD_CLKID_MST_A_SCLK_PRE_EN] = &mst_a_sclk_pre_en.hw,
> + [AUD_CLKID_MST_B_SCLK_PRE_EN] = &mst_b_sclk_pre_en.hw,
> + [AUD_CLKID_MST_C_SCLK_PRE_EN] = &mst_c_sclk_pre_en.hw,
> + [AUD_CLKID_MST_D_SCLK_PRE_EN] = &mst_d_sclk_pre_en.hw,
> + [AUD_CLKID_MST_E_SCLK_PRE_EN] = &mst_e_sclk_pre_en.hw,
> + [AUD_CLKID_MST_F_SCLK_PRE_EN] = &mst_f_sclk_pre_en.hw,
> + [AUD_CLKID_MST_A_SCLK_DIV] = &mst_a_sclk_div.hw,
> + [AUD_CLKID_MST_B_SCLK_DIV] = &mst_b_sclk_div.hw,
> + [AUD_CLKID_MST_C_SCLK_DIV] = &mst_c_sclk_div.hw,
> + [AUD_CLKID_MST_D_SCLK_DIV] = &mst_d_sclk_div.hw,
> + [AUD_CLKID_MST_E_SCLK_DIV] = &mst_e_sclk_div.hw,
> + [AUD_CLKID_MST_F_SCLK_DIV] = &mst_f_sclk_div.hw,
> + [AUD_CLKID_MST_A_SCLK_POST_EN] = &mst_a_sclk_post_en.hw,
> + [AUD_CLKID_MST_B_SCLK_POST_EN] = &mst_b_sclk_post_en.hw,
> + [AUD_CLKID_MST_C_SCLK_POST_EN] = &mst_c_sclk_post_en.hw,
> + [AUD_CLKID_MST_D_SCLK_POST_EN] = &mst_d_sclk_post_en.hw,
> + [AUD_CLKID_MST_E_SCLK_POST_EN] = &mst_e_sclk_post_en.hw,
> + [AUD_CLKID_MST_F_SCLK_POST_EN] = &mst_f_sclk_post_en.hw,
> + [AUD_CLKID_MST_A_SCLK] = &mst_a_sclk.hw,
> + [AUD_CLKID_MST_B_SCLK] = &mst_b_sclk.hw,
> + [AUD_CLKID_MST_C_SCLK] = &mst_c_sclk.hw,
> + [AUD_CLKID_MST_D_SCLK] = &mst_d_sclk.hw,
> + [AUD_CLKID_MST_E_SCLK] = &mst_e_sclk.hw,
> + [AUD_CLKID_MST_F_SCLK] = &mst_f_sclk.hw,
> + [AUD_CLKID_MST_A_LRCLK_DIV] = &mst_a_lrclk_div.hw,
> + [AUD_CLKID_MST_B_LRCLK_DIV] = &mst_b_lrclk_div.hw,
> + [AUD_CLKID_MST_C_LRCLK_DIV] = &mst_c_lrclk_div.hw,
> + [AUD_CLKID_MST_D_LRCLK_DIV] = &mst_d_lrclk_div.hw,
> + [AUD_CLKID_MST_E_LRCLK_DIV] = &mst_e_lrclk_div.hw,
> + [AUD_CLKID_MST_F_LRCLK_DIV] = &mst_f_lrclk_div.hw,
> + [AUD_CLKID_MST_A_LRCLK] = &mst_a_lrclk.hw,
> + [AUD_CLKID_MST_B_LRCLK] = &mst_b_lrclk.hw,
> + [AUD_CLKID_MST_C_LRCLK] = &mst_c_lrclk.hw,
> + [AUD_CLKID_MST_D_LRCLK] = &mst_d_lrclk.hw,
> + [AUD_CLKID_MST_E_LRCLK] = &mst_e_lrclk.hw,
> + [AUD_CLKID_MST_F_LRCLK] = &mst_f_lrclk.hw,
> + [AUD_CLKID_TDMIN_A_SCLK_SEL] = &tdmin_a_sclk_sel.hw,
> + [AUD_CLKID_TDMIN_B_SCLK_SEL] = &tdmin_b_sclk_sel.hw,
> + [AUD_CLKID_TDMIN_C_SCLK_SEL] = &tdmin_c_sclk_sel.hw,
> + [AUD_CLKID_TDMIN_LB_SCLK_SEL] = &tdmin_lb_sclk_sel.hw,
> + [AUD_CLKID_TDMOUT_A_SCLK_SEL] = &tdmout_a_sclk_sel.hw,
> + [AUD_CLKID_TDMOUT_B_SCLK_SEL] = &tdmout_b_sclk_sel.hw,
> + [AUD_CLKID_TDMOUT_C_SCLK_SEL] = &tdmout_c_sclk_sel.hw,
> + [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] = &tdmin_a_sclk_pre_en.hw,
> + [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] = &tdmin_b_sclk_pre_en.hw,
> + [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] = &tdmin_c_sclk_pre_en.hw,
> + [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] = &tdmin_lb_sclk_pre_en.hw,
> + [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] = &tdmout_a_sclk_pre_en.hw,
> + [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] = &tdmout_b_sclk_pre_en.hw,
> + [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] = &tdmout_c_sclk_pre_en.hw,
> + [AUD_CLKID_TDMIN_A_SCLK_POST_EN] = &tdmin_a_sclk_post_en.hw,
> + [AUD_CLKID_TDMIN_B_SCLK_POST_EN] = &tdmin_b_sclk_post_en.hw,
> + [AUD_CLKID_TDMIN_C_SCLK_POST_EN] = &tdmin_c_sclk_post_en.hw,
> + [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] = &tdmin_lb_sclk_post_en.hw,
> + [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] = &tdmout_a_sclk_post_en.hw,
> + [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] = &tdmout_b_sclk_post_en.hw,
> + [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] = &tdmout_c_sclk_post_en.hw,
> + [AUD_CLKID_TDMIN_A_SCLK] = &tdmin_a_sclk.hw,
> + [AUD_CLKID_TDMIN_B_SCLK] = &tdmin_b_sclk.hw,
> + [AUD_CLKID_TDMIN_C_SCLK] = &tdmin_c_sclk.hw,
> + [AUD_CLKID_TDMIN_LB_SCLK] = &tdmin_lb_sclk.hw,
> + [AUD_CLKID_TDMOUT_A_SCLK] = &g12a_tdmout_a_sclk.hw,
> + [AUD_CLKID_TDMOUT_B_SCLK] = &g12a_tdmout_b_sclk.hw,
> + [AUD_CLKID_TDMOUT_C_SCLK] = &g12a_tdmout_c_sclk.hw,
> + [AUD_CLKID_TDMIN_A_LRCLK] = &tdmin_a_lrclk.hw,
> + [AUD_CLKID_TDMIN_B_LRCLK] = &tdmin_b_lrclk.hw,
> + [AUD_CLKID_TDMIN_C_LRCLK] = &tdmin_c_lrclk.hw,
> + [AUD_CLKID_TDMIN_LB_LRCLK] = &tdmin_lb_lrclk.hw,
> + [AUD_CLKID_TDMOUT_A_LRCLK] = &tdmout_a_lrclk.hw,
> + [AUD_CLKID_TDMOUT_B_LRCLK] = &tdmout_b_lrclk.hw,
> + [AUD_CLKID_TDMOUT_C_LRCLK] = &tdmout_c_lrclk.hw,
> + [AUD_CLKID_TOP] = &sm1_aud_top.hw,
> + [AUD_CLKID_TORAM] = &toram.hw,
> + [AUD_CLKID_EQDRC] = &eqdrc.hw,
> + [AUD_CLKID_RESAMPLE_B] = &resample_b.hw,
> + [AUD_CLKID_TOVAD] = &tovad.hw,
> + [AUD_CLKID_LOCKER] = &locker.hw,
> + [AUD_CLKID_SPDIFIN_LB] = &spdifin_lb.hw,
> + [AUD_CLKID_FRDDR_D] = &frddr_d.hw,
> + [AUD_CLKID_TODDR_D] = &toddr_d.hw,
> + [AUD_CLKID_LOOPBACK_B] = &loopback_b.hw,
> + [AUD_CLKID_CLK81_EN] = &sm1_clk81_en.hw,
> + [AUD_CLKID_SYSCLK_A_DIV] = &sm1_sysclk_a_div.hw,
> + [AUD_CLKID_SYSCLK_A_EN] = &sm1_sysclk_a_en.hw,
> + [AUD_CLKID_SYSCLK_B_DIV] = &sm1_sysclk_b_div.hw,
> + [AUD_CLKID_SYSCLK_B_EN] = &sm1_sysclk_b_en.hw,
> + [AUD_CLKID_EARCRX] = &earcrx.hw,
> + [AUD_CLKID_EARCRX_CMDC_SEL] = &sm1_earcrx_cmdc_clk_sel.hw,
> + [AUD_CLKID_EARCRX_CMDC_DIV] = &sm1_earcrx_cmdc_clk_div.hw,
> + [AUD_CLKID_EARCRX_CMDC] = &sm1_earcrx_cmdc_clk.hw,
> + [AUD_CLKID_EARCRX_DMAC_SEL] = &sm1_earcrx_dmac_clk_sel.hw,
> + [AUD_CLKID_EARCRX_DMAC_DIV] = &sm1_earcrx_dmac_clk_div.hw,
> + [AUD_CLKID_EARCRX_DMAC] = &sm1_earcrx_dmac_clk.hw,
> +
> +};
> +
> +static struct clk_hw *audio_clock_pads_hw_clks[] = {
> + [AUD_CLKID_TDM_MCLK_PAD0] = &s4_tdm_mclk_pad_0.hw,
> + [AUD_CLKID_TDM_MCLK_PAD1] = &s4_tdm_mclk_pad_1.hw,
> + [AUD_CLKID_TDM_LRCLK_PAD0] = &s4_tdm_lrclk_pad_0.hw,
> + [AUD_CLKID_TDM_LRCLK_PAD1] = &s4_tdm_lrclk_pad_1.hw,
> + [AUD_CLKID_TDM_LRCLK_PAD2] = &s4_tdm_lrclk_pad_2.hw,
> + [AUD_CLKID_TDM_SCLK_PAD0] = &s4_tdm_sclk_pad_0.hw,
> + [AUD_CLKID_TDM_SCLK_PAD1] = &s4_tdm_sclk_pad_1.hw,
> + [AUD_CLKID_TDM_SCLK_PAD2] = &s4_tdm_sclk_pad_2.hw,
> + [AUD_CLKID_TDM_MCLK_PAD0_SEL] = &s4_tdm_mclk_pad0_sel.hw,
> + [AUD_CLKID_TDM_MCLK_PAD1_SEL] = &s4_tdm_mclk_pad1_sel.hw,
> + [AUD_CLKID_TDM_MCLK_PAD0_DIV] = &s4_tdm_mclk_pad0_div.hw,
> + [AUD_CLKID_TDM_MCLK_PAD1_DIV] = &s4_tdm_mclk_pad1_div.hw,
> + [AUD_CLKID_TDM_MCLK_PAD2] = &s4_tdm_mclk_pad_2.hw,
> + [AUD_CLKID_TDM_MCLK_PAD2_SEL] = &s4_tdm_mclk_pad2_sel.hw,
> + [AUD_CLKID_TDM_MCLK_PAD2_DIV] = &s4_tdm_mclk_pad2_div.hw,
> + [AUD_CLKID_TDM_SCLK_PAD3] = &s4_tdm_sclk_pad_3.hw,
> + [AUD_CLKID_TDM_SCLK_PAD4] = &s4_tdm_sclk_pad_4.hw,
> + [AUD_CLKID_TDM_LRCLK_PAD3] = &s4_tdm_lrclk_pad_3.hw,
> + [AUD_CLKID_TDM_LRCLK_PAD4] = &s4_tdm_lrclk_pad_4.hw,
> +
> +};
>
> /* Convenience table to populate regmap in .probe(). */
> static struct clk_regmap *const axg_clk_regmaps[] = {
> @@ -1678,6 +1907,177 @@ static struct clk_regmap *const sm1_clk_regmaps[] = {
> &sm1_earcrx_dmac_clk,
> };
>
> +static struct clk_regmap *const s4_clk_regmaps[] = {
> + &ddr_arb,
> + &pdm,
> + &tdmin_a,
> + &tdmin_b,
> + &tdmin_c,
> + &tdmin_lb,
> + &tdmout_a,
> + &tdmout_b,
> + &tdmout_c,
> + &frddr_a,
> + &frddr_b,
> + &frddr_c,
> + &toddr_a,
> + &toddr_b,
> + &toddr_c,
> + &loopback,
> + &spdifin,
> + &spdifout,
> + &resample,
> + &spdifout_b,
> + &sm1_mst_a_mclk_sel,
> + &sm1_mst_b_mclk_sel,
> + &sm1_mst_c_mclk_sel,
> + &sm1_mst_d_mclk_sel,
> + &sm1_mst_e_mclk_sel,
> + &sm1_mst_f_mclk_sel,
> + &sm1_mst_a_mclk_div,
> + &sm1_mst_b_mclk_div,
> + &sm1_mst_c_mclk_div,
> + &sm1_mst_d_mclk_div,
> + &sm1_mst_e_mclk_div,
> + &sm1_mst_f_mclk_div,
> + &sm1_mst_a_mclk,
> + &sm1_mst_b_mclk,
> + &sm1_mst_c_mclk,
> + &sm1_mst_d_mclk,
> + &sm1_mst_e_mclk,
> + &sm1_mst_f_mclk,
> + &spdifout_clk_sel,
> + &spdifout_clk_div,
> + &spdifout_clk,
> + &spdifin_clk_sel,
> + &spdifin_clk_div,
> + &spdifin_clk,
> + &pdm_dclk_sel,
> + &pdm_dclk_div,
> + &pdm_dclk,
> + &pdm_sysclk_sel,
> + &pdm_sysclk_div,
> + &pdm_sysclk,
> + &mst_a_sclk_pre_en,
> + &mst_b_sclk_pre_en,
> + &mst_c_sclk_pre_en,
> + &mst_d_sclk_pre_en,
> + &mst_e_sclk_pre_en,
> + &mst_f_sclk_pre_en,
> + &mst_a_sclk_div,
> + &mst_b_sclk_div,
> + &mst_c_sclk_div,
> + &mst_d_sclk_div,
> + &mst_e_sclk_div,
> + &mst_f_sclk_div,
> + &mst_a_sclk_post_en,
> + &mst_b_sclk_post_en,
> + &mst_c_sclk_post_en,
> + &mst_d_sclk_post_en,
> + &mst_e_sclk_post_en,
> + &mst_f_sclk_post_en,
> + &mst_a_sclk,
> + &mst_b_sclk,
> + &mst_c_sclk,
> + &mst_d_sclk,
> + &mst_e_sclk,
> + &mst_f_sclk,
> + &mst_a_lrclk_div,
> + &mst_b_lrclk_div,
> + &mst_c_lrclk_div,
> + &mst_d_lrclk_div,
> + &mst_e_lrclk_div,
> + &mst_f_lrclk_div,
> + &mst_a_lrclk,
> + &mst_b_lrclk,
> + &mst_c_lrclk,
> + &mst_d_lrclk,
> + &mst_e_lrclk,
> + &mst_f_lrclk,
> + &tdmin_a_sclk_sel,
> + &tdmin_b_sclk_sel,
> + &tdmin_c_sclk_sel,
> + &tdmin_lb_sclk_sel,
> + &tdmout_a_sclk_sel,
> + &tdmout_b_sclk_sel,
> + &tdmout_c_sclk_sel,
> + &tdmin_a_sclk_pre_en,
> + &tdmin_b_sclk_pre_en,
> + &tdmin_c_sclk_pre_en,
> + &tdmin_lb_sclk_pre_en,
> + &tdmout_a_sclk_pre_en,
> + &tdmout_b_sclk_pre_en,
> + &tdmout_c_sclk_pre_en,
> + &tdmin_a_sclk_post_en,
> + &tdmin_b_sclk_post_en,
> + &tdmin_c_sclk_post_en,
> + &tdmin_lb_sclk_post_en,
> + &tdmout_a_sclk_post_en,
> + &tdmout_b_sclk_post_en,
> + &tdmout_c_sclk_post_en,
> + &tdmin_a_sclk,
> + &tdmin_b_sclk,
> + &tdmin_c_sclk,
> + &tdmin_lb_sclk,
> + &g12a_tdmout_a_sclk,
> + &g12a_tdmout_b_sclk,
> + &g12a_tdmout_c_sclk,
> + &tdmin_a_lrclk,
> + &tdmin_b_lrclk,
> + &tdmin_c_lrclk,
> + &tdmin_lb_lrclk,
> + &tdmout_a_lrclk,
> + &tdmout_b_lrclk,
> + &tdmout_c_lrclk,
> + &spdifout_b_clk_sel,
> + &spdifout_b_clk_div,
> + &spdifout_b_clk,
> + &sm1_aud_top,
> + &toram,
> + &eqdrc,
> + &resample_b,
> + &tovad,
> + &locker,
> + &spdifin_lb,
> + &frddr_d,
> + &toddr_d,
> + &loopback_b,
> + &sm1_clk81_en,
> + &sm1_sysclk_a_div,
> + &sm1_sysclk_a_en,
> + &sm1_sysclk_b_div,
> + &sm1_sysclk_b_en,
> + &earcrx,
> + &sm1_earcrx_cmdc_clk_sel,
> + &sm1_earcrx_cmdc_clk_div,
> + &sm1_earcrx_cmdc_clk,
> + &sm1_earcrx_dmac_clk_sel,
> + &sm1_earcrx_dmac_clk_div,
> + &sm1_earcrx_dmac_clk,
> +};
> +
> +static struct clk_regmap *const clk_pads_regmaps[] = {
> + &s4_tdm_mclk_pad_0,
> + &s4_tdm_mclk_pad_1,
> + &s4_tdm_mclk_pad_2,
> + &s4_tdm_lrclk_pad_0,
> + &s4_tdm_lrclk_pad_1,
> + &s4_tdm_lrclk_pad_2,
> + &s4_tdm_lrclk_pad_3,
> + &s4_tdm_lrclk_pad_4,
> + &s4_tdm_sclk_pad_0,
> + &s4_tdm_sclk_pad_1,
> + &s4_tdm_sclk_pad_2,
> + &s4_tdm_sclk_pad_3,
> + &s4_tdm_sclk_pad_4,
> + &s4_tdm_mclk_pad0_sel,
> + &s4_tdm_mclk_pad1_sel,
> + &s4_tdm_mclk_pad0_div,
> + &s4_tdm_mclk_pad1_div,
> + &s4_tdm_mclk_pad2_sel,
> + &s4_tdm_mclk_pad2_div,
> +};
> +
> struct axg_audio_reset_data {
> struct reset_controller_dev rstc;
> struct regmap *map;
> @@ -1802,7 +2202,8 @@ static int axg_audio_clkc_probe(struct platform_device *pdev)
> if (IS_ERR(clk))
> return PTR_ERR(clk);
>
> - ret = device_reset(dev);
> + /*some clock control might be no reset*/
> + ret = device_reset_optional(dev);
It is not optional on existing SoC.
What about RESET1 bit 0 on S4 ?
> if (ret) {
> dev_err_probe(dev, ret, "failed to reset device\n");
> return ret;
> @@ -1886,6 +2287,30 @@ static const struct audioclk_data sm1_audioclk_data = {
> .max_register = AUDIO_EARCRX_DMAC_CLK_CTRL,
> };
>
> +static const struct audioclk_data s4_audioclk_data = {
> + .regmap_clks = s4_clk_regmaps,
> + .regmap_clk_num = ARRAY_SIZE(s4_clk_regmaps),
> + .hw_clks = {
> + .hws = s4_audio_hw_clks,
> + .num = ARRAY_SIZE(s4_audio_hw_clks),
> + },
> + .reset_offset = AUDIO_SM1_SW_RESET0,
> + .reset_num = 39,
> + .max_register = AUDIO_EARCRX_DMAC_CLK_CTRL,
> +};
> +
> +static const struct audioclk_data audioclk_pads_data = {
> + .regmap_clks = clk_pads_regmaps,
> + .regmap_clk_num = ARRAY_SIZE(clk_pads_regmaps),
> + .hw_clks = {
> + .hws = audio_clock_pads_hw_clks,
> + .num = ARRAY_SIZE(audio_clock_pads_hw_clks),
> + },
> + .reset_offset = AUDIO_SM1_SW_RESET0,
> + .reset_num = 0,
> + .max_register = AUDIO_S4_SCLK_PAD_CTRL1,
> +};
Ok ... now I get it. This is not described anywhere !
There is no reason from this be in the same file/driver AFAICT.
> +
> static const struct of_device_id clkc_match_table[] = {
> {
> .compatible = "amlogic,axg-audio-clkc",
> @@ -1896,7 +2321,13 @@ static const struct of_device_id clkc_match_table[] = {
> }, {
> .compatible = "amlogic,sm1-audio-clkc",
> .data = &sm1_audioclk_data
> - }, {}
> + }, {
> + .compatible = "amlogic,s4-audio-clkc",
> + .data = &s4_audioclk_data
> + }, {
> + .compatible = "amlogic,clock-pads-clkc",
> + .data = &audioclk_pads_data
> + }, { },
> };
> MODULE_DEVICE_TABLE(of, clkc_match_table);
>
> diff --git a/drivers/clk/meson/axg-audio.h b/drivers/clk/meson/axg-audio.h
> index 9e7765b630c96a8029140539ffda789b7db5277a..24233c40171034eba86c699db0200f07555926af 100644
> --- a/drivers/clk/meson/axg-audio.h
> +++ b/drivers/clk/meson/axg-audio.h
> @@ -67,4 +67,10 @@
> #define AUDIO_EARCRX_CMDC_CLK_CTRL 0x0D0
> #define AUDIO_EARCRX_DMAC_CLK_CTRL 0x0D4
>
> +/* s4 clock pads use new reg base */
> +#define AUDIO_S4_MCLK_PAD_CTRL0 0x0
> +#define AUDIO_S4_MCLK_PAD_CTRL1 0x4
> +#define AUDIO_S4_SCLK_PAD_CTRL0 0x8
> +#define AUDIO_S4_SCLK_PAD_CTRL1 0xC
> +
> #endif /*__AXG_AUDIO_CLKC_H */
--
Jerome
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio
2025-07-10 3:35 ` [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio jiebing chen via B4 Relay
@ 2025-07-10 9:20 ` Jerome Brunet
2025-07-10 9:48 ` Jiebing Chen
0 siblings, 1 reply; 20+ messages in thread
From: Jerome Brunet @ 2025-07-10 9:20 UTC (permalink / raw)
To: jiebing chen via B4 Relay
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Neil Armstrong,
Kevin Hilman, Martin Blumenstingl, Michael Turquette,
Stephen Boyd, jiebing.chen, linux-sound, devicetree, linux-kernel,
linux-arm-kernel, linux-amlogic, linux-clk, jian.xu, shuai.li,
zhe.wang
On Thu 10 Jul 2025 at 11:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@kernel.org> wrote:
> From: jiebing chen <jiebing.chen@amlogic.com>
>
> Add basic audio driver support for the Amlogic S4 based
> Amlogic AQ222 board.
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> .../boot/dts/amlogic/meson-s4-s805x2-aq222.dts | 218 ++++++++++++
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 387 +++++++++++++++++++++
> 2 files changed, 605 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
> index 6730c44642d2910d42ec0c4adf49fefc3514dbec..47c6b8d63fdfca01281f0935f3dc419af6d86a25 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
> @@ -75,6 +75,19 @@ vddio_ao1v8: regulator-vddio-ao1v8 {
> regulator-always-on;
> };
>
> + vcc5v_reg: regulator-vcc-5v {
> + compatible = "regulator-fixed";
> + vin-supply = <&main_12v>;
> + regulator-name = "VCC5V";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + gpio = <&gpio GPIOH_7 GPIO_ACTIVE_HIGH>;
> + startup-delay-us = <7000>;
> + enable-active-high;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> /* SY8120B1ABC DC/DC Regulator. */
> vddcpu: regulator-vddcpu {
> compatible = "pwm-regulator";
> @@ -129,6 +142,211 @@ vddcpu: regulator-vddcpu {
> <699000 98>,
> <689000 100>;
> };
> + dmics: audio-codec-1 {
> + compatible = "dmic-codec";
> + #sound-dai-cells = <0>;
> + num-channels = <2>;
> + wakeup-delay-ms = <50>;
> + sound-name-prefix = "MIC";
> + };
> +
> + dioo2133: audio-amplifier-0 {
> + compatible = "simple-audio-amplifier";
> + enable-gpios = <&gpio GPIOH_8 GPIO_ACTIVE_HIGH>;
> + VCC-supply = <&vcc5v_reg>;
> + sound-name-prefix = "10U2";
> + };
> +
> + spdif_dir: audio-spdif-in {
> + compatible = "linux,spdif-dir";
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "DIR";
> + };
> +
> + spdif_dit: audio-spdif-out {
> + compatible = "linux,spdif-dit";
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "DIT";
> + };
> +
> + sound {
> + compatible = "amlogic,axg-sound-card";
> + model = "aq222";
> + audio-widgets = "Line", "Lineout";
> + audio-aux-devs = <&tdmout_a>, <&tdmout_b>, <&tdmout_c>,
> + <&tdmin_a>, <&tdmin_b>, <&tdmin_c>,
> + <&tdmin_lb>, <&dioo2133>;
> + audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
> + "TDMOUT_A IN 1", "FRDDR_B OUT 0",
> + "TDMOUT_A IN 2", "FRDDR_C OUT 0",
> + "TDM_A Playback", "TDMOUT_A OUT",
> + "TDMOUT_B IN 0", "FRDDR_A OUT 1",
> + "TDMOUT_B IN 1", "FRDDR_B OUT 1",
> + "TDMOUT_B IN 2", "FRDDR_C OUT 1",
> + "TDM_B Playback", "TDMOUT_B OUT",
> + "TDMOUT_C IN 0", "FRDDR_A OUT 2",
> + "TDMOUT_C IN 1", "FRDDR_B OUT 2",
> + "TDMOUT_C IN 2", "FRDDR_C OUT 2",
> + "TDM_C Playback", "TDMOUT_C OUT",
> + "SPDIFOUT_A IN 0", "FRDDR_A OUT 3",
> + "SPDIFOUT_A IN 1", "FRDDR_B OUT 3",
> + "SPDIFOUT_A IN 2", "FRDDR_C OUT 3",
> + "SPDIFOUT_B IN 0", "FRDDR_A OUT 4",
> + "SPDIFOUT_B IN 1", "FRDDR_B OUT 4",
> + "SPDIFOUT_B IN 2", "FRDDR_C OUT 4",
> + "TDMIN_A IN 0", "TDM_A Capture",
> + "TDMIN_A IN 1", "TDM_B Capture",
> + "TDMIN_A IN 2", "TDM_C Capture",
> + "TDMIN_A IN 3", "TDM_A Loopback",
> + "TDMIN_A IN 4", "TDM_B Loopback",
> + "TDMIN_A IN 5", "TDM_C Loopback",
> + "TDMIN_B IN 0", "TDM_A Capture",
> + "TDMIN_B IN 1", "TDM_B Capture",
> + "TDMIN_B IN 2", "TDM_C Capture",
> + "TDMIN_B IN 3", "TDM_A Loopback",
> + "TDMIN_B IN 4", "TDM_B Loopback",
> + "TDMIN_B IN 5", "TDM_C Loopback",
> + "TDMIN_C IN 0", "TDM_A Capture",
> + "TDMIN_C IN 1", "TDM_B Capture",
> + "TDMIN_C IN 2", "TDM_C Capture",
> + "TDMIN_C IN 3", "TDM_A Loopback",
> + "TDMIN_C IN 4", "TDM_B Loopback",
> + "TDMIN_C IN 5", "TDM_C Loopback",
> + "TDMIN_LB IN 3", "TDM_A Capture",
> + "TDMIN_LB IN 4", "TDM_B Capture",
> + "TDMIN_LB IN 5", "TDM_C Capture",
> + "TDMIN_LB IN 0", "TDM_A Loopback",
> + "TDMIN_LB IN 1", "TDM_B Loopback",
> + "TDMIN_LB IN 2", "TDM_C Loopback",
> + "TODDR_A IN 0", "TDMIN_A OUT",
> + "TODDR_B IN 0", "TDMIN_A OUT",
> + "TODDR_C IN 0", "TDMIN_A OUT",
> + "TODDR_A IN 1", "TDMIN_B OUT",
> + "TODDR_B IN 1", "TDMIN_B OUT",
> + "TODDR_C IN 1", "TDMIN_B OUT",
> + "TODDR_A IN 2", "TDMIN_C OUT",
> + "TODDR_B IN 2", "TDMIN_C OUT",
> + "TODDR_C IN 2", "TDMIN_C OUT",
> + "TODDR_A IN 3", "SPDIFIN Capture",
> + "TODDR_B IN 3", "SPDIFIN Capture",
> + "TODDR_C IN 3", "SPDIFIN Capture",
> + "TODDR_A IN 6", "TDMIN_LB OUT",
> + "TODDR_B IN 6", "TDMIN_LB OUT",
> + "TODDR_C IN 6", "TDMIN_LB OUT",
> + "10U2 INL", "ACODEC LOLP",
> + "10U2 INR", "ACODEC LORP",
> + "Lineout", "10U2 OUTL",
> + "Lineout", "10U2 OUTR";
> + assigned-clocks = <&clkc_pll CLKID_HIFI_PLL>,
> + <&clkc_pll CLKID_MPLL0>,
> + <&clkc_pll CLKID_MPLL1>;
> + assigned-clock-rates = <1179648000>,
> + <270950400>,
> + <338688000>;
> +
> + dai-link-0 {
> + sound-dai = <&frddr_a>;
> + };
> +
> + dai-link-1 {
> + sound-dai = <&frddr_b>;
> + };
> +
> + dai-link-2 {
> + sound-dai = <&frddr_c>;
> + };
> +
> + dai-link-3 {
> + sound-dai = <&toddr_a>;
> + };
> +
> + dai-link-4 {
> + sound-dai = <&toddr_b>;
> + };
> +
> + dai-link-5 {
> + sound-dai = <&toddr_c>;
> + };
> +
> + dai-link-6 {
> + sound-dai = <&tdmif_a>;
> + dai-format = "i2s";
> + dai-tdm-slot-tx-mask-0 = <1 1>;
> + mclk-fs = <256>;
> + codec-0 {
> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
> + };
> + codec-1 {
> + sound-dai = <&toacodec TOACODEC_IN_A>;
> + };
> + };
> +
> + dai-link-7 {
> + sound-dai = <&tdmif_b>;
> + dai-format = "i2s";
> + dai-tdm-slot-tx-mask-0 = <1 1>;
> + mclk-fs = <256>;
> + codec-0 {
> + sound-dai = <&toacodec TOACODEC_IN_B>;
> + };
> + codec-1 {
> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
> + };
> + };
> +
> + /* 8ch HDMI interface */
> + dai-link-8 {
> + sound-dai = <&tdmif_c>;
> + dai-format = "i2s";
> + dai-tdm-slot-tx-mask-0 = <1 1>;
> + dai-tdm-slot-tx-mask-1 = <1 1>;
> + dai-tdm-slot-tx-mask-2 = <1 1>;
> + dai-tdm-slot-tx-mask-3 = <1 1>;
> + mclk-fs = <256>;
> + codec-0 {
> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_C>;
> + };
> + };
> +
> + /* spdif hdmi and coax output */
> + dai-link-9 {
> + sound-dai = <&spdifout_a>;
> +
> + codec-0 {
> + sound-dai = <&spdif_dit>;
> + };
> +
> + codec-1 {
> + sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_A>;
> + };
> + };
> +
> + /* spdif hdmi interface */
> + dai-link-10 {
> + sound-dai = <&spdifout_b>;
> +
> + codec {
> + sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_B>;
> + };
> + };
> +
> + /* spdif coax input */
> + dai-link-11 {
> + sound-dai = <&spdifin>;
> +
> + codec {
> + sound-dai = <&spdif_dir>;
> + };
> + };
> +
> + dai-link-12 {
> + sound-dai = <&toacodec TOACODEC_OUT>;
> +
> + codec {
> + sound-dai = <&acodec>;
> + };
> + };
> + };
> };
>
> &pwm_ef {
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 957577d986c0675a503115e1ccbc4387c2051620..3af2fb333cf7b1ca35f1ff7ad8479bcd859e608a 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -11,6 +11,11 @@
> #include <dt-bindings/clock/amlogic,s4-peripherals-clkc.h>
> #include <dt-bindings/power/meson-s4-power.h>
> #include <dt-bindings/reset/amlogic,meson-s4-reset.h>
> +#include <dt-bindings/clock/axg-audio-clkc.h>
> +#include <dt-bindings/reset/amlogic,meson-axg-audio-arb.h>
> +#include <dt-bindings/reset/amlogic,meson-g12a-audio-reset.h>
> +#include <dt-bindings/sound/meson-g12a-toacodec.h>
> +#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
>
> / {
> cpus {
> @@ -849,4 +854,386 @@ emmc: mmc@fe08c000 {
> status = "disabled";
> };
> };
> +
> + tdmif_a: audio-controller-0 {
> + compatible = "amlogic,axg-tdm-iface";
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TDM_A";
> + clocks = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
> + <&clkc_audio AUD_CLKID_MST_A_LRCLK>,
> + <&clkc_audio AUD_CLKID_MST_A_MCLK>;
> + clock-names = "sclk", "lrclk","mclk";
> + };
> +
> + tdmif_b: audio-controller-1 {
> + compatible = "amlogic,axg-tdm-iface";
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TDM_B";
> + clocks = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
> + <&clkc_audio AUD_CLKID_MST_B_LRCLK>,
> + <&clkc_audio AUD_CLKID_MST_B_MCLK>;
> + clock-names = "sclk", "lrclk","mclk";
> + };
> +
> + tdmif_c: audio-controller-2 {
> + compatible = "amlogic,axg-tdm-iface";
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TDM_C";
> + clocks = <&clkc_audio AUD_CLKID_MST_C_SCLK>,
> + <&clkc_audio AUD_CLKID_MST_C_LRCLK>,
> + <&clkc_audio AUD_CLKID_MST_C_MCLK>;
> + clock-names = "sclk", "lrclk","mclk";
> + };
> +};
> +
> +&apb4 {
> + acodec: audio-controller@1a000 {
> + compatible = "amlogic,t9015";
> + reg = <0x0 0x1A000 0x0 0x14>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "ACODEC";
> + clocks = <&clkc_periphs CLKID_ACODEC>;
> + clock-names = "pclk";
> + resets = <&reset RESET_ACODEC>;
> + AVDD-supply = <&vddio_ao1v8>;
> + };
> +
> + clkc_audio: clock-controller@330000 {
> + compatible = "amlogic,s4-audio-clkc";
> + reg = <0x0 0x330000 0x0 0xd8>,
> + <0x0 0x330e80 0x0 0x10>;
> + #clock-cells = <1>;
> + #reset-cells = <1>;
> + power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
> + clocks = <&clkc_periphs CLKID_AUDIO>,
> + <&clkc_pll CLKID_MPLL0>,
> + <&clkc_pll CLKID_MPLL1>,
> + <&clkc_pll CLKID_MPLL2>,
> + <&clkc_pll CLKID_MPLL3>,
> + <&clkc_pll CLKID_HIFI_PLL>,
> + <&clkc_pll CLKID_FCLK_DIV3>,
> + <&clkc_pll CLKID_FCLK_DIV4>,
> + <&clkc_pll CLKID_FCLK_DIV5>;
> + clock-names = "pclk",
> + "mst_in0",
> + "mst_in1",
> + "mst_in2",
> + "mst_in3",
> + "mst_in4",
> + "mst_in5",
> + "mst_in6",
> + "mst_in7";
> +
> + resets = <&reset RESET_AUDIO>;
> + };
> +
> + clock-controller@330e80 {
> + compatible = "amlogic,clock-pads-clkc";
> + reg = <0x0 0x330e80 0x0 0x10>;
> + #clock-cells = <1>;
> + power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
> + clocks = <&clkc_periphs CLKID_AUDIO>,
> + <&clkc_pll CLKID_MPLL0>,
> + <&clkc_pll CLKID_MPLL1>,
> + <&clkc_pll CLKID_MPLL2>,
> + <&clkc_pll CLKID_MPLL3>,
> + <&clkc_pll CLKID_HIFI_PLL>,
> + <&clkc_pll CLKID_FCLK_DIV3>,
> + <&clkc_pll CLKID_FCLK_DIV4>,
> + <&clkc_pll CLKID_FCLK_DIV5>;
> + clock-names = "pclk",
> + "mst_in0",
> + "mst_in1",
> + "mst_in2",
> + "mst_in3",
> + "mst_in4",
> + "mst_in5",
> + "mst_in6",
> + "mst_in7";
Assuming I understood where you are tyring to go with this, those are
not the input in of this clock controller. The only reason *may* have
worked is because you referenced the clock by names instead of fwname
> + };
> +
> + toddr_a: audio-controller@330100 {
> + compatible = "amlogic,sm1-toddr",
> + "amlogic,axg-toddr";
> + reg = <0x0 0x330100 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TODDR_A";
> + interrupts = <GIC_SPI 32 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_TODDR_A>;
> + resets = <&arb AXG_ARB_TODDR_A>,
> + <&clkc_audio AUD_RESET_TODDR_A>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <8192>;
> + };
> +
> + toddr_b: audio-controller@330140 {
> + compatible = "amlogic,sm1-toddr",
> + "amlogic,axg-toddr";
> + reg = <0x0 0x330140 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TODDR_B";
> + interrupts = <GIC_SPI 33 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_TODDR_B>;
> + resets = <&arb AXG_ARB_TODDR_B>,
> + <&clkc_audio AUD_RESET_TODDR_B>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <256>;
> + };
> +
> + toddr_c: audio-controller@330180 {
> + compatible = "amlogic,sm1-toddr",
> + "amlogic,axg-toddr";
> + reg = <0x0 0x330180 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TODDR_C";
> + interrupts = <GIC_SPI 34 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_TODDR_C>;
> + resets = <&arb AXG_ARB_TODDR_C>,
> + <&clkc_audio AUD_RESET_TODDR_C>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <256>;
> + };
> +
> + frddr_a: audio-controller@3301c0 {
> + compatible = "amlogic,sm1-frddr",
> + "amlogic,axg-frddr";
> + reg = <0x0 0x3301c0 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "FRDDR_A";
> + interrupts = <GIC_SPI 36 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_FRDDR_A>;
> + resets = <&arb AXG_ARB_FRDDR_A>,
> + <&clkc_audio AUD_RESET_FRDDR_A>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <512>;
> + };
> +
> + frddr_b: audio-controller@330200 {
> + compatible = "amlogic,sm1-frddr",
> + "amlogic,axg-frddr";
> + reg = <0x0 0x330200 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "FRDDR_B";
> + interrupts = <GIC_SPI 37 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_FRDDR_B>;
> + resets = <&arb AXG_ARB_FRDDR_B>,
> + <&clkc_audio AUD_RESET_FRDDR_B>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <256>;
> + };
> +
> + frddr_c: audio-controller@330240 {
> + compatible = "amlogic,sm1-frddr",
> + "amlogic,axg-frddr";
> + reg = <0x0 0x330240 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "FRDDR_C";
> + interrupts = <GIC_SPI 38 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_FRDDR_C>;
> + resets = <&arb AXG_ARB_FRDDR_C>,
> + <&clkc_audio AUD_RESET_FRDDR_C>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <256>;
> + };
> +
> + arb: reset-controller@330280 {
> + compatible = "amlogic,meson-sm1-audio-arb";
> + reg = <0x0 0x330280 0x0 0x4>;
> + #reset-cells = <1>;
> + clocks = <&clkc_audio AUD_CLKID_DDR_ARB>;
> + };
> +
> + tdmin_a: audio-controller@330300 {
> + compatible = "amlogic,sm1-tdmin";
> + reg = <0x0 0x330300 0x0 0x40>;
> + sound-name-prefix = "TDMIN_A";
> + resets = <&clkc_audio AUD_RESET_TDMIN_A>;
> + clocks = <&clkc_audio AUD_CLKID_TDMIN_A>,
> + <&clkc_audio AUD_CLKID_TDMIN_A_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_A_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + tdmin_b: audio-controller@330340 {
> + compatible = "amlogic,sm1-tdmin";
> + reg = <0x0 0x330340 0x0 0x40>;
> + sound-name-prefix = "TDMIN_B";
> + resets = <&clkc_audio AUD_RESET_TDMIN_B>;
> + clocks = <&clkc_audio AUD_CLKID_TDMIN_B>,
> + <&clkc_audio AUD_CLKID_TDMIN_B_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_B_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + tdmin_c: audio-controller@330380 {
> + compatible = "amlogic,sm1-tdmin";
> + reg = <0x0 0x330380 0x0 0x40>;
> + sound-name-prefix = "TDMIN_C";
> + resets = <&clkc_audio AUD_RESET_TDMIN_C>;
> + clocks = <&clkc_audio AUD_CLKID_TDMIN_C>,
> + <&clkc_audio AUD_CLKID_TDMIN_C_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_C_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + tdmin_lb: audio-controller@3303c0 {
> + compatible = "amlogic,sm1-tdmin";
> + reg = <0x0 0x3303c0 0x0 0x40>;
> + sound-name-prefix = "TDMIN_LB";
> + resets = <&clkc_audio AUD_RESET_TDMIN_LB>;
> + clocks = <&clkc_audio AUD_CLKID_TDMIN_LB>,
> + <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + spdifin: audio-controller@330400 {
> + compatible = "amlogic,g12a-spdifin",
> + "amlogic,axg-spdifin";
> + reg = <0x0 0x330400 0x0 0x30>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "SPDIFIN";
> + interrupts = <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_SPDIFIN>,
> + <&clkc_audio AUD_CLKID_SPDIFIN_CLK>;
> + clock-names = "pclk", "refclk";
> + resets = <&clkc_audio AUD_RESET_SPDIFIN>;
> + };
> +
> + spdifout_a: audio-controller@330480 {
> + compatible = "amlogic,g12a-spdifout",
> + "amlogic,axg-spdifout";
> + reg = <0x0 0x330480 0x0 0x50>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "SPDIFOUT_A";
> + clocks = <&clkc_audio AUD_CLKID_SPDIFOUT>,
> + <&clkc_audio AUD_CLKID_SPDIFOUT_CLK>;
> + clock-names = "pclk", "mclk";
> + resets = <&clkc_audio AUD_RESET_SPDIFOUT>;
> + };
> +
> + tdmout_a: audio-controller@330500 {
> + compatible = "amlogic,sm1-tdmout";
> + reg = <0x0 0x330500 0x0 0x40>;
> + sound-name-prefix = "TDMOUT_A";
> + resets = <&clkc_audio AUD_RESET_TDMOUT_A>;
> + clocks = <&clkc_audio AUD_CLKID_TDMOUT_A>,
> + <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + tdmout_b: audio-controller@330540 {
> + compatible = "amlogic,sm1-tdmout";
> + reg = <0x0 0x330540 0x0 0x40>;
> + sound-name-prefix = "TDMOUT_B";
> + resets = <&clkc_audio AUD_RESET_TDMOUT_B>;
> + clocks = <&clkc_audio AUD_CLKID_TDMOUT_B>,
> + <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + tdmout_c: audio-controller@330580 {
> + compatible = "amlogic,sm1-tdmout";
> + reg = <0x0 0x330580 0x0 0x40>;
> + sound-name-prefix = "TDMOUT_C";
> + resets = <&clkc_audio AUD_RESET_TDMOUT_C>;
> + clocks = <&clkc_audio AUD_CLKID_TDMOUT_C>,
> + <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK>,
> + <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK_SEL>,
> + <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>,
> + <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>;
> + clock-names = "pclk", "sclk", "sclk_sel",
> + "lrclk", "lrclk_sel";
> + };
> +
> + spdifout_b: audio-controller@330680 {
> + compatible = "amlogic,g12a-spdifout",
> + "amlogic,axg-spdifout";
> + reg = <0x0 0x330680 0x0 0x50>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "SPDIFOUT_B";
> + clocks = <&clkc_audio AUD_CLKID_SPDIFOUT_B>,
> + <&clkc_audio AUD_CLKID_SPDIFOUT_B_CLK>;
> + clock-names = "pclk", "mclk";
> + resets = <&clkc_audio AUD_RESET_SPDIFOUT_B>;
> + };
> +
> + toacodec: audio-controller@330740 {
> + compatible = "amlogic,s4-toacodec",
> + "amlogic,g12a-toacodec";
> + reg = <0x0 0x330740 0x0 0x4>;
> + sound-name-prefix = "TOACODEC";
> + #sound-dai-cells = <1>;
> + resets = <&clkc_audio AUD_RESET_TOACODEC>;
> + };
> +
> + tohdmitx: audio-controller@330744 {
> + compatible = "amlogic,sm1-tohdmitx",
> + "amlogic,g12a-tohdmitx";
> + reg = <0x0 0x330744 0x0 0x4>;
> + #sound-dai-cells = <1>;
> + sound-name-prefix = "TOHDMITX";
> + resets = <&clkc_audio AUD_RESET_TOHDMITX>;
> + };
> +
> + toddr_d: audio-controller@330840 {
> + compatible = "amlogic,sm1-toddr",
> + "amlogic,axg-toddr";
> + reg = <0x0 0x330840 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "TODDR_D";
> + interrupts = <GIC_SPI 45 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_TODDR_D>;
> + resets = <&arb AXG_ARB_TODDR_D>,
> + <&clkc_audio AUD_RESET_TODDR_D>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <256>;
> + };
> +
> + frddr_d: audio-controller@330880 {
> + compatible = "amlogic,sm1-frddr",
> + "amlogic,axg-frddr";
> + reg = <0x0 0x330880 0x0 0x2c>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "FRDDR_D";
> + interrupts = <GIC_SPI 46 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_audio AUD_CLKID_FRDDR_D>;
> + resets = <&arb AXG_ARB_FRDDR_D>,
> + <&clkc_audio AUD_RESET_FRDDR_D>;
> + reset-names = "arb", "rst";
> + amlogic,fifo-depth = <256>;
> + };
> +
> + pdm: audio-controller@331000 {
> + compatible = "amlogic,sm1-pdm",
> + "amlogic,axg-pdm";
> + reg = <0x0 0x331000 0x0 0x34>;
> + #sound-dai-cells = <0>;
> + sound-name-prefix = "PDM";
> + clocks = <&clkc_audio AUD_CLKID_PDM>,
> + <&clkc_audio AUD_CLKID_PDM_DCLK>,
> + <&clkc_audio AUD_CLKID_PDM_SYSCLK>;
> + clock-names = "pclk", "dclk", "sysclk";
> + resets = <&clkc_audio AUD_RESET_PDM>;
> + };
> };
--
Jerome
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 4/6] ASoC: meson: g12a-toacodec: Add s4 tocodec driver
2025-07-10 3:35 ` [PATCH v5 4/6] ASoC: meson: g12a-toacodec: Add s4 tocodec driver jiebing chen via B4 Relay
@ 2025-07-10 9:29 ` Jerome Brunet
0 siblings, 0 replies; 20+ messages in thread
From: Jerome Brunet @ 2025-07-10 9:29 UTC (permalink / raw)
To: jiebing chen via B4 Relay
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Neil Armstrong,
Kevin Hilman, Martin Blumenstingl, Michael Turquette,
Stephen Boyd, jiebing.chen, linux-sound, devicetree, linux-kernel,
linux-arm-kernel, linux-amlogic, linux-clk, jian.xu, shuai.li,
zhe.wang
On Thu 10 Jul 2025 at 11:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@kernel.org> wrote:
> From: jiebing chen <jiebing.chen@amlogic.com>
>
> The S4 tocodec supports 8-lane input configuration, requiring BCLK
> and MCLK control bits to be enabled during operation.
This is oddly formulated, like there is some form of causality between 8
lane support and the new clock bits of this SoC.
If it is not the case then simply
"""
Add s4 support to the toacodec driver.
The s4 requires additional clock control bits to be turn on while enabled.
The s4 has 8 TDM lanes, instead of 4 on previous SoC. Update the widget accordingly.
"""
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> sound/soc/meson/g12a-toacodec.c | 42 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/sound/soc/meson/g12a-toacodec.c b/sound/soc/meson/g12a-toacodec.c
> index 531bb8707a3ec4c47814d6a0676d5c62c705da75..cb2169293f0e800bd9c0893087ffc4813f3360e2 100644
> --- a/sound/soc/meson/g12a-toacodec.c
> +++ b/sound/soc/meson/g12a-toacodec.c
> @@ -41,6 +41,9 @@
> #define CTRL0_BCLK_SEL_LSB 4
> #define CTRL0_MCLK_SEL GENMASK(2, 0)
>
> +#define CTRL0_BCLK_ENABLE_SHIFT 30
> +#define CTRL0_MCLK_ENABLE_SHIFT 29
> +
> #define TOACODEC_OUT_CHMAX 2
>
> struct g12a_toacodec {
> @@ -143,6 +146,19 @@ static const struct snd_soc_dapm_widget sm1_toacodec_widgets[] = {
> &g12a_toacodec_out_enable),
> };
>
> +/*
> + * FIXME:
> + * On this soc, tocodec need enable mclk and bclk control
> + * just enable it when dapm power widget power on.
If those are needed only when the widget is enabled, then I think it is
fine and the FIXME is not necessary
If not, more explanation are needed because I don't get what the
limitation is.
> + */
> +
> +static const struct snd_soc_dapm_widget s4_toacodec_widgets[] = {
> + SND_SOC_DAPM_MUX("SRC", TOACODEC_CTRL0, CTRL0_BCLK_ENABLE_SHIFT, 0,
> + &sm1_toacodec_mux),
> + SND_SOC_DAPM_SWITCH("OUT EN", TOACODEC_CTRL0, CTRL0_MCLK_ENABLE_SHIFT, 0,
> + &g12a_toacodec_out_enable),
> +};
> +
> static int g12a_toacodec_input_hw_params(struct snd_pcm_substream *substream,
> struct snd_pcm_hw_params *params,
> struct snd_soc_dai *dai)
> @@ -236,6 +252,10 @@ static const struct snd_kcontrol_new sm1_toacodec_controls[] = {
> SOC_SINGLE("Lane Select", TOACODEC_CTRL0, CTRL0_LANE_SEL_SM1, 3, 0),
> };
>
> +static const struct snd_kcontrol_new s4_toacodec_controls[] = {
> + SOC_SINGLE("Lane Select", TOACODEC_CTRL0, CTRL0_LANE_SEL_SM1, 7, 0),
> +};
> +
> static const struct snd_soc_component_driver g12a_toacodec_component_drv = {
> .probe = g12a_toacodec_component_probe,
> .controls = g12a_toacodec_controls,
> @@ -258,6 +278,17 @@ static const struct snd_soc_component_driver sm1_toacodec_component_drv = {
> .endianness = 1,
> };
>
> +static const struct snd_soc_component_driver s4_toacodec_component_drv = {
> + .probe = sm1_toacodec_component_probe,
> + .controls = s4_toacodec_controls,
> + .num_controls = ARRAY_SIZE(s4_toacodec_controls),
> + .dapm_widgets = s4_toacodec_widgets,
> + .num_dapm_widgets = ARRAY_SIZE(s4_toacodec_widgets),
> + .dapm_routes = g12a_toacodec_routes,
> + .num_dapm_routes = ARRAY_SIZE(g12a_toacodec_routes),
> + .endianness = 1,
> +};
> +
> static const struct regmap_config g12a_toacodec_regmap_cfg = {
> .reg_bits = 32,
> .val_bits = 32,
> @@ -278,6 +309,13 @@ static const struct g12a_toacodec_match_data sm1_toacodec_match_data = {
> .field_bclk_sel = REG_FIELD(TOACODEC_CTRL0, 4, 6),
> };
>
> +static const struct g12a_toacodec_match_data s4_toacodec_match_data = {
> + .component_drv = &s4_toacodec_component_drv,
> + .field_dat_sel = REG_FIELD(TOACODEC_CTRL0, 19, 20),
> + .field_lrclk_sel = REG_FIELD(TOACODEC_CTRL0, 12, 14),
> + .field_bclk_sel = REG_FIELD(TOACODEC_CTRL0, 4, 6),
> +};
> +
> static const struct of_device_id g12a_toacodec_of_match[] = {
> {
> .compatible = "amlogic,g12a-toacodec",
> @@ -287,6 +325,10 @@ static const struct of_device_id g12a_toacodec_of_match[] = {
> .compatible = "amlogic,sm1-toacodec",
> .data = &sm1_toacodec_match_data,
> },
> + {
> + .compatible = "amlogic,s4-toacodec",
> + .data = &s4_toacodec_match_data,
> + },
> {}
> };
> MODULE_DEVICE_TABLE(of, g12a_toacodec_of_match);
--
Jerome
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 0/6] Add support for S4 audio
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
` (5 preceding siblings ...)
2025-07-10 3:35 ` [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio jiebing chen via B4 Relay
@ 2025-07-10 9:32 ` Jerome Brunet
2025-07-10 19:05 ` Rob Herring (Arm)
7 siblings, 0 replies; 20+ messages in thread
From: Jerome Brunet @ 2025-07-10 9:32 UTC (permalink / raw)
To: jiebing chen via B4 Relay
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Neil Armstrong,
Kevin Hilman, Martin Blumenstingl, Michael Turquette,
Stephen Boyd, jiebing.chen, linux-sound, devicetree, linux-kernel,
linux-arm-kernel, linux-amlogic, linux-clk, jian.xu, shuai.li,
zhe.wang
On Thu 10 Jul 2025 at 11:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@kernel.org> wrote:
> This series completes the end-to-end audio support
> for S4 SoC from hardware bindings to driver implementation
> and system integration.
>
> 1 Device Tree Bindings Updates
> Added audio power domain support for S4 SoC.Defined mclk/sclk pad clock IDs in AXG audio bindings.
> Add S4 audio tocodec binding support.
>
> 2 Driver Implementation
> Implemented S4 tocodec driver for G12A architecture.
> Add mclk pad divider support for S4 in AXG audio clock.
>
> 3 Device Tree Integration
> Add Amlogic S4 audio subsystem support in arm64 DTS.
Several subsystem in a single patchset spams a lot of people.
It is not strictly necessary here.
Ideally, one patchset per subsystem please.
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> Changes in v5:
> - Fix warning Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yam when make dt_binding_check
> - The audio reg is mounted below the APB bus in dts file.
> - Deal with pad clock in a distinct controller.
> - Fix warning for sound/soc/meson/g12a-toacodec.c
> - Link to v4: https://lore.kernel.org/r/20250319-audio_drvier-v4-0-686867fad719@amlogic.com
>
> Changes in v4:
> - fix dtb check warning
> - add maxItems of power domain for dt-bindings
> - fixed audio clock pads regmap base and reg offset
> - use dapm widget to control tocodec bclk and mclk enable
> - Link to v3: https://lore.kernel.org/r/20250228-audio_drvier-v3-0-dbfd30507e4c@amlogic.com
>
> Changes in v3:
> - remove g12a tocodec switch event
> - Modify the incorrect title for dt-bindings
> - Link to v2: https://lore.kernel.org/r/20250214-audio_drvier-v2-0-37881fa37c9e@amlogic.com
>
> Changes in v2:
> - remove tdm pad control and change tocodec base on g12a
> - change hifipll rate to support 24bit
> - add s4 audio clock
> - Link to v1: https://lore.kernel.org/r/20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com
>
> ---
> jiebing chen (6):
> dt-bindings: clock: meson: Add audio power domain for s4 soc
> dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids
> dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
> ASoC: meson: g12a-toacodec: Add s4 tocodec driver
> clk: meson: axg-audio: Add the mclk pad div for s4 chip
> arm64: dts: amlogic: Add Amlogic S4 Audio
>
> .../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 ++-
> .../bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
> .../boot/dts/amlogic/meson-s4-s805x2-aq222.dts | 218 +++++++++++
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 387 ++++++++++++++++++
> drivers/clk/meson/axg-audio.c | 435 ++++++++++++++++++++-
> drivers/clk/meson/axg-audio.h | 6 +
> include/dt-bindings/clock/axg-audio-clkc.h | 11 +
> sound/soc/meson/g12a-toacodec.c | 42 ++
> 8 files changed, 1152 insertions(+), 3 deletions(-)
> ---
> base-commit: 6ecd20965bdc21b265a0671ccf36d9ad8043f5ab
> change-id: 20250110-audio_drvier-07a5381c494b
>
> Best regards,
--
Jerome
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio
2025-07-10 9:20 ` Jerome Brunet
@ 2025-07-10 9:48 ` Jiebing Chen
0 siblings, 0 replies; 20+ messages in thread
From: Jiebing Chen @ 2025-07-10 9:48 UTC (permalink / raw)
To: Jerome Brunet, jiebing chen via B4 Relay
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, Neil Armstrong,
Kevin Hilman, Martin Blumenstingl, Michael Turquette,
Stephen Boyd, linux-sound, devicetree, linux-kernel,
linux-arm-kernel, linux-amlogic, linux-clk, jian.xu, shuai.li,
zhe.wang
在 2025/7/10 17:20, Jerome Brunet 写道:
> [ EXTERNAL EMAIL ]
>
> On Thu 10 Jul 2025 at 11:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@kernel.org> wrote:
>
>> From: jiebing chen <jiebing.chen@amlogic.com>
>>
>> Add basic audio driver support for the Amlogic S4 based
>> Amlogic AQ222 board.
>>
>> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
>> ---
>> .../boot/dts/amlogic/meson-s4-s805x2-aq222.dts | 218 ++++++++++++
>> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 387 +++++++++++++++++++++
>> 2 files changed, 605 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
>> index 6730c44642d2910d42ec0c4adf49fefc3514dbec..47c6b8d63fdfca01281f0935f3dc419af6d86a25 100644
>> --- a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
>> +++ b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
>> @@ -75,6 +75,19 @@ vddio_ao1v8: regulator-vddio-ao1v8 {
>> regulator-always-on;
>> };
>>
>> + vcc5v_reg: regulator-vcc-5v {
>> + compatible = "regulator-fixed";
>> + vin-supply = <&main_12v>;
>> + regulator-name = "VCC5V";
>> + regulator-min-microvolt = <5000000>;
>> + regulator-max-microvolt = <5000000>;
>> + gpio = <&gpio GPIOH_7 GPIO_ACTIVE_HIGH>;
>> + startup-delay-us = <7000>;
>> + enable-active-high;
>> + regulator-boot-on;
>> + regulator-always-on;
>> + };
>> +
>> /* SY8120B1ABC DC/DC Regulator. */
>> vddcpu: regulator-vddcpu {
>> compatible = "pwm-regulator";
>> @@ -129,6 +142,211 @@ vddcpu: regulator-vddcpu {
>> <699000 98>,
>> <689000 100>;
>> };
>> + dmics: audio-codec-1 {
>> + compatible = "dmic-codec";
>> + #sound-dai-cells = <0>;
>> + num-channels = <2>;
>> + wakeup-delay-ms = <50>;
>> + sound-name-prefix = "MIC";
>> + };
>> +
>> + dioo2133: audio-amplifier-0 {
>> + compatible = "simple-audio-amplifier";
>> + enable-gpios = <&gpio GPIOH_8 GPIO_ACTIVE_HIGH>;
>> + VCC-supply = <&vcc5v_reg>;
>> + sound-name-prefix = "10U2";
>> + };
>> +
>> + spdif_dir: audio-spdif-in {
>> + compatible = "linux,spdif-dir";
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "DIR";
>> + };
>> +
>> + spdif_dit: audio-spdif-out {
>> + compatible = "linux,spdif-dit";
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "DIT";
>> + };
>> +
>> + sound {
>> + compatible = "amlogic,axg-sound-card";
>> + model = "aq222";
>> + audio-widgets = "Line", "Lineout";
>> + audio-aux-devs = <&tdmout_a>, <&tdmout_b>, <&tdmout_c>,
>> + <&tdmin_a>, <&tdmin_b>, <&tdmin_c>,
>> + <&tdmin_lb>, <&dioo2133>;
>> + audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
>> + "TDMOUT_A IN 1", "FRDDR_B OUT 0",
>> + "TDMOUT_A IN 2", "FRDDR_C OUT 0",
>> + "TDM_A Playback", "TDMOUT_A OUT",
>> + "TDMOUT_B IN 0", "FRDDR_A OUT 1",
>> + "TDMOUT_B IN 1", "FRDDR_B OUT 1",
>> + "TDMOUT_B IN 2", "FRDDR_C OUT 1",
>> + "TDM_B Playback", "TDMOUT_B OUT",
>> + "TDMOUT_C IN 0", "FRDDR_A OUT 2",
>> + "TDMOUT_C IN 1", "FRDDR_B OUT 2",
>> + "TDMOUT_C IN 2", "FRDDR_C OUT 2",
>> + "TDM_C Playback", "TDMOUT_C OUT",
>> + "SPDIFOUT_A IN 0", "FRDDR_A OUT 3",
>> + "SPDIFOUT_A IN 1", "FRDDR_B OUT 3",
>> + "SPDIFOUT_A IN 2", "FRDDR_C OUT 3",
>> + "SPDIFOUT_B IN 0", "FRDDR_A OUT 4",
>> + "SPDIFOUT_B IN 1", "FRDDR_B OUT 4",
>> + "SPDIFOUT_B IN 2", "FRDDR_C OUT 4",
>> + "TDMIN_A IN 0", "TDM_A Capture",
>> + "TDMIN_A IN 1", "TDM_B Capture",
>> + "TDMIN_A IN 2", "TDM_C Capture",
>> + "TDMIN_A IN 3", "TDM_A Loopback",
>> + "TDMIN_A IN 4", "TDM_B Loopback",
>> + "TDMIN_A IN 5", "TDM_C Loopback",
>> + "TDMIN_B IN 0", "TDM_A Capture",
>> + "TDMIN_B IN 1", "TDM_B Capture",
>> + "TDMIN_B IN 2", "TDM_C Capture",
>> + "TDMIN_B IN 3", "TDM_A Loopback",
>> + "TDMIN_B IN 4", "TDM_B Loopback",
>> + "TDMIN_B IN 5", "TDM_C Loopback",
>> + "TDMIN_C IN 0", "TDM_A Capture",
>> + "TDMIN_C IN 1", "TDM_B Capture",
>> + "TDMIN_C IN 2", "TDM_C Capture",
>> + "TDMIN_C IN 3", "TDM_A Loopback",
>> + "TDMIN_C IN 4", "TDM_B Loopback",
>> + "TDMIN_C IN 5", "TDM_C Loopback",
>> + "TDMIN_LB IN 3", "TDM_A Capture",
>> + "TDMIN_LB IN 4", "TDM_B Capture",
>> + "TDMIN_LB IN 5", "TDM_C Capture",
>> + "TDMIN_LB IN 0", "TDM_A Loopback",
>> + "TDMIN_LB IN 1", "TDM_B Loopback",
>> + "TDMIN_LB IN 2", "TDM_C Loopback",
>> + "TODDR_A IN 0", "TDMIN_A OUT",
>> + "TODDR_B IN 0", "TDMIN_A OUT",
>> + "TODDR_C IN 0", "TDMIN_A OUT",
>> + "TODDR_A IN 1", "TDMIN_B OUT",
>> + "TODDR_B IN 1", "TDMIN_B OUT",
>> + "TODDR_C IN 1", "TDMIN_B OUT",
>> + "TODDR_A IN 2", "TDMIN_C OUT",
>> + "TODDR_B IN 2", "TDMIN_C OUT",
>> + "TODDR_C IN 2", "TDMIN_C OUT",
>> + "TODDR_A IN 3", "SPDIFIN Capture",
>> + "TODDR_B IN 3", "SPDIFIN Capture",
>> + "TODDR_C IN 3", "SPDIFIN Capture",
>> + "TODDR_A IN 6", "TDMIN_LB OUT",
>> + "TODDR_B IN 6", "TDMIN_LB OUT",
>> + "TODDR_C IN 6", "TDMIN_LB OUT",
>> + "10U2 INL", "ACODEC LOLP",
>> + "10U2 INR", "ACODEC LORP",
>> + "Lineout", "10U2 OUTL",
>> + "Lineout", "10U2 OUTR";
>> + assigned-clocks = <&clkc_pll CLKID_HIFI_PLL>,
>> + <&clkc_pll CLKID_MPLL0>,
>> + <&clkc_pll CLKID_MPLL1>;
>> + assigned-clock-rates = <1179648000>,
>> + <270950400>,
>> + <338688000>;
>> +
>> + dai-link-0 {
>> + sound-dai = <&frddr_a>;
>> + };
>> +
>> + dai-link-1 {
>> + sound-dai = <&frddr_b>;
>> + };
>> +
>> + dai-link-2 {
>> + sound-dai = <&frddr_c>;
>> + };
>> +
>> + dai-link-3 {
>> + sound-dai = <&toddr_a>;
>> + };
>> +
>> + dai-link-4 {
>> + sound-dai = <&toddr_b>;
>> + };
>> +
>> + dai-link-5 {
>> + sound-dai = <&toddr_c>;
>> + };
>> +
>> + dai-link-6 {
>> + sound-dai = <&tdmif_a>;
>> + dai-format = "i2s";
>> + dai-tdm-slot-tx-mask-0 = <1 1>;
>> + mclk-fs = <256>;
>> + codec-0 {
>> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
>> + };
>> + codec-1 {
>> + sound-dai = <&toacodec TOACODEC_IN_A>;
>> + };
>> + };
>> +
>> + dai-link-7 {
>> + sound-dai = <&tdmif_b>;
>> + dai-format = "i2s";
>> + dai-tdm-slot-tx-mask-0 = <1 1>;
>> + mclk-fs = <256>;
>> + codec-0 {
>> + sound-dai = <&toacodec TOACODEC_IN_B>;
>> + };
>> + codec-1 {
>> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
>> + };
>> + };
>> +
>> + /* 8ch HDMI interface */
>> + dai-link-8 {
>> + sound-dai = <&tdmif_c>;
>> + dai-format = "i2s";
>> + dai-tdm-slot-tx-mask-0 = <1 1>;
>> + dai-tdm-slot-tx-mask-1 = <1 1>;
>> + dai-tdm-slot-tx-mask-2 = <1 1>;
>> + dai-tdm-slot-tx-mask-3 = <1 1>;
>> + mclk-fs = <256>;
>> + codec-0 {
>> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_C>;
>> + };
>> + };
>> +
>> + /* spdif hdmi and coax output */
>> + dai-link-9 {
>> + sound-dai = <&spdifout_a>;
>> +
>> + codec-0 {
>> + sound-dai = <&spdif_dit>;
>> + };
>> +
>> + codec-1 {
>> + sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_A>;
>> + };
>> + };
>> +
>> + /* spdif hdmi interface */
>> + dai-link-10 {
>> + sound-dai = <&spdifout_b>;
>> +
>> + codec {
>> + sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_B>;
>> + };
>> + };
>> +
>> + /* spdif coax input */
>> + dai-link-11 {
>> + sound-dai = <&spdifin>;
>> +
>> + codec {
>> + sound-dai = <&spdif_dir>;
>> + };
>> + };
>> +
>> + dai-link-12 {
>> + sound-dai = <&toacodec TOACODEC_OUT>;
>> +
>> + codec {
>> + sound-dai = <&acodec>;
>> + };
>> + };
>> + };
>> };
>>
>> &pwm_ef {
>> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
>> index 957577d986c0675a503115e1ccbc4387c2051620..3af2fb333cf7b1ca35f1ff7ad8479bcd859e608a 100644
>> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
>> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
>> @@ -11,6 +11,11 @@
>> #include <dt-bindings/clock/amlogic,s4-peripherals-clkc.h>
>> #include <dt-bindings/power/meson-s4-power.h>
>> #include <dt-bindings/reset/amlogic,meson-s4-reset.h>
>> +#include <dt-bindings/clock/axg-audio-clkc.h>
>> +#include <dt-bindings/reset/amlogic,meson-axg-audio-arb.h>
>> +#include <dt-bindings/reset/amlogic,meson-g12a-audio-reset.h>
>> +#include <dt-bindings/sound/meson-g12a-toacodec.h>
>> +#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
>>
>> / {
>> cpus {
>> @@ -849,4 +854,386 @@ emmc: mmc@fe08c000 {
>> status = "disabled";
>> };
>> };
>> +
>> + tdmif_a: audio-controller-0 {
>> + compatible = "amlogic,axg-tdm-iface";
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TDM_A";
>> + clocks = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
>> + <&clkc_audio AUD_CLKID_MST_A_LRCLK>,
>> + <&clkc_audio AUD_CLKID_MST_A_MCLK>;
>> + clock-names = "sclk", "lrclk","mclk";
>> + };
>> +
>> + tdmif_b: audio-controller-1 {
>> + compatible = "amlogic,axg-tdm-iface";
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TDM_B";
>> + clocks = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
>> + <&clkc_audio AUD_CLKID_MST_B_LRCLK>,
>> + <&clkc_audio AUD_CLKID_MST_B_MCLK>;
>> + clock-names = "sclk", "lrclk","mclk";
>> + };
>> +
>> + tdmif_c: audio-controller-2 {
>> + compatible = "amlogic,axg-tdm-iface";
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TDM_C";
>> + clocks = <&clkc_audio AUD_CLKID_MST_C_SCLK>,
>> + <&clkc_audio AUD_CLKID_MST_C_LRCLK>,
>> + <&clkc_audio AUD_CLKID_MST_C_MCLK>;
>> + clock-names = "sclk", "lrclk","mclk";
>> + };
>> +};
>> +
>> +&apb4 {
>> + acodec: audio-controller@1a000 {
>> + compatible = "amlogic,t9015";
>> + reg = <0x0 0x1A000 0x0 0x14>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "ACODEC";
>> + clocks = <&clkc_periphs CLKID_ACODEC>;
>> + clock-names = "pclk";
>> + resets = <&reset RESET_ACODEC>;
>> + AVDD-supply = <&vddio_ao1v8>;
>> + };
>> +
>> + clkc_audio: clock-controller@330000 {
>> + compatible = "amlogic,s4-audio-clkc";
>> + reg = <0x0 0x330000 0x0 0xd8>,
>> + <0x0 0x330e80 0x0 0x10>;
>> + #clock-cells = <1>;
>> + #reset-cells = <1>;
>> + power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
>> + clocks = <&clkc_periphs CLKID_AUDIO>,
>> + <&clkc_pll CLKID_MPLL0>,
>> + <&clkc_pll CLKID_MPLL1>,
>> + <&clkc_pll CLKID_MPLL2>,
>> + <&clkc_pll CLKID_MPLL3>,
>> + <&clkc_pll CLKID_HIFI_PLL>,
>> + <&clkc_pll CLKID_FCLK_DIV3>,
>> + <&clkc_pll CLKID_FCLK_DIV4>,
>> + <&clkc_pll CLKID_FCLK_DIV5>;
>> + clock-names = "pclk",
>> + "mst_in0",
>> + "mst_in1",
>> + "mst_in2",
>> + "mst_in3",
>> + "mst_in4",
>> + "mst_in5",
>> + "mst_in6",
>> + "mst_in7";
>> +
>> + resets = <&reset RESET_AUDIO>;
>> + };
>> +
>> + clock-controller@330e80 {
>> + compatible = "amlogic,clock-pads-clkc";
>> + reg = <0x0 0x330e80 0x0 0x10>;
>> + #clock-cells = <1>;
>> + power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
>> + clocks = <&clkc_periphs CLKID_AUDIO>,
>> + <&clkc_pll CLKID_MPLL0>,
>> + <&clkc_pll CLKID_MPLL1>,
>> + <&clkc_pll CLKID_MPLL2>,
>> + <&clkc_pll CLKID_MPLL3>,
>> + <&clkc_pll CLKID_HIFI_PLL>,
>> + <&clkc_pll CLKID_FCLK_DIV3>,
>> + <&clkc_pll CLKID_FCLK_DIV4>,
>> + <&clkc_pll CLKID_FCLK_DIV5>;
>> + clock-names = "pclk",
>> + "mst_in0",
>> + "mst_in1",
>> + "mst_in2",
>> + "mst_in3",
>> + "mst_in4",
>> + "mst_in5",
>> + "mst_in6",
>> + "mst_in7";
> Assuming I understood where you are tyring to go with this, those are
> not the input in of this clock controller. The only reason *may* have
> worked is because you referenced the clock by names instead of fwname
yes, just as you understand it. from your previous suggestion, I found
that adding this is much more convenient than modifying a large amount
of code.
>
>> + };
>> +
>> + toddr_a: audio-controller@330100 {
>> + compatible = "amlogic,sm1-toddr",
>> + "amlogic,axg-toddr";
>> + reg = <0x0 0x330100 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TODDR_A";
>> + interrupts = <GIC_SPI 32 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_TODDR_A>;
>> + resets = <&arb AXG_ARB_TODDR_A>,
>> + <&clkc_audio AUD_RESET_TODDR_A>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <8192>;
>> + };
>> +
>> + toddr_b: audio-controller@330140 {
>> + compatible = "amlogic,sm1-toddr",
>> + "amlogic,axg-toddr";
>> + reg = <0x0 0x330140 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TODDR_B";
>> + interrupts = <GIC_SPI 33 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_TODDR_B>;
>> + resets = <&arb AXG_ARB_TODDR_B>,
>> + <&clkc_audio AUD_RESET_TODDR_B>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <256>;
>> + };
>> +
>> + toddr_c: audio-controller@330180 {
>> + compatible = "amlogic,sm1-toddr",
>> + "amlogic,axg-toddr";
>> + reg = <0x0 0x330180 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TODDR_C";
>> + interrupts = <GIC_SPI 34 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_TODDR_C>;
>> + resets = <&arb AXG_ARB_TODDR_C>,
>> + <&clkc_audio AUD_RESET_TODDR_C>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <256>;
>> + };
>> +
>> + frddr_a: audio-controller@3301c0 {
>> + compatible = "amlogic,sm1-frddr",
>> + "amlogic,axg-frddr";
>> + reg = <0x0 0x3301c0 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "FRDDR_A";
>> + interrupts = <GIC_SPI 36 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_FRDDR_A>;
>> + resets = <&arb AXG_ARB_FRDDR_A>,
>> + <&clkc_audio AUD_RESET_FRDDR_A>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <512>;
>> + };
>> +
>> + frddr_b: audio-controller@330200 {
>> + compatible = "amlogic,sm1-frddr",
>> + "amlogic,axg-frddr";
>> + reg = <0x0 0x330200 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "FRDDR_B";
>> + interrupts = <GIC_SPI 37 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_FRDDR_B>;
>> + resets = <&arb AXG_ARB_FRDDR_B>,
>> + <&clkc_audio AUD_RESET_FRDDR_B>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <256>;
>> + };
>> +
>> + frddr_c: audio-controller@330240 {
>> + compatible = "amlogic,sm1-frddr",
>> + "amlogic,axg-frddr";
>> + reg = <0x0 0x330240 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "FRDDR_C";
>> + interrupts = <GIC_SPI 38 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_FRDDR_C>;
>> + resets = <&arb AXG_ARB_FRDDR_C>,
>> + <&clkc_audio AUD_RESET_FRDDR_C>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <256>;
>> + };
>> +
>> + arb: reset-controller@330280 {
>> + compatible = "amlogic,meson-sm1-audio-arb";
>> + reg = <0x0 0x330280 0x0 0x4>;
>> + #reset-cells = <1>;
>> + clocks = <&clkc_audio AUD_CLKID_DDR_ARB>;
>> + };
>> +
>> + tdmin_a: audio-controller@330300 {
>> + compatible = "amlogic,sm1-tdmin";
>> + reg = <0x0 0x330300 0x0 0x40>;
>> + sound-name-prefix = "TDMIN_A";
>> + resets = <&clkc_audio AUD_RESET_TDMIN_A>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMIN_A>,
>> + <&clkc_audio AUD_CLKID_TDMIN_A_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_A_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + tdmin_b: audio-controller@330340 {
>> + compatible = "amlogic,sm1-tdmin";
>> + reg = <0x0 0x330340 0x0 0x40>;
>> + sound-name-prefix = "TDMIN_B";
>> + resets = <&clkc_audio AUD_RESET_TDMIN_B>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMIN_B>,
>> + <&clkc_audio AUD_CLKID_TDMIN_B_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_B_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + tdmin_c: audio-controller@330380 {
>> + compatible = "amlogic,sm1-tdmin";
>> + reg = <0x0 0x330380 0x0 0x40>;
>> + sound-name-prefix = "TDMIN_C";
>> + resets = <&clkc_audio AUD_RESET_TDMIN_C>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMIN_C>,
>> + <&clkc_audio AUD_CLKID_TDMIN_C_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_C_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + tdmin_lb: audio-controller@3303c0 {
>> + compatible = "amlogic,sm1-tdmin";
>> + reg = <0x0 0x3303c0 0x0 0x40>;
>> + sound-name-prefix = "TDMIN_LB";
>> + resets = <&clkc_audio AUD_RESET_TDMIN_LB>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMIN_LB>,
>> + <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + spdifin: audio-controller@330400 {
>> + compatible = "amlogic,g12a-spdifin",
>> + "amlogic,axg-spdifin";
>> + reg = <0x0 0x330400 0x0 0x30>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "SPDIFIN";
>> + interrupts = <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_SPDIFIN>,
>> + <&clkc_audio AUD_CLKID_SPDIFIN_CLK>;
>> + clock-names = "pclk", "refclk";
>> + resets = <&clkc_audio AUD_RESET_SPDIFIN>;
>> + };
>> +
>> + spdifout_a: audio-controller@330480 {
>> + compatible = "amlogic,g12a-spdifout",
>> + "amlogic,axg-spdifout";
>> + reg = <0x0 0x330480 0x0 0x50>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "SPDIFOUT_A";
>> + clocks = <&clkc_audio AUD_CLKID_SPDIFOUT>,
>> + <&clkc_audio AUD_CLKID_SPDIFOUT_CLK>;
>> + clock-names = "pclk", "mclk";
>> + resets = <&clkc_audio AUD_RESET_SPDIFOUT>;
>> + };
>> +
>> + tdmout_a: audio-controller@330500 {
>> + compatible = "amlogic,sm1-tdmout";
>> + reg = <0x0 0x330500 0x0 0x40>;
>> + sound-name-prefix = "TDMOUT_A";
>> + resets = <&clkc_audio AUD_RESET_TDMOUT_A>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMOUT_A>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + tdmout_b: audio-controller@330540 {
>> + compatible = "amlogic,sm1-tdmout";
>> + reg = <0x0 0x330540 0x0 0x40>;
>> + sound-name-prefix = "TDMOUT_B";
>> + resets = <&clkc_audio AUD_RESET_TDMOUT_B>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMOUT_B>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + tdmout_c: audio-controller@330580 {
>> + compatible = "amlogic,sm1-tdmout";
>> + reg = <0x0 0x330580 0x0 0x40>;
>> + sound-name-prefix = "TDMOUT_C";
>> + resets = <&clkc_audio AUD_RESET_TDMOUT_C>;
>> + clocks = <&clkc_audio AUD_CLKID_TDMOUT_C>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK_SEL>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>,
>> + <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>;
>> + clock-names = "pclk", "sclk", "sclk_sel",
>> + "lrclk", "lrclk_sel";
>> + };
>> +
>> + spdifout_b: audio-controller@330680 {
>> + compatible = "amlogic,g12a-spdifout",
>> + "amlogic,axg-spdifout";
>> + reg = <0x0 0x330680 0x0 0x50>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "SPDIFOUT_B";
>> + clocks = <&clkc_audio AUD_CLKID_SPDIFOUT_B>,
>> + <&clkc_audio AUD_CLKID_SPDIFOUT_B_CLK>;
>> + clock-names = "pclk", "mclk";
>> + resets = <&clkc_audio AUD_RESET_SPDIFOUT_B>;
>> + };
>> +
>> + toacodec: audio-controller@330740 {
>> + compatible = "amlogic,s4-toacodec",
>> + "amlogic,g12a-toacodec";
>> + reg = <0x0 0x330740 0x0 0x4>;
>> + sound-name-prefix = "TOACODEC";
>> + #sound-dai-cells = <1>;
>> + resets = <&clkc_audio AUD_RESET_TOACODEC>;
>> + };
>> +
>> + tohdmitx: audio-controller@330744 {
>> + compatible = "amlogic,sm1-tohdmitx",
>> + "amlogic,g12a-tohdmitx";
>> + reg = <0x0 0x330744 0x0 0x4>;
>> + #sound-dai-cells = <1>;
>> + sound-name-prefix = "TOHDMITX";
>> + resets = <&clkc_audio AUD_RESET_TOHDMITX>;
>> + };
>> +
>> + toddr_d: audio-controller@330840 {
>> + compatible = "amlogic,sm1-toddr",
>> + "amlogic,axg-toddr";
>> + reg = <0x0 0x330840 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "TODDR_D";
>> + interrupts = <GIC_SPI 45 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_TODDR_D>;
>> + resets = <&arb AXG_ARB_TODDR_D>,
>> + <&clkc_audio AUD_RESET_TODDR_D>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <256>;
>> + };
>> +
>> + frddr_d: audio-controller@330880 {
>> + compatible = "amlogic,sm1-frddr",
>> + "amlogic,axg-frddr";
>> + reg = <0x0 0x330880 0x0 0x2c>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "FRDDR_D";
>> + interrupts = <GIC_SPI 46 IRQ_TYPE_EDGE_RISING>;
>> + clocks = <&clkc_audio AUD_CLKID_FRDDR_D>;
>> + resets = <&arb AXG_ARB_FRDDR_D>,
>> + <&clkc_audio AUD_RESET_FRDDR_D>;
>> + reset-names = "arb", "rst";
>> + amlogic,fifo-depth = <256>;
>> + };
>> +
>> + pdm: audio-controller@331000 {
>> + compatible = "amlogic,sm1-pdm",
>> + "amlogic,axg-pdm";
>> + reg = <0x0 0x331000 0x0 0x34>;
>> + #sound-dai-cells = <0>;
>> + sound-name-prefix = "PDM";
>> + clocks = <&clkc_audio AUD_CLKID_PDM>,
>> + <&clkc_audio AUD_CLKID_PDM_DCLK>,
>> + <&clkc_audio AUD_CLKID_PDM_SYSCLK>;
>> + clock-names = "pclk", "dclk", "sysclk";
>> + resets = <&clkc_audio AUD_RESET_PDM>;
>> + };
>> };
> --
> Jerome
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc
2025-07-10 3:35 ` [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc jiebing chen via B4 Relay
2025-07-10 8:57 ` Jerome Brunet
@ 2025-07-10 9:56 ` Krzysztof Kozlowski
2025-07-14 6:10 ` Krzysztof Kozlowski
1 sibling, 1 reply; 20+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-10 9:56 UTC (permalink / raw)
To: jiebing chen
Cc: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd, linux-sound, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-clk, jian.xu,
shuai.li, zhe.wang
On Thu, Jul 10, 2025 at 11:35:37AM +0800, jiebing chen wrote:
> The audio power domain has been detected on S4 device.
> It must be enabled prior to audio operations.
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> .../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 +++++++++++++++++++++-
> 1 file changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
> index fd7982dd4ceab82389167079c2258a9acff51a76..c3f0bb9b2ff050394828ba339a7be0c9c48e9a76 100644
> --- a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
> +++ b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
> @@ -21,6 +21,8 @@ properties:
> - amlogic,axg-audio-clkc
> - amlogic,g12a-audio-clkc
> - amlogic,sm1-audio-clkc
> + - amlogic,s4-audio-clkc
> + - amlogic,clock-pads-clkc
Keep the list sorted.
>
> '#clock-cells':
> const: 1
> @@ -100,13 +102,15 @@ properties:
> resets:
> description: internal reset line
>
> + power-domains:
> + maxItems: 1
> +
> required:
> - compatible
> - '#clock-cells'
> - reg
> - clocks
> - clock-names
> - - resets
>
> allOf:
> - if:
> @@ -116,12 +120,37 @@ allOf:
> enum:
> - amlogic,g12a-audio-clkc
> - amlogic,sm1-audio-clkc
> + - amlogic,s4-audio-clkc
Keep it sorted.
> then:
> required:
> - '#reset-cells'
> else:
> properties:
> '#reset-cells': false
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - amlogic,s4-audio-clkc
> + then:
> + required:
> + - power-domains
> + else:
> + properties:
> + power-domains: false
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - amlogic,clock-pads-clkc
> + then:
> + properties:
> + resets: false
> + else:
> + required:
> + - resets
>
> additionalProperties: false
>
> @@ -129,6 +158,7 @@ examples:
> - |
> #include <dt-bindings/clock/axg-clkc.h>
> #include <dt-bindings/reset/amlogic,meson-axg-reset.h>
> + #include <dt-bindings/power/meson-s4-power.h>
> apb {
> #address-cells = <2>;
> #size-cells = <2>;
> @@ -198,4 +228,27 @@ examples:
> "slv_lrclk9";
> resets = <&reset RESET_AUDIO>;
> };
> + clk_pad: clock-controller@330e80 {
Inconsistent indentation. Look at the rest here.
Best regards,
Krzysztof
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
2025-07-10 3:35 ` [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec jiebing chen via B4 Relay
@ 2025-07-10 9:57 ` Krzysztof Kozlowski
2025-07-14 6:10 ` Krzysztof Kozlowski
1 sibling, 0 replies; 20+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-10 9:57 UTC (permalink / raw)
To: jiebing chen
Cc: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd, linux-sound, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-clk, jian.xu,
shuai.li, zhe.wang
On Thu, Jul 10, 2025 at 11:35:39AM +0800, jiebing chen wrote:
> Add S4 SoC tocodec compatibility support.
>
> Acked-by: Rob Herring (Arm) <robh@kernel.org>
> Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
> ---
> Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml b/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
> index 23f82bb89750898d20c866015bc2e1a4b0554846..ea669f4359bc81b0f45bc2105c832fc2b11d8441 100644
> --- a/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
> +++ b/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
> @@ -26,6 +26,7 @@ properties:
> - items:
> - enum:
> - amlogic,sm1-toacodec
> + - amlogic,s4-toacodec
Keep the list sorted.
> - const: amlogic,g12a-toacodec
>
> reg:
>
> --
> 2.43.0
>
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 0/6] Add support for S4 audio
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
` (6 preceding siblings ...)
2025-07-10 9:32 ` [PATCH v5 0/6] Add support for S4 audio Jerome Brunet
@ 2025-07-10 19:05 ` Rob Herring (Arm)
7 siblings, 0 replies; 20+ messages in thread
From: Rob Herring (Arm) @ 2025-07-10 19:05 UTC (permalink / raw)
To: jiebing chen
Cc: Neil Armstrong, Conor Dooley, Liam Girdwood, Michael Turquette,
linux-clk, devicetree, linux-sound, jian.xu, Mark Brown,
Stephen Boyd, zhe.wang, Jerome Brunet, Kevin Hilman,
Martin Blumenstingl, linux-amlogic, Jaroslav Kysela, shuai.li,
Krzysztof Kozlowski, linux-kernel, Takashi Iwai, linux-arm-kernel
On Thu, 10 Jul 2025 11:35:36 +0800, jiebing chen wrote:
> This series completes the end-to-end audio support
> for S4 SoC from hardware bindings to driver implementation
> and system integration.
>
> 1 Device Tree Bindings Updates
> Added audio power domain support for S4 SoC.Defined mclk/sclk pad clock IDs in AXG audio bindings.
> Add S4 audio tocodec binding support.
>
> 2 Driver Implementation
> Implemented S4 tocodec driver for G12A architecture.
> Add mclk pad divider support for S4 in AXG audio clock.
>
> 3 Device Tree Integration
> Add Amlogic S4 audio subsystem support in arm64 DTS.
>
> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
> ---
> Changes in v5:
> - Fix warning Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yam when make dt_binding_check
> - The audio reg is mounted below the APB bus in dts file.
> - Deal with pad clock in a distinct controller.
> - Fix warning for sound/soc/meson/g12a-toacodec.c
> - Link to v4: https://lore.kernel.org/r/20250319-audio_drvier-v4-0-686867fad719@amlogic.com
>
> Changes in v4:
> - fix dtb check warning
> - add maxItems of power domain for dt-bindings
> - fixed audio clock pads regmap base and reg offset
> - use dapm widget to control tocodec bclk and mclk enable
> - Link to v3: https://lore.kernel.org/r/20250228-audio_drvier-v3-0-dbfd30507e4c@amlogic.com
>
> Changes in v3:
> - remove g12a tocodec switch event
> - Modify the incorrect title for dt-bindings
> - Link to v2: https://lore.kernel.org/r/20250214-audio_drvier-v2-0-37881fa37c9e@amlogic.com
>
> Changes in v2:
> - remove tdm pad control and change tocodec base on g12a
> - change hifipll rate to support 24bit
> - add s4 audio clock
> - Link to v1: https://lore.kernel.org/r/20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com
>
> ---
> jiebing chen (6):
> dt-bindings: clock: meson: Add audio power domain for s4 soc
> dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids
> dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
> ASoC: meson: g12a-toacodec: Add s4 tocodec driver
> clk: meson: axg-audio: Add the mclk pad div for s4 chip
> arm64: dts: amlogic: Add Amlogic S4 Audio
>
> .../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 ++-
> .../bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
> .../boot/dts/amlogic/meson-s4-s805x2-aq222.dts | 218 +++++++++++
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 387 ++++++++++++++++++
> drivers/clk/meson/axg-audio.c | 435 ++++++++++++++++++++-
> drivers/clk/meson/axg-audio.h | 6 +
> include/dt-bindings/clock/axg-audio-clkc.h | 11 +
> sound/soc/meson/g12a-toacodec.c | 42 ++
> 8 files changed, 1152 insertions(+), 3 deletions(-)
> ---
> base-commit: 6ecd20965bdc21b265a0671ccf36d9ad8043f5ab
> change-id: 20250110-audio_drvier-07a5381c494b
>
> Best regards,
> --
> Jiebing Chen <jiebing.chen@amlogic.com>
>
>
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
This patch series was applied (using b4) to base:
Base: using specified base-commit 6ecd20965bdc21b265a0671ccf36d9ad8043f5ab
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/amlogic/' for 20250710-audio_drvier-v5-0-d4155f1e7464@amlogic.com:
arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dtb: clock-controller@330000 (amlogic,s4-audio-clkc): reg: [[0, 3342336, 0, 216], [0, 3346048, 0, 16]] is too long
from schema $id: http://devicetree.org/schemas/clock/amlogic,axg-audio-clkc.yaml#
arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dtb: clock-controller@330e80 (amlogic,clock-pads-clkc): power-domains: False schema does not allow [[14, 7]]
from schema $id: http://devicetree.org/schemas/clock/amlogic,axg-audio-clkc.yaml#
arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dtb: sound (amlogic,axg-sound-card): 'anyOf' conditional failed, one must be fixed:
'clocks' is a required property
'#clock-cells' is a required property
from schema $id: http://devicetree.org/schemas/clock/clock.yaml#
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc
2025-07-10 9:56 ` Krzysztof Kozlowski
@ 2025-07-14 6:10 ` Krzysztof Kozlowski
0 siblings, 0 replies; 20+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-14 6:10 UTC (permalink / raw)
To: jiebing chen
Cc: Jerome Brunet, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd, linux-sound, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-clk, jian.xu,
shuai.li, zhe.wang
On 10/07/2025 11:56, Krzysztof Kozlowski wrote:
> On Thu, Jul 10, 2025 at 11:35:37AM +0800, jiebing chen wrote:
>> The audio power domain has been detected on S4 device.
>> It must be enabled prior to audio operations.
>>
>> Signed-off-by: jiebing chen <jiebing.chen@amlogic.com>
>> ---
>> .../bindings/clock/amlogic,axg-audio-clkc.yaml | 55 +++++++++++++++++++++-
>> 1 file changed, 54 insertions(+), 1 deletion(-)
>>
>> diff --git a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
>> index fd7982dd4ceab82389167079c2258a9acff51a76..c3f0bb9b2ff050394828ba339a7be0c9c48e9a76 100644
>> --- a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
>> +++ b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
>> @@ -21,6 +21,8 @@ properties:
>> - amlogic,axg-audio-clkc
>> - amlogic,g12a-audio-clkc
>> - amlogic,sm1-audio-clkc
>> + - amlogic,s4-audio-clkc
>> + - amlogic,clock-pads-clkc
>
> Keep the list sorted.
>
And now I noticed that I already asked for this at previous versions!
Respond to and implement feedback, not just ignore it.
Best regards,
Krzysztof
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
2025-07-10 3:35 ` [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec jiebing chen via B4 Relay
2025-07-10 9:57 ` Krzysztof Kozlowski
@ 2025-07-14 6:10 ` Krzysztof Kozlowski
2025-07-14 7:22 ` Krzysztof Kozlowski
1 sibling, 1 reply; 20+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-14 6:10 UTC (permalink / raw)
To: jiebing.chen, Jerome Brunet, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
Takashi Iwai, Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang
On 10/07/2025 05:35, jiebing chen via B4 Relay wrote:
> From: jiebing chen <jiebing.chen@amlogic.com>
>
> Add S4 SoC tocodec compatibility support.
>
> Acked-by: Rob Herring (Arm) <robh@kernel.org>
> Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
> ---
Please use subject prefixes matching the subsystem. You can get them for
example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
your patch is touching. For bindings, the preferred subjects are
explained here:
https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters
<form letter>
This is a friendly reminder during the review process.
It seems my or other reviewer's previous comments were not fully
addressed. Maybe the feedback got lost between the quotes, maybe you
just forgot to apply it. Please go back to the previous discussion and
either implement all requested changes or keep discussing them.
Thank you.
</form letter>
Best regards,
Krzysztof
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
2025-07-14 6:10 ` Krzysztof Kozlowski
@ 2025-07-14 7:22 ` Krzysztof Kozlowski
2025-07-14 7:31 ` Jiebing Chen
0 siblings, 1 reply; 20+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-14 7:22 UTC (permalink / raw)
To: jiebing.chen, Jerome Brunet, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
Takashi Iwai, Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang
On 14/07/2025 08:10, Krzysztof Kozlowski wrote:
> On 10/07/2025 05:35, jiebing chen via B4 Relay wrote:
>> From: jiebing chen <jiebing.chen@amlogic.com>
>>
>> Add S4 SoC tocodec compatibility support.
>>
>> Acked-by: Rob Herring (Arm) <robh@kernel.org>
>> Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
>> ---
>
> Please use subject prefixes matching the subsystem. You can get them for
> example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
> your patch is touching. For bindings, the preferred subjects are
> explained here:
> https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters
>
>
> <form letter>
> This is a friendly reminder during the review process.
>
> It seems my or other reviewer's previous comments were not fully
> addressed. Maybe the feedback got lost between the quotes, maybe you
> just forgot to apply it. Please go back to the previous discussion and
> either implement all requested changes or keep discussing them.
>
> Thank you.
> </form letter>
>
You responded in private, but that's not how we discuss here. Please
keep all discussions public.
Above form letter means you received feedback at v1 or v2 and you did
not implement it. You did not respond to it, either.
Please go back to v1 or v2 and implement entire feedback.
Best regards,
Krzysztof
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec
2025-07-14 7:22 ` Krzysztof Kozlowski
@ 2025-07-14 7:31 ` Jiebing Chen
0 siblings, 0 replies; 20+ messages in thread
From: Jiebing Chen @ 2025-07-14 7:31 UTC (permalink / raw)
To: Krzysztof Kozlowski, Jerome Brunet, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
Takashi Iwai, Neil Armstrong, Kevin Hilman, Martin Blumenstingl,
Michael Turquette, Stephen Boyd
Cc: linux-sound, devicetree, linux-kernel, linux-arm-kernel,
linux-amlogic, linux-clk, jian.xu, shuai.li, zhe.wang
在 2025/7/14 15:22, Krzysztof Kozlowski 写道:
> [ EXTERNAL EMAIL ]
>
> On 14/07/2025 08:10, Krzysztof Kozlowski wrote:
>> On 10/07/2025 05:35, jiebing chen via B4 Relay wrote:
>>> From: jiebing chen <jiebing.chen@amlogic.com>
>>>
>>> Add S4 SoC tocodec compatibility support.
>>>
>>> Acked-by: Rob Herring (Arm) <robh@kernel.org>
>>> Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
>>> ---
>> Please use subject prefixes matching the subsystem. You can get them for
>> example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
>> your patch is touching. For bindings, the preferred subjects are
>> explained here:
>> https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters
>>
>>
>> <form letter>
>> This is a friendly reminder during the review process.
>>
>> It seems my or other reviewer's previous comments were not fully
>> addressed. Maybe the feedback got lost between the quotes, maybe you
>> just forgot to apply it. Please go back to the previous discussion and
>> either implement all requested changes or keep discussing them.
>>
>> Thank you.
>> </form letter>
>>
> You responded in private, but that's not how we discuss here. Please
> keep all discussions public.
>
> Above form letter means you received feedback at v1 or v2 and you did
> not implement it. You did not respond to it, either.
>
> Please go back to v1 or v2 and implement entire feedback.
thanks, I will refer to the previous submission.
3fda85324b8d ASoC: dt-bindings: Extend name-prefix.yaml into common DAI
properties
ASoC: dt-bindings:
>
> Best regards,
> Krzysztof
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2025-07-14 7:49 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-10 3:35 [PATCH v5 0/6] Add support for S4 audio jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 1/6] dt-bindings: clock: meson: Add audio power domain for s4 soc jiebing chen via B4 Relay
2025-07-10 8:57 ` Jerome Brunet
2025-07-10 9:56 ` Krzysztof Kozlowski
2025-07-14 6:10 ` Krzysztof Kozlowski
2025-07-10 3:35 ` [PATCH v5 2/6] dt-bindings: clock: axg-audio: Add mclk and sclk pad clock ids jiebing chen via B4 Relay
2025-07-10 3:35 ` [PATCH v5 3/6] dt-bindings: Asoc: axg-audio: Add s4 audio tocodec jiebing chen via B4 Relay
2025-07-10 9:57 ` Krzysztof Kozlowski
2025-07-14 6:10 ` Krzysztof Kozlowski
2025-07-14 7:22 ` Krzysztof Kozlowski
2025-07-14 7:31 ` Jiebing Chen
2025-07-10 3:35 ` [PATCH v5 4/6] ASoC: meson: g12a-toacodec: Add s4 tocodec driver jiebing chen via B4 Relay
2025-07-10 9:29 ` Jerome Brunet
2025-07-10 3:35 ` [PATCH v5 5/6] clk: meson: axg-audio: Add the mclk pad div for s4 chip jiebing chen via B4 Relay
2025-07-10 9:11 ` Jerome Brunet
2025-07-10 3:35 ` [PATCH v5 6/6] arm64: dts: amlogic: Add Amlogic S4 Audio jiebing chen via B4 Relay
2025-07-10 9:20 ` Jerome Brunet
2025-07-10 9:48 ` Jiebing Chen
2025-07-10 9:32 ` [PATCH v5 0/6] Add support for S4 audio Jerome Brunet
2025-07-10 19:05 ` Rob Herring (Arm)
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).