diff mbox series

[2/2] arm64: dts: rockchip: enable rk809 audio codec on the rk3568 evb1

Message ID 20220222175004.1308990-2-michael.riesch@wolfvision.net (mailing list archive)
State New, archived
Headers show
Series [1/2] arm64: dts: rockchip: enable work led on rk3568-evb1 | expand

Commit Message

Michael Riesch Feb. 22, 2022, 5:50 p.m. UTC
Enable the Rockchip RK809 audio codec on the Rockchip RK3568
EVB1. This requires the VCCIO_ACODEC voltage regulator to be set
to always on.

Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
---
 .../boot/dts/rockchip/rk3568-evb1-v10.dts     | 31 ++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

Comments

Heiko Stübner Feb. 22, 2022, 11:11 p.m. UTC | #1
Hi,

Am Dienstag, 22. Februar 2022, 18:50:04 CET schrieb Michael Riesch:
> Enable the Rockchip RK809 audio codec on the Rockchip RK3568
> EVB1. This requires the VCCIO_ACODEC voltage regulator to be set
> to always on.
> 
> Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>

[...]

> @@ -282,6 +301,7 @@ regulator-state-mem {
>  
>  			vccio_acodec: LDO_REG4 {
>  				regulator-name = "vccio_acodec";
> +				regulator-always-on;

As this seems to supply the codec (in the rk809?) shouldn't the
sound part model that relationship and handle regulators
instead of requiring an arbitary regulator to be always on?


Heiko

>  				regulator-min-microvolt = <3300000>;
>  				regulator-max-microvolt = <3300000>;
>  
> @@ -366,6 +386,10 @@ regulator-state-mem {
>  				};
>  			};
>  		};
> +
> +		codec {
> +			mic-in-differential;
> +		};
>  	};
>  };
>  
> @@ -386,6 +410,11 @@ touchscreen0: goodix@14 {
>  	};
>  };
>  
> +&i2s1_8ch {
> +	rockchip,trcm-sync-tx-only;
> +	status = "okay";
> +};
> +
>  &mdio0 {
>  	rgmii_phy0: ethernet-phy@0 {
>  		compatible = "ethernet-phy-ieee802.3-c22";
>
Michael Riesch Feb. 23, 2022, 8:41 a.m. UTC | #2
Hello Heiko,

On 2/23/22 00:11, Heiko Stuebner wrote:
> Hi,
> 
> Am Dienstag, 22. Februar 2022, 18:50:04 CET schrieb Michael Riesch:
>> Enable the Rockchip RK809 audio codec on the Rockchip RK3568
>> EVB1. This requires the VCCIO_ACODEC voltage regulator to be set
>> to always on.
>>
>> Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
> 
> [...]
> 
>> @@ -282,6 +301,7 @@ regulator-state-mem {
>>  
>>  			vccio_acodec: LDO_REG4 {
>>  				regulator-name = "vccio_acodec";
>> +				regulator-always-on;
> 
> As this seems to supply the codec (in the rk809?) shouldn't the
> sound part model that relationship and handle regulators
> instead of requiring an arbitary regulator to be always on?

To be honest, I am not entirely sure. VCCIO_ACODEC is supplied by the
(LDO regulator part of the) RK809. As far as I can tell, the audio codec
part of the RK809 is powered internally. There is indeed a note "IO
Power = LDO4" (which corresponds to VCCIO_ACODEC) at the I2S interface,
which would make the RK809 the producer and a consumer of this voltage.
This could be modeled in the driver, but seeing that the rk808 driver
and the codec driver are directly coupled I think it would not change much.

I admit that I am going for the low-effort solution here, but it is done
in similar fashion on other boards. What do you think?

As to the other consumers of VCCIO_ACODEC: The microphone requires this
voltage, but is there a representation of an analog microphone?

And of course the voltage serves as supply for one of the PMU IO
(voltage) domains (vccio1). But I think here the principle is that the
IO voltage is only turned on if there is a peer on the other end, which
(most likely) consumes this voltage as well.

If you decide to accept the change as is, could you please fix up the
commit message "rk3568 evb1" -> "rk3568-evb1-v10" for consistency? This
did not occur to me when I sent the patches, sorry!

Best regards,
Michael

> 
> 
> Heiko
> 
>>  				regulator-min-microvolt = <3300000>;
>>  				regulator-max-microvolt = <3300000>;
>>  
>> @@ -366,6 +386,10 @@ regulator-state-mem {
>>  				};
>>  			};
>>  		};
>> +
>> +		codec {
>> +			mic-in-differential;
>> +		};
>>  	};
>>  };
>>  
>> @@ -386,6 +410,11 @@ touchscreen0: goodix@14 {
>>  	};
>>  };
>>  
>> +&i2s1_8ch {
>> +	rockchip,trcm-sync-tx-only;
>> +	status = "okay";
>> +};
>> +
>>  &mdio0 {
>>  	rgmii_phy0: ethernet-phy@0 {
>>  		compatible = "ethernet-phy-ieee802.3-c22";
>>
> 
> 
> 
>
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb1-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb1-v10.dts
index aaf7b4bed24b..1ed92531e626 100644
--- a/arch/arm64/boot/dts/rockchip/rk3568-evb1-v10.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3568-evb1-v10.dts
@@ -45,6 +45,20 @@  led_work: led-work {
 		};
 	};
 
+	rk809-sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,format = "i2s";
+		simple-audio-card,name = "Analog RK809";
+		simple-audio-card,mclk-fs = <256>;
+
+		simple-audio-card,cpu {
+			sound-dai = <&i2s1_8ch>;
+		};
+		simple-audio-card,codec {
+			sound-dai = <&rk809>;
+		};
+	};
+
 	vcc3v3_sys: vcc3v3-sys {
 		compatible = "regulator-fixed";
 		regulator-name = "vcc3v3_sys";
@@ -165,10 +179,15 @@  rk809: pmic@20 {
 		reg = <0x20>;
 		interrupt-parent = <&gpio0>;
 		interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
+		assigned-clocks = <&cru I2S1_MCLKOUT_TX>;
+		assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>;
 		#clock-cells = <1>;
+		clock-names = "mclk";
+		clocks = <&cru I2S1_MCLKOUT_TX>;
 		pinctrl-names = "default";
-		pinctrl-0 = <&pmic_int>;
+		pinctrl-0 = <&pmic_int>, <&i2s1m0_mclk>;
 		rockchip,system-power-controller;
+		#sound-dai-cells = <0>;
 		vcc1-supply = <&vcc3v3_sys>;
 		vcc2-supply = <&vcc3v3_sys>;
 		vcc3-supply = <&vcc3v3_sys>;
@@ -282,6 +301,7 @@  regulator-state-mem {
 
 			vccio_acodec: LDO_REG4 {
 				regulator-name = "vccio_acodec";
+				regulator-always-on;
 				regulator-min-microvolt = <3300000>;
 				regulator-max-microvolt = <3300000>;
 
@@ -366,6 +386,10 @@  regulator-state-mem {
 				};
 			};
 		};
+
+		codec {
+			mic-in-differential;
+		};
 	};
 };
 
@@ -386,6 +410,11 @@  touchscreen0: goodix@14 {
 	};
 };
 
+&i2s1_8ch {
+	rockchip,trcm-sync-tx-only;
+	status = "okay";
+};
+
 &mdio0 {
 	rgmii_phy0: ethernet-phy@0 {
 		compatible = "ethernet-phy-ieee802.3-c22";