diff mbox series

[v2] arm64: dts: ti: k3-j722s-evm: Enable analog audio support

Message ID 20240612051246.41117-1-j-choudhary@ti.com (mailing list archive)
State New, archived
Headers show
Series [v2] arm64: dts: ti: k3-j722s-evm: Enable analog audio support | expand

Commit Message

Jayesh Choudhary June 12, 2024, 5:12 a.m. UTC
The audio support on J722S-EVM is using TLV320AIC3106[0] codec
connected to McASP1 serializers.

- Add the nodes for sound-card, audio codec and McASP1.
- Add hog for TRC_MUX_SEL to select between McASP and TRACE signals
- Add hogs for GPIO_AUD_RSTn and MCASP1_FET_SEL which is used to
  switch between HDMI audio and codec audio.
- Add pinmux for MCASP1 and AUDIO_EXT_REFCLK1.
- Add syscon node for audio_refclk1 to set the enable bit in
  CTRL_MMR reg and select the parent clock for the external clock.

[0]: <https://www.ti.com/lit/gpn/TLV320AIC3106>

Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
---

This patch depends upon the bcdma driver fix posted upstream:
<https://lore.kernel.org/all/20240607-bcdma_chan_cnt-v2-1-bf1a55529d91@ti.com/>

v1 patch:
<https://lore.kernel.org/all/20240611082820.17442-1-j-choudhary@ti.com/>

Changelog v1->v2:
- Fix dtb warning for pin-muxing

 arch/arm64/boot/dts/ti/k3-j722s-evm.dts | 121 ++++++++++++++++++++++++
 1 file changed, 121 insertions(+)

Comments

Jai Luthra June 14, 2024, 8:41 a.m. UTC | #1
Hi Jayesh,

Thanks for the patch.

On Jun 12, 2024 at 10:42:46 +0530, Jayesh Choudhary wrote:
> The audio support on J722S-EVM is using TLV320AIC3106[0] codec
> connected to McASP1 serializers.
> 
> - Add the nodes for sound-card, audio codec and McASP1.
> - Add hog for TRC_MUX_SEL to select between McASP and TRACE signals
> - Add hogs for GPIO_AUD_RSTn and MCASP1_FET_SEL which is used to
>   switch between HDMI audio and codec audio.
> - Add pinmux for MCASP1 and AUDIO_EXT_REFCLK1.
> - Add syscon node for audio_refclk1 to set the enable bit in
>   CTRL_MMR reg and select the parent clock for the external clock.
> 
> [0]: <https://www.ti.com/lit/gpn/TLV320AIC3106>
> 
> Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>

Reviewed-By: Jai Luthra <j-luthra@ti.com>

> ---
> 
> This patch depends upon the bcdma driver fix posted upstream:
> <https://lore.kernel.org/all/20240607-bcdma_chan_cnt-v2-1-bf1a55529d91@ti.com/>
> 
> v1 patch:
> <https://lore.kernel.org/all/20240611082820.17442-1-j-choudhary@ti.com/>
> 
> Changelog v1->v2:
> - Fix dtb warning for pin-muxing
> 
>  arch/arm64/boot/dts/ti/k3-j722s-evm.dts | 121 ++++++++++++++++++++++++
>  1 file changed, 121 insertions(+)
> 
[...]
>
Vignesh Raghavendra June 22, 2024, 6:36 a.m. UTC | #2
On 12/06/24 10:42, Jayesh Choudhary wrote:
[...]
> 
> diff --git a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
> index bf3c246d13d1..426ae3e8a839 100644
> --- a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
> +++ b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
> @@ -105,6 +105,16 @@ vdd_sd_dv: regulator-TLV71033 {
>  			 <3300000 0x1>;
>  	};
>  
> +	vcc_3v3_aud: regulator-vcc3v3 {
> +		/* Output of LM5140 */
> +		compatible = "regulator-fixed";
> +		regulator-name = "vcc_3v3";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +		regulator-always-on;
> +		regulator-boot-on;
> +	};
> +
>  	vsys_io_1v8: regulator-vsys-io-1v8 {
>  		compatible = "regulator-fixed";
>  		regulator-name = "vsys_io_1v8";
> @@ -122,6 +132,35 @@ vsys_io_1v2: regulator-vsys-io-1v2 {
>  		regulator-always-on;
>  		regulator-boot-on;
>  	};
> +
> +	codec_audio: sound {
> +		compatible = "simple-audio-card";
> +		simple-audio-card,name = "J722S-EVM";
> +		simple-audio-card,widgets =
> +			"Headphone",	"Headphone Jack",
> +			"Line",		"Line In",
> +			"Microphone",	"Microphone Jack";
> +		simple-audio-card,routing =
> +			"Headphone Jack",	"HPLOUT",
> +			"Headphone Jack",	"HPROUT",
> +			"LINE1L",		"Line In",
> +			"LINE1R",		"Line In",
> +			"MIC3R",		"Microphone Jack",
> +			"Microphone Jack",	"Mic Bias";
> +		simple-audio-card,format = "dsp_b";
> +		simple-audio-card,bitclock-master = <&sound_master>;
> +		simple-audio-card,frame-master = <&sound_master>;
> +		simple-audio-card,bitclock-inversion;
> +
> +		simple-audio-card,cpu {
> +			sound-dai = <&mcasp1>;
> +		};
> +
> +		sound_master: simple-audio-card,codec {
> +			sound-dai = <&tlv320aic3106>;
> +			clocks = <&audio_refclk1>;
> +		};
> +	};
>  };
>  
>  &main_pmx0 {

[...]

> +&main_conf {
> +	audio_refclk1: clock@82e4 {
> +		compatible = "ti,am62-audio-refclk";
> +		reg = <0x82e4 0x4>;
> +		clocks = <&k3_clks 157 18>;
> +		assigned-clocks = <&k3_clks 157 18>;
> +		assigned-clock-parents = <&k3_clks 157 33>;
> +		#clock-cells = <0>;
> +	};


Shouldn't this be in a SoC level dtsi? If the clock selection is based
on board design, the only move the assigned-clocks* to board file and
keep the rest in SoC level files.


> +};
Jayesh Choudhary June 24, 2024, 9:45 a.m. UTC | #3
Hello Vignesh,

On 22/06/24 12:06, Vignesh Raghavendra wrote:
> 
> 
> On 12/06/24 10:42, Jayesh Choudhary wrote:
> [...]
>>
>> diff --git a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
>> index bf3c246d13d1..426ae3e8a839 100644
>> --- a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
>> +++ b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
>> @@ -105,6 +105,16 @@ vdd_sd_dv: regulator-TLV71033 {
>>   			 <3300000 0x1>;
>>   	};
>>   
>> +	vcc_3v3_aud: regulator-vcc3v3 {
>> +		/* Output of LM5140 */
>> +		compatible = "regulator-fixed";
>> +		regulator-name = "vcc_3v3";
>> +		regulator-min-microvolt = <3300000>;
>> +		regulator-max-microvolt = <3300000>;
>> +		regulator-always-on;
>> +		regulator-boot-on;
>> +	};
>> +
>>   	vsys_io_1v8: regulator-vsys-io-1v8 {
>>   		compatible = "regulator-fixed";
>>   		regulator-name = "vsys_io_1v8";
>> @@ -122,6 +132,35 @@ vsys_io_1v2: regulator-vsys-io-1v2 {
>>   		regulator-always-on;
>>   		regulator-boot-on;
>>   	};
>> +
>> +	codec_audio: sound {
>> +		compatible = "simple-audio-card";
>> +		simple-audio-card,name = "J722S-EVM";
>> +		simple-audio-card,widgets =
>> +			"Headphone",	"Headphone Jack",
>> +			"Line",		"Line In",
>> +			"Microphone",	"Microphone Jack";
>> +		simple-audio-card,routing =
>> +			"Headphone Jack",	"HPLOUT",
>> +			"Headphone Jack",	"HPROUT",
>> +			"LINE1L",		"Line In",
>> +			"LINE1R",		"Line In",
>> +			"MIC3R",		"Microphone Jack",
>> +			"Microphone Jack",	"Mic Bias";
>> +		simple-audio-card,format = "dsp_b";
>> +		simple-audio-card,bitclock-master = <&sound_master>;
>> +		simple-audio-card,frame-master = <&sound_master>;
>> +		simple-audio-card,bitclock-inversion;
>> +
>> +		simple-audio-card,cpu {
>> +			sound-dai = <&mcasp1>;
>> +		};
>> +
>> +		sound_master: simple-audio-card,codec {
>> +			sound-dai = <&tlv320aic3106>;
>> +			clocks = <&audio_refclk1>;
>> +		};
>> +	};
>>   };
>>   
>>   &main_pmx0 {
> 
> [...]
> 
>> +&main_conf {
>> +	audio_refclk1: clock@82e4 {
>> +		compatible = "ti,am62-audio-refclk";
>> +		reg = <0x82e4 0x4>;
>> +		clocks = <&k3_clks 157 18>;
>> +		assigned-clocks = <&k3_clks 157 18>;
>> +		assigned-clock-parents = <&k3_clks 157 33>;
>> +		#clock-cells = <0>;
>> +	};
> 
> 
> Shouldn't this be in a SoC level dtsi? If the clock selection is based
> on board design, the only move the assigned-clocks* to board file and
> keep the rest in SoC level files.
> 

Ok.
I will need to rebase on top of Siddharth's patches[0] which I see are
now merged.
Will do that and roll v3.

[0]: 
https://lore.kernel.org/all/20240615081600.3602462-4-s-vadapalli@ti.com/

Thanks,
Jayesh

> 
>> +};
>
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
index bf3c246d13d1..426ae3e8a839 100644
--- a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
+++ b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
@@ -105,6 +105,16 @@  vdd_sd_dv: regulator-TLV71033 {
 			 <3300000 0x1>;
 	};
 
+	vcc_3v3_aud: regulator-vcc3v3 {
+		/* Output of LM5140 */
+		compatible = "regulator-fixed";
+		regulator-name = "vcc_3v3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-always-on;
+		regulator-boot-on;
+	};
+
 	vsys_io_1v8: regulator-vsys-io-1v8 {
 		compatible = "regulator-fixed";
 		regulator-name = "vsys_io_1v8";
@@ -122,6 +132,35 @@  vsys_io_1v2: regulator-vsys-io-1v2 {
 		regulator-always-on;
 		regulator-boot-on;
 	};
+
+	codec_audio: sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "J722S-EVM";
+		simple-audio-card,widgets =
+			"Headphone",	"Headphone Jack",
+			"Line",		"Line In",
+			"Microphone",	"Microphone Jack";
+		simple-audio-card,routing =
+			"Headphone Jack",	"HPLOUT",
+			"Headphone Jack",	"HPROUT",
+			"LINE1L",		"Line In",
+			"LINE1R",		"Line In",
+			"MIC3R",		"Microphone Jack",
+			"Microphone Jack",	"Mic Bias";
+		simple-audio-card,format = "dsp_b";
+		simple-audio-card,bitclock-master = <&sound_master>;
+		simple-audio-card,frame-master = <&sound_master>;
+		simple-audio-card,bitclock-inversion;
+
+		simple-audio-card,cpu {
+			sound-dai = <&mcasp1>;
+		};
+
+		sound_master: simple-audio-card,codec {
+			sound-dai = <&tlv320aic3106>;
+			clocks = <&audio_refclk1>;
+		};
+	};
 };
 
 &main_pmx0 {
@@ -202,6 +241,21 @@  J722S_IOPAD(0x0130, PIN_OUTPUT, 0) /* (AG26) RGMII1_TXC */
 			J722S_IOPAD(0x012c, PIN_OUTPUT, 0) /* (AF25) RGMII1_TX_CTL */
 		>;
 	};
+
+	main_mcasp1_pins_default: main-mcasp1-default-pins {
+		pinctrl-single,pins = <
+			J722S_IOPAD(0x0090, PIN_INPUT, 2) /* (U24) GPMC0_BE0n_CLE.MCASP1_ACLKX */
+			J722S_IOPAD(0x0098, PIN_INPUT, 2) /* (AA24) GPMC0_WAIT0.MCASP1_AFSX */
+			J722S_IOPAD(0x008c, PIN_OUTPUT, 2) /* (T25) GPMC0_WEn.MCASP1_AXR0 */
+			J722S_IOPAD(0x0084, PIN_INPUT, 2) /* (R25) GPMC0_ADVn_ALE.MCASP1_AXR2 */
+		>;
+	};
+
+	audio_ext_refclk1_pins_default: audio-ext-refclk1-default-pins {
+		pinctrl-single,pins = <
+			J722S_IOPAD(0x0a0, PIN_OUTPUT, 1) /* (N24) GPMC0_WPn.AUDIO_EXT_REFCLK1 */
+		>;
+	};
 };
 
 &cpsw3g {
@@ -277,6 +331,12 @@  &wkup_i2c0 {
 	bootph-all;
 };
 
+&k3_clks {
+	/* Configure AUDIO_EXT_REFCLK1 pin as output */
+	pinctrl-names = "default";
+	pinctrl-0 = <&audio_ext_refclk1_pins_default>;
+};
+
 &main_i2c0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&main_i2c0_pins_default>;
@@ -301,6 +361,41 @@  exp1: gpio@23 {
 				  "PCIe0_1L_RC_RSTz", "PCIe0_1L_PRSNT#",
 				  "ENET1_EXP_SPARE2", "ENET1_EXP_PWRDN",
 				  "PD_I2ENET1_I2CMUX_SELC_IRQ", "ENET1_EXP_RESETZ";
+
+		p01_hog: p01-hog {
+			/* P01 - TRC_MUX_SEL */
+			gpio-hog;
+			gpios = <0 GPIO_ACTIVE_HIGH>;
+			output-low;
+			line-name = "TRC_MUX_SEL";
+		};
+
+		p02_hog: p02-hog {
+			/* P02 - MCASP1_FET_SEL */
+			gpio-hog;
+			gpios = <2 GPIO_ACTIVE_HIGH>;
+			output-high;
+			line-name = "MCASP1_FET_SEL";
+		};
+
+		p13_hog: p13-hog {
+			/* P13 - GPIO_AUD_RSTn */
+			gpio-hog;
+			gpios = <13 GPIO_ACTIVE_HIGH>;
+			output-high;
+			line-name = "GPIO_AUD_RSTn";
+		};
+	};
+
+	tlv320aic3106: audio-codec@1b {
+		#sound-dai-cells = <0>;
+		compatible = "ti,tlv320aic3106";
+		reg = <0x1b>;
+		ai3x-micbias-vg = <1>;  /* 2.0V */
+		AVDD-supply = <&vcc_3v3_aud>;
+		IOVDD-supply = <&vcc_3v3_aud>;
+		DRVDD-supply = <&vcc_3v3_aud>;
+		DVDD-supply = <&vsys_io_1v8>;
 	};
 };
 
@@ -384,3 +479,29 @@  &sdhci1 {
 	status = "okay";
 	bootph-all;
 };
+
+&mcasp1 {
+	status = "okay";
+	#sound-dai-cells = <0>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&main_mcasp1_pins_default>;
+	op-mode = <0>; /* MCASP_IIS_MODE */
+	tdm-slots = <2>;
+	serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
+	       1 0 2 0
+	       0 0 0 0
+	       0 0 0 0
+	       0 0 0 0
+	>;
+};
+
+&main_conf {
+	audio_refclk1: clock@82e4 {
+		compatible = "ti,am62-audio-refclk";
+		reg = <0x82e4 0x4>;
+		clocks = <&k3_clks 157 18>;
+		assigned-clocks = <&k3_clks 157 18>;
+		assigned-clock-parents = <&k3_clks 157 33>;
+		#clock-cells = <0>;
+	};
+};