Armbian: how to modify the DTS file to make I2S capture work?

I modified DTS file like this, and it can be compiled correct:

	sound {
		compatible = "amlogic,axg-sound-card";
		model = "G12B-KHADAS-VIM3";
		audio-aux-devs = <&tdmout_a>,<&tdmin_b>;
		audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
				"TDMOUT_A IN 1", "FRDDR_B OUT 0",
				"TDMOUT_A IN 2", "FRDDR_C OUT 0",
				"TDM_A Playback", "TDMOUT_A OUT",
				 //I2S input route
				"TDMIN_B IN 1", "TDM_B Capture",
				"TDMIN_B IN 4", "TDM_B Loopback",
				"TODDR_A IN 1", "TDMIN_B OUT",
				"TODDR_B IN 1", "TDMIN_B OUT",
				"TODDR_C IN 1", "TDMIN_B OUT";
	
		assigned-clocks = <&clkc CLKID_MPLL2>,
				  <&clkc CLKID_MPLL0>,
				  <&clkc CLKID_MPLL1>;
		assigned-clock-parents = <0>, <0>, <0>;
		assigned-clock-rates = <294912000>,
				       <270950400>,
				       <393216000>;
		status = "okay";
	
		dai-link-0 {
			sound-dai = <&frddr_a>;
		};
	
		dai-link-1 {
			sound-dai = <&frddr_b>;
		};
	
		dai-link-2 {
			sound-dai = <&frddr_c>;
		};
	
		/* 8ch hdmi interface */
		dai-link-3 {
			sound-dai = <&tdmif_a>;
			dai-format = "i2s";
			dai-tdm-slot-tx-mask-0 = <1 1>;
			dai-tdm-slot-tx-mask-1 = <1 1>;
			dai-tdm-slot-tx-mask-2 = <1 1>;
			dai-tdm-slot-tx-mask-3 = <1 1>;
			mclk-fs = <256>;
	
			codec {
				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
			};
		};
	
		/* hdmi glue */
		dai-link-4 {
			sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
	
			codec {
				sound-dai = <&hdmi_tx>;
			};
		};
		//I2S TDMB capture
		dai-link-5 {
			sound-dai = <&toddr_a>;
		};
		
		dai-link-6 {
			sound-dai = <&toddr_b>;
		};
		
		dai-link-7 {
			sound-dai = <&toddr_c>;
		};
		
		/* 8ch hdmi interface */
		dai-link-8 {
			sound-dai = <&tdmif_b>;
			dai-format = "i2s";
			dai-tdm-slot-rx-mask-0 = <1 1>;
			dai-tdm-slot-rx-mask-1 = <1 1>;
			//dai-tdm-slot-rx-mask-2 = <1 1>;
			//dai-tdm-slot-rx-mask-3 = <1 1>;
			mclk-fs = <256>;
		
			codec@0 {
				sound-dai = <&tdm_b_din0_pins>;
			};
	
			codec@1 {
				sound-dai = <&tdm_b_din1_pins>;
			};
	
		};
	
	};
};
&tdmin_b {
	status = "okay";
};

&tdmif_b {
	status = "okay";
};

&toddr_a {
	status = "okay";
};

&toddr_b {
	status = "okay";
};

&toddr_c {
	status = "okay";
};

But it can’ work, alsamixer returns with this:

root@khadas-vim3l:~# alsamixer
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib control.c:1528:(snd_ctl_open_noupdate) Invalid CTL default
cannot open mixer: No such file or directory
root@khadas-vim3l:~#

Please help to make I2S capture work!

I think the problem is caused here, no such as “linein: audio-codec-0” modules can be find in the source.

This example is come from “amlogic,axg-sound-card.txt”

sound {
	compatible = "amlogic,axg-sound-card";
	model = "AXG-S420";
	audio-aux-devs = <&tdmin_a>, <&tdmout_c>;
	audio-widgets = "Line", "Lineout", 
			"Line", "Linein",
			"Speaker", "Speaker1 Left",
			"Speaker", "Speaker1 Right";
			"Speaker", "Speaker2 Left",
			"Speaker", "Speaker2 Right";
	audio-routing = "TDMOUT_C IN 0", "FRDDR_A OUT 2",
			"SPDIFOUT IN 0", "FRDDR_A OUT 3",
			"TDM_C Playback", "TDMOUT_C OUT",
			"TDMIN_A IN 2", "TDM_C Capture",
			"TDMIN_A IN 5", "TDM_C Loopback",
			"TODDR_A IN 0", "TDMIN_A OUT",
			"Lineout", "Lineout AOUTL",
			"Lineout", "Lineout AOUTR",
			"Speaker1 Left", "SPK1 OUT_A",
			"Speaker2 Left", "SPK2 OUT_A",
			"Speaker1 Right", "SPK1 OUT_B",
			"Speaker2 Right", "SPK2 OUT_B",
			"Linein AINL", "Linein",
			"Linein AINR", "Linein";

	dai-link@0 {
		sound-dai = <&frddr_a>;
	};

	dai-link@1 {
		sound-dai = <&toddr_a>;
	};

	dai-link@2 {
		sound-dai = <&tdmif_c>;
		dai-format = "i2s";
		dai-tdm-slot-tx-mask-2 = <1 1>;
		dai-tdm-slot-tx-mask-3 = <1 1>;
		dai-tdm-slot-rx-mask-1 = <1 1>;
		mclk-fs = <256>;

		codec@0 {
			sound-dai = <&lineout>;
		};

		codec@1 {
			sound-dai = <&speaker_amp1>;
		};

		codec@2 {
			sound-dai = <&speaker_amp2>;
		};

		codec@3 {
			sound-dai = <&linein>;
		};

	};

	dai-link@3 {
		sound-dai = <&spdifout>;

		codec {
			sound-dai = <&spdif_dit>;
		};
	};
};

But for vim3 or vim3l, no module “linein” can be found.

Amlogic Meson AXG S400 Development Board
can find such module

	linein: audio-codec-0 {
		#sound-dai-cells = <0>;
		compatible = "everest,es7241";
		VDDA-supply = <&vcc_3v3>;
		VDDP-supply = <&vcc_3v3>;
		VDDD-supply = <&vcc_3v3>;
		status = "okay";
		sound-name-prefix = "Linein";
	};

	lineout: audio-codec-1 {
		#sound-dai-cells = <0>;
		compatible = "everest,es7154";
		VDD-supply = <&vcc_3v3>;
		PVDD-supply = <&vcc_5v>;
		status = "okay";
		sound-name-prefix = "Lineout";
	};

	spdif_dit: audio-codec-2 {
		#sound-dai-cells = <0>;
		compatible = "linux,spdif-dit";
		status = "okay";
		sound-name-prefix = "DIT";
	};

	dmics: audio-codec-3 {
		#sound-dai-cells = <0>;
		compatible = "dmic-codec";
		num-channels = <7>;
		wakeup-delay-ms = <50>;
		status = "okay";
		sound-name-prefix = "MIC";
	};


So, Where are you?

I think on a long Easter weekend.