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

Message ID 20160828160055.GA2122@begut
State New
Headers show

Commit Message

Xavi Drudis Ferran Aug. 28, 2016, 4 p.m. UTC
Hello. 

Sorry for my unfamiliarity with the kernel community. I'm afraid I'll
be getting the procedure wrong...

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 <shengjiu.wang@freescale.com>
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 <shengjiu.wang@freescale.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>

(the commit changed more clocks than SPDIF_GCLK) 

It might have to do with vendor commit 

http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/commit/arch/arm/boot/dts/imx6qdl.dtsi?h=imx_4.1.15_1.0.0_ga&id=dd7ebdf5bf0458e08f0be62fd49bc6f1ca9b2f25

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. 

Thank you for linux.

Comments

Xavi Drudis Ferran Aug. 29, 2016, 7:54 p.m. UTC | #1
El Mon, Aug 29, 2016 at 12:28:21PM -0700, Nicolin Chen deia:
> 
> 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.
>

I wonder if maybe they need to be defined, assigned or somehow listed
elsewhere and they are not for wandboard quad (but are for other boards)?
 
> > 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. 

I revert only some clocks, yes. I left SPDIF_GCLK and CLK_SBPA intact.
So it is a partial revert of the commit.

> 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. 

Thank you.

Patch
diff mbox

--- 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",