* [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards
@ 2025-10-06 18:37 Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs Neil Armstrong
` (5 more replies)
0 siblings, 6 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
Now the I2S interface is working on AudioReach platforms,
add the required plumbing and DT nodes to allow playing
audio via the on-board DSI-HDMI bridge.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
Neil Armstrong (6):
ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs
ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S
ASoC: soc: qcom: sc8280xp: add support for I2S clocks
sm8650-hdk: Enable I2S for HDMI
sm8550-hdk: Enable I2S for HDMI
sm8450-hdk: Enable I2S for HDMI
.../devicetree/bindings/sound/qcom,sm8250.yaml | 18 ++++
arch/arm64/boot/dts/qcom/sm8450-hdk.dts | 30 ++++++
arch/arm64/boot/dts/qcom/sm8450.dtsi | 40 ++++++++
arch/arm64/boot/dts/qcom/sm8550-hdk.dts | 30 ++++++
arch/arm64/boot/dts/qcom/sm8550.dtsi | 73 +++++++++++++++
arch/arm64/boot/dts/qcom/sm8650-hdk.dts | 30 ++++++
arch/arm64/boot/dts/qcom/sm8650.dtsi | 40 ++++++++
sound/soc/qcom/qdsp6/q6prm-clocks.c | 5 +
sound/soc/qcom/qdsp6/q6prm.h | 11 +++
sound/soc/qcom/sc8280xp.c | 104 ++++++++++++++++++++-
10 files changed, 380 insertions(+), 1 deletion(-)
---
base-commit: 4a71531471926e3c391665ee9c42f4e0295a4585
change-id: 20251006-topic-sm8x50-next-hdk-i2s-66838fe961db
Best regards,
--
Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
@ 2025-10-06 18:37 ` Neil Armstrong
2025-10-06 22:13 ` Srinivas Kandagatla
2025-10-07 10:19 ` Konrad Dybcio
2025-10-06 18:37 ` [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S Neil Armstrong
` (4 subsequent siblings)
5 siblings, 2 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
Add the missing MCLK ids for the q6prm DSP interface.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
sound/soc/qcom/qdsp6/q6prm-clocks.c | 5 +++++
sound/soc/qcom/qdsp6/q6prm.h | 11 +++++++++++
2 files changed, 16 insertions(+)
diff --git a/sound/soc/qcom/qdsp6/q6prm-clocks.c b/sound/soc/qcom/qdsp6/q6prm-clocks.c
index 4c574b48ab0040bc39ae16ec324b41dfc152b408..51b131fa95316cff50342ff60bfc9e3608939d6c 100644
--- a/sound/soc/qcom/qdsp6/q6prm-clocks.c
+++ b/sound/soc/qcom/qdsp6/q6prm-clocks.c
@@ -42,6 +42,11 @@ static const struct q6dsp_clk_init q6prm_clks[] = {
Q6PRM_CLK(LPASS_CLK_ID_INT5_MI2S_IBIT),
Q6PRM_CLK(LPASS_CLK_ID_INT6_MI2S_IBIT),
Q6PRM_CLK(LPASS_CLK_ID_QUI_MI2S_OSR),
+ Q6PRM_CLK(LPASS_CLK_ID_MCLK_1),
+ Q6PRM_CLK(LPASS_CLK_ID_MCLK_2),
+ Q6PRM_CLK(LPASS_CLK_ID_MCLK_3),
+ Q6PRM_CLK(LPASS_CLK_ID_MCLK_4),
+ Q6PRM_CLK(LPASS_CLK_ID_MCLK_5),
Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_MCLK),
Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_NPL_MCLK),
Q6PRM_CLK(LPASS_CLK_ID_VA_CORE_MCLK),
diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h
index a988a32086fe105e32c4fd713b8e0a3d17b83bca..7a3f2ad7bbd465a6950568af1ff3839e5cbe4f62 100644
--- a/sound/soc/qcom/qdsp6/q6prm.h
+++ b/sound/soc/qcom/qdsp6/q6prm.h
@@ -52,6 +52,17 @@
/* Clock ID for QUINARY MI2S OSR CLK */
#define Q6PRM_LPASS_CLK_ID_QUI_MI2S_OSR 0x116
+/* Clock ID for MCLK1 */
+#define Q6PRM_LPASS_CLK_ID_MCLK_1 0x300
+/* Clock ID for MCLK2 */
+#define Q6PRM_LPASS_CLK_ID_MCLK_2 0x301
+/* Clock ID for MCLK3 */
+#define Q6PRM_LPASS_CLK_ID_MCLK_3 0x302
+/* Clock ID for MCLK4 */
+#define Q6PRM_LPASS_CLK_ID_MCLK_4 0x303
+/* Clock ID for MCLK5 */
+#define Q6PRM_LPASS_CLK_ID_MCLK_5 0x305
+
#define Q6PRM_LPASS_CLK_ID_WSA_CORE_MCLK 0x305
#define Q6PRM_LPASS_CLK_ID_WSA_CORE_NPL_MCLK 0x306
--
2.34.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs Neil Armstrong
@ 2025-10-06 18:37 ` Neil Armstrong
2025-10-07 10:21 ` Konrad Dybcio
2025-10-06 18:37 ` [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks Neil Armstrong
` (3 subsequent siblings)
5 siblings, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
In order to describe the block and master clock of each I2S bus, add
the first 5 I2S busses clock entries.
The names (primary, secondary, tertiarty, quaternary, quinary) uses
the LPASS clock naming which were used for a long time on Qualcomm
LPASS firmware interfaces.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
.../devicetree/bindings/sound/qcom,sm8250.yaml | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
index 8ac91625dce5ccba5c5f31748c36296b12fac1a6..fd0d7a7ddc7b363a66e1e7bd72c7290666efb511 100644
--- a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
@@ -64,6 +64,24 @@ properties:
$ref: /schemas/types.yaml#/definitions/string
description: User visible long sound card name
+ clocks:
+ minItems: 2
+ maxItems: 10
+
+ clock-names:
+ minItems: 2
+ items:
+ - const: primary-mi2s # Primary I2S Bit Clock
+ - const: primary-mclk # Primary I2S Master Clock
+ - const: secondary-mi2s # Secondary I2S Bit Clock
+ - const: secondary-mclk # Secondary I2S Master Clock
+ - const: tertiary-mi2s # Tertiary I2S Bit Clock
+ - const: tertiary-mclk # Tertiary I2S Master Clock
+ - const: quaternary-mi2s # Quaternary I2S Bit Clock
+ - const: quaternary-mclk # Quaternary I2S Master Clock
+ - const: quinary-mi2s # Quinary I2S Bit Clock
+ - const: quinary-mclk # Quinary I2S Master Clock
+
patternProperties:
".*-dai-link$":
description:
--
2.34.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S Neil Armstrong
@ 2025-10-06 18:37 ` Neil Armstrong
2025-10-06 22:21 ` Srinivas Kandagatla
2025-10-07 1:35 ` Alexey Klimov
2025-10-06 18:37 ` [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI Neil Armstrong
` (2 subsequent siblings)
5 siblings, 2 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
Add support for getting the I2S clocks used for the MI2S
interfaces, and enable/disable the clocks on the PCM
startup and shutdown card callbacks.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
sound/soc/qcom/sc8280xp.c | 104 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 103 insertions(+), 1 deletion(-)
diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
index 78e327bc2f07767b1032f09af7f45b947e7eb67a..ad4ee5c6fab8994f18de572842f3dab6f4f5397e 100644
--- a/sound/soc/qcom/sc8280xp.c
+++ b/sound/soc/qcom/sc8280xp.c
@@ -4,6 +4,8 @@
#include <dt-bindings/sound/qcom,q6afe.h>
#include <linux/module.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
+#include <linux/of_clk.h>
#include <sound/soc.h>
#include <sound/soc-dapm.h>
#include <sound/pcm.h>
@@ -15,12 +17,16 @@
#include "common.h"
#include "sdw.h"
+#define I2S_MAX_CLKS 5
+
struct sc8280xp_snd_data {
bool stream_prepared[AFE_PORT_MAX];
struct snd_soc_card *card;
struct sdw_stream_runtime *sruntime[AFE_PORT_MAX];
struct snd_soc_jack jack;
struct snd_soc_jack dp_jack[8];
+ struct clk *i2s_clk[I2S_MAX_CLKS];
+ struct clk *i2s_mclk[I2S_MAX_CLKS];
bool jack_setup;
};
@@ -68,12 +74,66 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd)
return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup);
}
+static int sc8280xp_snd_i2s_index(struct snd_soc_dai *dai)
+{
+ switch (dai->id) {
+ case PRIMARY_MI2S_RX..PRIMARY_MI2S_TX:
+ return 0;
+ case SECONDARY_MI2S_RX.. SECONDARY_MI2S_TX:
+ return 1;
+ case TERTIARY_MI2S_RX..TERTIARY_MI2S_TX:
+ return 2;
+ case QUATERNARY_MI2S_RX..QUATERNARY_MI2S_TX:
+ return 3;
+ case QUINARY_MI2S_RX..QUINARY_MI2S_TX:
+ return 4;
+ default:
+ return -1;
+ }
+}
+
+static int sc8280xp_snd_startup(struct snd_pcm_substream *substream)
+{
+ unsigned int codec_dai_fmt = SND_SOC_DAIFMT_BC_FC | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
+ struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
+ struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
+ int index;
+
+ switch (cpu_dai->id) {
+ case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX:
+ case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
+ index = sc8280xp_snd_i2s_index(cpu_dai);
+ clk_enable(pdata->i2s_mclk[index]);
+ clk_enable(pdata->i2s_clk[index]);
+ snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
+ break;
+ default:
+ break;
+ }
+
+ return qcom_snd_sdw_startup(substream);
+}
+
static void sc8280xp_snd_shutdown(struct snd_pcm_substream *substream)
{
struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
struct sdw_stream_runtime *sruntime = pdata->sruntime[cpu_dai->id];
+ int index;
+
+ switch (cpu_dai->id) {
+ case PRIMARY_MI2S_RX..TERTIARY_MI2S_RX:
+ case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
+ index = sc8280xp_snd_i2s_index(cpu_dai);
+ clk_disable(pdata->i2s_clk[index]);
+ clk_disable(pdata->i2s_mclk[index]);
+ break;
+ default:
+ break;
+ }
pdata->sruntime[cpu_dai->id] = NULL;
sdw_release_stream(sruntime);
@@ -141,7 +201,7 @@ static int sc8280xp_snd_hw_free(struct snd_pcm_substream *substream)
}
static const struct snd_soc_ops sc8280xp_be_ops = {
- .startup = qcom_snd_sdw_startup,
+ .startup = sc8280xp_snd_startup,
.shutdown = sc8280xp_snd_shutdown,
.hw_params = sc8280xp_snd_hw_params,
.hw_free = sc8280xp_snd_hw_free,
@@ -162,6 +222,44 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *card)
}
}
+static const char * const i2s_bus_names[I2S_MAX_CLKS] = {
+ "primary",
+ "secondary",
+ "tertiary",
+ "quaternary",
+ "quinary",
+};
+
+static int sc8280xp_get_i2c_clocks(struct platform_device *pdev,
+ struct sc8280xp_snd_data *data)
+{
+ struct device *dev = &pdev->dev;
+ int i;
+
+ if (!device_property_present(dev))
+ return 0;
+
+ for (i = 0; i < I2S_MAX_CLKS; ++i) {
+ char name[16];
+
+ snprintf(name, 16, "%s-mi2s", i2s_bus_names, i);
+ data->i2s_clk[i] = devm_clk_get_optional_prepared(dev, name);
+ if (IS_ERR(data->i2s_clk[i]))
+ return dev_err_probe(dev, PTR_ERR(data->i2s_clk[i]),
+ "unable to get %s clock\n",
+ name);
+
+ snprintf(name, 16, "%s-mclk", i2s_bus_names, i);
+ data->i2s_mclk[i] = devm_clk_get_optional_prepared(dev, name);
+ if (IS_ERR(data->i2s_mclk[i]))
+ return dev_err_probe(dev, PTR_ERR(data->i2s_mclk[i]),
+ "unable to get %s clock\n",
+ name);
+ }
+
+ return 0;
+}
+
static int sc8280xp_platform_probe(struct platform_device *pdev)
{
struct snd_soc_card *card;
@@ -185,6 +283,10 @@ static int sc8280xp_platform_probe(struct platform_device *pdev)
if (ret)
return ret;
+ ret = sc8280xp_get_i2c_clocks(pdev, data);
+ if (ret)
+ return ret;
+
card->driver_name = of_device_get_match_data(dev);
sc8280xp_add_be_ops(card);
return devm_snd_soc_register_card(dev, card);
--
2.34.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
` (2 preceding siblings ...)
2025-10-06 18:37 ` [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks Neil Armstrong
@ 2025-10-06 18:37 ` Neil Armstrong
2025-10-07 1:39 ` Alexey Klimov
2025-10-06 18:37 ` [PATCH RFC 5/6] sm8550-hdk: " Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 6/6] sm8450-hdk: " Neil Armstrong
5 siblings, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
Add the necessary nodes to configure the right I2S interface
to output audio via the DSI HDMI bridge.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
arch/arm64/boot/dts/qcom/sm8650-hdk.dts | 30 +++++++++++++++++++++++++
arch/arm64/boot/dts/qcom/sm8650.dtsi | 40 +++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
index 87d7190dc991b11f5d1162aabb693dcadd198c51..1286ce95235d5544322a1877292cbdd426298c11 100644
--- a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
+++ b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
@@ -171,6 +171,19 @@ sound {
"TX SWR_INPUT1", "ADC2_OUTPUT",
"TX SWR_INPUT3", "ADC4_OUTPUT";
+ pinctrl-0 = <&i2s0_default_state>, <&audio_mclk0_default_state>;
+ pinctrl-names = "default";
+
+ clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "pri-mi2s",
+ "pri-mclk";
+
+ assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ assigned-clock-rates = <1536000>,
+ <24576000>;
+
wcd-playback-dai-link {
link-name = "WCD Playback";
@@ -218,6 +231,22 @@ platform {
sound-dai = <&q6apm>;
};
};
+
+ pri-mi2s-dai-link {
+ link-name = "Primary MI2S Playback";
+
+ cpu {
+ sound-dai = <&q6apmbedai PRIMARY_MI2S_RX>;
+ };
+
+ codec {
+ sound-dai = <<9611_codec 0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
};
vph_pwr: regulator-vph-pwr {
@@ -853,6 +882,7 @@ &i2c6 {
lt9611_codec: hdmi-bridge@2b {
compatible = "lontium,lt9611uxc";
reg = <0x2b>;
+ #sound-dai-cells = <1>;
interrupts-extended = <&tlmm 85 IRQ_TYPE_EDGE_FALLING>;
diff --git a/arch/arm64/boot/dts/qcom/sm8650.dtsi b/arch/arm64/boot/dts/qcom/sm8650.dtsi
index ebf1971b1bfbebf4df5a80247a6682ac8e413e3b..7cf5073a29ed4aaf72662a4e05ba1c6bfb118a3f 100644
--- a/arch/arm64/boot/dts/qcom/sm8650.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8650.dtsi
@@ -6203,6 +6203,46 @@ wake-pins {
};
};
+ audio_mclk0_default_state: audio-mclk0-default-state {
+ pins = "gpio125";
+ function = "audio_ext_mclk0";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ i2s0_default_state: i2s0-default-state {
+ sck-pins {
+ pins = "gpio126";
+ function = "i2s0_sck";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ data0-pins {
+ pins = "gpio127";
+ function = "i2s0_data0";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ data1-pins {
+ pins = "gpio128";
+ function = "i2s0_data1";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ ws-pins {
+ pins = "gpio129";
+ function = "i2s0_ws";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+ };
+
qup_i2c0_data_clk: qup-i2c0-data-clk-state {
/* SDA, SCL */
pins = "gpio32", "gpio33";
--
2.34.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH RFC 5/6] sm8550-hdk: Enable I2S for HDMI
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
` (3 preceding siblings ...)
2025-10-06 18:37 ` [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI Neil Armstrong
@ 2025-10-06 18:37 ` Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 6/6] sm8450-hdk: " Neil Armstrong
5 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
Add the necessary nodes to configure the right I2S interface
to output audio via the DSI HDMI bridge.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
arch/arm64/boot/dts/qcom/sm8550-hdk.dts | 30 ++++++++++++++
arch/arm64/boot/dts/qcom/sm8550.dtsi | 73 +++++++++++++++++++++++++++++++++
2 files changed, 103 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sm8550-hdk.dts b/arch/arm64/boot/dts/qcom/sm8550-hdk.dts
index b5d7f0cd443a18b167c94e450b5b9412897b2ba2..29c31a3d380d52155a605b24fff793745ba3b17c 100644
--- a/arch/arm64/boot/dts/qcom/sm8550-hdk.dts
+++ b/arch/arm64/boot/dts/qcom/sm8550-hdk.dts
@@ -215,6 +215,18 @@ sound {
"TX SWR_INPUT1", "ADC2_OUTPUT",
"TX SWR_INPUT1", "ADC4_OUTPUT";
+ pinctrl-0 = <&i2s0_default_state>, <&audio_mclk0_default_state>;
+ pinctrl-names = "default";
+ clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "pri-mi2s",
+ "pri-mclk";
+
+ assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ assigned-clock-rates = <1536000>,
+ <24576000>;
+
wcd-playback-dai-link {
link-name = "WCD Playback";
@@ -278,6 +290,22 @@ platform {
sound-dai = <&q6apm>;
};
};
+
+ prim-mi2s-dai-link {
+ link-name = "Primary MI2S Playback";
+
+ cpu {
+ sound-dai = <&q6apmbedai PRIMARY_MI2S_RX>;
+ };
+
+ codec {
+ sound-dai = <<9611_codec 0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
};
wcn7850-pmu {
@@ -891,6 +919,8 @@ lt9611_codec: hdmi-bridge@2b {
pinctrl-0 = <<9611_irq_pin>, <<9611_rst_pin>;
pinctrl-names = "default";
+ #sound-dai-cells = <1>;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi
index 7724dba75db79a9e66a2c61e1ea3607bacfdf5bb..73df93288f6e0ed71ec1e7f5ae09276e7593fd60 100644
--- a/arch/arm64/boot/dts/qcom/sm8550.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi
@@ -4956,6 +4956,79 @@ data-pins {
drive-strength = <10>;
};
};
+
+ audio_mclk0_default_state: audio-mclk0-default-state {
+ pins = "gpio125";
+ function = "audio_ext_mclk0";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ i2s0_default_state: i2s0-default-state {
+ sck-pins {
+ pins = "gpio126";
+ function = "i2s0_sck";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ data0-pins {
+ pins = "gpio127";
+ function = "i2s0_data0";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ data1-pins {
+ pins = "gpio128";
+ function = "i2s0_data1";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ ws-pins {
+ pins = "gpio129";
+ function = "i2s0_ws";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+ };
+
+ audio_mclk1_default_state: audio-mclk1-default-state {
+ pins = "gpio124";
+ function = "audio_ext_mclk1";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ i2s1_default_state: i2s1-default-state {
+ sck-pins {
+ pins = "gpio121";
+ function = "i2s1_sck";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ data0-pins {
+ pins = "gpio122";
+ function = "i2s1_data0";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ ws-pins {
+ pins = "gpio123";
+ function = "i2s1_ws";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+ };
};
apps_smmu: iommu@15000000 {
--
2.34.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH RFC 6/6] sm8450-hdk: Enable I2S for HDMI
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
` (4 preceding siblings ...)
2025-10-06 18:37 ` [PATCH RFC 5/6] sm8550-hdk: " Neil Armstrong
@ 2025-10-06 18:37 ` Neil Armstrong
5 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-06 18:37 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree,
Neil Armstrong
Add the necessary nodes to configure the right I2S interface
to output audio via the DSI HDMI bridge.
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
arch/arm64/boot/dts/qcom/sm8450-hdk.dts | 30 +++++++++++++++++++++++++
arch/arm64/boot/dts/qcom/sm8450.dtsi | 40 +++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sm8450-hdk.dts b/arch/arm64/boot/dts/qcom/sm8450-hdk.dts
index 0c6aa7ddf43263f30595b3f0733ec3e126e38608..c8fd4c8c6bc644ccb5f9fb05c099f27513b86e99 100644
--- a/arch/arm64/boot/dts/qcom/sm8450-hdk.dts
+++ b/arch/arm64/boot/dts/qcom/sm8450-hdk.dts
@@ -667,6 +667,8 @@ lt9611_codec: hdmi-bridge@2b {
pinctrl-names = "default";
pinctrl-0 = <<9611_irq_pin <9611_rst_pin>;
+ #sound-dai-cells = <1>;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -1016,6 +1018,18 @@ &sound {
"TX SWR_INPUT0", "ADC3_OUTPUT",
"TX SWR_INPUT1", "ADC4_OUTPUT";
+ pinctrl-0 = <&i2s0_default_state>, <&audio_mclk0_default_state>;
+ pinctrl-names = "default";
+ clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "pri-mi2s",
+ "pri-mclk";
+
+ assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ assigned-clock-rates = <1536000>,
+ <24576000>;
+
wcd-playback-dai-link {
link-name = "WCD Playback";
@@ -1079,6 +1093,22 @@ platform {
sound-dai = <&q6apm>;
};
};
+
+ prim-mi2s-dai-link {
+ link-name = "Primary MI2S Playback";
+
+ cpu {
+ sound-dai = <&q6apmbedai PRIMARY_MI2S_RX>;
+ };
+
+ codec {
+ sound-dai = <<9611_codec 0>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
};
&swr0 {
diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
index 23420e6924728cb80fc9e44fb4d7e01fbffae21f..5ddc1169e8c23327261820f7baa31983a3eb0bf8 100644
--- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
@@ -4288,6 +4288,46 @@ qup_uart20_default: qup-uart20-default-state {
pins = "gpio76", "gpio77", "gpio78", "gpio79";
function = "qup20";
};
+
+ audio_mclk0_default_state: audio-mclk0-default-state {
+ pins = "gpio125";
+ function = "pri_mi2s";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ i2s0_default_state: i2s0-default-state {
+ sck-pins {
+ pins = "gpio126";
+ function = "mi2s0_sck";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ data0-pins {
+ pins = "gpio127";
+ function = "mi2s0_data0";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ data1-pins {
+ pins = "gpio128";
+ function = "mi2s0_data1";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ ws-pins {
+ pins = "gpio129";
+ function = "mi2s0_ws";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+ };
};
lpass_tlmm: pinctrl@3440000 {
--
2.34.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs
2025-10-06 18:37 ` [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs Neil Armstrong
@ 2025-10-06 22:13 ` Srinivas Kandagatla
2025-10-07 10:19 ` Konrad Dybcio
1 sibling, 0 replies; 22+ messages in thread
From: Srinivas Kandagatla @ 2025-10-06 22:13 UTC (permalink / raw)
To: Neil Armstrong, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/6/25 7:37 PM, Neil Armstrong wrote:
> Add the missing MCLK ids for the q6prm DSP interface.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> sound/soc/qcom/qdsp6/q6prm-clocks.c | 5 +++++
> sound/soc/qcom/qdsp6/q6prm.h | 11 +++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/sound/soc/qcom/qdsp6/q6prm-clocks.c b/sound/soc/qcom/qdsp6/q6prm-clocks.c
> index 4c574b48ab0040bc39ae16ec324b41dfc152b408..51b131fa95316cff50342ff60bfc9e3608939d6c 100644
> --- a/sound/soc/qcom/qdsp6/q6prm-clocks.c
> +++ b/sound/soc/qcom/qdsp6/q6prm-clocks.c
> @@ -42,6 +42,11 @@ static const struct q6dsp_clk_init q6prm_clks[] = {
> Q6PRM_CLK(LPASS_CLK_ID_INT5_MI2S_IBIT),
> Q6PRM_CLK(LPASS_CLK_ID_INT6_MI2S_IBIT),
> Q6PRM_CLK(LPASS_CLK_ID_QUI_MI2S_OSR),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_1),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_2),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_3),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_4),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_5),
> Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_MCLK),
> Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_NPL_MCLK),
> Q6PRM_CLK(LPASS_CLK_ID_VA_CORE_MCLK),
> diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h
> index a988a32086fe105e32c4fd713b8e0a3d17b83bca..7a3f2ad7bbd465a6950568af1ff3839e5cbe4f62 100644
> --- a/sound/soc/qcom/qdsp6/q6prm.h
> +++ b/sound/soc/qcom/qdsp6/q6prm.h
> @@ -52,6 +52,17 @@
> /* Clock ID for QUINARY MI2S OSR CLK */
> #define Q6PRM_LPASS_CLK_ID_QUI_MI2S_OSR 0x116
>
> +/* Clock ID for MCLK1 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_1 0x300
> +/* Clock ID for MCLK2 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_2 0x301
> +/* Clock ID for MCLK3 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_3 0x302
> +/* Clock ID for MCLK4 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_4 0x303
> +/* Clock ID for MCLK5 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_5 0x305
This is 0x304.
Once fixed:
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
--srini
> +
> #define Q6PRM_LPASS_CLK_ID_WSA_CORE_MCLK 0x305
> #define Q6PRM_LPASS_CLK_ID_WSA_CORE_NPL_MCLK 0x306
>
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-06 18:37 ` [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks Neil Armstrong
@ 2025-10-06 22:21 ` Srinivas Kandagatla
2025-10-07 7:02 ` Neil Armstrong
2025-10-07 1:35 ` Alexey Klimov
1 sibling, 1 reply; 22+ messages in thread
From: Srinivas Kandagatla @ 2025-10-06 22:21 UTC (permalink / raw)
To: Neil Armstrong, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/6/25 7:37 PM, Neil Armstrong wrote:
> Add support for getting the I2S clocks used for the MI2S
> interfaces, and enable/disable the clocks on the PCM
> startup and shutdown card callbacks.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> sound/soc/qcom/sc8280xp.c | 104 +++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 103 insertions(+), 1 deletion(-)
>
> diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
> index 78e327bc2f07767b1032f09af7f45b947e7eb67a..ad4ee5c6fab8994f18de572842f3dab6f4f5397e 100644
> --- a/sound/soc/qcom/sc8280xp.c
> +++ b/sound/soc/qcom/sc8280xp.c
> @@ -4,6 +4,8 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> +#include <linux/clk.h>
> +#include <linux/of_clk.h>
> #include <sound/soc.h>
> #include <sound/soc-dapm.h>
> #include <sound/pcm.h>
> @@ -15,12 +17,16 @@
> #include "common.h"
> #include "sdw.h"
>
> +#define I2S_MAX_CLKS 5
> +
> struct sc8280xp_snd_data {
> bool stream_prepared[AFE_PORT_MAX];
> struct snd_soc_card *card;
> struct sdw_stream_runtime *sruntime[AFE_PORT_MAX];
> struct snd_soc_jack jack;
> struct snd_soc_jack dp_jack[8];
> + struct clk *i2s_clk[I2S_MAX_CLKS];
> + struct clk *i2s_mclk[I2S_MAX_CLKS];
> bool jack_setup;
> };
>
> @@ -68,12 +74,66 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd)
> return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup);
> }
>
> +static int sc8280xp_snd_i2s_index(struct snd_soc_dai *dai)
> +{
> + switch (dai->id) {
> + case PRIMARY_MI2S_RX..PRIMARY_MI2S_TX:
> + return 0;
> + case SECONDARY_MI2S_RX.. SECONDARY_MI2S_TX:
> + return 1;
> + case TERTIARY_MI2S_RX..TERTIARY_MI2S_TX:
> + return 2;
> + case QUATERNARY_MI2S_RX..QUATERNARY_MI2S_TX:
> + return 3;
> + case QUINARY_MI2S_RX..QUINARY_MI2S_TX:
> + return 4;
> + default:
> + return -1;
> + }
> +}
> +
> +static int sc8280xp_snd_startup(struct snd_pcm_substream *substream)
> +{
> + unsigned int codec_dai_fmt = SND_SOC_DAIFMT_BC_FC | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
> + struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
> + struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
> + int index;
> +
> + switch (cpu_dai->id) {
> + case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX:
> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
> + index = sc8280xp_snd_i2s_index(cpu_dai);
What is the mclk and bitclk rate set here, we can not rely on the
default rate.
--srini
> + clk_enable(pdata->i2s_mclk[index]);
> + clk_enable(pdata->i2s_clk[index]);
> + snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> + break;
> + default:
> + break;
> + }
> +
> + return qcom_snd_sdw_startup(substream);
> +}
> +
> static void sc8280xp_snd_shutdown(struct snd_pcm_substream *substream)
> {
> struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
> struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
> struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
> struct sdw_stream_runtime *sruntime = pdata->sruntime[cpu_dai->id];
> + int index;
> +
> + switch (cpu_dai->id) {
> + case PRIMARY_MI2S_RX..TERTIARY_MI2S_RX:
> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
> + index = sc8280xp_snd_i2s_index(cpu_dai);
> + clk_disable(pdata->i2s_clk[index]);
> + clk_disable(pdata->i2s_mclk[index]);
> + break;
> + default:
> + break;
> + }
>
> pdata->sruntime[cpu_dai->id] = NULL;
> sdw_release_stream(sruntime);
> @@ -141,7 +201,7 @@ static int sc8280xp_snd_hw_free(struct snd_pcm_substream *substream)
> }
>
> static const struct snd_soc_ops sc8280xp_be_ops = {
> - .startup = qcom_snd_sdw_startup,
> + .startup = sc8280xp_snd_startup,
> .shutdown = sc8280xp_snd_shutdown,
> .hw_params = sc8280xp_snd_hw_params,
> .hw_free = sc8280xp_snd_hw_free,
> @@ -162,6 +222,44 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *card)
> }
> }
>
> +static const char * const i2s_bus_names[I2S_MAX_CLKS] = {
> + "primary",
> + "secondary",
> + "tertiary",
> + "quaternary",
> + "quinary",
> +};
> +
> +static int sc8280xp_get_i2c_clocks(struct platform_device *pdev,
> + struct sc8280xp_snd_data *data)
> +{
> + struct device *dev = &pdev->dev;
> + int i;
> +
> + if (!device_property_present(dev))
> + return 0;
> +
> + for (i = 0; i < I2S_MAX_CLKS; ++i) {
> + char name[16];
> +
> + snprintf(name, 16, "%s-mi2s", i2s_bus_names, i);
> + data->i2s_clk[i] = devm_clk_get_optional_prepared(dev, name);
> + if (IS_ERR(data->i2s_clk[i]))
> + return dev_err_probe(dev, PTR_ERR(data->i2s_clk[i]),
> + "unable to get %s clock\n",
> + name);
> +
> + snprintf(name, 16, "%s-mclk", i2s_bus_names, i);
> + data->i2s_mclk[i] = devm_clk_get_optional_prepared(dev, name);
> + if (IS_ERR(data->i2s_mclk[i]))
> + return dev_err_probe(dev, PTR_ERR(data->i2s_mclk[i]),
> + "unable to get %s clock\n",
> + name);
> + }
> +
> + return 0;
> +}
> +
> static int sc8280xp_platform_probe(struct platform_device *pdev)
> {
> struct snd_soc_card *card;
> @@ -185,6 +283,10 @@ static int sc8280xp_platform_probe(struct platform_device *pdev)
> if (ret)
> return ret;
>
> + ret = sc8280xp_get_i2c_clocks(pdev, data);
> + if (ret)
> + return ret;
> +
> card->driver_name = of_device_get_match_data(dev);
> sc8280xp_add_be_ops(card);
> return devm_snd_soc_register_card(dev, card);
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-06 18:37 ` [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks Neil Armstrong
2025-10-06 22:21 ` Srinivas Kandagatla
@ 2025-10-07 1:35 ` Alexey Klimov
2025-10-07 7:02 ` Neil Armstrong
1 sibling, 1 reply; 22+ messages in thread
From: Alexey Klimov @ 2025-10-07 1:35 UTC (permalink / raw)
To: Neil Armstrong
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, linux-sound, linux-arm-msm,
linux-kernel, devicetree
On Mon Oct 6, 2025 at 7:37 PM BST, Neil Armstrong wrote:
> Add support for getting the I2S clocks used for the MI2S
> interfaces, and enable/disable the clocks on the PCM
> startup and shutdown card callbacks.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> sound/soc/qcom/sc8280xp.c | 104 +++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 103 insertions(+), 1 deletion(-)
>
> diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
> index 78e327bc2f07767b1032f09af7f45b947e7eb67a..ad4ee5c6fab8994f18de572842f3dab6f4f5397e 100644
> --- a/sound/soc/qcom/sc8280xp.c
> +++ b/sound/soc/qcom/sc8280xp.c
> @@ -4,6 +4,8 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> +#include <linux/clk.h>
> +#include <linux/of_clk.h>
^^
[..]
> static const struct snd_soc_ops sc8280xp_be_ops = {
> - .startup = qcom_snd_sdw_startup,
> + .startup = sc8280xp_snd_startup,
> .shutdown = sc8280xp_snd_shutdown,
> .hw_params = sc8280xp_snd_hw_params,
> .hw_free = sc8280xp_snd_hw_free,
> @@ -162,6 +222,44 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *card)
> }
> }
>
> +static const char * const i2s_bus_names[I2S_MAX_CLKS] = {
> + "primary",
> + "secondary",
> + "tertiary",
> + "quaternary",
> + "quinary",
> +};
> +
> +static int sc8280xp_get_i2c_clocks(struct platform_device *pdev,
> + struct sc8280xp_snd_data *data)
> +{
Could you please confirm that this should be _i2c_ clocks?
[..]
Best regards,
Alexey
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI
2025-10-06 18:37 ` [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI Neil Armstrong
@ 2025-10-07 1:39 ` Alexey Klimov
2025-10-07 7:04 ` Neil Armstrong
2025-10-07 10:24 ` Konrad Dybcio
0 siblings, 2 replies; 22+ messages in thread
From: Alexey Klimov @ 2025-10-07 1:39 UTC (permalink / raw)
To: Neil Armstrong, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On Mon Oct 6, 2025 at 7:37 PM BST, Neil Armstrong wrote:
> Add the necessary nodes to configure the right I2S interface
> to output audio via the DSI HDMI bridge.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> arch/arm64/boot/dts/qcom/sm8650-hdk.dts | 30 +++++++++++++++++++++++++
> arch/arm64/boot/dts/qcom/sm8650.dtsi | 40 +++++++++++++++++++++++++++++++++
> 2 files changed, 70 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
> index 87d7190dc991b11f5d1162aabb693dcadd198c51..1286ce95235d5544322a1877292cbdd426298c11 100644
> --- a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
> +++ b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
> @@ -171,6 +171,19 @@ sound {
> "TX SWR_INPUT1", "ADC2_OUTPUT",
> "TX SWR_INPUT3", "ADC4_OUTPUT";
>
> + pinctrl-0 = <&i2s0_default_state>, <&audio_mclk0_default_state>;
> + pinctrl-names = "default";
> +
> + clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
> + clock-names = "pri-mi2s",
> + "pri-mclk";
> +
> + assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
> + assigned-clock-rates = <1536000>,
> + <24576000>;
> +
> wcd-playback-dai-link {
> link-name = "WCD Playback";
>
> @@ -218,6 +231,22 @@ platform {
> sound-dai = <&q6apm>;
> };
> };
> +
> + pri-mi2s-dai-link {
> + link-name = "Primary MI2S Playback";
Is it HDMI only audio playback or does it have switches to playback it as raw i2s
(when external DAC is needed)?
> + cpu {
> + sound-dai = <&q6apmbedai PRIMARY_MI2S_RX>;
> + };
> +
> + codec {
> + sound-dai = <<9611_codec 0>;
> + };
> +
> + platform {
> + sound-dai = <&q6apm>;
> + };
> + };
> };
[..]
Best regards,
Alexey
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-06 22:21 ` Srinivas Kandagatla
@ 2025-10-07 7:02 ` Neil Armstrong
2025-10-07 10:23 ` Konrad Dybcio
0 siblings, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2025-10-07 7:02 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 00:21, Srinivas Kandagatla wrote:
>
>
> On 10/6/25 7:37 PM, Neil Armstrong wrote:
>> Add support for getting the I2S clocks used for the MI2S
>> interfaces, and enable/disable the clocks on the PCM
>> startup and shutdown card callbacks.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> sound/soc/qcom/sc8280xp.c | 104 +++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 103 insertions(+), 1 deletion(-)
>>
>> diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
>> index 78e327bc2f07767b1032f09af7f45b947e7eb67a..ad4ee5c6fab8994f18de572842f3dab6f4f5397e 100644
>> --- a/sound/soc/qcom/sc8280xp.c
>> +++ b/sound/soc/qcom/sc8280xp.c
>> @@ -4,6 +4,8 @@
>> #include <dt-bindings/sound/qcom,q6afe.h>
>> #include <linux/module.h>
>> #include <linux/platform_device.h>
>> +#include <linux/clk.h>
>> +#include <linux/of_clk.h>
>> #include <sound/soc.h>
>> #include <sound/soc-dapm.h>
>> #include <sound/pcm.h>
>> @@ -15,12 +17,16 @@
>> #include "common.h"
>> #include "sdw.h"
>>
>> +#define I2S_MAX_CLKS 5
>> +
>> struct sc8280xp_snd_data {
>> bool stream_prepared[AFE_PORT_MAX];
>> struct snd_soc_card *card;
>> struct sdw_stream_runtime *sruntime[AFE_PORT_MAX];
>> struct snd_soc_jack jack;
>> struct snd_soc_jack dp_jack[8];
>> + struct clk *i2s_clk[I2S_MAX_CLKS];
>> + struct clk *i2s_mclk[I2S_MAX_CLKS];
>> bool jack_setup;
>> };
>>
>> @@ -68,12 +74,66 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd)
>> return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup);
>> }
>>
>> +static int sc8280xp_snd_i2s_index(struct snd_soc_dai *dai)
>> +{
>> + switch (dai->id) {
>> + case PRIMARY_MI2S_RX..PRIMARY_MI2S_TX:
>> + return 0;
>> + case SECONDARY_MI2S_RX.. SECONDARY_MI2S_TX:
>> + return 1;
>> + case TERTIARY_MI2S_RX..TERTIARY_MI2S_TX:
>> + return 2;
>> + case QUATERNARY_MI2S_RX..QUATERNARY_MI2S_TX:
>> + return 3;
>> + case QUINARY_MI2S_RX..QUINARY_MI2S_TX:
>> + return 4;
>> + default:
>> + return -1;
>> + }
>> +}
>> +
>> +static int sc8280xp_snd_startup(struct snd_pcm_substream *substream)
>> +{
>> + unsigned int codec_dai_fmt = SND_SOC_DAIFMT_BC_FC | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
>> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
>> + struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
>> + struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
>> + struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
>> + int index;
>> +
>> + switch (cpu_dai->id) {
>> + case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX:
>> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
>> + index = sc8280xp_snd_i2s_index(cpu_dai);
>
> What is the mclk and bitclk rate set here, we can not rely on the
> default rate.
The default rates are set in DT:
+ assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
+ <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ assigned-clock-rates = <1536000>,
+ <24576000>;
Neil
> --srini
>> + clk_enable(pdata->i2s_mclk[index]);
>> + clk_enable(pdata->i2s_clk[index]);
>> + snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>> + break;
>> + default:
>> + break;
>> + }
>> +
>> + return qcom_snd_sdw_startup(substream);
>> +}
>> +
>> static void sc8280xp_snd_shutdown(struct snd_pcm_substream *substream)
>> {
>> struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
>> struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
>> struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
>> struct sdw_stream_runtime *sruntime = pdata->sruntime[cpu_dai->id];
>> + int index;
>> +
>> + switch (cpu_dai->id) {
>> + case PRIMARY_MI2S_RX..TERTIARY_MI2S_RX:
>> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
>> + index = sc8280xp_snd_i2s_index(cpu_dai);
>> + clk_disable(pdata->i2s_clk[index]);
>> + clk_disable(pdata->i2s_mclk[index]);
>> + break;
>> + default:
>> + break;
>> + }
>>
>> pdata->sruntime[cpu_dai->id] = NULL;
>> sdw_release_stream(sruntime);
>> @@ -141,7 +201,7 @@ static int sc8280xp_snd_hw_free(struct snd_pcm_substream *substream)
>> }
>>
>> static const struct snd_soc_ops sc8280xp_be_ops = {
>> - .startup = qcom_snd_sdw_startup,
>> + .startup = sc8280xp_snd_startup,
>> .shutdown = sc8280xp_snd_shutdown,
>> .hw_params = sc8280xp_snd_hw_params,
>> .hw_free = sc8280xp_snd_hw_free,
>> @@ -162,6 +222,44 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *card)
>> }
>> }
>>
>> +static const char * const i2s_bus_names[I2S_MAX_CLKS] = {
>> + "primary",
>> + "secondary",
>> + "tertiary",
>> + "quaternary",
>> + "quinary",
>> +};
>> +
>> +static int sc8280xp_get_i2c_clocks(struct platform_device *pdev,
>> + struct sc8280xp_snd_data *data)
>> +{
>> + struct device *dev = &pdev->dev;
>> + int i;
>> +
>> + if (!device_property_present(dev))
>> + return 0;
>> +
>> + for (i = 0; i < I2S_MAX_CLKS; ++i) {
>> + char name[16];
>> +
>> + snprintf(name, 16, "%s-mi2s", i2s_bus_names, i);
>> + data->i2s_clk[i] = devm_clk_get_optional_prepared(dev, name);
>> + if (IS_ERR(data->i2s_clk[i]))
>> + return dev_err_probe(dev, PTR_ERR(data->i2s_clk[i]),
>> + "unable to get %s clock\n",
>> + name);
>> +
>> + snprintf(name, 16, "%s-mclk", i2s_bus_names, i);
>> + data->i2s_mclk[i] = devm_clk_get_optional_prepared(dev, name);
>> + if (IS_ERR(data->i2s_mclk[i]))
>> + return dev_err_probe(dev, PTR_ERR(data->i2s_mclk[i]),
>> + "unable to get %s clock\n",
>> + name);
>> + }
>> +
>> + return 0;
>> +}
>> +
>> static int sc8280xp_platform_probe(struct platform_device *pdev)
>> {
>> struct snd_soc_card *card;
>> @@ -185,6 +283,10 @@ static int sc8280xp_platform_probe(struct platform_device *pdev)
>> if (ret)
>> return ret;
>>
>> + ret = sc8280xp_get_i2c_clocks(pdev, data);
>> + if (ret)
>> + return ret;
>> +
>> card->driver_name = of_device_get_match_data(dev);
>> sc8280xp_add_be_ops(card);
>> return devm_snd_soc_register_card(dev, card);
>>
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-07 1:35 ` Alexey Klimov
@ 2025-10-07 7:02 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-07 7:02 UTC (permalink / raw)
To: Alexey Klimov
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, linux-sound, linux-arm-msm,
linux-kernel, devicetree
On 10/7/25 03:35, Alexey Klimov wrote:
> On Mon Oct 6, 2025 at 7:37 PM BST, Neil Armstrong wrote:
>> Add support for getting the I2S clocks used for the MI2S
>> interfaces, and enable/disable the clocks on the PCM
>> startup and shutdown card callbacks.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> sound/soc/qcom/sc8280xp.c | 104 +++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 103 insertions(+), 1 deletion(-)
>>
>> diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
>> index 78e327bc2f07767b1032f09af7f45b947e7eb67a..ad4ee5c6fab8994f18de572842f3dab6f4f5397e 100644
>> --- a/sound/soc/qcom/sc8280xp.c
>> +++ b/sound/soc/qcom/sc8280xp.c
>> @@ -4,6 +4,8 @@
>> #include <dt-bindings/sound/qcom,q6afe.h>
>> #include <linux/module.h>
>> #include <linux/platform_device.h>
>> +#include <linux/clk.h>
>> +#include <linux/of_clk.h>
>
> ^^
I'll fix that
>
> [..]
>
>> static const struct snd_soc_ops sc8280xp_be_ops = {
>> - .startup = qcom_snd_sdw_startup,
>> + .startup = sc8280xp_snd_startup,
>> .shutdown = sc8280xp_snd_shutdown,
>> .hw_params = sc8280xp_snd_hw_params,
>> .hw_free = sc8280xp_snd_hw_free,
>> @@ -162,6 +222,44 @@ static void sc8280xp_add_be_ops(struct snd_soc_card *card)
>> }
>> }
>>
>> +static const char * const i2s_bus_names[I2S_MAX_CLKS] = {
>> + "primary",
>> + "secondary",
>> + "tertiary",
>> + "quaternary",
>> + "quinary",
>> +};
>> +
>> +static int sc8280xp_get_i2c_clocks(struct platform_device *pdev,
>> + struct sc8280xp_snd_data *data)
>> +{
>
> Could you please confirm that this should be _i2c_ clocks?
Damn, typo, it should obviously be i2s
Neil
>
> [..]
>
> Best regards,
> Alexey
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI
2025-10-07 1:39 ` Alexey Klimov
@ 2025-10-07 7:04 ` Neil Armstrong
2025-10-07 15:39 ` Alexey Klimov
2025-10-07 10:24 ` Konrad Dybcio
1 sibling, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2025-10-07 7:04 UTC (permalink / raw)
To: Alexey Klimov, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 03:39, Alexey Klimov wrote:
> On Mon Oct 6, 2025 at 7:37 PM BST, Neil Armstrong wrote:
>> Add the necessary nodes to configure the right I2S interface
>> to output audio via the DSI HDMI bridge.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> arch/arm64/boot/dts/qcom/sm8650-hdk.dts | 30 +++++++++++++++++++++++++
>> arch/arm64/boot/dts/qcom/sm8650.dtsi | 40 +++++++++++++++++++++++++++++++++
>> 2 files changed, 70 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
>> index 87d7190dc991b11f5d1162aabb693dcadd198c51..1286ce95235d5544322a1877292cbdd426298c11 100644
>> --- a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
>> +++ b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
>> @@ -171,6 +171,19 @@ sound {
>> "TX SWR_INPUT1", "ADC2_OUTPUT",
>> "TX SWR_INPUT3", "ADC4_OUTPUT";
>>
>> + pinctrl-0 = <&i2s0_default_state>, <&audio_mclk0_default_state>;
>> + pinctrl-names = "default";
>> +
>> + clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
>> + clock-names = "pri-mi2s",
>> + "pri-mclk";
>> +
>> + assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
>> + assigned-clock-rates = <1536000>,
>> + <24576000>;
>> +
>> wcd-playback-dai-link {
>> link-name = "WCD Playback";
>>
>> @@ -218,6 +231,22 @@ platform {
>> sound-dai = <&q6apm>;
>> };
>> };
>> +
>> + pri-mi2s-dai-link {
>> + link-name = "Primary MI2S Playback";
>
> Is it HDMI only audio playback or does it have switches to playback it as raw i2s
> (when external DAC is needed)?
The HDK has i2s lines of the secondary i2s on the LS connector, but without any additional
boards connected it has no on-board i2s dacs.
Neil
>
>
>> + cpu {
>> + sound-dai = <&q6apmbedai PRIMARY_MI2S_RX>;
>> + };
>> +
>> + codec {
>> + sound-dai = <<9611_codec 0>;
>> + };
>> +
>> + platform {
>> + sound-dai = <&q6apm>;
>> + };
>> + };
>> };
>
> [..]
>
> Best regards,
> Alexey
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs
2025-10-06 18:37 ` [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs Neil Armstrong
2025-10-06 22:13 ` Srinivas Kandagatla
@ 2025-10-07 10:19 ` Konrad Dybcio
1 sibling, 0 replies; 22+ messages in thread
From: Konrad Dybcio @ 2025-10-07 10:19 UTC (permalink / raw)
To: Neil Armstrong, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/6/25 8:37 PM, Neil Armstrong wrote:
> Add the missing MCLK ids for the q6prm DSP interface.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
> sound/soc/qcom/qdsp6/q6prm-clocks.c | 5 +++++
> sound/soc/qcom/qdsp6/q6prm.h | 11 +++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/sound/soc/qcom/qdsp6/q6prm-clocks.c b/sound/soc/qcom/qdsp6/q6prm-clocks.c
> index 4c574b48ab0040bc39ae16ec324b41dfc152b408..51b131fa95316cff50342ff60bfc9e3608939d6c 100644
> --- a/sound/soc/qcom/qdsp6/q6prm-clocks.c
> +++ b/sound/soc/qcom/qdsp6/q6prm-clocks.c
> @@ -42,6 +42,11 @@ static const struct q6dsp_clk_init q6prm_clks[] = {
> Q6PRM_CLK(LPASS_CLK_ID_INT5_MI2S_IBIT),
> Q6PRM_CLK(LPASS_CLK_ID_INT6_MI2S_IBIT),
> Q6PRM_CLK(LPASS_CLK_ID_QUI_MI2S_OSR),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_1),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_2),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_3),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_4),
> + Q6PRM_CLK(LPASS_CLK_ID_MCLK_5),
> Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_MCLK),
> Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_NPL_MCLK),
> Q6PRM_CLK(LPASS_CLK_ID_VA_CORE_MCLK),
> diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h
> index a988a32086fe105e32c4fd713b8e0a3d17b83bca..7a3f2ad7bbd465a6950568af1ff3839e5cbe4f62 100644
> --- a/sound/soc/qcom/qdsp6/q6prm.h
> +++ b/sound/soc/qcom/qdsp6/q6prm.h
> @@ -52,6 +52,17 @@
> /* Clock ID for QUINARY MI2S OSR CLK */
> #define Q6PRM_LPASS_CLK_ID_QUI_MI2S_OSR 0x116
>
> +/* Clock ID for MCLK1 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_1 0x300
> +/* Clock ID for MCLK2 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_2 0x301
> +/* Clock ID for MCLK3 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_3 0x302
> +/* Clock ID for MCLK4 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_4 0x303
> +/* Clock ID for MCLK5 */
> +#define Q6PRM_LPASS_CLK_ID_MCLK_5 0x305
0x304
Konrad
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S
2025-10-06 18:37 ` [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S Neil Armstrong
@ 2025-10-07 10:21 ` Konrad Dybcio
2025-10-08 17:53 ` Neil Armstrong
0 siblings, 1 reply; 22+ messages in thread
From: Konrad Dybcio @ 2025-10-07 10:21 UTC (permalink / raw)
To: Neil Armstrong, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/6/25 8:37 PM, Neil Armstrong wrote:
> In order to describe the block and master clock of each I2S bus, add
> the first 5 I2S busses clock entries.
>
> The names (primary, secondary, tertiarty, quaternary, quinary) uses
> the LPASS clock naming which were used for a long time on Qualcomm
> LPASS firmware interfaces.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
> ---
There's also a senary (6th) I2S bus instance, which there is no reason
not to describe
> .../devicetree/bindings/sound/qcom,sm8250.yaml | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
> index 8ac91625dce5ccba5c5f31748c36296b12fac1a6..fd0d7a7ddc7b363a66e1e7bd72c7290666efb511 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
> @@ -64,6 +64,24 @@ properties:
> $ref: /schemas/types.yaml#/definitions/string
> description: User visible long sound card name
>
> + clocks:
> + minItems: 2
> + maxItems: 10
> +
> + clock-names:
> + minItems: 2
> + items:
> + - const: primary-mi2s # Primary I2S Bit Clock
> + - const: primary-mclk # Primary I2S Master Clock
> + - const: secondary-mi2s # Secondary I2S Bit Clock
> + - const: secondary-mclk # Secondary I2S Master Clock
> + - const: tertiary-mi2s # Tertiary I2S Bit Clock
> + - const: tertiary-mclk # Tertiary I2S Master Clock
> + - const: quaternary-mi2s # Quaternary I2S Bit Clock
> + - const: quaternary-mclk # Quaternary I2S Master Clock
> + - const: quinary-mi2s # Quinary I2S Bit Clock
> + - const: quinary-mclk # Quinary I2S Master Clock
I think a single top-level comment saying "mclk" is the master
clock and the other one is a bit clock would suffice
Konrad
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-07 7:02 ` Neil Armstrong
@ 2025-10-07 10:23 ` Konrad Dybcio
2025-10-07 15:48 ` Neil Armstrong
0 siblings, 1 reply; 22+ messages in thread
From: Konrad Dybcio @ 2025-10-07 10:23 UTC (permalink / raw)
To: Neil Armstrong, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 9:02 AM, Neil Armstrong wrote:
> On 10/7/25 00:21, Srinivas Kandagatla wrote:
>>
>>
>> On 10/6/25 7:37 PM, Neil Armstrong wrote:
>>> Add support for getting the I2S clocks used for the MI2S
>>> interfaces, and enable/disable the clocks on the PCM
>>> startup and shutdown card callbacks.
>>>
>>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>>> ---
[...]
>>> +static int sc8280xp_snd_startup(struct snd_pcm_substream *substream)
>>> +{
>>> + unsigned int codec_dai_fmt = SND_SOC_DAIFMT_BC_FC | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
>>> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
>>> + struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
>>> + struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
>>> + struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
>>> + int index;
>>> +
>>> + switch (cpu_dai->id) {
>>> + case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX:
>>> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
>>> + index = sc8280xp_snd_i2s_index(cpu_dai);
>>
>> What is the mclk and bitclk rate set here, we can not rely on the
>> default rate.
>
> The default rates are set in DT:
> + assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
> + assigned-clock-rates = <1536000>,
> + <24576000>;
Is there a way to infer these rates based on the DT audio
connection graph?
Konrad
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI
2025-10-07 1:39 ` Alexey Klimov
2025-10-07 7:04 ` Neil Armstrong
@ 2025-10-07 10:24 ` Konrad Dybcio
1 sibling, 0 replies; 22+ messages in thread
From: Konrad Dybcio @ 2025-10-07 10:24 UTC (permalink / raw)
To: Alexey Klimov, Neil Armstrong, Srinivas Kandagatla, Liam Girdwood,
Mark Brown, Jaroslav Kysela, Takashi Iwai, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 3:39 AM, Alexey Klimov wrote:
> On Mon Oct 6, 2025 at 7:37 PM BST, Neil Armstrong wrote:
>> Add the necessary nodes to configure the right I2S interface
>> to output audio via the DSI HDMI bridge.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
subject prefix (patches 4-6)
Konrad
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI
2025-10-07 7:04 ` Neil Armstrong
@ 2025-10-07 15:39 ` Alexey Klimov
0 siblings, 0 replies; 22+ messages in thread
From: Alexey Klimov @ 2025-10-07 15:39 UTC (permalink / raw)
To: Neil Armstrong
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bjorn Andersson, Konrad Dybcio, linux-sound, linux-arm-msm,
linux-kernel, devicetree
On Tue Oct 7, 2025 at 8:04 AM BST, Neil Armstrong wrote:
> On 10/7/25 03:39, Alexey Klimov wrote:
>> On Mon Oct 6, 2025 at 7:37 PM BST, Neil Armstrong wrote:
>>> Add the necessary nodes to configure the right I2S interface
>>> to output audio via the DSI HDMI bridge.
>>>
>>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>>> ---
>>> arch/arm64/boot/dts/qcom/sm8650-hdk.dts | 30 +++++++++++++++++++++++++
>>> arch/arm64/boot/dts/qcom/sm8650.dtsi | 40 +++++++++++++++++++++++++++++++++
>>> 2 files changed, 70 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
>>> index 87d7190dc991b11f5d1162aabb693dcadd198c51..1286ce95235d5544322a1877292cbdd426298c11 100644
>>> --- a/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
>>> +++ b/arch/arm64/boot/dts/qcom/sm8650-hdk.dts
>>> @@ -171,6 +171,19 @@ sound {
>>> "TX SWR_INPUT1", "ADC2_OUTPUT",
>>> "TX SWR_INPUT3", "ADC4_OUTPUT";
>>>
>>> + pinctrl-0 = <&i2s0_default_state>, <&audio_mclk0_default_state>;
>>> + pinctrl-names = "default";
>>> +
>>> + clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>>> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
>>> + clock-names = "pri-mi2s",
>>> + "pri-mclk";
>>> +
>>> + assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>>> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
>>> + assigned-clock-rates = <1536000>,
>>> + <24576000>;
>>> +
>>> wcd-playback-dai-link {
>>> link-name = "WCD Playback";
>>>
>>> @@ -218,6 +231,22 @@ platform {
>>> sound-dai = <&q6apm>;
>>> };
>>> };
>>> +
>>> + pri-mi2s-dai-link {
>>> + link-name = "Primary MI2S Playback";
>>
>> Is it HDMI only audio playback or does it have switches to playback it as raw i2s
>> (when external DAC is needed)?
>
> The HDK has i2s lines of the secondary i2s on the LS connector, but without any additional
> boards connected it has no on-board i2s dacs.
Ah, like on RB3 and RB5 boards.
In such case the suggestion is to add mention of HDMI here in the link name,
otherwise it might be not clear what this multi i2s playback is about.
Maybe "Primary MI2S/HDMI Playback" will do.
Thanks,
Alexey
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-07 10:23 ` Konrad Dybcio
@ 2025-10-07 15:48 ` Neil Armstrong
2025-10-08 17:51 ` Neil Armstrong
0 siblings, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2025-10-07 15:48 UTC (permalink / raw)
To: Konrad Dybcio, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 12:23, Konrad Dybcio wrote:
> On 10/7/25 9:02 AM, Neil Armstrong wrote:
>> On 10/7/25 00:21, Srinivas Kandagatla wrote:
>>>
>>>
>>> On 10/6/25 7:37 PM, Neil Armstrong wrote:
>>>> Add support for getting the I2S clocks used for the MI2S
>>>> interfaces, and enable/disable the clocks on the PCM
>>>> startup and shutdown card callbacks.
>>>>
>>>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>>>> ---
>
> [...]
>
>>>> +static int sc8280xp_snd_startup(struct snd_pcm_substream *substream)
>>>> +{
>>>> + unsigned int codec_dai_fmt = SND_SOC_DAIFMT_BC_FC | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
>>>> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
>>>> + struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
>>>> + struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
>>>> + struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
>>>> + int index;
>>>> +
>>>> + switch (cpu_dai->id) {
>>>> + case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX:
>>>> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
>>>> + index = sc8280xp_snd_i2s_index(cpu_dai);
>>>
>>> What is the mclk and bitclk rate set here, we can not rely on the
>>> default rate.
>>
>> The default rates are set in DT:
>> + assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
>> + assigned-clock-rates = <1536000>,
>> + <24576000>;
>
> Is there a way to infer these rates based on the DT audio
> connection graph?
Good question, it's not done for pre-audioreach. Let me investigate.
Neil
>
> Konrad
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks
2025-10-07 15:48 ` Neil Armstrong
@ 2025-10-08 17:51 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-08 17:51 UTC (permalink / raw)
To: Konrad Dybcio, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 17:48, Neil Armstrong wrote:
> On 10/7/25 12:23, Konrad Dybcio wrote:
>> On 10/7/25 9:02 AM, Neil Armstrong wrote:
>>> On 10/7/25 00:21, Srinivas Kandagatla wrote:
>>>>
>>>>
>>>> On 10/6/25 7:37 PM, Neil Armstrong wrote:
>>>>> Add support for getting the I2S clocks used for the MI2S
>>>>> interfaces, and enable/disable the clocks on the PCM
>>>>> startup and shutdown card callbacks.
>>>>>
>>>>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>>>>> ---
>>
>> [...]
>>
>>>>> +static int sc8280xp_snd_startup(struct snd_pcm_substream *substream)
>>>>> +{
>>>>> + unsigned int codec_dai_fmt = SND_SOC_DAIFMT_BC_FC | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
>>>>> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
>>>>> + struct sc8280xp_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
>>>>> + struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
>>>>> + struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
>>>>> + int index;
>>>>> +
>>>>> + switch (cpu_dai->id) {
>>>>> + case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX:
>>>>> + case QUINARY_MI2S_RX...QUINARY_MI2S_TX:
>>>>> + index = sc8280xp_snd_i2s_index(cpu_dai);
>>>>
>>>> What is the mclk and bitclk rate set here, we can not rely on the
>>>> default rate.
>>>
>>> The default rates are set in DT:
>>> + assigned-clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>>> + <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
>>> + assigned-clock-rates = <1536000>,
>>> + <24576000>;
>>
>> Is there a way to infer these rates based on the DT audio
>> connection graph?
>
> Good question, it's not done for pre-audioreach. Let me investigate.
OK so since we have fixed 48KHz stereo setup, we can hardcode those frequencies in the card...
FS is 512 and the MCLK / BCLK is 16, as standard so I can calculate those.
Will drop the DT rates and do it in the card.
Neil
>
> Neil
>
>>
>> Konrad
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S
2025-10-07 10:21 ` Konrad Dybcio
@ 2025-10-08 17:53 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2025-10-08 17:53 UTC (permalink / raw)
To: Konrad Dybcio, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: linux-sound, linux-arm-msm, linux-kernel, devicetree
On 10/7/25 12:21, Konrad Dybcio wrote:
> On 10/6/25 8:37 PM, Neil Armstrong wrote:
>> In order to describe the block and master clock of each I2S bus, add
>> the first 5 I2S busses clock entries.
>>
>> The names (primary, secondary, tertiarty, quaternary, quinary) uses
>> the LPASS clock naming which were used for a long time on Qualcomm
>> LPASS firmware interfaces.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>
> There's also a senary (6th) I2S bus instance, which there is no reason
> not to describe
Will add
Neil
>
>> .../devicetree/bindings/sound/qcom,sm8250.yaml | 18 ++++++++++++++++++
>> 1 file changed, 18 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
>> index 8ac91625dce5ccba5c5f31748c36296b12fac1a6..fd0d7a7ddc7b363a66e1e7bd72c7290666efb511 100644
>> --- a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
>> +++ b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
>> @@ -64,6 +64,24 @@ properties:
>> $ref: /schemas/types.yaml#/definitions/string
>> description: User visible long sound card name
>>
>> + clocks:
>> + minItems: 2
>> + maxItems: 10
>> +
>> + clock-names:
>> + minItems: 2
>> + items:
>> + - const: primary-mi2s # Primary I2S Bit Clock
>> + - const: primary-mclk # Primary I2S Master Clock
>> + - const: secondary-mi2s # Secondary I2S Bit Clock
>> + - const: secondary-mclk # Secondary I2S Master Clock
>> + - const: tertiary-mi2s # Tertiary I2S Bit Clock
>> + - const: tertiary-mclk # Tertiary I2S Master Clock
>> + - const: quaternary-mi2s # Quaternary I2S Bit Clock
>> + - const: quaternary-mclk # Quaternary I2S Master Clock
>> + - const: quinary-mi2s # Quinary I2S Bit Clock
>> + - const: quinary-mclk # Quinary I2S Master Clock
>
> I think a single top-level comment saying "mclk" is the master
> clock and the other one is a bit clock would suffice
>
> Konrad
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2025-10-08 17:53 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-06 18:37 [PATCH RFC 0/6] ASoC: qcom: enable HDMI audio on SM8[456]50 HDK boards Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 1/6] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs Neil Armstrong
2025-10-06 22:13 ` Srinivas Kandagatla
2025-10-07 10:19 ` Konrad Dybcio
2025-10-06 18:37 ` [PATCH RFC 2/6] ASoC: dt-bindings: qcom,sm8250: Add clocks properties for I2S Neil Armstrong
2025-10-07 10:21 ` Konrad Dybcio
2025-10-08 17:53 ` Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 3/6] ASoC: soc: qcom: sc8280xp: add support for I2S clocks Neil Armstrong
2025-10-06 22:21 ` Srinivas Kandagatla
2025-10-07 7:02 ` Neil Armstrong
2025-10-07 10:23 ` Konrad Dybcio
2025-10-07 15:48 ` Neil Armstrong
2025-10-08 17:51 ` Neil Armstrong
2025-10-07 1:35 ` Alexey Klimov
2025-10-07 7:02 ` Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 4/6] sm8650-hdk: Enable I2S for HDMI Neil Armstrong
2025-10-07 1:39 ` Alexey Klimov
2025-10-07 7:04 ` Neil Armstrong
2025-10-07 15:39 ` Alexey Klimov
2025-10-07 10:24 ` Konrad Dybcio
2025-10-06 18:37 ` [PATCH RFC 5/6] sm8550-hdk: " Neil Armstrong
2025-10-06 18:37 ` [PATCH RFC 6/6] sm8450-hdk: " Neil Armstrong
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).