LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/2] HDMI Audio on RK356x/Quartz64 Model A
@ 2021-11-25 10:08 Nicolas Frattaroli
  2021-11-25 10:08 ` [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes Nicolas Frattaroli
  2021-11-25 10:08 ` [PATCH 2/2] arm64: dts: rockchip: Enable HDMI audio on Quartz64 A Nicolas Frattaroli
  0 siblings, 2 replies; 6+ messages in thread
From: Nicolas Frattaroli @ 2021-11-25 10:08 UTC (permalink / raw)
  To: Rob Herring, Heiko Stuebner
  Cc: Nicolas Frattaroli, devicetree, linux-arm-kernel, linux-rockchip,
	linux-kernel

This enables HDMI audio on Quartz64 Model A, and the RK356x SoC in
general. The patches require the VOP2 patchset[1] and my I2S/TDM
controller fix[2] to work.

i2s0 on the RK356x is connected to HDMI, and only has one DMA. I've
confirmed this with the TRM. With [2] the driver now handles this
properly, and does not try to register a capture PCM in this case.

To test this, one needs a video clock, i.e. there is no audio if your
screen is off. I've found that running kmscube momentarily is enough
to make the VOP2 keep the screen turned on indefinitely, which is
a pleasant quirk in this case.

[1]: https://patchwork.kernel.org/project/linux-rockchip/list/?series=581709
[2]: https://patchwork.kernel.org/project/linux-rockchip/patch/20211125084900.417102-1-frattaroli.nicolas@gmail.com/

Nicolas Frattaroli (2):
  arm64: dts: rockchip: rk356x: Add HDMI audio nodes
  arm64: dts: rockchip: Enable HDMI audio on Quartz64 A

 .../boot/dts/rockchip/rk3566-quartz64-a.dts   |  8 +++++
 arch/arm64/boot/dts/rockchip/rk356x.dtsi      | 32 +++++++++++++++++++
 2 files changed, 40 insertions(+)

-- 
2.34.0


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

* [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes
  2021-11-25 10:08 [PATCH 0/2] HDMI Audio on RK356x/Quartz64 Model A Nicolas Frattaroli
@ 2021-11-25 10:08 ` Nicolas Frattaroli
  2021-11-25 18:47   ` Michael Riesch
  2021-11-25 19:07   ` Johan Jonker
  2021-11-25 10:08 ` [PATCH 2/2] arm64: dts: rockchip: Enable HDMI audio on Quartz64 A Nicolas Frattaroli
  1 sibling, 2 replies; 6+ messages in thread
From: Nicolas Frattaroli @ 2021-11-25 10:08 UTC (permalink / raw)
  To: Rob Herring, Heiko Stuebner
  Cc: Nicolas Frattaroli, devicetree, linux-arm-kernel, linux-rockchip,
	linux-kernel

This adds the i2s0 node and an hdmi-sound sound device to the
rk356x device tree. On the rk356[68], the i2s0 controller is
connected to HDMI audio.

Signed-off-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
---
 arch/arm64/boot/dts/rockchip/rk356x.dtsi | 32 ++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/arch/arm64/boot/dts/rockchip/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
index 3c09cf6d4c37..ad4053402eef 100644
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
@@ -614,6 +614,21 @@ hdmi_in_vp2: endpoint@2 {
 		};
 	};
 
+	hdmi_sound: hdmi-sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,format = "i2s";
+		simple-audio-card,mclk-fs = <256>;
+		simple-audio-card,name = "hdmi-sound";
+		status = "disabled";
+
+		simple-audio-card,cpu {
+			sound-dai = <&i2s0_8ch>;
+		};
+		simple-audio-card,codec {
+			sound-dai = <&hdmi>;
+		};
+	};
+
 	qos_gpu: qos@fe128000 {
 		compatible = "rockchip,rk3568-qos", "syscon";
 		reg = <0x0 0xfe128000 0x0 0x20>;
@@ -789,6 +804,23 @@ spdif: spdif@fe460000 {
 		status = "disabled";
 	};
 
+	i2s0_8ch: i2s@fe400000 {
+		compatible = "rockchip,rk3568-i2s-tdm";
+		reg = <0x0 0xfe400000 0x0 0x1000>;
+		interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
+		assigned-clocks = <&cru CLK_I2S0_8CH_TX_SRC>, <&cru CLK_I2S0_8CH_RX_SRC>;
+		assigned-clock-rates = <1188000000>, <1188000000>;
+		clocks = <&cru MCLK_I2S0_8CH_TX>, <&cru MCLK_I2S0_8CH_RX>, <&cru HCLK_I2S0_8CH>;
+		clock-names = "mclk_tx", "mclk_rx", "hclk";
+		dmas = <&dmac1 0>;
+		dma-names = "tx";
+		resets = <&cru SRST_M_I2S0_8CH_TX>, <&cru SRST_M_I2S0_8CH_RX>;
+		reset-names = "tx-m", "rx-m";
+		rockchip,grf = <&grf>;
+		#sound-dai-cells = <0>;
+		status = "disabled";
+	};
+
 	i2s1_8ch: i2s@fe410000 {
 		compatible = "rockchip,rk3568-i2s-tdm";
 		reg = <0x0 0xfe410000 0x0 0x1000>;
-- 
2.34.0


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

* [PATCH 2/2] arm64: dts: rockchip: Enable HDMI audio on Quartz64 A
  2021-11-25 10:08 [PATCH 0/2] HDMI Audio on RK356x/Quartz64 Model A Nicolas Frattaroli
  2021-11-25 10:08 ` [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes Nicolas Frattaroli
@ 2021-11-25 10:08 ` Nicolas Frattaroli
  1 sibling, 0 replies; 6+ messages in thread
From: Nicolas Frattaroli @ 2021-11-25 10:08 UTC (permalink / raw)
  To: Rob Herring, Heiko Stuebner
  Cc: Nicolas Frattaroli, devicetree, linux-arm-kernel, linux-rockchip,
	linux-kernel

This enables the i2s0 controller and the hdmi-sound node on
the PINE64 Quartz64 Model A single-board computer.

Signed-off-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
---
 arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts
index a4453c82b03d..0598510dce58 100644
--- a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts
@@ -215,6 +215,10 @@ &hdmi_in_vp0 {
 	status = "okay";
 };
 
+&hdmi_sound {
+	status = "okay";
+};
+
 &gpu {
 	mali-supply = <&vdd_gpu>;
 	status = "okay";
@@ -444,6 +448,10 @@ regulator-state-mem {
 	};
 };
 
+&i2s0_8ch {
+	status = "okay";
+};
+
 &i2s1_8ch {
 	pinctrl-names = "default";
 	pinctrl-0 = <&i2s1m0_sclktx
-- 
2.34.0


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

* Re: [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes
  2021-11-25 10:08 ` [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes Nicolas Frattaroli
@ 2021-11-25 18:47   ` Michael Riesch
  2021-11-25 19:07   ` Johan Jonker
  1 sibling, 0 replies; 6+ messages in thread
From: Michael Riesch @ 2021-11-25 18:47 UTC (permalink / raw)
  To: Nicolas Frattaroli, Rob Herring, Heiko Stuebner
  Cc: devicetree, linux-arm-kernel, linux-rockchip, linux-kernel

Hello Nicolas,

On 11/25/21 11:08 AM, Nicolas Frattaroli wrote:
> This adds the i2s0 node and an hdmi-sound sound device to the
> rk356x device tree. On the rk356[68], the i2s0 controller is
> connected to HDMI audio.
> 
> Signed-off-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
> ---
>   arch/arm64/boot/dts/rockchip/rk356x.dtsi | 32 ++++++++++++++++++++++++
>   1 file changed, 32 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/rockchip/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> index 3c09cf6d4c37..ad4053402eef 100644
> --- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> @@ -614,6 +614,21 @@ hdmi_in_vp2: endpoint@2 {
>   		};
>   	};
>   
> +	hdmi_sound: hdmi-sound {
> +		compatible = "simple-audio-card";
> +		simple-audio-card,format = "i2s";
> +		simple-audio-card,mclk-fs = <256>;
> +		simple-audio-card,name = "hdmi-sound";
> +		status = "disabled";
> +
> +		simple-audio-card,cpu {
> +			sound-dai = <&i2s0_8ch>;
> +		};
> +		simple-audio-card,codec {
> +			sound-dai = <&hdmi>;
> +		};
> +	};
> +
>   	qos_gpu: qos@fe128000 {
>   		compatible = "rockchip,rk3568-qos", "syscon";
>   		reg = <0x0 0xfe128000 0x0 0x20>;
> @@ -789,6 +804,23 @@ spdif: spdif@fe460000 {
>   		status = "disabled";
>   	};
>   
> +	i2s0_8ch: i2s@fe400000 {
> +		compatible = "rockchip,rk3568-i2s-tdm";
> +		reg = <0x0 0xfe400000 0x0 0x1000>;
> +		interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
> +		assigned-clocks = <&cru CLK_I2S0_8CH_TX_SRC>, <&cru CLK_I2S0_8CH_RX_SRC>;
> +		assigned-clock-rates = <1188000000>, <1188000000>;
> +		clocks = <&cru MCLK_I2S0_8CH_TX>, <&cru MCLK_I2S0_8CH_RX>, <&cru HCLK_I2S0_8CH>;
> +		clock-names = "mclk_tx", "mclk_rx", "hclk";
> +		dmas = <&dmac1 0>;
> +		dma-names = "tx";
> +		resets = <&cru SRST_M_I2S0_8CH_TX>, <&cru SRST_M_I2S0_8CH_RX>;
> +		reset-names = "tx-m", "rx-m";
> +		rockchip,grf = <&grf>;
> +		#sound-dai-cells = <0>;
> +		status = "disabled";
> +	};
> +
>   	i2s1_8ch: i2s@fe410000 {
>   		compatible = "rockchip,rk3568-i2s-tdm";
>   		reg = <0x0 0xfe410000 0x0 0x1000>;
> 

on a RK3568 EVB1 with corresponding dts changes:

Tested-by: Michael Riesch <michael.riesch@wolfvision.net>

Thanks and best regards,
Michael


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

* Re: [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes
  2021-11-25 10:08 ` [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes Nicolas Frattaroli
  2021-11-25 18:47   ` Michael Riesch
@ 2021-11-25 19:07   ` Johan Jonker
  2021-11-25 19:30     ` Heiko Stübner
  1 sibling, 1 reply; 6+ messages in thread
From: Johan Jonker @ 2021-11-25 19:07 UTC (permalink / raw)
  To: Nicolas Frattaroli, Rob Herring, Heiko Stuebner
  Cc: devicetree, linux-arm-kernel, linux-rockchip, linux-kernel

Hi Nicolas,

Some comments...

On 11/25/21 11:08 AM, Nicolas Frattaroli wrote:
> This adds the i2s0 node and an hdmi-sound sound device to the
> rk356x device tree. On the rk356[68], the i2s0 controller is
> connected to HDMI audio.
> 
> Signed-off-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
> ---
>  arch/arm64/boot/dts/rockchip/rk356x.dtsi | 32 ++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/rockchip/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> index 3c09cf6d4c37..ad4053402eef 100644
> --- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> @@ -614,6 +614,21 @@ hdmi_in_vp2: endpoint@2 {
>  		};
>  	};
>  

> +	hdmi_sound: hdmi-sound {

Some DT sort rules:

For nodes:
Sort things without reg alphabetical first,
then sort the rest by reg address.

> +		compatible = "simple-audio-card";

simple-audio-card,name = "HDMI";

> +		simple-audio-card,format = "i2s";
> +		simple-audio-card,mclk-fs = <256>;

> +		simple-audio-card,name = "hdmi-sound";

Exceptions:
Sort simple-audio-card,name above other simple-audio-card properties.

Shouldn't we standardize to SPDIF, HDMI and Analog similar to rk3318/rk3328?
Make a shorter label without spaces or special chars, so that chars
don't get removed?
See "aplay -l" screen print.

Maybe rename to "HDMI"?

> +		status = "disabled";
> +
> +		simple-audio-card,cpu {
> +			sound-dai = <&i2s0_8ch>;
> +		};

Add empty line between nodes.

Not sure if Heiko cares, but when alphabetical sort I get this:
simple-audio-card,codec
simple-audio-card,cpu

> +		simple-audio-card,codec {
> +			sound-dai = <&hdmi>;
> +		};
> +	};
> +
>  	qos_gpu: qos@fe128000 {
>  		compatible = "rockchip,rk3568-qos", "syscon";
>  		reg = <0x0 0xfe128000 0x0 0x20>;
> @@ -789,6 +804,23 @@ spdif: spdif@fe460000 {
>  		status = "disabled";
>  	};
>  
> +	i2s0_8ch: i2s@fe400000 {
> +		compatible = "rockchip,rk3568-i2s-tdm";
> +		reg = <0x0 0xfe400000 0x0 0x1000>;
> +		interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
> +		assigned-clocks = <&cru CLK_I2S0_8CH_TX_SRC>, <&cru CLK_I2S0_8CH_RX_SRC>;
> +		assigned-clock-rates = <1188000000>, <1188000000>;
> +		clocks = <&cru MCLK_I2S0_8CH_TX>, <&cru MCLK_I2S0_8CH_RX>, <&cru HCLK_I2S0_8CH>;
> +		clock-names = "mclk_tx", "mclk_rx", "hclk";
> +		dmas = <&dmac1 0>;
> +		dma-names = "tx";
> +		resets = <&cru SRST_M_I2S0_8CH_TX>, <&cru SRST_M_I2S0_8CH_RX>;
> +		reset-names = "tx-m", "rx-m";
> +		rockchip,grf = <&grf>;
> +		#sound-dai-cells = <0>;
> +		status = "disabled";
> +	};
> +
>  	i2s1_8ch: i2s@fe410000 {
>  		compatible = "rockchip,rk3568-i2s-tdm";
>  		reg = <0x0 0xfe410000 0x0 0x1000>;
> 

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

* Re: [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes
  2021-11-25 19:07   ` Johan Jonker
@ 2021-11-25 19:30     ` Heiko Stübner
  0 siblings, 0 replies; 6+ messages in thread
From: Heiko Stübner @ 2021-11-25 19:30 UTC (permalink / raw)
  To: Nicolas Frattaroli, Rob Herring, Johan Jonker
  Cc: devicetree, linux-arm-kernel, linux-rockchip, linux-kernel

Am Donnerstag, 25. November 2021, 20:07:21 CET schrieb Johan Jonker:
> Hi Nicolas,
> 
> Some comments...
> 
> On 11/25/21 11:08 AM, Nicolas Frattaroli wrote:
> > This adds the i2s0 node and an hdmi-sound sound device to the
> > rk356x device tree. On the rk356[68], the i2s0 controller is
> > connected to HDMI audio.
> > 
> > Signed-off-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
> > ---
> >  arch/arm64/boot/dts/rockchip/rk356x.dtsi | 32 ++++++++++++++++++++++++
> >  1 file changed, 32 insertions(+)
> > 
> > diff --git a/arch/arm64/boot/dts/rockchip/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> > index 3c09cf6d4c37..ad4053402eef 100644
> > --- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> > +++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
> > @@ -614,6 +614,21 @@ hdmi_in_vp2: endpoint@2 {
> >  		};
> >  	};
> >  
> 
> > +	hdmi_sound: hdmi-sound {
> 
> Some DT sort rules:
> 
> For nodes:
> Sort things without reg alphabetical first,
> then sort the rest by reg address.
> 
> > +		compatible = "simple-audio-card";
> 
> simple-audio-card,name = "HDMI";
> 
> > +		simple-audio-card,format = "i2s";
> > +		simple-audio-card,mclk-fs = <256>;
> 
> > +		simple-audio-card,name = "hdmi-sound";
> 
> Exceptions:
> Sort simple-audio-card,name above other simple-audio-card properties.
> 
> Shouldn't we standardize to SPDIF, HDMI and Analog similar to rk3318/rk3328?
> Make a shorter label without spaces or special chars, so that chars
> don't get removed?
> See "aplay -l" screen print.
> 
> Maybe rename to "HDMI"?
> 
> > +		status = "disabled";
> > +
> > +		simple-audio-card,cpu {
> > +			sound-dai = <&i2s0_8ch>;
> > +		};
> 
> Add empty line between nodes.
> 
> Not sure if Heiko cares, but when alphabetical sort I get this:
> simple-audio-card,codec
> simple-audio-card,cpu

Hehe ... I do care, but would normally just (silently) re-sort these
things when applying ;-) .


Heiko


> > +		simple-audio-card,codec {
> > +			sound-dai = <&hdmi>;
> > +		};
> > +	};
> > +
> >  	qos_gpu: qos@fe128000 {
> >  		compatible = "rockchip,rk3568-qos", "syscon";
> >  		reg = <0x0 0xfe128000 0x0 0x20>;
> > @@ -789,6 +804,23 @@ spdif: spdif@fe460000 {
> >  		status = "disabled";
> >  	};
> >  
> > +	i2s0_8ch: i2s@fe400000 {
> > +		compatible = "rockchip,rk3568-i2s-tdm";
> > +		reg = <0x0 0xfe400000 0x0 0x1000>;
> > +		interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
> > +		assigned-clocks = <&cru CLK_I2S0_8CH_TX_SRC>, <&cru CLK_I2S0_8CH_RX_SRC>;
> > +		assigned-clock-rates = <1188000000>, <1188000000>;
> > +		clocks = <&cru MCLK_I2S0_8CH_TX>, <&cru MCLK_I2S0_8CH_RX>, <&cru HCLK_I2S0_8CH>;
> > +		clock-names = "mclk_tx", "mclk_rx", "hclk";
> > +		dmas = <&dmac1 0>;
> > +		dma-names = "tx";
> > +		resets = <&cru SRST_M_I2S0_8CH_TX>, <&cru SRST_M_I2S0_8CH_RX>;
> > +		reset-names = "tx-m", "rx-m";
> > +		rockchip,grf = <&grf>;
> > +		#sound-dai-cells = <0>;
> > +		status = "disabled";
> > +	};
> > +
> >  	i2s1_8ch: i2s@fe410000 {
> >  		compatible = "rockchip,rk3568-i2s-tdm";
> >  		reg = <0x0 0xfe410000 0x0 0x1000>;
> > 
> 





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

end of thread, other threads:[~2021-11-25 19:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-25 10:08 [PATCH 0/2] HDMI Audio on RK356x/Quartz64 Model A Nicolas Frattaroli
2021-11-25 10:08 ` [PATCH 1/2] arm64: dts: rockchip: rk356x: Add HDMI audio nodes Nicolas Frattaroli
2021-11-25 18:47   ` Michael Riesch
2021-11-25 19:07   ` Johan Jonker
2021-11-25 19:30     ` Heiko Stübner
2021-11-25 10:08 ` [PATCH 2/2] arm64: dts: rockchip: Enable HDMI audio on Quartz64 A Nicolas Frattaroli

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).