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

From: Nicolin Chen <[email-masked]>
Date: Mon, 29 Aug 2016 12:28:21 -0700

Added Fabio as I can't test S/PDIF on my board.

On Sun, Aug 28, 2016 at 06:00:55PM +0200, Xavi Drudis Ferran wrote:
 
> I was using linux-libre-3.19 (implies no working sdma) with a
> wandboard quad (Freescale imx6q). Spidf output worked fine.
> 
> When I upgraded to linux-libre-4.7 spdif output was supressed without
> any error (precisely, with the same errors about sdma that 3.19 gave).
> 
> I saw someone else reporting the same elsewhere with linux-4.4
> https://forum.digikey.com/thread/34240
> (but I don't have a login there) 
> 
> This patch fixes it for me and sound works again on spdif. 
> 
> But I don't know if it can break (or fix?) something for some other
> boards or kernels or cases... I hardly know what I'm doing.

> The commits that might have caused the problem for me might be 
> 
> commit 833f2cbf7091099baee28136dc68678e974c0ac5
> Author: Shengjiu Wang <[email-masked]>
> Date:   Sat Oct 10 18:15:07 2015 +0800
> 
>     ARM: dts: imx6: change the core clock of spdif
>     
>     The correct core clock of spdif is SPDIF_GCLK, which is added to
>     clock tree. So the dts also need to be updated.
>     
>     Signed-off-by: Shengjiu Wang <[email-masked]>
>     Signed-off-by: Shawn Guo <[email-masked]>
> 
> (the commit changed more clocks than SPDIF_GCLK)

Yes, it seems that it also tried to correct the clock sources
as those were not available when adding the S/PDIF support at
the first place.

> The issue is fixed for me with this patch but I'm not sure what's the
> best way to help fix any issue someone else may have or what other
> info or test you might need. Any guidance welcome. 

> --- 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-28 17:59:14.276774409 +0200
> @@ -240,9 +240,9 @@
>  					       <&sdma 15 18 0>;
>  					dma-names = "rx", "tx";
>  					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_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",

This looks like that you merely revert the SPDIF_GCLK. 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?