Setting some clocks back to DUMMY fixes spdif output on imx6q wandboard rev B1

Xavi Drudis Ferran xdrudis at tinet.cat
Tue Aug 30 21:14:14 AEST 2016


El Mon, Aug 29, 2016 at 09:54:28PM +0200, Xavi Drudis Ferran deia:
> El Mon, Aug 29, 2016 at 12:28:21PM -0700, Nicolin Chen deia:
> > Would you
> > please do a little debug using "#define DEBUG 1" and check printk
> > from fsl_spdif_probe_txclk() to see the difference between before
> > and after Shengjiu's commit?
> 
> Yes, but I'm compiling the kernel in the wandboard, so it'll take me some time. 
> 

Now. Sorry for the delay. 

I did a mistake and had to do it twice. I added a couple of sanity check messages:
"enter fsl_spdif_probe"
"enter fsl_spdif_probe_txclk"


linux-libre-4.7 without my patch, i.e. clocks defined like this :
arch/arm/boot/dts/imx6qdl.dtsi:
aips-bus at 02000000 { /* AIPS1 */
[...]
   spba-bus at 02000000 {
[...]
       spdif: spdif at 02004000 {
          clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
                   <&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_ASRC>,
                   <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_ESAI_EXTAL>,
                   <&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_MLB>,
                   <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
          clock-names = "core",  "rxtx0",
                        "rxtx1", "rxtx2",
                        "rxtx3", "rxtx4",
                        "rxtx5", "rxtx6",
                        "rxtx7", "spba";
[...]

The messages at boot: 

[    8.803603] 20ec000.sdma: Missing Free firmware (non-Free firmware loading is disabled)
[    8.813737] imx-sdma 20ec000.sdma: failed to get firmware from device tree
[    8.870764] imx-sdma 20ec000.sdma: Direct firmware load for /*(DEBLOBBED)*/ failed with error -2
[...]
[    9.083301] fsl-asrc 2034000.asrc: driver registered
[    9.087050] sgtl5000 1-000a: sgtl5000 revision 0x11
[    9.107141] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    9.144839] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.225228] fsl-spdif-dai 2004000.spdif: use rxtx5 as tx clock source for 32000Hz sample rate
[    9.234058] fsl-spdif-dai 2004000.spdif: use txclk df 16 for 32000Hz sample rate
[    9.235565] imx-spdif sound-spdif: ASoC: CPU DAI (null) not registered
[    9.236007] imx-spdif sound-spdif: snd_soc_register_card failed: -517
[...]
[    9.262713] fsl-spdif-dai 2004000.spdif: use sysclk df 2 for 32000Hz sample rate
[    9.269349] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 32226Hz
[    9.276431] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    9.276438] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    9.289559] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.306991] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    9.346253] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    9.376398] fsl-spdif-dai 2004000.spdif: use rxtx6 as tx clock source for 44100Hz sample rate
[    9.376404] fsl-spdif-dai 2004000.spdif: use txclk df 94 for 44100Hz sample rate
[    9.376409] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43882Hz
[    9.376415] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.403159] fsl-spdif-dai 2004000.spdif: use rxtx6 as tx clock source for 48000Hz sample rate
[    9.403165] fsl-spdif-dai 2004000.spdif: use txclk df 86 for 48000Hz sample rate
[    9.403170] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47965Hz
[    9.403174] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.424007] fsl-spdif-dai 2004000.spdif: use rxtx6 as tx clock source for 96000Hz sample rate
[    9.424013] fsl-spdif-dai 2004000.spdif: use txclk df 43 for 96000Hz sample rate
[    9.424021] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 95930Hz
[    9.424025] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.450424] fsl-spdif-dai 2004000.spdif: use rxtx6 as tx clock source for 192000Hz sample rate
[    9.481561] fsl-spdif-dai 2004000.spdif: use txclk df 21 for 192000Hz sample rate
[    9.488400] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 196428Hz
[    9.536785] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    9.582106] imx-spdif sound-spdif: snd-soc-dummy-dai <-> 2004000.spdif mapping ok
[    9.612159] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    9.621942] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    9.638227] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    9.647247] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    9.682092] sgtl5000 1-000a: Using internal LDO instead of VDDD
[    9.776989] fsl-asoc-card sound: sgtl5000 <-> 2028000.ssi mapping ok
[...]
[   70.407805] fsl-spdif-dai 2004000.spdif: expected clock rate = 265305600
[   70.407829] fsl-spdif-dai 2004000.spdif: actual clock rate = 264000000
[   70.407857] fsl-spdif-dai 2004000.spdif: set sample rate to 43882Hz for 44100Hz playback
[   70.407867] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[   70.407875] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000
[   70.469948] fsl-spdif-dai 2004000.spdif: expected clock rate = 265305600
[   70.469965] fsl-spdif-dai 2004000.spdif: actual clock rate = 264000000
[   70.469977] fsl-spdif-dai 2004000.spdif: set sample rate to 43882Hz for 44100Hz playback
[   70.469999] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[   70.470014] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000
[...]

Then when I try to play sound through spdif:

[  140.176536] fsl-spdif-dai 2004000.spdif: expected clock rate = 265305600
[  140.176555] fsl-spdif-dai 2004000.spdif: actual clock rate = 264000000
[  140.176566] fsl-spdif-dai 2004000.spdif: set sample rate to 43882Hz for 44100Hz playback
[  140.176579] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[  140.176587] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000




linux-libre-4.7 with my patch, i.e. clocks defined like this :
arch/arm/boot/dts/imx6qdl.dtsi:
aips-bus at 02000000 { /* AIPS1 */
[...]
   spba-bus at 02000000 {
[...]
      spdif: spdif at 02004000 {
          clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
                   <&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_DUMMY>,
                   <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_DUMMY>,
                   <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_DUMMY>,
                   <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
          clock-names = "core",  "rxtx0",
                        "rxtx1", "rxtx2",
                        "rxtx3", "rxtx4",
                        "rxtx5", "rxtx6",
                        "rxtx7", "spba";
[...]


The messages at boot: 

[...]
[    6.655532] imx-spdif sound-spdif: ASoC: CPU DAI (null) not registered
[    6.655545] imx-spdif sound-spdif: snd_soc_register_card failed: -517
[    6.656895] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    6.657567] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.660895] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 32000Hz sample rate
[    6.660902] fsl-spdif-dai 2004000.spdif: use txclk df 4 for 32000Hz sample rate
[    6.660907] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 31719Hz
[    6.660911] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.662922] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    6.662927] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    6.662932] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    6.662936] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.663205] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    6.663213] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    6.676779] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    6.676785] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    6.676790] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    6.676795] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.687008] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    6.687016] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    6.704876] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    6.704882] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    6.704888] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    6.704892] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.723554] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    6.723561] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    6.723567] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    6.723679] fsl-spdif-dai 2004000.spdif: imx_pcm_dma_init failed: -517
[    7.626351] fsl-asrc 2034000.asrc: driver registered
[    7.642378] imx-spdif sound-spdif: ASoC: CPU DAI (null) not registered
[    7.650279] imx-spdif sound-spdif: snd_soc_register_card failed: -517
[    7.667765] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    7.676924] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    7.696535] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    7.704977] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    7.718722] sgtl5000 1-000a: sgtl5000 revision 0x11
[...]
[    7.725855] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    7.728561] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    7.738178] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.740172] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 32000Hz sample rate
[    7.740177] fsl-spdif-dai 2004000.spdif: use txclk df 4 for 32000Hz sample rate
[    7.740183] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 31719Hz
[    7.740187] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.760659] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    7.760665] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    7.760672] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    7.760676] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.765495] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    7.765501] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    7.765506] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    7.765510] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.774373] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    7.774378] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    7.774384] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    7.774388] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.778530] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    7.778536] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    7.778541] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    7.783897] fsl-spdif-dai 2004000.spdif: imx_pcm_dma_init failed: -517
[    7.828163] imx-spdif sound-spdif: ASoC: CPU DAI (null) not registered
[    7.828174] imx-spdif sound-spdif: snd_soc_register_card failed: -517
[    7.828703] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    7.828712] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    7.828825] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    7.828832] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    7.829908] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    7.834312] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    7.837686] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.842472] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 32000Hz sample rate
[    7.842478] fsl-spdif-dai 2004000.spdif: use txclk df 4 for 32000Hz sample rate
[    7.842485] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 31719Hz
[    7.842490] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.844695] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    7.844700] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    7.844705] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    7.844708] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.848458] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    7.848464] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    7.848470] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    7.848474] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.858907] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    7.858912] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    7.858917] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    7.858921] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.868189] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    7.868195] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    7.868200] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    7.868555] fsl-spdif-dai 2004000.spdif: imx_pcm_dma_init failed: -517
[    8.094960] imx-spdif sound-spdif: ASoC: CPU DAI (null) not registered
[    8.094994] imx-spdif sound-spdif: snd_soc_register_card failed: -517
[    8.095669] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    8.095808] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    8.098338] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    8.098347] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    8.099067] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    8.109691] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    8.113038] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    8.117534] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 32000Hz sample rate
[    8.117539] fsl-spdif-dai 2004000.spdif: use txclk df 4 for 32000Hz sample rate
[    8.117544] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 31719Hz
[    8.117548] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    8.120341] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    8.120347] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    8.120352] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    8.120356] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    8.134938] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    8.134944] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    8.134949] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    8.134953] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    8.139127] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    8.139133] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    8.139139] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    8.139143] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    8.147727] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    8.147734] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    8.147740] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    8.147822] fsl-spdif-dai 2004000.spdif: imx_pcm_dma_init failed: -517
[...]
[    8.831797] 20ec000.sdma: Missing Free firmware (non-Free firmware loading is disabled)
[    8.880684] imx-sdma 20ec000.sdma: failed to get firmware from device tree
[    8.910258] imx-sdma 20ec000.sdma: Direct firmware load for /*(DEBLOBBED)*/ failed with error -2
[    9.073968] imx-spdif sound-spdif: ASoC: CPU DAI (null) not registered
[    9.081645] imx-spdif sound-spdif: snd_soc_register_card failed: -517
[    9.095074] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    9.110834] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    9.121216] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    9.130267] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    9.153016] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    9.165177] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    9.195832] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.211198] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 32000Hz sample rate
[    9.217917] fsl-spdif-dai 2004000.spdif: use txclk df 4 for 32000Hz sample rate
[    9.224900] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 31719Hz
[    9.231164] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.241790] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    9.248073] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    9.254457] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    9.260822] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.279536] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    9.285950] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    9.292236] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    9.298648] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.313550] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[...]
[    9.328117] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    9.334526] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    9.340888] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    9.351639] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    9.358052] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    9.364471] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    9.417677] imx-spdif sound-spdif: snd-soc-dummy-dai <-> 2004000.spdif mapping ok
[    9.461316] sgtl5000 1-000a: Using internal LDO instead of VDDD
[    9.592189] fsl-asoc-card sound: sgtl5000 <-> 2028000.ssi mapping ok
[...]
[   69.198853] fsl-spdif-dai 2004000.spdif: expected clock rate = 25401600
[   69.198874] fsl-spdif-dai 2004000.spdif: actual clock rate = 25263158
[   69.198892] fsl-spdif-dai 2004000.spdif: set sample rate to 43859Hz for 44100Hz playback
[   69.198902] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[   69.198910] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000
[   69.349763] fsl-spdif-dai 2004000.spdif: expected clock rate = 25401600
[   69.349776] fsl-spdif-dai 2004000.spdif: actual clock rate = 25263158
[   69.349793] fsl-spdif-dai 2004000.spdif: set sample rate to 43859Hz for 44100Hz playback
[   69.349812] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[   69.349820] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000
[...]

Then when I try (successfully) to play sound through spdif:

[  113.186850] fsl-spdif-dai 2004000.spdif: expected clock rate = 25401600
[  113.186863] fsl-spdif-dai 2004000.spdif: actual clock rate = 25263158
[  113.186872] fsl-spdif-dai 2004000.spdif: set sample rate to 43859Hz for 44100Hz playback
[  113.186882] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[  113.186889] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000


Does it mean that a 43859Hz clock is close enough to theoretical 44100Hz
but  43882Hz is not ? 

The clock that doesn't work seems closer to the desired value.
I don't understand. 

Maybe there's something wrong with rxtx6 (IMX6QDL_CLK_MLB). This clock
does not seem to be used elsewhere (I mean in files, it's used in any
board that includes imx6qdl.dtsi)


include/dt-bindings/clock/imx6qdl-clock.h: 
#define IMX6QDL_CLK_MLB						139



Might it have to do with the fact I'm using (still trying in fact) to use etnaviv ?

drivers/clk/imx/clk-imx6q.c:

   if (clk_on_imx6dl())
      /*
       * The multiplexer and divider of the imx6q clock gpu2d get
       * redefined/reused as mlb_sys_sel and mlb_sys_clk_podf on imx6dl.
       */
       clk[IMX6QDL_CLK_MLB] = imx_clk_gate2("mlb",            "gpu2d_core_podf",   base + 0x74, 18);
   else
       clk[IMX6QDL_CLK_MLB] = imx_clk_gate2("mlb",            "axi",               base + 0x74, 18);


But I'm on a imx6q not imx6dl .

It seems I've found a similar case, just more ancient. I've tried the
patch in the last message there instead of the one I sent, and it
works for me (gives me sound on the spdif output) but I still don't
understand.

https://community.nxp.com/thread/387131

The patch is 

--- linux-4.7-no-spdif-out/arch/arm/boot/dts/imx6qdl.dtsi	2016-07-25 00:19:43.000000000 +0200
+++ linux-4.7/arch/arm/boot/dts/imx6qdl.dtsi	2016-08-30 12:51:37.369431791 +0200
@@ -242,7 +242,7 @@
 					clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
 						 <&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_ASRC>,
 						 <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_ESAI_EXTAL>,
-						 <&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_MLB>,
+						 <&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_DUMMY>,
 						 <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
 					clock-names = "core",  "rxtx0",
 						      "rxtx1", "rxtx2",

And the dmesg is: 

[...]
[    6.757672] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    6.757680] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    6.767863] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    6.767874] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    6.771927] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    6.782230] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    6.795682] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.851089] fsl-spdif-dai 2004000.spdif: use rxtx5 as tx clock source for 32000Hz sample rate
[    6.857631] fsl-spdif-dai 2004000.spdif: use txclk df 16 for 32000Hz sample rate
[    6.864477] fsl-spdif-dai 2004000.spdif: use sysclk df 2 for 32000Hz sample rate
[    6.864484] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 32226Hz
[    6.864489] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.909089] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    6.909096] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    6.909101] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    6.909105] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.981874] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    6.992935] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    6.992943] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    6.992948] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    6.993678] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    6.993688] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    6.993809] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    6.993816] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    6.994121] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    7.024546] 20ec000.sdma: Missing Free firmware (non-Free firmware loading is disabled)
[    7.024577] imx-sdma 20ec000.sdma: failed to get firmware from device tree
[    7.025416] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    7.025422] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    7.025426] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    7.025430] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.040198] imx-sdma 20ec000.sdma: Direct firmware load for /*(DEBLOBBED)*/ failed with error -2
[    7.052490] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    7.052497] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    7.052503] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    7.052601] fsl-spdif-dai 2004000.spdif: imx_pcm_dma_init failed: -517
[    7.053550] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    7.053560] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    7.054022] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    7.054295] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    7.056803] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    7.060206] fsl-asrc 2034000.asrc: driver registered
[    7.063842] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    7.064485] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.096570] fsl-spdif-dai 2004000.spdif: use rxtx5 as tx clock source for 32000Hz sample rate
[    7.096579] fsl-spdif-dai 2004000.spdif: use txclk df 16 for 32000Hz sample rate
[    7.096584] fsl-spdif-dai 2004000.spdif: use sysclk df 2 for 32000Hz sample rate
[    7.096589] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 32226Hz
[    7.096593] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.123283] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    7.123289] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    7.123295] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    7.123299] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.144167] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    7.144173] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    7.144180] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    7.144185] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.169620] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    7.169626] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    7.169634] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    7.169637] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.190745] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    7.190753] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    7.190758] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    7.190883] fsl-spdif-dai 2004000.spdif: imx_pcm_dma_init failed: -517
[    7.191660] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    7.191671] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    7.191777] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    7.191784] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    7.192106] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    7.220888] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe
[    7.221677] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.246497] fsl-spdif-dai 2004000.spdif: use rxtx5 as tx clock source for 32000Hz sample rate
[    7.246504] fsl-spdif-dai 2004000.spdif: use txclk df 16 for 32000Hz sample rate
[    7.246510] fsl-spdif-dai 2004000.spdif: use sysclk df 2 for 32000Hz sample rate
[    7.246515] fsl-spdif-dai 2004000.spdif: the best rate for 32000Hz sample rate is 32226Hz
[    7.246520] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.266974] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 44100Hz sample rate
[    7.266980] fsl-spdif-dai 2004000.spdif: use txclk df 9 for 44100Hz sample rate
[    7.266985] fsl-spdif-dai 2004000.spdif: the best rate for 44100Hz sample rate is 43859Hz
[    7.266989] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.288040] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 48000Hz sample rate
[    7.288046] fsl-spdif-dai 2004000.spdif: use txclk df 5 for 48000Hz sample rate
[    7.288051] fsl-spdif-dai 2004000.spdif: the best rate for 48000Hz sample rate is 47368Hz
[    7.288055] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.320893] fsl-spdif-dai 2004000.spdif: use rxtx1 as tx clock source for 96000Hz sample rate
[    7.320901] fsl-spdif-dai 2004000.spdif: use txclk df 3 for 96000Hz sample rate
[    7.320909] fsl-spdif-dai 2004000.spdif: the best rate for 96000Hz sample rate is 94736Hz
[    7.320915] fsl-spdif-dai 2004000.spdif: enter fsl_spdif_probe_txclk
[    7.342352] fsl-spdif-dai 2004000.spdif: use rxtx0 as tx clock source for 192000Hz sample rate
[    7.342363] fsl-spdif-dai 2004000.spdif: use txclk df 2 for 192000Hz sample rate
[    7.342370] fsl-spdif-dai 2004000.spdif: the best rate for 192000Hz sample rate is 187500Hz
[    7.369879] fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
[    7.369889] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    7.370024] imx-sgtl5000 sound: ASoC: CPU DAI (null) not registered
[    7.370033] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    7.391119] fsl-ssi-dai 2028000.ssi: No cache defaults, reading back from HW
[    7.422777] fsl-asoc-card sound: ASoC: CODEC DAI sgtl5000 not registered
[    7.422789] fsl-asoc-card sound: snd_soc_register_card failed (-517)
[    7.423120] imx-sgtl5000 sound: ASoC: CODEC DAI sgtl5000 not registered
[    7.423133] imx-sgtl5000 sound: snd_soc_register_card failed (-517)
[    7.454462] sgtl5000 1-000a: sgtl5000 revision 0x11
[...]
[    7.658346] sgtl5000 1-000a: Using internal LDO instead of VDDD
[    7.766216] fsl-asoc-card sound: sgtl5000 <-> 2028000.ssi mapping ok
[...]
[    8.496784] imx-spdif sound-spdif: snd-soc-dummy-dai <-> 2004000.spdif mapping ok
[...]
[  110.494306] fsl-spdif-dai 2004000.spdif: expected clock rate = 25401600
[  110.494321] fsl-spdif-dai 2004000.spdif: actual clock rate = 25263158
[  110.494343] fsl-spdif-dai 2004000.spdif: set sample rate to 43859Hz for 44100Hz playback
[  110.494352] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[  110.494359] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000
[  110.549945] fsl-spdif-dai 2004000.spdif: expected clock rate = 25401600
[  110.549959] fsl-spdif-dai 2004000.spdif: actual clock rate = 25263158
[  110.549973] fsl-spdif-dai 2004000.spdif: set sample rate to 43859Hz for 44100Hz playback
[  110.549988] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[  110.549996] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000

Then, when I play music: 

[  178.269300] fsl-spdif-dai 2004000.spdif: expected clock rate = 25401600
[  178.269311] fsl-spdif-dai 2004000.spdif: actual clock rate = 25263158
[  178.269321] fsl-spdif-dai 2004000.spdif: set sample rate to 43859Hz for 44100Hz playback
[  178.269332] fsl-spdif-dai 2004000.spdif: STCSCH: 0x304000
[  178.269339] fsl-spdif-dai 2004000.spdif: STCSCL: 0x000000


AFAICS it just uses rxtx5 (IMX6QDL_CLK_IPG) for 32KHz and gets a little closer to that. 
But I haven't tried to play at 32KHz

Is there anything else I can try ? 

Thanks. 


More information about the Linuxppc-dev mailing list