<?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 ESAI peripheral generating incorrect I2S frequencies in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967528#M144092</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm having trouble getting my ESAI peripheral to generate the right I2S clock frequencies on the SCK, BCK, and LRCK pins going to my codec.&amp;nbsp; The codec is a TI PCM1753 and it can only be a clock slave, so the ESAI has to be the master and generate SCK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think I have the clocks configured correctly in the device tree and my drivers, but when I scope the pins they are wildly different from the target frequencies.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As an example, to play stereo audio at a 8kHz sample rate I need:&lt;/P&gt;&lt;P&gt;LRCK =&amp;nbsp;&amp;nbsp;&amp;nbsp; 8000 Hz&lt;BR /&gt;BCK&amp;nbsp; =&amp;nbsp; 512000 Hz (LRCK * 2 channels * 32 bits per channel)&lt;BR /&gt;SCK&amp;nbsp; = 1024000 Hz (LRCK * 128)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When I probe the pins I currently get these frequencies (with a lot of jitter):&lt;BR /&gt;LRCK =&amp;nbsp;&amp;nbsp; ~220 Hz&lt;/P&gt;&lt;P&gt;BCK = ~670000 Hz&lt;/P&gt;&lt;P&gt;SCK = 0 Hz (stuck high)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My main question is why are these values so different, and what would cause a LRCK to be so low?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I suppose the answer might be found in the actual register values in the ESAI, but so far I've only tackled the problem through the Linux 4.9.9 source code and my board's device tree config.&amp;nbsp; I've been using a JTAG debugger to learn help sort this out.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a .dts file that configures the ESAI_EXTAL clock to use PLL4 and OSC as the source clock. &amp;nbsp; The target frequency for EXTAL is 983040000Hz (~983MHz) so that the ESAI can divide down to the I2S SCK values I would like (128 times 8kHz, 16kHz, or 48kHz).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&amp;amp;esai {
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinctrl-names = "default";
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinctrl-0 = &amp;lt;&amp;amp;pinctrl_esai&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fsl,fifo-depth = &amp;lt;128&amp;gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clocks = &amp;lt;&amp;amp;clks IMX6QDL_CLK_ESAI_SEL&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4_POST_DIV&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_CLK_ESAI_EXTAL&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-parents = &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4_AUDIO_DIV&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-rates = &amp;lt;983040000&amp;gt;, &amp;lt;983040000&amp;gt;, &amp;lt;983040000&amp;gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp; status = "okay";
};

&amp;amp;clks {
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clocks = &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_PLL4_BYPASS&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-parents = &amp;lt;&amp;amp;clks IMX6QDL_CLK_OSC&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-rates = &amp;lt;983040000&amp;gt;, &amp;lt;983040000&amp;gt;;
};

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pinctrl_esai: esaigrp {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fsl,pins = &amp;lt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_4__ESAI_TX_HF_CLK&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_17__ESAI_TX0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_6__ESAI_TX_CLK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_2__ESAI_TX_FS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };

&lt;/PRE&gt;&lt;P&gt;At runtime, &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;cat /sys/kernel/debug/clk/clk_summary&lt;/SPAN&gt; shows that the EXTAL clock is indeed set to 983MHz:&lt;/P&gt;&lt;PRE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_bypass&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_audio&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_post_div&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_audio_div&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_sel&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_pred&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_podf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_extal&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I believe 938MHz is allowed for the ESAI EXTAL clock frequency, but I can't find documentation on the allowed frequencies in the reference manual.&amp;nbsp; It does say that PLL4 can go from 650 MHz to 1300 MHz, but is that whole range valid for the ESAI?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using the &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;simple-card.c&lt;/SPAN&gt; ASoC driver instead of writing my own ASoC machine driver.&amp;nbsp; I don't think I need the ASRC peripheral, since all the audio sample rates I need can be divided from a 983040000Hz.&amp;nbsp; (I have a spreadsheet to double check that math.)&amp;nbsp; The function &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;fsl_esai_set_dai_sysclk()&lt;/SPAN&gt; in &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;fsl_esai.c&lt;/SPAN&gt; does not return an error with this EXTAL frequency, so I believe that it is able to set the dividers to generate SCK correctly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is the device tree config I am using for that driver:&lt;/P&gt;&lt;PRE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compatible = "simple-audio-card";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,name = "Texas Instruments PCM1753 Audio";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,format = "i2s";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,widgets = "Speaker", "Internal Speaker"; /* template, widget name */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,routing = "Internal Speaker", "VOUTL",&amp;nbsp;&amp;nbsp; /* sink, source */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Internal Speaker", "VOUTR";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,mclk-fs = &amp;lt;128&amp;gt;; /* 128, 192, 256, 384, 512, 768, 1152 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = "okay";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dailink0_master: simple-audio-card,cpu {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound-dai = &amp;lt;&amp;amp;esai&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dai-tdm-slot-num = &amp;lt;2&amp;gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* stereo, left and right channels */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dai-tdm-slot-width = &amp;lt;32&amp;gt;; /* 32 bit clocks per channel */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,codec {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound-dai = &amp;lt;&amp;amp;pcm1753&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;I'm setting the &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;slot-num&lt;/SPAN&gt; and &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;slot-width&lt;/SPAN&gt; parameters above so that the BCK is 64*LRCK, as required by my codec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please let me know if you have any suggestions or see anything incorrect in what I've shared so far.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;Remington Furman&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Board details:&lt;/P&gt;&lt;P&gt;Custom board&lt;/P&gt;&lt;P&gt;NXP iMX6 Solo&lt;BR /&gt;TI PCM1753 Codec&lt;BR /&gt;Linux kernel version 4.9.9&lt;BR /&gt;Built with Yocto&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 25 Jun 2019 03:54:31 GMT</pubDate>
    <dc:creator>remingtonfurman</dc:creator>
    <dc:date>2019-06-25T03:54:31Z</dc:date>
    <item>
      <title>ESAI peripheral generating incorrect I2S frequencies</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967528#M144092</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm having trouble getting my ESAI peripheral to generate the right I2S clock frequencies on the SCK, BCK, and LRCK pins going to my codec.&amp;nbsp; The codec is a TI PCM1753 and it can only be a clock slave, so the ESAI has to be the master and generate SCK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think I have the clocks configured correctly in the device tree and my drivers, but when I scope the pins they are wildly different from the target frequencies.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As an example, to play stereo audio at a 8kHz sample rate I need:&lt;/P&gt;&lt;P&gt;LRCK =&amp;nbsp;&amp;nbsp;&amp;nbsp; 8000 Hz&lt;BR /&gt;BCK&amp;nbsp; =&amp;nbsp; 512000 Hz (LRCK * 2 channels * 32 bits per channel)&lt;BR /&gt;SCK&amp;nbsp; = 1024000 Hz (LRCK * 128)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When I probe the pins I currently get these frequencies (with a lot of jitter):&lt;BR /&gt;LRCK =&amp;nbsp;&amp;nbsp; ~220 Hz&lt;/P&gt;&lt;P&gt;BCK = ~670000 Hz&lt;/P&gt;&lt;P&gt;SCK = 0 Hz (stuck high)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My main question is why are these values so different, and what would cause a LRCK to be so low?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I suppose the answer might be found in the actual register values in the ESAI, but so far I've only tackled the problem through the Linux 4.9.9 source code and my board's device tree config.&amp;nbsp; I've been using a JTAG debugger to learn help sort this out.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a .dts file that configures the ESAI_EXTAL clock to use PLL4 and OSC as the source clock. &amp;nbsp; The target frequency for EXTAL is 983040000Hz (~983MHz) so that the ESAI can divide down to the I2S SCK values I would like (128 times 8kHz, 16kHz, or 48kHz).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&amp;amp;esai {
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinctrl-names = "default";
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinctrl-0 = &amp;lt;&amp;amp;pinctrl_esai&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fsl,fifo-depth = &amp;lt;128&amp;gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clocks = &amp;lt;&amp;amp;clks IMX6QDL_CLK_ESAI_SEL&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4_POST_DIV&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_CLK_ESAI_EXTAL&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-parents = &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4_AUDIO_DIV&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-rates = &amp;lt;983040000&amp;gt;, &amp;lt;983040000&amp;gt;, &amp;lt;983040000&amp;gt;;

&amp;nbsp;&amp;nbsp;&amp;nbsp; status = "okay";
};

&amp;amp;clks {
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clocks = &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_PLL4_BYPASS&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-parents = &amp;lt;&amp;amp;clks IMX6QDL_CLK_OSC&amp;gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;amp;clks IMX6QDL_CLK_PLL4&amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assigned-clock-rates = &amp;lt;983040000&amp;gt;, &amp;lt;983040000&amp;gt;;
};

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pinctrl_esai: esaigrp {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fsl,pins = &amp;lt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_4__ESAI_TX_HF_CLK&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_17__ESAI_TX0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_6__ESAI_TX_CLK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX6QDL_PAD_GPIO_2__ESAI_TX_FS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1b030
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };

&lt;/PRE&gt;&lt;P&gt;At runtime, &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;cat /sys/kernel/debug/clk/clk_summary&lt;/SPAN&gt; shows that the EXTAL clock is indeed set to 983MHz:&lt;/P&gt;&lt;PRE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_bypass&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_audio&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_post_div&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pll4_audio_div&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_sel&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_pred&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_podf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0 &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esai_extal&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 983040000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 0&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I believe 938MHz is allowed for the ESAI EXTAL clock frequency, but I can't find documentation on the allowed frequencies in the reference manual.&amp;nbsp; It does say that PLL4 can go from 650 MHz to 1300 MHz, but is that whole range valid for the ESAI?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using the &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;simple-card.c&lt;/SPAN&gt; ASoC driver instead of writing my own ASoC machine driver.&amp;nbsp; I don't think I need the ASRC peripheral, since all the audio sample rates I need can be divided from a 983040000Hz.&amp;nbsp; (I have a spreadsheet to double check that math.)&amp;nbsp; The function &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;fsl_esai_set_dai_sysclk()&lt;/SPAN&gt; in &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;fsl_esai.c&lt;/SPAN&gt; does not return an error with this EXTAL frequency, so I believe that it is able to set the dividers to generate SCK correctly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is the device tree config I am using for that driver:&lt;/P&gt;&lt;PRE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compatible = "simple-audio-card";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,name = "Texas Instruments PCM1753 Audio";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,format = "i2s";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,widgets = "Speaker", "Internal Speaker"; /* template, widget name */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,routing = "Internal Speaker", "VOUTL",&amp;nbsp;&amp;nbsp; /* sink, source */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Internal Speaker", "VOUTR";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,mclk-fs = &amp;lt;128&amp;gt;; /* 128, 192, 256, 384, 512, 768, 1152 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = "okay";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dailink0_master: simple-audio-card,cpu {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound-dai = &amp;lt;&amp;amp;esai&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dai-tdm-slot-num = &amp;lt;2&amp;gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* stereo, left and right channels */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dai-tdm-slot-width = &amp;lt;32&amp;gt;; /* 32 bit clocks per channel */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simple-audio-card,codec {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound-dai = &amp;lt;&amp;amp;pcm1753&amp;gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;I'm setting the &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;slot-num&lt;/SPAN&gt; and &lt;SPAN style="font-family: terminal, monaco, monospace;"&gt;slot-width&lt;/SPAN&gt; parameters above so that the BCK is 64*LRCK, as required by my codec.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please let me know if you have any suggestions or see anything incorrect in what I've shared so far.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;Remington Furman&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Board details:&lt;/P&gt;&lt;P&gt;Custom board&lt;/P&gt;&lt;P&gt;NXP iMX6 Solo&lt;BR /&gt;TI PCM1753 Codec&lt;BR /&gt;Linux kernel version 4.9.9&lt;BR /&gt;Built with Yocto&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2019 03:54:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967528#M144092</guid>
      <dc:creator>remingtonfurman</dc:creator>
      <dc:date>2019-06-25T03:54:31Z</dc:date>
    </item>
    <item>
      <title>Re: ESAI peripheral generating incorrect I2S frequencies</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967529#M144093</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I should mention that at one point in my debugging I had sound coming out of the speaker, but the I2S clocks were still very low, so the sound was only noise.&amp;nbsp; At least that shows that the hardware is somewhat functional.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2019 03:59:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967529#M144093</guid>
      <dc:creator>remingtonfurman</dc:creator>
      <dc:date>2019-06-25T03:59:13Z</dc:date>
    </item>
    <item>
      <title>Re: ESAI peripheral generating incorrect I2S frequencies</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967530#M144094</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Remington&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reason for wrong clocks may be absence of asrc driver, so one can try with nxp linux&lt;/P&gt;&lt;P&gt;from source.codeaurora.org/external/imx repository (note Linux kernel version 4.9.9 is not supported&lt;/P&gt;&lt;P&gt;by nxp), which support asrc, like linux L4.9.11&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://source.codeaurora.org/external/imx/linux-imx/tree/?h=imx_4.9.11_1.0.0_ga" title="https://source.codeaurora.org/external/imx/linux-imx/tree/?h=imx_4.9.11_1.0.0_ga"&gt;linux-imx - i.MX Linux kernel&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;documentation :&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.nxp.com/support/developer-resources/run-time-software/i.mx-developer-resources/i.mx-6series-i.mx-7series-software-and-development-tool-resources:IMX_SW" title="https://www.nxp.com/support/developer-resources/run-time-software/i.mx-developer-resources/i.mx-6series-i.mx-7series-software-and-development-tool-resources:IMX_SW"&gt;i.MX Software | NXP&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2019 05:33:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967530#M144094</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2019-06-25T05:33:20Z</dc:date>
    </item>
    <item>
      <title>Re: ESAI peripheral generating incorrect I2S frequencies</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967531#M144095</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the reference links, Igor.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Are you able to answer this particular question?&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;I believe 938MHz is allowed for the ESAI EXTAL clock frequency, but I can't find documentation on the allowed frequencies in the reference manual.&amp;nbsp; It does say that PLL4 can go from 650 MHz to 1300 MHz, but is that whole range valid for the ESAI?&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;The other option for clocking the ESAI is the fsys clock which is only 132MHz, but I can't use that to generate the I2S clocks I want.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've been comparing the actual ESAI register values (TCR, TCCR, and ECR) with what I expect to see based on the reference manual, but have not found anything wrong there yet.&amp;nbsp; Obviously I'm still learning how this works, so I might have missed something.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think I am close to finding the source of the problem with my current driver setup, but if I can't figure it out soon I'll look into using the ASRC driver.&amp;nbsp; Switching kernel versions is not an option for my team, since we have many patches on our current version.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Jun 2019 00:18:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967531#M144095</guid>
      <dc:creator>remingtonfurman</dc:creator>
      <dc:date>2019-06-26T00:18:51Z</dc:date>
    </item>
    <item>
      <title>Re: ESAI peripheral generating incorrect I2S frequencies</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967532#M144096</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;gt;I believe 938MHz is allowed for the ESAI EXTAL clock frequency&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I do not think so, sorry.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Jun 2019 00:46:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ESAI-peripheral-generating-incorrect-I2S-frequencies/m-p/967532#M144096</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2019-06-26T00:46:40Z</dc:date>
    </item>
  </channel>
</rss>

