Lines Matching defs:spdif_priv

150 static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv)
152 struct regmap *regmap = spdif_priv->regmap;
153 struct platform_device *pdev = spdif_priv->pdev;
162 spdif_priv->dpll_locked = locked ? true : false;
166 static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv)
168 struct regmap *regmap = spdif_priv->regmap;
169 struct platform_device *pdev = spdif_priv->pdev;
174 if (!spdif_priv->dpll_locked)
179 static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name)
181 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
182 struct regmap *regmap = spdif_priv->regmap;
183 struct platform_device *pdev = spdif_priv->pdev;
218 static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv)
220 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
221 struct platform_device *pdev = spdif_priv->pdev;
234 static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv)
236 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
237 struct regmap *regmap = spdif_priv->regmap;
238 struct platform_device *pdev = spdif_priv->pdev;
254 static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv)
256 struct regmap *regmap = spdif_priv->regmap;
269 struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid;
270 struct platform_device *pdev = spdif_priv->pdev;
273 sis = spdif_intr_status_clear(spdif_priv);
276 spdif_irq_dpll_lock(spdif_priv);
291 spdif_irq_sym_error(spdif_priv);
297 spdif_irq_uqrx_full(spdif_priv, 'U');
303 spdif_irq_uqrx_full(spdif_priv, 'Q');
309 spdif_irq_uq_sync(spdif_priv);
312 spdif_irq_uq_err(spdif_priv);
321 spdif_irq_dpll_lock(spdif_priv);
334 static int spdif_softreset(struct fsl_spdif_priv *spdif_priv)
336 struct regmap *regmap = spdif_priv->regmap;
368 static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv)
370 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
371 struct regmap *regmap = spdif_priv->regmap;
372 struct platform_device *pdev = spdif_priv->pdev;
389 static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv,
392 struct regmap *regmap = spdif_priv->regmap;
393 u8 clksrc = spdif_priv->rxclk_src;
409 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
410 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
411 struct regmap *regmap = spdif_priv->regmap;
412 struct platform_device *pdev = spdif_priv->pdev;
445 clk = spdif_priv->txclk_src[rate];
451 txclk_df = spdif_priv->txclk_df[rate];
457 sysclk_df = spdif_priv->sysclk_df[rate];
459 if (!fsl_spdif_can_set_clk_rate(spdif_priv, clk))
463 ret = clk_set_rate(spdif_priv->txclk[rate],
474 clk_get_rate(spdif_priv->txclk[rate]));
487 spdif_priv->txrate[rate], sample_rate);
496 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
497 struct platform_device *pdev = spdif_priv->pdev;
498 struct regmap *regmap = spdif_priv->regmap;
504 ret = spdif_softreset(spdif_priv);
538 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
539 struct regmap *regmap = spdif_priv->regmap;
558 spdif_intr_status_clear(spdif_priv);
569 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
570 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
571 struct platform_device *pdev = spdif_priv->pdev;
584 spdif_write_channel_status(spdif_priv);
587 ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1);
597 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
598 struct regmap *regmap = spdif_priv->regmap;
656 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
657 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
671 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
672 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
679 spdif_write_channel_status(spdif_priv);
689 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
690 struct regmap *regmap = spdif_priv->regmap;
721 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
722 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
753 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
754 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
787 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
788 struct regmap *regmap = spdif_priv->regmap;
802 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
803 struct regmap *regmap = spdif_priv->regmap;
818 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
819 struct regmap *regmap = spdif_priv->regmap;
844 static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv,
847 struct regmap *regmap = spdif_priv->regmap;
848 struct platform_device *pdev = spdif_priv->pdev;
860 busclk_freq = clk_get_rate(spdif_priv->sysclk);
883 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
886 if (spdif_priv->dpll_locked)
887 rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL);
915 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
916 struct regmap *regmap = spdif_priv->regmap;
934 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
935 struct regmap *regmap = spdif_priv->regmap;
1148 static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
1153 bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk);
1177 spdif_priv->txclk_df[index] = txclk_df;
1178 spdif_priv->sysclk_df[index] = sysclk_df;
1179 spdif_priv->txrate[index] = arate;
1188 spdif_priv->txclk_df[index] = txclk_df;
1189 spdif_priv->sysclk_df[index] = sysclk_df;
1190 spdif_priv->txrate[index] = arate;
1198 spdif_priv->txclk_df[index] = txclk_df;
1199 spdif_priv->sysclk_df[index] = sysclk_df;
1200 spdif_priv->txrate[index] = arate;
1209 static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv,
1213 struct platform_device *pdev = spdif_priv->pdev;
1230 ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index,
1231 fsl_spdif_can_set_clk_rate(spdif_priv, i));
1236 spdif_priv->txclk[index] = clk;
1237 spdif_priv->txclk_src[index] = i;
1245 spdif_priv->txclk_src[index], rate[index]);
1247 spdif_priv->txclk_df[index], rate[index]);
1248 if (clk_is_match(spdif_priv->txclk[index], spdif_priv->sysclk))
1250 spdif_priv->sysclk_df[index], rate[index]);
1252 rate[index], spdif_priv->txrate[index]);
1259 struct fsl_spdif_priv *spdif_priv;
1265 spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL);
1266 if (!spdif_priv)
1269 spdif_priv->pdev = pdev;
1271 spdif_priv->soc = of_device_get_match_data(&pdev->dev);
1272 if (!spdif_priv->soc) {
1278 memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai));
1279 spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev);
1287 spdif_priv->regmap = devm_regmap_init_mmio_clk(&pdev->dev,
1289 if (IS_ERR(spdif_priv->regmap)) {
1291 return PTR_ERR(spdif_priv->regmap);
1299 dev_name(&pdev->dev), spdif_priv);
1306 spdif_priv->sysclk = devm_clk_get(&pdev->dev, "rxtx5");
1307 if (IS_ERR(spdif_priv->sysclk)) {
1309 return PTR_ERR(spdif_priv->sysclk);
1313 spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core");
1314 if (IS_ERR(spdif_priv->coreclk)) {
1316 return PTR_ERR(spdif_priv->coreclk);
1319 spdif_priv->spbaclk = devm_clk_get(&pdev->dev, "spba");
1320 if (IS_ERR(spdif_priv->spbaclk))
1324 spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1");
1325 if (IS_ERR(spdif_priv->rxclk)) {
1327 return PTR_ERR(spdif_priv->rxclk);
1329 spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC;
1332 ret = fsl_spdif_probe_txclk(spdif_priv, i);
1338 ctrl = &spdif_priv->fsl_spdif_control;
1349 spdif_priv->dpll_locked = false;
1351 spdif_priv->dma_params_tx.maxburst = FSL_SPDIF_TXFIFO_WML;
1352 spdif_priv->dma_params_rx.maxburst = FSL_SPDIF_RXFIFO_WML;
1353 spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL;
1354 spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL;
1357 dev_set_drvdata(&pdev->dev, spdif_priv);
1359 regcache_cache_only(spdif_priv->regmap, true);
1362 &spdif_priv->cpu_dai_drv, 1);
1391 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1395 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SIE, 0xffffff, 0);
1397 regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC,
1398 &spdif_priv->regcache_srpc);
1399 regcache_cache_only(spdif_priv->regmap, true);
1401 clk_disable_unprepare(spdif_priv->rxclk);
1404 clk_disable_unprepare(spdif_priv->txclk[i]);
1406 if (!IS_ERR(spdif_priv->spbaclk))
1407 clk_disable_unprepare(spdif_priv->spbaclk);
1408 clk_disable_unprepare(spdif_priv->coreclk);
1415 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1419 ret = clk_prepare_enable(spdif_priv->coreclk);
1425 if (!IS_ERR(spdif_priv->spbaclk)) {
1426 ret = clk_prepare_enable(spdif_priv->spbaclk);
1434 ret = clk_prepare_enable(spdif_priv->txclk[i]);
1439 ret = clk_prepare_enable(spdif_priv->rxclk);
1443 regcache_cache_only(spdif_priv->regmap, false);
1444 regcache_mark_dirty(spdif_priv->regmap);
1446 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC,
1448 spdif_priv->regcache_srpc);
1450 ret = regcache_sync(spdif_priv->regmap);
1457 clk_disable_unprepare(spdif_priv->rxclk);
1460 clk_disable_unprepare(spdif_priv->txclk[i]);
1461 if (!IS_ERR(spdif_priv->spbaclk))
1462 clk_disable_unprepare(spdif_priv->spbaclk);
1464 clk_disable_unprepare(spdif_priv->coreclk);