[4/5] arm64: dts: ti: k3-am62a7-sk: Enable audio on AM62A

Message ID 20230731-mcasp_am62a-v1-4-8bd137ffa8f1@ti.com
State New
Headers
Series arm64: ti: Enable audio on AM62A |

Commit Message

Jai Luthra July 31, 2023, 12:44 p.m. UTC
  Add nodes for audio codec and sound card, enable the audio serializer
(McASP1) under use and update pinmux.

Link: https://www.ti.com/lit/zip/sprr459
Signed-off-by: Jai Luthra <j-luthra@ti.com>
Reviewed-by: Jayesh Choudhary <j-choudhary@ti.com>
---
 arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 77 +++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
  

Comments

Devarsh Thakkar Aug. 2, 2023, 10:45 a.m. UTC | #1
Hi Jai,

Thanks for the patch.

On 31/07/23 18:14, Jai Luthra wrote:
> Add nodes for audio codec and sound card, enable the audio serializer
> (McASP1) under use and update pinmux.
> 
> Link: https://www.ti.com/lit/zip/sprr459
> Signed-off-by: Jai Luthra <j-luthra@ti.com>
> Reviewed-by: Jayesh Choudhary <j-choudhary@ti.com>
> ---
>  arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 77 +++++++++++++++++++++++++++++++++
>  1 file changed, 77 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> index 752c2f640f63..5f68d2eefe0f 100644
> --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> +++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> @@ -125,6 +125,41 @@ led-0 {
>  			default-state = "off";
>  		};
>  	};
> +
> +	tlv320_mclk: clk-0 {
> +		#clock-cells = <0>;
> +		compatible = "fixed-clock";
> +		clock-frequency = <12288000>;
> +	};
> +
> +	codec_audio: sound {
> +		compatible = "simple-audio-card";
> +		simple-audio-card,name = "AM62Ax-SKEVM";

In my opinion better to give the codec name instead of board name here.

Regards
Devarsh
  
Jai Luthra Aug. 2, 2023, 11:40 a.m. UTC | #2
Hi Devarsh,

On Aug 02, 2023 at 16:15:12 +0530, Devarsh Thakkar wrote:
> Hi Jai,
> 
> Thanks for the patch.
> 
> On 31/07/23 18:14, Jai Luthra wrote:
> > Add nodes for audio codec and sound card, enable the audio serializer
> > (McASP1) under use and update pinmux.
> > 
> > Link: https://www.ti.com/lit/zip/sprr459
> > Signed-off-by: Jai Luthra <j-luthra@ti.com>
> > Reviewed-by: Jayesh Choudhary <j-choudhary@ti.com>
> > ---
> >  arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 77 +++++++++++++++++++++++++++++++++
> >  1 file changed, 77 insertions(+)
> > 
> > diff --git a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > index 752c2f640f63..5f68d2eefe0f 100644
> > --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > +++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > @@ -125,6 +125,41 @@ led-0 {
> >  			default-state = "off";
> >  		};
> >  	};
> > +
> > +	tlv320_mclk: clk-0 {
> > +		#clock-cells = <0>;
> > +		compatible = "fixed-clock";
> > +		clock-frequency = <12288000>;
> > +	};
> > +
> > +	codec_audio: sound {
> > +		compatible = "simple-audio-card";
> > +		simple-audio-card,name = "AM62Ax-SKEVM";
> 
> In my opinion better to give the codec name instead of board name here.

I agree, maybe calling it "sk-am62a-tlv320aic3106" would be the most 
clear option.

Running a quick ripgrep on next tree:

$ rg "simple-audio-card,name" arch/*/boot/dts/

I see a healthy mix of using both board and/or codec name here - with TI 
almost always using the board name. Maybe we can change the convention, 
but it would be a good idea to at least update SK-AM62 as well to use 
the new convention.

Is it okay with you if it is handled as a separate series?

> 
> Regards
> Devarsh
  
Nishanth Menon Aug. 2, 2023, 1:35 p.m. UTC | #3
On 17:10-20230802, Jai Luthra wrote:
> Hi Devarsh,
> 
> On Aug 02, 2023 at 16:15:12 +0530, Devarsh Thakkar wrote:
> > Hi Jai,
> > 
> > Thanks for the patch.
> > 
> > On 31/07/23 18:14, Jai Luthra wrote:
> > > Add nodes for audio codec and sound card, enable the audio serializer
> > > (McASP1) under use and update pinmux.
> > > 
> > > Link: https://www.ti.com/lit/zip/sprr459
> > > Signed-off-by: Jai Luthra <j-luthra@ti.com>
> > > Reviewed-by: Jayesh Choudhary <j-choudhary@ti.com>
> > > ---
> > >  arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 77 +++++++++++++++++++++++++++++++++
> > >  1 file changed, 77 insertions(+)
> > > 
> > > diff --git a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > > index 752c2f640f63..5f68d2eefe0f 100644
> > > --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > > +++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > > @@ -125,6 +125,41 @@ led-0 {
> > >  			default-state = "off";
> > >  		};
> > >  	};
> > > +
> > > +	tlv320_mclk: clk-0 {
> > > +		#clock-cells = <0>;
> > > +		compatible = "fixed-clock";
> > > +		clock-frequency = <12288000>;
> > > +	};
> > > +
> > > +	codec_audio: sound {
> > > +		compatible = "simple-audio-card";
> > > +		simple-audio-card,name = "AM62Ax-SKEVM";
> > 
> > In my opinion better to give the codec name instead of board name here.
> 
> I agree, maybe calling it "sk-am62a-tlv320aic3106" would be the most 
> clear option.
> 
> Running a quick ripgrep on next tree:
> 
> $ rg "simple-audio-card,name" arch/*/boot/dts/
> 
> I see a healthy mix of using both board and/or codec name here - with TI 
> almost always using the board name. Maybe we can change the convention, 
> but it would be a good idea to at least update SK-AM62 as well to use 
> the new convention.
> 
> Is it okay with you if it is handled as a separate series?

Will this cleanup of existing board break any userspace? If so, NO and
follow existing "board" convention - I'd like to maintain consistency,
even if that is not exactly clean! If not, cleanup in a later series
is fine, but please make sure to follow through this week - with this
patch following the convention of choice.
  
Devarsh Thakkar Aug. 2, 2023, 2:39 p.m. UTC | #4
Hi Jai, Nishant,

On 02/08/23 19:05, Nishanth Menon wrote:
> On 17:10-20230802, Jai Luthra wrote:
>> Hi Devarsh,
>>
>> On Aug 02, 2023 at 16:15:12 +0530, Devarsh Thakkar wrote:
>>> Hi Jai,
>>>
>>> Thanks for the patch.
>>>
>>> On 31/07/23 18:14, Jai Luthra wrote:
>>>> Add nodes for audio codec and sound card, enable the audio serializer
>>>> (McASP1) under use and update pinmux.
>>>>
>>>> Link: https://www.ti.com/lit/zip/sprr459
>>>> Signed-off-by: Jai Luthra <j-luthra@ti.com>
>>>> Reviewed-by: Jayesh Choudhary <j-choudhary@ti.com>
>>>> ---
>>>>  arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 77 +++++++++++++++++++++++++++++++++
>>>>  1 file changed, 77 insertions(+)
>>>>
>>>> diff --git a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
>>>> index 752c2f640f63..5f68d2eefe0f 100644
>>>> --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
>>>> +++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
>>>> @@ -125,6 +125,41 @@ led-0 {
>>>>  			default-state = "off";
>>>>  		};
>>>>  	};
>>>> +
>>>> +	tlv320_mclk: clk-0 {
>>>> +		#clock-cells = <0>;
>>>> +		compatible = "fixed-clock";
>>>> +		clock-frequency = <12288000>;
>>>> +	};
>>>> +
>>>> +	codec_audio: sound {
>>>> +		compatible = "simple-audio-card";
>>>> +		simple-audio-card,name = "AM62Ax-SKEVM";
>>>
>>> In my opinion better to give the codec name instead of board name here.
>>
>> I agree, maybe calling it "sk-am62a-tlv320aic3106" would be the most 
>> clear option.
>>
>> Running a quick ripgrep on next tree:
>>
>> $ rg "simple-audio-card,name" arch/*/boot/dts/
>>
>> I see a healthy mix of using both board and/or codec name here - with TI 
>> almost always using the board name. Maybe we can change the convention, 
>> but it would be a good idea to at least update SK-AM62 as well to use 
>> the new convention.
>>
>> Is it okay with you if it is handled as a separate series?
> 

Yes agreed, the naming can be taken care of as separate series as it also
applies to other TI board (AM62x), we can brainstorm on the naming separately
and not block this patch.

Reviewed-by: Devarsh Thakkar <devarsht@ti.com>

Regards
Devarsh

> Will this cleanup of existing board break any userspace? If so, NO and
> follow existing "board" convention - I'd like to maintain consistency,
> even if that is not exactly clean! If not, cleanup in a later series
> is fine, but please make sure to follow through this week - with this
> patch following the convention of choice.
>
  
Jai Luthra Aug. 3, 2023, 5:42 a.m. UTC | #5
Hi Nishanth, Devarsh,

On Aug 02, 2023 at 08:35:02 -0500, Nishanth Menon wrote:
> On 17:10-20230802, Jai Luthra wrote:
> > Hi Devarsh,
> > 
> > On Aug 02, 2023 at 16:15:12 +0530, Devarsh Thakkar wrote:
> > > Hi Jai,
> > > 
> > > Thanks for the patch.
> > > 
> > > On 31/07/23 18:14, Jai Luthra wrote:
> > > > Add nodes for audio codec and sound card, enable the audio serializer
> > > > (McASP1) under use and update pinmux.
> > > > 
> > > > Link: https://www.ti.com/lit/zip/sprr459
> > > > Signed-off-by: Jai Luthra <j-luthra@ti.com>
> > > > Reviewed-by: Jayesh Choudhary <j-choudhary@ti.com>
> > > > ---
> > > >  arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 77 +++++++++++++++++++++++++++++++++
> > > >  1 file changed, 77 insertions(+)
> > > > 
> > > > diff --git a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > > > index 752c2f640f63..5f68d2eefe0f 100644
> > > > --- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > > > +++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
> > > > @@ -125,6 +125,41 @@ led-0 {
> > > >  			default-state = "off";
> > > >  		};
> > > >  	};
> > > > +
> > > > +	tlv320_mclk: clk-0 {
> > > > +		#clock-cells = <0>;
> > > > +		compatible = "fixed-clock";
> > > > +		clock-frequency = <12288000>;
> > > > +	};
> > > > +
> > > > +	codec_audio: sound {
> > > > +		compatible = "simple-audio-card";
> > > > +		simple-audio-card,name = "AM62Ax-SKEVM";
> > > 
> > > In my opinion better to give the codec name instead of board name here.
> > 
> > I agree, maybe calling it "sk-am62a-tlv320aic3106" would be the most 
> > clear option.
> > 
> > Running a quick ripgrep on next tree:
> > 
> > $ rg "simple-audio-card,name" arch/*/boot/dts/
> > 
> > I see a healthy mix of using both board and/or codec name here - with TI 
> > almost always using the board name. Maybe we can change the convention, 
> > but it would be a good idea to at least update SK-AM62 as well to use 
> > the new convention.
> > 
> > Is it okay with you if it is handled as a separate series?
> 
> Will this cleanup of existing board break any userspace? If so, NO and
> follow existing "board" convention - I'd like to maintain consistency,
> even if that is not exactly clean!

Upon further inspection, yes changing existing boards can break 
userspace applications as some procfs entries are enumerated with the 
name of the soundcard. So updating AM62x is out of the question.

I am in favor of maintaining naming consistency with this board.

Devarsh, I notice the current scheme is not entirely opaque, as the pcm 
device enumerates both the cpu & codec driver names:

root@am62xx-evm:~# aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default:CARD=AM62xSKEVM
    AM62x-SKEVM, davinci-mcasp.0-tlv320aic3x-hifi tlv320aic3x-hifi-0
    Default Audio Device
sysdefault:CARD=AM62xSKEVM
    AM62x-SKEVM, davinci-mcasp.0-tlv320aic3x-hifi tlv320aic3x-hifi-0
    Default Audio Device

> If not, cleanup in a later series is fine, but please make sure to 
> follow through this week - with this patch following the convention of 
> choice.
> 

Please feel free to pull the current series, if no further comments.

> -- 
> Regards,
> Nishanth Menon
> Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3  1A34 DDB5 849D 1736 249D
  

Patch

diff --git a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
index 752c2f640f63..5f68d2eefe0f 100644
--- a/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts
@@ -125,6 +125,41 @@  led-0 {
 			default-state = "off";
 		};
 	};
+
+	tlv320_mclk: clk-0 {
+		#clock-cells = <0>;
+		compatible = "fixed-clock";
+		clock-frequency = <12288000>;
+	};
+
+	codec_audio: sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "AM62Ax-SKEVM";
+		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 = <&tlv320_mclk>;
+		};
+	};
 };
 
 &mcu_pmx0 {
@@ -230,6 +265,15 @@  AM62AX_IOPAD(0x130, PIN_INPUT, 0) /* (AB17) RGMII1_TXC */
 			AM62AX_IOPAD(0x12c, PIN_INPUT, 0) /* (W16) RGMII1_TX_CTL */
 		>;
 	};
+
+	main_mcasp1_pins_default: main-mcasp1-pins-default {
+		pinctrl-single,pins = <
+			AM62AX_IOPAD(0x090, PIN_INPUT, 2) /* (L19) GPMC0_BE0n_CLE.MCASP1_ACLKX */
+			AM62AX_IOPAD(0x098, PIN_INPUT, 2) /* (R18) GPMC0_WAIT0.MCASP1_AFSX */
+			AM62AX_IOPAD(0x08c, PIN_OUTPUT, 2) /* (K19) GPMC0_WEn.MCASP1_AXR0 */
+			AM62AX_IOPAD(0x084, PIN_INPUT, 2) /* (L18) GPMC0_ADVn_ALE.MCASP1_AXR2 */
+		>;
+	};
 };
 
 &mcu_pmx0 {
@@ -359,6 +403,19 @@  exp1: gpio@22 {
 				   "MCASP1_FET_SEL", "UART1_FET_SEL",
 				   "PD_I2C_IRQ", "IO_EXP_TEST_LED";
 	};
+
+	tlv320aic3106: audio-codec@1b {
+		#sound-dai-cells = <0>;
+		compatible = "ti,tlv320aic3106";
+		reg = <0x1b>;
+		ai3x-micbias-vg = <1>;	/* 2.0V */
+
+		/* Regulators */
+		AVDD-supply = <&vcc_3v3_sys>;
+		IOVDD-supply = <&vcc_3v3_sys>;
+		DRVDD-supply = <&vcc_3v3_sys>;
+		DVDD-supply = <&buck5>;
+	};
 };
 
 &sdhci1 {
@@ -434,3 +491,23 @@  cpsw3g_phy0: ethernet-phy@0 {
 		ti,min-output-impedance;
 	};
 };
+
+&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
+	>;
+	tx-num-evt = <32>;
+	rx-num-evt = <32>;
+};