aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolin Chen <b42378@freescale.com>2013-11-18 04:17:10 -0500
committerNitin Garg <nitin.garg@freescale.com>2014-04-16 09:47:15 -0400
commit79ed8ec335647b9e05f423125b5cfc8feac825df (patch)
tree6b14700e68b6b53dc2ff6e81a715e818718ef62a
parent513d761e731f2ee34a99617f82060d71e5cff034 (diff)
ENGR00288421-1 ASoC: fsl_spdif: Use correct clock for Rx clock rate calculation
According to the Reference Manual, we should use system clock to calculate rx clock rate instead of spdif own clock. Thus add system clock to spdif driver and replace the incorrect one in rate calculation. Acked-by: Wang Shengjiu <b02247@freescale.com> Signed-off-by: Nicolin Chen <b42378@freescale.com>
-rw-r--r--sound/soc/fsl/fsl_spdif.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
index bce6d0e18c5e..266f72453e18 100644
--- a/sound/soc/fsl/fsl_spdif.c
+++ b/sound/soc/fsl/fsl_spdif.c
@@ -82,6 +82,7 @@ struct fsl_spdif_priv {
82 u8 rxclk_src; 82 u8 rxclk_src;
83 struct clk *txclk[SPDIF_TXRATE_MAX]; 83 struct clk *txclk[SPDIF_TXRATE_MAX];
84 struct clk *rxclk; 84 struct clk *rxclk;
85 struct clk *sysclk;
85 struct snd_dmaengine_dai_dma_data dma_params_tx; 86 struct snd_dmaengine_dai_dma_data dma_params_tx;
86 struct snd_dmaengine_dai_dma_data dma_params_rx; 87 struct snd_dmaengine_dai_dma_data dma_params_rx;
87 88
@@ -760,7 +761,7 @@ static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv,
760 clksrc = (phaseconf >> SRPC_CLKSRC_SEL_OFFSET) & 0xf; 761 clksrc = (phaseconf >> SRPC_CLKSRC_SEL_OFFSET) & 0xf;
761 if (srpc_dpll_locked[clksrc] && (phaseconf & SRPC_DPLL_LOCKED)) { 762 if (srpc_dpll_locked[clksrc] && (phaseconf & SRPC_DPLL_LOCKED)) {
762 /* Get bus clock from system */ 763 /* Get bus clock from system */
763 busclk_freq = clk_get_rate(spdif_priv->rxclk); 764 busclk_freq = clk_get_rate(spdif_priv->sysclk);
764 } 765 }
765 766
766 /* FreqMeas_CLK = (BUS_CLK * FreqMeas) / 2 ^ 10 / GAINSEL / 128 */ 767 /* FreqMeas_CLK = (BUS_CLK * FreqMeas) / 2 ^ 10 / GAINSEL / 128 */
@@ -1144,6 +1145,13 @@ static int fsl_spdif_probe(struct platform_device *pdev)
1144 return ret; 1145 return ret;
1145 } 1146 }
1146 1147
1148 /* Get system clock for rx clock rate calculation */
1149 spdif_priv->sysclk = devm_clk_get(&pdev->dev, "rxtx5");
1150 if (IS_ERR(spdif_priv->sysclk)) {
1151 dev_err(&pdev->dev, "no system clock(rxtx5) in devicetree\n");
1152 return PTR_ERR(spdif_priv->sysclk);
1153 }
1154
1147 /* Select clock source for rx/tx clock */ 1155 /* Select clock source for rx/tx clock */
1148 spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1"); 1156 spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1");
1149 if (IS_ERR(spdif_priv->rxclk)) { 1157 if (IS_ERR(spdif_priv->rxclk)) {