Other Parts Discussed in Thread: TAS5802, PCM5102A,
Tool/software:
Hi all,
I've been trying to set up mcasp2 on the AM6254 as master, using an external 24.576MHz clock that feeds AUDIO_EXT_REFCLK0 input of the SoC on ball AE22.
The codec on our custom board is a TAS5802, and MCASP2 drives ACLKX, AFSX and AXR0. For the scope of this question I used a PCM5102a and would like to observe the signals on a scope with either aplay or speaker-test, leaving the TAS5802 as a topic for a separate question.
aplay -l shows:
**** List of PLAYBACK Hardware Devices ****
card 0: InternalSpeaker [Internal-Speaker], device 0: davinci-mcasp.0-pcm5102a-hifi pcm5102a-hifi-0 [davinci-mcasp.0-pcm5102a-hifi pcm5102a-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
And I can execute play -D plughw:0,0 -c 2 -r 48000 -f S16_LE /dev/zero apparently without errors.
Attaching a scope probe into the MCASP2 signals I get:
ACLKX: 6.25MHz
AFSX: 192.315kHz
The framing seems correct: 32 bit clocks per frame, or 2 tdm slots per frame, but the base clock is clearly derived from the system clock (25M/4) while I'd like to see it derived from the 24.576M REFCLK0
At this point this is the relevant portion of my device tree:
/ { fixed_audio_refclk: clk-0 { status = "okay"; #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24576000>; }; pcm5102a: pcm5102a { compatible = "ti,pcm5102a"; #sound-dai-cells = <0>; }; board_speakers: sound { compatible = "simple-audio-card"; simple-audio-card,name = "Internal-Speaker"; simple-audio-card,bitclock-master = <&mcasp2>; simple-audio-card,frame-master = <&mcasp2>; simple-audio-card,format = "i2s"; simple-audio-card,bitclock-inversion; simple-audio-card,cpu { sound-dai = <&mcasp2>; system-clock-frequency = <24576000>; system-clock-direction-out; }; simple-audio-card,codec { sound-dai = <&pcm5102a>; }; }; }; &main_pmx0 { pinctrl-names = "default"; pinctrl-0 = <&board_pins_refclk>; board_pins_mcasp2: board-pins-mcasp2 { pinctrl-single,pins = < AM62X_IOPAD(0xf41d0, PIN_OUTPUT, 8) /* [Speaker_Audio_FSYNC] (A15) UART0_CTSn.MCASP2_AFSX */ AM62X_IOPAD(0xf41d4, PIN_OUTPUT, 8) /* [Speaker_Audio_CLK] (B15) UART0_RTSn.MCASP2_ACLKX */ AM62X_IOPAD(0xf41d8, PIN_OUTPUT, 8) /* [Speaker_Audio_OUT] (C15) MCAN0_TX.MCASP2_AXR0 */ >; }; board_pins_refclk: board-pins-refclk { pinctrl-single,pins = < AM62X_IOPAD(0xf4190, PIN_INPUT, 2) /* [Audio_EXT_Refclk0] (AE22) RGMII2_RD3.AUDIO_EXT_REFCLK0 */ AM62X_IOPAD(0xf41f0, PIN_INPUT, 0) /* [Ext_Refclk1] (A18) EXT_REFCLK1.EXT_REFCLK1 */ AM62X_IOPAD(0xf413c, PIN_OUTPUT, 7) /* [Audio_Refclk_Enable] (AE18) RGMII1_TD2.GPIO0_77 */ >; }; }; &main_gpio0 { audio_refclk_enable { gpio-hog; gpios = <77 GPIO_ACTIVE_HIGH>; output-high; }; }; &mcasp2 { status = "okay"; #sound-dai-cells = <0>; /* CLOCKS: * BOARD_AUDIO_EXT_REFCLK0 <192 12> --> AHCLKR IN <192 9> * BOARD_AUDIO_EXT_REFCLK0 <192 18> --> AHCLKX IN <192 15> * REFCLK runs at 24,576 MHz */ assigned-clocks = <&k3_clks 192 9>, <&k3_clks 192 15>; assigned-clock-parents = <&k3_clks 192 12>, <&k3_clks 192 18>; assigned-clock-rates = <24576000>, <24576000>; pinctrl-names = "default"; pinctrl-0 = <&board_pins_mcasp2>; op-mode = <0>; /* MCASP_IIS_MODE */ tdm-slots = <2>; serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >; tx-num-evt = <0>; rx-num-evt = <0>; };
k3conf output for the MCASP2 clocks
k3conf dump clocks 192 |------------------------------------------------------------------------------| | VERSION INFO | |------------------------------------------------------------------------------| | K3CONF | (version 0.3-nogit built Thu Jul 25 14:13:02 UTC 2024) | | SoC | AM62X SR1.0 | | SYSFW | ABI: 4.0 (firmware version 0x000a '10.1.8--v10.01.08 (Fiery Fox))') | |------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------------------------------------| | Device ID | Clock ID | Clock Name | Status | Clock Frequency | |-----------------------------------------------------------------------------------------------------------------------------| | 192 | 0 | DEV_MCASP2_AUX_CLK | CLK_STATE_READY | 100000000 | | 192 | 1 | DEV_MCASP2_AUX_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT8_CLK | CLK_STATE_READY | 100000000 | | 192 | 2 | DEV_MCASP2_AUX_CLK_PARENT_POSTDIV1_16FFT_MAIN_1_HSDIVOUT6_CLK | CLK_STATE_READY | 96000000 | | 192 | 3 | DEV_MCASP2_MCASP_ACLKR_PIN | CLK_STATE_READY | 0 | | 192 | 4 | DEV_MCASP2_MCASP_ACLKR_POUT | CLK_STATE_READY | 0 | | 192 | 5 | DEV_MCASP2_MCASP_ACLKX_PIN | CLK_STATE_READY | 0 | | 192 | 6 | DEV_MCASP2_MCASP_ACLKX_POUT | CLK_STATE_READY | 0 | | 192 | 7 | DEV_MCASP2_MCASP_AFSR_POUT | CLK_STATE_READY | 0 | | 192 | 8 | DEV_MCASP2_MCASP_AFSX_POUT | CLK_STATE_READY | 0 | | 192 | 9 | DEV_MCASP2_MCASP_AHCLKR_PIN | CLK_STATE_READY | 0 | | 192 | 10 | DEV_MCASP2_MCASP_AHCLKR_PIN_PARENT_BOARD_0_EXT_REFCLK1_OUT | CLK_STATE_READY | 0 | | 192 | 11 | DEV_MCASP2_MCASP_AHCLKR_PIN_PARENT_GLUELOGIC_HFOSC0_CLKOUT | CLK_STATE_READY | 25000000 | | 192 | 12 | DEV_MCASP2_MCASP_AHCLKR_PIN_PARENT_BOARD_0_AUDIO_EXT_REFCLK0_OUT | CLK_STATE_READY | 0 | | 192 | 13 | DEV_MCASP2_MCASP_AHCLKR_PIN_PARENT_BOARD_0_AUDIO_EXT_REFCLK1_OUT | CLK_STATE_READY | 0 | | 192 | 14 | DEV_MCASP2_MCASP_AHCLKR_POUT | CLK_STATE_READY | 0 | | 192 | 15 | DEV_MCASP2_MCASP_AHCLKX_PIN | CLK_STATE_READY | 0 | | 192 | 16 | DEV_MCASP2_MCASP_AHCLKX_PIN_PARENT_BOARD_0_EXT_REFCLK1_OUT | CLK_STATE_READY | 0 | | 192 | 17 | DEV_MCASP2_MCASP_AHCLKX_PIN_PARENT_GLUELOGIC_HFOSC0_CLKOUT | CLK_STATE_READY | 25000000 | | 192 | 18 | DEV_MCASP2_MCASP_AHCLKX_PIN_PARENT_BOARD_0_AUDIO_EXT_REFCLK0_OUT | CLK_STATE_READY | 0 | | 192 | 19 | DEV_MCASP2_MCASP_AHCLKX_PIN_PARENT_BOARD_0_AUDIO_EXT_REFCLK1_OUT | CLK_STATE_READY | 0 | | 192 | 20 | DEV_MCASP2_MCASP_AHCLKX_POUT | CLK_STATE_READY | 0 | | 192 | 21 | DEV_MCASP2_VBUSP_CLK | CLK_STATE_READY | 250000000 | |-----------------------------------------------------------------------------------------------------------------------------|
And /sys/kernel/debug/clk/clk_summary (mcasp2 and boardclocks only)
cat /sys/kernel/debug/clk/clk_summary enable prepare protect duty hardware connection clock count count count rate accuracy phase cycle enable consumer id --------------------------------------------------------------------------------------------------------------------------------------------- clk:192:19 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:18 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:15 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:17 0 0 0 25000000 0 0 50000 Y deviceless no_connection_id clk:192:16 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:13 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:12 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:9 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:11 0 0 0 25000000 0 0 50000 Y deviceless no_connection_id clk:192:10 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:192:2 0 0 0 96000000 0 0 50000 Y deviceless no_connection_id clk:192:1 0 0 0 100000000 0 0 50000 Y deviceless no_connection_id clk:192:0 0 0 0 100000000 0 0 50000 Y deviceless no_connection_id clk:191:2 0 0 0 96000000 0 0 50000 Y deviceless no_connection_id and: clk:157:166 0 0 0 25000000 0 0 50000 Y deviceless no_connection_id clk:157:165 0 0 0 12500000 0 0 50000 Y deviceless no_connection_id clk:157:164 0 0 0 32768 0 0 50000 Y deviceless no_connection_id clk:157:163 0 0 0 50000000 0 0 50000 Y deviceless no_connection_id clk:157:162 0 0 0 192000000 0 0 50000 Y deviceless no_connection_id clk:157:161 0 0 0 200000000 0 0 50000 Y deviceless no_connection_id clk:157:160 0 0 0 32768 0 0 50000 Y deviceless no_connection_id clk:157:158 0 0 0 32768 0 0 50000 Y deviceless no_connection_id clk:157:159 0 0 0 25000000 0 0 50000 Y deviceless no_connection_id clk:157:18 0 0 0 100000000 0 0 50000 Y deviceless no_connection_id clk:157:10 0 0 0 100000000 0 0 50000 Y deviceless no_connection_id audio_refclk:clk:157:10 0 0 0 100000000 0 0 50000 N deviceless no_connection_id clk:157:17 0 0 0 96000000 0 0 50000 Y deviceless no_connection_id clk:157:16 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:15 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:14 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:13 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:12 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:11 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:8 0 0 0 100000000 0 0 50000 Y deviceless no_connection_id clk:157:0 0 0 0 100000000 0 0 50000 Y deviceless no_connection_id audio_refclk:clk:157:0 0 0 0 100000000 0 0 50000 N deviceless no_connection_id clk:157:7 0 0 0 96000000 0 0 50000 Y deviceless no_connection_id clk:157:6 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:5 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:4 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:3 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:2 0 0 0 0 0 0 50000 Y deviceless no_connection_id clk:157:1 0 0 0 0 0 0 50000 Y deviceless no_connection_id
* How do I let the system know, through the devicetree that fixed_audio_refclk is the input clock to MCASP2?
* Is there anything we should do with the ti,am62-audio-refclk nodes?
If I take the configuration correctly I should have a 48kHz AFSX and 1.536M ACLKX signals. Please advice on which adjustments I need to do on this setup.
Regards,
António