Hello,
In the previous project using TX2 (last year), I changed well I2S mode from default master to slave for our application purpose.
At now project doing the similar work using Xavier, however, I cannot change the mode.
My method for changing the mode and validating the result is like this.
- modify sound node in the dts file to change into slave mode
- compile dts file to dtb file.
- flash the dtb file to TX2/Xavier developer kit
- play a wav file using alsa aplay util in the developer kit and check if clock/fs signal is quiet (because of no master ic connected)
Then, with TX2 developer kit I have repeated the same experiment over the several versions of JetPack (of course including L4T version associated).
JetPack of TX2 with no problem was old version, but this Xavier JetPack is latest.
So I suspected JetPack version is related with the problem.
The result is as follows:
TX2 JetPack 4.2.2 (+ L4T r32.2.1) => NG
TX2 JetPack 4.2 (+ L4T r32.1) => NG
TX2 JetPack 3.3 (+ L4T r28.2.1) => OK
TX2 JetPack 3.2.1 (+ L4T r28.2.1) => OK
As you know, because Xavier JetPack is supported from v4.2, I could not check JetPack 3.x of Xavier.
Please help me solve the problem in the latest JetPack of both TX2 and Xavier.
For your reference I attach DTS Sound node portion I modified (TX2 case) and the test script for playing wav file in developer kit.
<tegra186-quill-common.dtsi>
rt565x_dai_link: nvidia,dai-link-1 {
link-name = “rt565x-playback”;
cpu-dai = <&tegra_i2s1>;
codec-dai = <&spdif_dit0>;
cpu-dai-name = “I2S1”;
codec-dai-name = “dit-hifi”;
format = “dsp_a”; /org: “i2s”;/
bitclock-master; /org: none/
frame-master; /org: none/
bitclock-inversion; /org: none/
frame-noninversion; /org: none/
bit-format = “s32_le”; /org: “s16_le”;/
bclk_ratio = <1>; /org: <0>;/
srate = <48000>;
num-channel = <16>; /org: <2>;/
tx-mask=<0xFFFF>; /org: none/
rx-mask=<0xFFFF>; /org: none/
ignore_suspend;
name-prefix = “x”;
status = “okay”;
};
nvidia,dai-link-2 {
link-name = “spdif-dit-1”;
cpu-dai = <&tegra_i2s2>;
codec-dai = <&spdif_dit1>;
cpu-dai-name = “I2S2”;
codec-dai-name = “dit-hifi”;
format = “dsp_a”; /org: “i2s”;/
bitclock-master; /org: none/
frame-master; /org: none/
bitclock-inversion; /org: none/
frame-noninversion; /org: none/
bit-format = “s32_le”; /org: “s16_le”;/
bclk_ratio = <1>;
srate = <48000>;
num-channel = <16>; /org: <2>;/
tx-mask=<0xFFFF>; /org: none/
rx-mask=<0xFFFF>; /org: none/
ignore_suspend;
name-prefix = “y”;
status = “okay”;
};
nvidia,dai-link-3 {
link-name = “spdif-dit-2”;
cpu-dai = <&tegra_i2s3>;
codec-dai = <&spdif_dit2>;
cpu-dai-name = “I2S3”;
codec-dai-name = “dit-hifi”;
format = “dsp_a”; /org: “i2s”;/
bitclock-master; /org: none/
frame-master; /org: none/
bitclock-inversion; /org: none/
frame-noninversion; /org: none/
bit-format = “s32_le”; /org: “s16_le”;/
bclk_ratio = <1>;
srate = <48000>;
num-channel = <16>; /org: <2>;/
tx-mask=<0xFFFF>; /org: none/
rx-mask=<0xFFFF>; /org: none/
ignore_suspend;
name-prefix = “z”;
status = “okay”;
};
nvidia,dai-link-4 {
link-name = “spdif-dit-3”;
cpu-dai = <&tegra_i2s4>;
codec-dai = <&spdif_dit3>;
cpu-dai-name = “I2S4”;
codec-dai-name = “dit-hifi”;
format = “dsp_a”; /org: “i2s”;/
bitclock-master; /org: none/
frame-master; /org: none/
bitclock-inversion; /org: none/
frame-noninversion; /org: none/
bit-format = “s32_le”; /org: “s16_le”;/
bclk_ratio = <1>;
srate = <48000>;
num-channel = <16>; /org: <2>;/
tx-mask=<0xFFFF>; /org: none/
rx-mask=<0xFFFF>; /org: none/
ignore_suspend;
name-prefix = “m”;
status = “okay”;
};
<test.sh>
amixer -c tegrasndt186ref cset name=“I2S1 Channels” “16”
amixer -c tegrasndt186ref cset name=“I2S1 Mux” “ADMAIF1”
aplay -D hw:tegrasndt186ref,0 test.wav