diff options
author | Nicolin Chen <b42378@freescale.com> | 2013-11-18 04:17:10 -0500 |
---|---|---|
committer | Nitin Garg <nitin.garg@freescale.com> | 2014-04-16 09:47:15 -0400 |
commit | 79ed8ec335647b9e05f423125b5cfc8feac825df (patch) | |
tree | 6b14700e68b6b53dc2ff6e81a715e818718ef62a | |
parent | 513d761e731f2ee34a99617f82060d71e5cff034 (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.c | 10 |
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)) { |