<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic i.MX8M Mini, sai5 with multiple data lines in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/i-MX8M-Mini-sai5-with-multiple-data-lines/m-p/1973681#M229661</link>
    <description>&lt;P&gt;Hi there,&lt;/P&gt;&lt;P&gt;I'm trying to use sai5 in a multi-line configuration on a custom board with an i.MX8M Mini.&lt;/P&gt;&lt;P&gt;There's an audio link between the i.MX8 and a DSP. The bit clock and the frame clock are generated by an external clock generator.&lt;/P&gt;&lt;P&gt;I can play and record audio (8 channels) as long as I use only one data line (RX_DATA0 and TX_DATA0).&lt;/P&gt;&lt;P&gt;The working device tree fragment is the following:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;&amp;amp;sai5 {
	status = "okay";
	fsl,sai-asynchronous;
	#sound-dai-cells = &amp;lt;1&amp;gt;;
};

/ {
	dsp0: fixed_tdm_dummy_codec0 {
		#sound-dai-cells = &amp;lt;1&amp;gt;;
		compatible = "test,fixed_tdm";
	};

	card0: sound {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;0&amp;gt;;
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "dsp0";
		simple-audio-card,format = "left_j";
		simple-audio-card,bitclock-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;
		simple-audio-card,frame-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;

		simple-audio-card,dai-link@0 {
			reg = &amp;lt;0&amp;gt;;
			format = "left_j";
			link0_cpu: cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 0&amp;gt;;
			};
			link0_codec: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 0&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};
	};
};&lt;/LI-CODE&gt;&lt;P&gt;When I try to add another data line, the simple-card driver fails to load.&lt;BR /&gt;asoc_simple_parse_dai returns -EINVAL when it tries to parse &lt;STRONG&gt;the CPU component of the second dai link&lt;/STRONG&gt;.&lt;BR /&gt;If I try to use &lt;STRONG&gt;only&lt;/STRONG&gt; RX_DATA1, TX_DATA1, the simple-card probe fails the same way.&lt;/P&gt;&lt;P&gt;The following two device tree fragments fail:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;&amp;amp;sai5 {
	status = "okay";
	fsl,sai-asynchronous;
	#sound-dai-cells = &amp;lt;1&amp;gt;;
	fsl,dataline = &amp;lt;8 0x0f 0x0f&amp;gt;;
	fsl,sai-multi-lane;
};

/ {
	dsp0: fixed_tdm_dummy_codec0 {
		#sound-dai-cells = &amp;lt;1&amp;gt;;
		compatible = "test,fixed_tdm";
	};

	card0: sound {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;0&amp;gt;;
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "dsp0";

		simple-audio-card,dai-link@0 {
			reg = &amp;lt;0&amp;gt;;
			format = "left_j";
			bitclock-master = &amp;lt;&amp;amp;link0_master&amp;gt;;
			frame-master = &amp;lt;&amp;amp;link0_master&amp;gt;;
			link0_cpu: cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 0&amp;gt;;
			};
			link0_master: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 0&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};

		simple-audio-card,dai-link@1 {
			reg = &amp;lt;1&amp;gt;;
			format = "left_j";
			bitclock-master = &amp;lt;&amp;amp;link1_master&amp;gt;;
			frame-master = &amp;lt;&amp;amp;link1_master&amp;gt;;
			cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 1&amp;gt;;
			};
			link1_master: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 1&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};
	};
};&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;&amp;amp;sai5 {
	status = "okay";
	fsl,sai-asynchronous;
	#sound-dai-cells = &amp;lt;1&amp;gt;;
};

/ {
	dsp0: fixed_tdm_dummy_codec0 {
		#sound-dai-cells = &amp;lt;1&amp;gt;;
		compatible = "test,fixed_tdm";
	};

	card0: sound {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;0&amp;gt;;
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "dsp0";
		simple-audio-card,format = "left_j";
		simple-audio-card,bitclock-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;
		simple-audio-card,frame-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;

		simple-audio-card,dai-link@0 {
			reg = &amp;lt;0&amp;gt;;
			format = "left_j";
			link0_cpu: cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 0&amp;gt;;
			};
			link0_codec: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 0&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};
	};
};&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;When the simple-card driver fails to load, it prints:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;[    7.289407] asoc-simple-card: probe of sound failed with error -22&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Has anyone been able to use these SAIs with multiple data lines?&lt;/P&gt;&lt;P&gt;Thanks in advance for any feedback.&lt;/P&gt;</description>
    <pubDate>Mon, 14 Oct 2024 23:45:52 GMT</pubDate>
    <dc:creator>cpetrescu</dc:creator>
    <dc:date>2024-10-14T23:45:52Z</dc:date>
    <item>
      <title>i.MX8M Mini, sai5 with multiple data lines</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-MX8M-Mini-sai5-with-multiple-data-lines/m-p/1973681#M229661</link>
      <description>&lt;P&gt;Hi there,&lt;/P&gt;&lt;P&gt;I'm trying to use sai5 in a multi-line configuration on a custom board with an i.MX8M Mini.&lt;/P&gt;&lt;P&gt;There's an audio link between the i.MX8 and a DSP. The bit clock and the frame clock are generated by an external clock generator.&lt;/P&gt;&lt;P&gt;I can play and record audio (8 channels) as long as I use only one data line (RX_DATA0 and TX_DATA0).&lt;/P&gt;&lt;P&gt;The working device tree fragment is the following:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;&amp;amp;sai5 {
	status = "okay";
	fsl,sai-asynchronous;
	#sound-dai-cells = &amp;lt;1&amp;gt;;
};

/ {
	dsp0: fixed_tdm_dummy_codec0 {
		#sound-dai-cells = &amp;lt;1&amp;gt;;
		compatible = "test,fixed_tdm";
	};

	card0: sound {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;0&amp;gt;;
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "dsp0";
		simple-audio-card,format = "left_j";
		simple-audio-card,bitclock-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;
		simple-audio-card,frame-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;

		simple-audio-card,dai-link@0 {
			reg = &amp;lt;0&amp;gt;;
			format = "left_j";
			link0_cpu: cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 0&amp;gt;;
			};
			link0_codec: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 0&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};
	};
};&lt;/LI-CODE&gt;&lt;P&gt;When I try to add another data line, the simple-card driver fails to load.&lt;BR /&gt;asoc_simple_parse_dai returns -EINVAL when it tries to parse &lt;STRONG&gt;the CPU component of the second dai link&lt;/STRONG&gt;.&lt;BR /&gt;If I try to use &lt;STRONG&gt;only&lt;/STRONG&gt; RX_DATA1, TX_DATA1, the simple-card probe fails the same way.&lt;/P&gt;&lt;P&gt;The following two device tree fragments fail:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;&amp;amp;sai5 {
	status = "okay";
	fsl,sai-asynchronous;
	#sound-dai-cells = &amp;lt;1&amp;gt;;
	fsl,dataline = &amp;lt;8 0x0f 0x0f&amp;gt;;
	fsl,sai-multi-lane;
};

/ {
	dsp0: fixed_tdm_dummy_codec0 {
		#sound-dai-cells = &amp;lt;1&amp;gt;;
		compatible = "test,fixed_tdm";
	};

	card0: sound {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;0&amp;gt;;
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "dsp0";

		simple-audio-card,dai-link@0 {
			reg = &amp;lt;0&amp;gt;;
			format = "left_j";
			bitclock-master = &amp;lt;&amp;amp;link0_master&amp;gt;;
			frame-master = &amp;lt;&amp;amp;link0_master&amp;gt;;
			link0_cpu: cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 0&amp;gt;;
			};
			link0_master: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 0&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};

		simple-audio-card,dai-link@1 {
			reg = &amp;lt;1&amp;gt;;
			format = "left_j";
			bitclock-master = &amp;lt;&amp;amp;link1_master&amp;gt;;
			frame-master = &amp;lt;&amp;amp;link1_master&amp;gt;;
			cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 1&amp;gt;;
			};
			link1_master: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 1&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};
	};
};&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;&amp;amp;sai5 {
	status = "okay";
	fsl,sai-asynchronous;
	#sound-dai-cells = &amp;lt;1&amp;gt;;
};

/ {
	dsp0: fixed_tdm_dummy_codec0 {
		#sound-dai-cells = &amp;lt;1&amp;gt;;
		compatible = "test,fixed_tdm";
	};

	card0: sound {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;0&amp;gt;;
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,name = "dsp0";
		simple-audio-card,format = "left_j";
		simple-audio-card,bitclock-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;
		simple-audio-card,frame-master = &amp;lt;&amp;amp;link0_codec&amp;gt;;

		simple-audio-card,dai-link@0 {
			reg = &amp;lt;0&amp;gt;;
			format = "left_j";
			link0_cpu: cpu {
				sound-dai = &amp;lt;&amp;amp;sai5 0&amp;gt;;
			};
			link0_codec: codec {
				sound-dai = &amp;lt;&amp;amp;dsp0 0&amp;gt;;
				dai-tdm-slot-num = &amp;lt;8&amp;gt;;
				dai-tdm-slot-width = &amp;lt;32&amp;gt;;
				frame-master;
				bitclock-master;
			};
		};
	};
};&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;When the simple-card driver fails to load, it prints:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;[    7.289407] asoc-simple-card: probe of sound failed with error -22&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Has anyone been able to use these SAIs with multiple data lines?&lt;/P&gt;&lt;P&gt;Thanks in advance for any feedback.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Oct 2024 23:45:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-MX8M-Mini-sai5-with-multiple-data-lines/m-p/1973681#M229661</guid>
      <dc:creator>cpetrescu</dc:creator>
      <dc:date>2024-10-14T23:45:52Z</dc:date>
    </item>
  </channel>
</rss>

