Hi all,
I have a new problem. Can you help me?
I am trying to work imx8qx's sai0 output. At software side everything looks fine. But I cannot any signal sai0's output with oscilloscope. My working stages at below.
Then I configure my device-tree :
sound {
compatible = "simple-audio-card";
simple-audio-card,bitclock-master = <&dailink_master>;
simple-audio-card,format = "i2s";
simple-audio-card,frame-master = <&dailink_master>;
simple-audio-card,name = "tas2770-Audio";
dailink_master: simple-audio-card,codec {
sound-dai = <&codec>;
clocks = <&mclkout0_lpcg 0>;
};
cpusai: simple-audio-card,cpu {
sound-dai = <&sai0>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
};
};
&i2c1 {
codec: tas2770@41 {
compatible = "ti,tas2770";
#sound-dai-cells = <0>;
assigned-clocks = <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>,
<&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>,
<&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>,
<&mclkout0_lpcg 0>;
assigned-clock-rates = <786432000>, <49152000>, <12000000>, <12000000>;
clocks = <&mclkout0_lpcg 0>;
clock-names = "mclk";
reg = <0x41>;
ti,asi-format = <0>;
ti,left-slot = <0>;
ti,right-slot = <1>;
ti,imon-slot-no = <0>;
ti,vmon-slot-no = <2>;
#address-cells = <1>;
#size-cells = <0>;
ti,reset-gpio = <&portexp 19 GPIO_ACTIVE_LOW>;
ti,irq-gpio = <&lsio_gpio3 0 GPIO_ACTIVE_LOW>;
};
};
&sai0 {
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai0>;
status = "okay";
fsl,sai-asynchronous;
};
pinctrl_sai0: sai0grp {
fsl,pins = <
IMX8QXP_SPI0_SDI_ADMA_SAI0_TXD 0x06000040
IMX8QXP_SPI0_SCK_ADMA_SAI0_TXC 0x06000040
IMX8QXP_SPI0_SDO_ADMA_SAI0_TXFS 0x06000040
>;
};
@@ -252,6 +252,20 @@ void board_init(boot_phase_t phase)
/* Configure SNVS button timing (ON->OFF 5s, OFF->ON 100ms) */
SNVS_ButtonTime(SNVS_DRV_BTN_ON_100MS, SNVS_DRV_BTN_DEBOUNCE_100MS, SNVS_DRV_BTN_PRESS_5S);
+ pad_force_mux(SC_P_SPI0_SDO, 1, SC_PAD_CONFIG_OUT_IN,
+ SC_PAD_ISO_OFF);
+
+ pad_force_mux(SC_P_SPI0_SCK, 1, SC_PAD_CONFIG_OUT_IN,
+ SC_PAD_ISO_OFF);
+
+ pad_force_mux(SC_P_SPI0_SDI, 1, SC_PAD_CONFIG_OUT_IN,
+ SC_PAD_ISO_OFF);
+
+ pad_force_mux(SC_P_SPI0_CS0, 1, SC_PAD_CONFIG_OUT_IN,
+ SC_PAD_ISO_OFF);
+
+ board_print(3, "%s(BOOT_PHASE_FINAL_INIT SAI pins configurated - %u)\n", __func__, (unsigned)phase);
+
break;
case BOOT_PHASE_TEST_INIT: /* Init HW required for unit tests */
board_print(3, "%s(BOOT_PHASE_TEST_INIT - %u)\n", __func__, (unsigned)phase);
root@tqma8xqp-mba8xx:~# dmesg | grep tas27
[ 2.219460] tas2770 16-0041: tas2770_i2c_probe enter
[ 2.224527] tas2770 16-0041: ti,asi-format=0
[ 2.224551] tas2770 16-0041: ti,reset-gpio=507
[ 2.224568] tas2770 16-0041: ti,irq-gpio=96
[ 2.224574] tas2770 16-0041: ti,left-slot=0
[ 2.224580] tas2770 16-0041: ti,right-slot=1
[ 2.224586] tas2770 16-0041: ti,imon-slot-no=0
[ 2.224592] tas2770 16-0041: ti,vmon-slot-no=2
[ 2.224610] tas2770 16-0041: irq = 233
[ 2.261280] tas2770 16-0041: tas2770_register_codec, enter
[ 3.716892] tas2770 16-0041: tas2770_codec_probe
[ 3.721583] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0xa
[ 3.721593] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0xa
[ 3.721602] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0xa
[ 3.721610] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0xa
[ 3.721623] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 3.721632] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 3.721641] debugfs: Directory '59040000.sai' with parent 'tas2770-Audio' already present!
[ 3.729954] tas2770 16-0041: tas2770_set_dai_fmt, format=0x1001
[ 3.729960] tas2770 16-0041: ASI format master is not found
[ 3.735543] tas2770 16-0041: INV format: NBNF
[ 3.735551] tas2770 16-0041: tas2770_codec_read, reg: 0xb, value: 0x2
[ 3.735558] tas2770 16-0041: tas2770_codec_read, reg: 0xb, value: 0x2
[ 3.735565] tas2770 16-0041: tas2770_codec_read, reg: 0xd, value: 0x10
[ 3.735571] tas2770 16-0041: tas2770_codec_read, reg: 0xd, value: 0x10
[ 3.735578] tas2770 16-0041: tas2770_codec_read, reg: 0xd, value: 0x10
[ 3.735583] tas2770 16-0041: slot value: 0x10
[ 3.735667] asoc-simple-card sound: tas2770 ASI1 <-> 59040000.sai mapping ok
[ 3.748553] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 3.748584] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 4.114813] #0: tas2770-Audio
[ 8.532424] tas2770 16-0041: tas2770_codec_read, reg: 0x3, value: 0x10
[ 8.537366] tas2770 16-0041: tas2770_codec_write, reg: 0x3, 0x14
[ 8.537509] tas2770 16-0041: tas2770_codec_read, reg: 0x5, value: 0x0
[ 8.537546] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0xa
[ 8.537573] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0xa
[ 8.537880] tas2770 16-0041: tas2770_codec_write, reg: 0xc, 0x1a
[ 8.537923] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 8.537956] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 8.599187] tas2770 16-0041: tas2770_codec_read, reg: 0x3, value: 0x14
[ 8.599235] tas2770 16-0041: tas2770_codec_read, reg: 0x5, value: 0x0
[ 8.599266] tas2770 16-0041: tas2770_codec_read, reg: 0xc, value: 0x1a
[ 8.599290] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
[ 8.599313] tas2770 16-0041: tas2770_codec_read, reg: 0x2, value: 0xe
root@tqma8xqp-mba8xx:~# aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=tas2770Audio
tas2770-Audio,
Default Audio Device
usbstream:CARD=tas2770Audio
tas2770-Audio
USB Stream Output
root@tqma8xqp-mba8xx:~# speaker-test
speaker-test 1.1.9
Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 3840 to 5760
Period size range from 1920 to 1920
Using max buf[f e r20 s7i.z7e6 09577610]
tPaesr27i7od0s 1=6- 400
4w1a:s isrqet_ wpoerrki_ordou_stiiznee
= 1920
was set buffer_size = 5760
0 - Front Left
[ 207.775724] tas2770 16-0041: IRQ status : 0x4, 0x0
I cannot see any digital signal at my som's sai0 pins via oscilloscope.
I wam waiting for your helps.
Thanks.
Solved! Go to Solution.
Hi yildizberat
one can look at wm8960 example
and Figure 27. ALSA SoC Software Architecture i.MX Linux Reference Manual
Best regards
igor
I wrote a simple machine driver and now it works.
Hi,
I think I have the same problem:
On a custom board I'm using a really simple codec (sgtl5000), connected via sai0 to an imx8qxp soc.
My audio codec plays well with 4.19 kernel, but with Yocto kernel 5.4.70 I can't see any signal (clock and data) on I2S bus.
At boot my codec is correctly recognized and linked to the sai0 controller.
With 5.4 kernel I can run "aplay test.vaw", but using the scope I can't see any signal at all.
Can you please clarify what have you correct in your machine driver ?
Really many thanks in advance.
Giuseppe
Hi yildizberat
one can look at wm8960 example
and Figure 27. ALSA SoC Software Architecture i.MX Linux Reference Manual
Best regards
igor