* [PATCH v7 0/7] Add support for S4 audio
@ 2026-10-25 19:23 christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 1/7] dt-bindings: clock: meson: Add audio power domain for S4 soc christian.koever-draxl
` (8 more replies)
0 siblings, 9 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:23 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
This picks up Jiebing Chen's "[PATCH v6 0/4] Add support for S4 audio"
(and the tohdmitx S4 patch) unchanged apart from rebasing, with
Jiebing's authorship kept, and adds one fix on top:
6: g12a-toacodec: fix the S4 source mux read-back. The S4 DAT_SEL
field moved, so the mux always read back as input A and DAPM never
powered the selected path.
[ckoever: Jiebing, if you have a newer version or prefer to post this
yourself, I am happy to rebase the fix onto that instead.]
Tested: HDMI audio up to 192 kHz; the TDM-C to internal codec path
plays without errors at 44.1 to 192 kHz (not listened to).
Tool use (Documentation/process/generated-content.rst):
This work was done with the help of an AI coding assistant, Claude
(Anthropic), used through Claude Code over many sessions. It did a large
part of the hands-on work: it read the vendor kernel and the firmware
interfaces, probed registers on the board, drafted the code and the
changelogs, and ran the builds, checkpatch, dt_binding_check and the
tests on the hardware. I directed the work, reviewed every change and
the final patches, and take responsibility for them. There is no single
prompt to quote; the sessions were of the form "find out why X fails on
this board, fix it, test it on the box".
Tested on an Amediatech X98Q TV box (Amlogic S905W2, S4 family, 2 GiB),
vendor U-Boot and BL31/OP-TEE, Linux 7.3 plus this work.
Christian Stefan Kövér-Draxl (1):
ASoC: meson: g12a-toacodec: fix the S4 source mux read-back
Jiebing Chen (6):
dt-bindings: clock: meson: Add audio power domain for S4 soc
dt-bindings: Asoc: axg-audio: Add S4 audio tocodec
ASoC: meson: g12a-toacodec: Add S4 tocodec driver
clk: meson: axg_audio: add S4 support
ASoC: dt-bindings: amlogic,g12a-tohdmitx: add S4 compatible
ASoC: meson: g12a-tohdmitx: add S4 support
.../clock/amlogic,axg-audio-clkc.yaml | 18 +-
.../bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
.../bindings/sound/amlogic,g12a-tohdmitx.yaml | 1 +
drivers/clk/meson/axg-audio.c | 165 ++++++++++++++++++
sound/soc/meson/g12a-toacodec.c | 51 ++++++
sound/soc/meson/g12a-tohdmitx.c | 80 ++++++++-
6 files changed, 312 insertions(+), 4 deletions(-)
base-commit: 7be4bc52fd9e0e55dc9a2e0232b89427d2c4b614
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 1/7] dt-bindings: clock: meson: Add audio power domain for S4 soc
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
@ 2026-10-25 19:23 ` christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 2/7] dt-bindings: Asoc: axg-audio: Add S4 audio tocodec christian.koever-draxl
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:23 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Jiebing Chen,
Christian Stefan Kövér-Draxl
From: Jiebing Chen <jiebing.chen@amlogic.com>
The audio power domain has been found on S4 device.
It must be enabled prior to audio operations.
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
.../bindings/clock/amlogic,axg-audio-clkc.yaml | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
index fd7982dd4cea..1cd9a99e5ff3 100644
--- a/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
+++ b/Documentation/devicetree/bindings/clock/amlogic,axg-audio-clkc.yaml
@@ -20,6 +20,7 @@ properties:
enum:
- amlogic,axg-audio-clkc
- amlogic,g12a-audio-clkc
+ - amlogic,s4-audio-clkc
- amlogic,sm1-audio-clkc
'#clock-cells':
@@ -99,7 +100,8 @@ properties:
resets:
description: internal reset line
-
+ power-domains:
+ maxItems: 1
required:
- compatible
- '#clock-cells'
@@ -115,6 +117,7 @@ allOf:
contains:
enum:
- amlogic,g12a-audio-clkc
+ - amlogic,s4-audio-clkc
- amlogic,sm1-audio-clkc
then:
required:
@@ -122,7 +125,18 @@ allOf:
else:
properties:
'#reset-cells': false
-
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - amlogic,s4-audio-clkc
+ then:
+ required:
+ - power-domains
+ else:
+ properties:
+ power-domains: false
additionalProperties: false
examples:
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 2/7] dt-bindings: Asoc: axg-audio: Add S4 audio tocodec
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 1/7] dt-bindings: clock: meson: Add audio power domain for S4 soc christian.koever-draxl
@ 2026-10-25 19:23 ` christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 3/7] ASoC: meson: g12a-toacodec: Add S4 tocodec driver christian.koever-draxl
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:23 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Jiebing Chen,
Christian Stefan Kövér-Draxl
From: Jiebing Chen <jiebing.chen@amlogic.com>
Add S4 SoC tocodec compatibility support.
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
.../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 23f82bb89750..7e053aaa0f59 100644
--- a/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
+++ b/Documentation/devicetree/bindings/sound/amlogic,g12a-toacodec.yaml
@@ -25,6 +25,7 @@ properties:
- const: amlogic,g12a-toacodec
- items:
- enum:
+ - amlogic,s4-toacodec
- amlogic,sm1-toacodec
- const: amlogic,g12a-toacodec
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 3/7] ASoC: meson: g12a-toacodec: Add S4 tocodec driver
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 1/7] dt-bindings: clock: meson: Add audio power domain for S4 soc christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 2/7] dt-bindings: Asoc: axg-audio: Add S4 audio tocodec christian.koever-draxl
@ 2026-10-25 19:24 ` christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 4/7] clk: meson: axg_audio: add S4 support christian.koever-draxl
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:24 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Jiebing Chen,
Christian Stefan Kövér-Draxl
From: Jiebing Chen <jiebing.chen@amlogic.com>
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>
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
sound/soc/meson/g12a-toacodec.c | 36 +++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/sound/soc/meson/g12a-toacodec.c b/sound/soc/meson/g12a-toacodec.c
index 21941ee552c5..204bf8654d2e 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 {
@@ -141,6 +144,13 @@ static const struct snd_soc_dapm_widget sm1_toacodec_widgets[] = {
&g12a_toacodec_out_enable),
};
+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)
@@ -234,6 +244,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,
@@ -256,6 +270,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,
@@ -276,6 +301,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",
@@ -285,6 +317,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.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 4/7] clk: meson: axg_audio: add S4 support
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
` (2 preceding siblings ...)
2026-10-25 19:24 ` [PATCH v7 3/7] ASoC: meson: g12a-toacodec: Add S4 tocodec driver christian.koever-draxl
@ 2026-10-25 19:24 ` christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 5/7] ASoC: dt-bindings: amlogic,g12a-tohdmitx: add S4 compatible christian.koever-draxl
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:24 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Jiebing Chen,
Christian Stefan Kövér-Draxl
From: Jiebing Chen <jiebing.chen@amlogic.com>
Add S4 support the axg audio clock controllers, Compared with the
previous version, the selection of the audio's clock and data pad
will be designed in the form of pinmux control. The purpose of doing
this is to distinguish between clock control and pin control selection.
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
drivers/clk/meson/axg-audio.c | 165 ++++++++++++++++++++++++++++++++++
1 file changed, 165 insertions(+)
diff --git a/drivers/clk/meson/axg-audio.c b/drivers/clk/meson/axg-audio.c
index fd7eca652261..ab8c05b0509e 100644
--- a/drivers/clk/meson/axg-audio.c
+++ b/drivers/clk/meson/axg-audio.c
@@ -1150,6 +1150,159 @@ static struct clk_hw *g12a_audio_hw_clks[] = {
[AUD_CLKID_TOP] = &axg_aud_top,
};
+/*
+ * 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,
+};
+
/*
* Array of all SM1 clocks provided by this provider
* The input clocks of the controller will be populated at runtime
@@ -1410,6 +1563,15 @@ static const struct audioclk_data g12a_audioclk_data = {
.max_register = AUDIO_CLK_SPDIFOUT_B_CTRL,
};
+static const struct audioclk_data s4_audioclk_data = {
+ .hw_clks = {
+ .hws = s4_audio_hw_clks,
+ .num = ARRAY_SIZE(s4_audio_hw_clks),
+ },
+ .rst_drvname = "rst-sm1",
+ .max_register = AUDIO_EARCRX_DMAC_CLK_CTRL,
+};
+
static const struct audioclk_data sm1_audioclk_data = {
.hw_clks = {
.hws = sm1_audio_hw_clks,
@@ -1426,6 +1588,9 @@ static const struct of_device_id clkc_match_table[] = {
}, {
.compatible = "amlogic,g12a-audio-clkc",
.data = &g12a_audioclk_data
+ }, {
+ .compatible = "amlogic,s4-audio-clkc",
+ .data = &s4_audioclk_data
}, {
.compatible = "amlogic,sm1-audio-clkc",
.data = &sm1_audioclk_data
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 5/7] ASoC: dt-bindings: amlogic,g12a-tohdmitx: add S4 compatible
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
` (3 preceding siblings ...)
2026-10-25 19:24 ` [PATCH v7 4/7] clk: meson: axg_audio: add S4 support christian.koever-draxl
@ 2026-10-25 19:24 ` christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 6/7] ASoC: meson: g12a-toacodec: fix the S4 source mux read-back christian.koever-draxl
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:24 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Jiebing Chen,
Christian Stefan Kövér-Draxl
From: Jiebing Chen <jiebing.chen@amlogic.com>
The S4 HDMI TX glue has separate data and clock enables for its I2S
and SPDIF paths, so it needs its own compatible.
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
.../devicetree/bindings/sound/amlogic,g12a-tohdmitx.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/sound/amlogic,g12a-tohdmitx.yaml b/Documentation/devicetree/bindings/sound/amlogic,g12a-tohdmitx.yaml
index b4b78475c5b8..016d3cd3eb03 100644
--- a/Documentation/devicetree/bindings/sound/amlogic,g12a-tohdmitx.yaml
+++ b/Documentation/devicetree/bindings/sound/amlogic,g12a-tohdmitx.yaml
@@ -22,6 +22,7 @@ properties:
- const: amlogic,g12a-tohdmitx
- items:
- enum:
+ - amlogic,s4-tohdmitx
- amlogic,sm1-tohdmitx
- const: amlogic,g12a-tohdmitx
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 6/7] ASoC: meson: g12a-toacodec: fix the S4 source mux read-back
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
` (4 preceding siblings ...)
2026-10-25 19:24 ` [PATCH v7 5/7] ASoC: dt-bindings: amlogic,g12a-tohdmitx: add S4 compatible christian.koever-draxl
@ 2026-10-25 19:24 ` christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 7/7] ASoC: meson: g12a-tohdmitx: add S4 support christian.koever-draxl
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:24 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
The S4 widget reuses the SM1 mux, whose enum reads the data selector at
bits 19:18, while the S4 match data writes it at bits 20:19: the S4 lane
selector is three bits wide instead of two, which moves the data
selector up by one bit.
Writes therefore land in the right place but reads come from the wrong
bits: selecting I2S C programs the hardware correctly, yet the control
reports I2S A. alsactl then stores the wrong value and breaks the
routing when it restores it on the next boot.
Give S4 its own enum at the right offset.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
sound/soc/meson/g12a-toacodec.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/sound/soc/meson/g12a-toacodec.c b/sound/soc/meson/g12a-toacodec.c
index 204bf8654d2e..db7a4470395f 100644
--- a/sound/soc/meson/g12a-toacodec.c
+++ b/sound/soc/meson/g12a-toacodec.c
@@ -21,6 +21,8 @@
#define TOACODEC_CTRL0 0x0
#define CTRL0_ENABLE_SHIFT 31
+#define CTRL0_DAT_SEL_S4_MSB 20
+#define CTRL0_DAT_SEL_S4_LSB 19
#define CTRL0_DAT_SEL_SM1_MSB 19
#define CTRL0_DAT_SEL_SM1_LSB 18
#define CTRL0_DAT_SEL_MSB 15
@@ -126,6 +128,19 @@ static const struct snd_kcontrol_new sm1_toacodec_mux =
snd_soc_dapm_get_enum_double,
g12a_toacodec_mux_put_enum);
+/*
+ * The S4 lane selector is one bit wider than the SM1 one, which pushes the
+ * data selector up by one bit as well.
+ */
+static SOC_ENUM_SINGLE_DECL(s4_toacodec_mux_enum, TOACODEC_CTRL0,
+ CTRL0_DAT_SEL_S4_LSB,
+ g12a_toacodec_mux_texts);
+
+static const struct snd_kcontrol_new s4_toacodec_mux =
+ SOC_DAPM_ENUM_EXT("Source", s4_toacodec_mux_enum,
+ snd_soc_dapm_get_enum_double,
+ g12a_toacodec_mux_put_enum);
+
static const struct snd_kcontrol_new g12a_toacodec_out_enable =
SOC_DAPM_SINGLE_AUTODISABLE("Switch", TOACODEC_CTRL0,
CTRL0_ENABLE_SHIFT, 1, 0);
@@ -146,7 +161,7 @@ static const struct snd_soc_dapm_widget sm1_toacodec_widgets[] = {
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),
+ &s4_toacodec_mux),
SND_SOC_DAPM_SWITCH("OUT EN", TOACODEC_CTRL0, CTRL0_MCLK_ENABLE_SHIFT, 0,
&g12a_toacodec_out_enable),
};
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 7/7] ASoC: meson: g12a-tohdmitx: add S4 support
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
` (5 preceding siblings ...)
2026-10-25 19:24 ` [PATCH v7 6/7] ASoC: meson: g12a-toacodec: fix the S4 source mux read-back christian.koever-draxl
@ 2026-10-25 19:24 ` christian.koever-draxl
2026-10-25 22:53 ` [PATCH v7 0/7] Add support for S4 audio Mark Brown
2026-10-26 8:46 ` Jerome Brunet
8 siblings, 0 replies; 10+ messages in thread
From: christian.koever-draxl @ 2026-10-25 19:24 UTC (permalink / raw)
To: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, broonie, khilman, martin.blumenstingl,
perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Jiebing Chen,
Christian Stefan Kövér-Draxl
From: Jiebing Chen <jiebing.chen@amlogic.com>
S4 replaces the single ENABLE bit of the G12A HDMI TX glue with
separate data and clock enables for each of the I2S and SPDIF paths.
Model the clock enables as supply widgets and give S4 its own component
driver, selected through match data.
Signed-off-by: Jiebing Chen <jiebing.chen@amlogic.com>
[ckoever@outlook.de: rebased, use the SPDIF data bit for the SPDIF
output enable, style fixes]
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
sound/soc/meson/g12a-tohdmitx.c | 80 ++++++++++++++++++++++++++++++++-
1 file changed, 78 insertions(+), 2 deletions(-)
diff --git a/sound/soc/meson/g12a-tohdmitx.c b/sound/soc/meson/g12a-tohdmitx.c
index 967109ca2b57..eafade3d7474 100644
--- a/sound/soc/meson/g12a-tohdmitx.c
+++ b/sound/soc/meson/g12a-tohdmitx.c
@@ -31,6 +31,15 @@
#define CTRL0_SPDIF_SEL (0x1 << CTRL0_SPDIF_SEL_SHIFT)
#define CTRL0_SPDIF_CLK_SEL BIT(0)
+#define CTRL0_I2S_DATA_SHIFT 29
+#define CTRL0_I2S_CLK_SHIFT 28
+#define CTRL0_SPDIF_DATA_SHIFT 31
+#define CTRL0_SPDIF_CLK_SHIFT 30
+
+struct g12a_tohdmitx_match_data {
+ const struct snd_soc_component_driver *component_drv;
+};
+
static const char * const g12a_tohdmitx_i2s_mux_texts[] = {
"I2S A", "I2S B", "I2S C",
};
@@ -130,6 +139,13 @@ static const struct snd_kcontrol_new g12a_tohdmitx_out_enable =
SOC_DAPM_SINGLE_AUTODISABLE("Switch", TOHDMITX_CTRL0,
CTRL0_ENABLE_SHIFT, 1, 0);
+static const struct snd_kcontrol_new s4_i2s_out_enable =
+ SOC_DAPM_SINGLE_AUTODISABLE("Switch", TOHDMITX_CTRL0,
+ CTRL0_I2S_DATA_SHIFT, 1, 0);
+static const struct snd_kcontrol_new s4_spdif_out_enable =
+ SOC_DAPM_SINGLE_AUTODISABLE("Switch", TOHDMITX_CTRL0,
+ CTRL0_SPDIF_DATA_SHIFT, 1, 0);
+
static const struct snd_soc_dapm_widget g12a_tohdmitx_widgets[] = {
SND_SOC_DAPM_MUX("I2S SRC", SND_SOC_NOPM, 0, 0,
&g12a_tohdmitx_i2s_mux),
@@ -141,6 +157,21 @@ static const struct snd_soc_dapm_widget g12a_tohdmitx_widgets[] = {
&g12a_tohdmitx_out_enable),
};
+static const struct snd_soc_dapm_widget s4_tohdmitx_widgets[] = {
+ SND_SOC_DAPM_MUX("I2S SRC", SND_SOC_NOPM, 0, 0,
+ &g12a_tohdmitx_i2s_mux),
+ SND_SOC_DAPM_SWITCH("I2S OUT EN", SND_SOC_NOPM, 0, 0,
+ &s4_i2s_out_enable),
+ SND_SOC_DAPM_MUX("SPDIF SRC", SND_SOC_NOPM, 0, 0,
+ &g12a_tohdmitx_spdif_mux),
+ SND_SOC_DAPM_SWITCH("SPDIF OUT EN", SND_SOC_NOPM, 0, 0,
+ &s4_spdif_out_enable),
+ SND_SOC_DAPM_SUPPLY("I2S CLK Gate", TOHDMITX_CTRL0,
+ CTRL0_I2S_CLK_SHIFT, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("SPDIF CLK Gate", TOHDMITX_CTRL0,
+ CTRL0_SPDIF_CLK_SHIFT, 0, NULL, 0),
+};
+
static const struct snd_soc_dai_ops g12a_tohdmitx_input_ops = {
.probe = meson_codec_glue_input_dai_probe,
.remove = meson_codec_glue_input_dai_remove,
@@ -221,6 +252,20 @@ static const struct snd_soc_dapm_route g12a_tohdmitx_routes[] = {
{ "SPDIF OUT Capture", NULL, "SPDIF OUT EN" },
};
+static const struct snd_soc_dapm_route s4_tohdmitx_routes[] = {
+ { "I2S SRC", "I2S A", "I2S IN A Playback" },
+ { "I2S SRC", "I2S B", "I2S IN B Playback" },
+ { "I2S SRC", "I2S C", "I2S IN C Playback" },
+ { "I2S OUT EN", "Switch", "I2S SRC" },
+ { "I2S OUT EN", NULL, "I2S CLK Gate" },
+ { "I2S OUT Capture", NULL, "I2S OUT EN" },
+ { "SPDIF SRC", "SPDIF A", "SPDIF IN A Playback" },
+ { "SPDIF SRC", "SPDIF B", "SPDIF IN B Playback" },
+ { "SPDIF OUT EN", "Switch", "SPDIF SRC" },
+ { "SPDIF OUT EN", NULL, "SPDIF CLK Gate" },
+ { "SPDIF OUT Capture", NULL, "SPDIF OUT EN" },
+};
+
static const struct snd_soc_component_driver g12a_tohdmitx_component_drv = {
.probe = g12a_tohdmi_component_probe,
.dapm_widgets = g12a_tohdmitx_widgets,
@@ -230,25 +275,56 @@ static const struct snd_soc_component_driver g12a_tohdmitx_component_drv = {
.endianness = 1,
};
+static const struct snd_soc_component_driver s4_tohdmitx_component_drv = {
+ .probe = g12a_tohdmi_component_probe,
+ .dapm_widgets = s4_tohdmitx_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(s4_tohdmitx_widgets),
+ .dapm_routes = s4_tohdmitx_routes,
+ .num_dapm_routes = ARRAY_SIZE(s4_tohdmitx_routes),
+ .endianness = 1,
+};
+
static const struct regmap_config g12a_tohdmitx_regmap_cfg = {
.reg_bits = 32,
.val_bits = 32,
.reg_stride = 4,
};
+static const struct g12a_tohdmitx_match_data g12a_hdmitx_match_data = {
+ .component_drv = &g12a_tohdmitx_component_drv,
+};
+
+static const struct g12a_tohdmitx_match_data s4_hdmitx_match_data = {
+ .component_drv = &s4_tohdmitx_component_drv,
+};
+
static const struct of_device_id g12a_tohdmitx_of_match[] = {
- { .compatible = "amlogic,g12a-tohdmitx", },
+ {
+ .compatible = "amlogic,g12a-tohdmitx",
+ .data = &g12a_hdmitx_match_data,
+ },
+ {
+ .compatible = "amlogic,s4-tohdmitx",
+ .data = &s4_hdmitx_match_data,
+ },
{}
};
MODULE_DEVICE_TABLE(of, g12a_tohdmitx_of_match);
static int g12a_tohdmitx_probe(struct platform_device *pdev)
{
+ const struct g12a_tohdmitx_match_data *data;
struct device *dev = &pdev->dev;
void __iomem *regs;
struct regmap *map;
int ret;
+ data = device_get_match_data(dev);
+ if (!data) {
+ dev_err(dev, "failed to match device\n");
+ return -ENODEV;
+ }
+
ret = device_reset(dev);
if (ret)
return dev_err_probe(dev, ret, "failed to reset device\n");
@@ -265,7 +341,7 @@ static int g12a_tohdmitx_probe(struct platform_device *pdev)
}
return devm_snd_soc_register_component(dev,
- &g12a_tohdmitx_component_drv, g12a_tohdmitx_dai_drv,
+ data->component_drv, g12a_tohdmitx_dai_drv,
ARRAY_SIZE(g12a_tohdmitx_dai_drv));
}
--
2.56.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v7 0/7] Add support for S4 audio
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
` (6 preceding siblings ...)
2026-10-25 19:24 ` [PATCH v7 7/7] ASoC: meson: g12a-tohdmitx: add S4 support christian.koever-draxl
@ 2026-10-25 22:53 ` Mark Brown
2026-10-26 8:46 ` Jerome Brunet
8 siblings, 0 replies; 10+ messages in thread
From: Mark Brown @ 2026-10-25 22:53 UTC (permalink / raw)
To: christian.koever-draxl
Cc: neil.armstrong, jbrunet, sboyd, bmasney+clk, robh, krzk+dt,
conor+dt, lgirdwood, khilman, martin.blumenstingl, perex, tiwai,
linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Christian Stefan Kövér-Draxl,
jiebing chen
[-- Attachment #1: Type: text/plain, Size: 544 bytes --]
On Sun, Oct 25, 2026 at 08:23:57PM +0100, christian.koever-draxl@student.uibk.ac.at wrote:
> From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
>
> This picks up Jiebing Chen's "[PATCH v6 0/4] Add support for S4 audio"
> (and the tohdmitx S4 patch) unchanged apart from rebasing, with
> Jiebing's authorship kept, and adds one fix on top:
Jiebing (who I notice that you have not CCed...) also sent a v7:
https://lore.kernel.org/all/20261021-audio_drvier-v7-0-2b9aeae9cb8a@amlogic.com/
Please coordinate with each other.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v7 0/7] Add support for S4 audio
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
` (7 preceding siblings ...)
2026-10-25 22:53 ` [PATCH v7 0/7] Add support for S4 audio Mark Brown
@ 2026-10-26 8:46 ` Jerome Brunet
8 siblings, 0 replies; 10+ messages in thread
From: Jerome Brunet @ 2026-10-26 8:46 UTC (permalink / raw)
To: christian.koever-draxl, neil.armstrong, sboyd, bmasney+clk, robh,
krzk+dt, conor+dt, lgirdwood, broonie, khilman,
martin.blumenstingl, perex, tiwai
Cc: linux-amlogic, linux-clk, devicetree, linux-kernel, linux-sound,
linux-arm-kernel, Christian Stefan Kövér-Draxl
On dim. 25 oct. 2026 at 20:23, christian.koever-draxl@student.uibk.ac.at wrote:
> From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
>
> This picks up Jiebing Chen's "[PATCH v6 0/4] Add support for S4 audio"
> (and the tohdmitx S4 patch) unchanged apart from rebasing, with
> Jiebing's authorship kept, and adds one fix on top:
>
> 6: g12a-toacodec: fix the S4 source mux read-back. The S4 DAT_SEL
> field moved, so the mux always read back as input A and DAPM never
> powered the selected path.
>
Jiebing has posted a v7 already.
Using AI is certainly nice but I would advise that you slow down a
little and get used to working with the mainling before sending 7 series
in a matter of hours.
> [ckoever: Jiebing, if you have a newer version or prefer to post this
> yourself, I am happy to rebase the fix onto that instead.]
>
For example, instead of this you could have tried to ping him privately
before trying to takeover from him. He would probably have told you
that he has already sent a v7 and (I suppose) is working on v8.
So please be patient.
> Tested: HDMI audio up to 192 kHz; the TDM-C to internal codec path
> plays without errors at 44.1 to 192 kHz (not listened to).
>
> Tool use (Documentation/process/generated-content.rst):
> This work was done with the help of an AI coding assistant, Claude
> (Anthropic), used through Claude Code over many sessions. It did a large
> part of the hands-on work: it read the vendor kernel and the firmware
> interfaces, probed registers on the board, drafted the code and the
> changelogs, and ran the builds, checkpatch, dt_binding_check and the
> tests on the hardware. I directed the work, reviewed every change and
> the final patches, and take responsibility for them. There is no single
> prompt to quote; the sessions were of the form "find out why X fails on
> this board, fix it, test it on the box".
>
> Tested on an Amediatech X98Q TV box (Amlogic S905W2, S4 family, 2 GiB),
> vendor U-Boot and BL31/OP-TEE, Linux 7.3 plus this work.
>
> Christian Stefan Kövér-Draxl (1):
> ASoC: meson: g12a-toacodec: fix the S4 source mux read-back
>
> Jiebing Chen (6):
> dt-bindings: clock: meson: Add audio power domain for S4 soc
> dt-bindings: Asoc: axg-audio: Add S4 audio tocodec
> ASoC: meson: g12a-toacodec: Add S4 tocodec driver
> clk: meson: axg_audio: add S4 support
> ASoC: dt-bindings: amlogic,g12a-tohdmitx: add S4 compatible
> ASoC: meson: g12a-tohdmitx: add S4 support
>
> .../clock/amlogic,axg-audio-clkc.yaml | 18 +-
> .../bindings/sound/amlogic,g12a-toacodec.yaml | 1 +
> .../bindings/sound/amlogic,g12a-tohdmitx.yaml | 1 +
> drivers/clk/meson/axg-audio.c | 165 ++++++++++++++++++
> sound/soc/meson/g12a-toacodec.c | 51 ++++++
> sound/soc/meson/g12a-tohdmitx.c | 80 ++++++++-
> 6 files changed, 312 insertions(+), 4 deletions(-)
>
>
> base-commit: 7be4bc52fd9e0e55dc9a2e0232b89427d2c4b614
> --
> 2.56.0
>
--
Jerome
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-10-26 8:46 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-25 19:23 [PATCH v7 0/7] Add support for S4 audio christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 1/7] dt-bindings: clock: meson: Add audio power domain for S4 soc christian.koever-draxl
2026-10-25 19:23 ` [PATCH v7 2/7] dt-bindings: Asoc: axg-audio: Add S4 audio tocodec christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 3/7] ASoC: meson: g12a-toacodec: Add S4 tocodec driver christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 4/7] clk: meson: axg_audio: add S4 support christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 5/7] ASoC: dt-bindings: amlogic,g12a-tohdmitx: add S4 compatible christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 6/7] ASoC: meson: g12a-toacodec: fix the S4 source mux read-back christian.koever-draxl
2026-10-25 19:24 ` [PATCH v7 7/7] ASoC: meson: g12a-tohdmitx: add S4 support christian.koever-draxl
2026-10-25 22:53 ` [PATCH v7 0/7] Add support for S4 audio Mark Brown
2026-10-26 8:46 ` Jerome Brunet
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®