Lines Matching defs:spdif_priv

222 static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv)
224 struct regmap *regmap = spdif_priv->regmap;
225 struct platform_device *pdev = spdif_priv->pdev;
234 spdif_priv->dpll_locked = locked ? true : false;
236 if (spdif_priv->snd_card && spdif_priv->rxrate_kcontrol) {
237 snd_ctl_notify(spdif_priv->snd_card,
239 &spdif_priv->rxrate_kcontrol->id);
244 static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv)
246 struct regmap *regmap = spdif_priv->regmap;
247 struct platform_device *pdev = spdif_priv->pdev;
252 if (!spdif_priv->dpll_locked)
257 static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name)
259 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
260 struct regmap *regmap = spdif_priv->regmap;
261 struct platform_device *pdev = spdif_priv->pdev;
296 static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv)
298 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
299 struct platform_device *pdev = spdif_priv->pdev;
312 static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv)
314 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
315 struct regmap *regmap = spdif_priv->regmap;
316 struct platform_device *pdev = spdif_priv->pdev;
332 static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv)
334 struct regmap *regmap = spdif_priv->regmap;
347 struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid;
348 struct platform_device *pdev = spdif_priv->pdev;
351 sis = spdif_intr_status_clear(spdif_priv);
354 spdif_irq_dpll_lock(spdif_priv);
369 spdif_irq_sym_error(spdif_priv);
375 spdif_irq_uqrx_full(spdif_priv, 'U');
381 spdif_irq_uqrx_full(spdif_priv, 'Q');
387 spdif_irq_uq_sync(spdif_priv);
390 spdif_irq_uq_err(spdif_priv);
399 spdif_irq_dpll_lock(spdif_priv);
412 static int spdif_softreset(struct fsl_spdif_priv *spdif_priv)
414 struct regmap *regmap = spdif_priv->regmap;
446 static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv)
448 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
449 struct regmap *regmap = spdif_priv->regmap;
450 struct platform_device *pdev = spdif_priv->pdev;
465 if (spdif_priv->soc->cchannel_192b) {
484 static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv,
487 struct regmap *regmap = spdif_priv->regmap;
488 u8 clksrc = spdif_priv->rxclk_src;
500 static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv, enum spdif_txrate index);
506 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
507 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
508 struct regmap *regmap = spdif_priv->regmap;
509 struct platform_device *pdev = spdif_priv->pdev;
554 ret = fsl_spdif_probe_txclk(spdif_priv, rate);
558 clk = spdif_priv->txclk_src[rate];
564 txclk_df = spdif_priv->txclk_df[rate];
570 sysclk_df = spdif_priv->sysclk_df[rate];
572 if (!fsl_spdif_can_set_clk_rate(spdif_priv, clk))
576 ret = clk_set_rate(spdif_priv->txclk[clk],
587 clk_get_rate(spdif_priv->txclk[clk]));
600 spdif_priv->txrate[rate], sample_rate);
609 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
610 struct platform_device *pdev = spdif_priv->pdev;
611 struct regmap *regmap = spdif_priv->regmap;
617 ret = spdif_softreset(spdif_priv);
651 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
652 struct regmap *regmap = spdif_priv->regmap;
671 spdif_intr_status_clear(spdif_priv);
677 static int spdif_reparent_rootclk(struct fsl_spdif_priv *spdif_priv, unsigned int sample_rate)
679 struct platform_device *pdev = spdif_priv->pdev;
684 if (!fsl_spdif_can_set_clk_rate(spdif_priv, STC_TXCLK_SPDIF_ROOT))
688 clk = spdif_priv->txclk[STC_TXCLK_SPDIF_ROOT];
692 fsl_asoc_reparent_pll_clocks(&pdev->dev, clk, spdif_priv->pll8k_clk,
693 spdif_priv->pll11k_clk, sample_rate);
705 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
706 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
707 struct platform_device *pdev = spdif_priv->pdev;
712 ret = spdif_reparent_rootclk(spdif_priv, sample_rate);
727 spdif_write_channel_status(spdif_priv);
730 ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1);
740 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
741 struct regmap *regmap = spdif_priv->regmap;
791 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
792 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
806 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
807 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
814 spdif_write_channel_status(spdif_priv);
824 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
825 struct regmap *regmap = spdif_priv->regmap;
856 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
857 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
888 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
889 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
910 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
911 struct regmap *regmap = spdif_priv->regmap;
925 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
926 struct regmap *regmap = spdif_priv->regmap;
941 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
942 struct regmap *regmap = spdif_priv->regmap;
954 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
955 struct regmap *regmap = spdif_priv->regmap;
969 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
970 struct regmap *regmap = spdif_priv->regmap;
1063 static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv,
1066 struct regmap *regmap = spdif_priv->regmap;
1067 struct platform_device *pdev = spdif_priv->pdev;
1079 busclk_freq = clk_get_rate(spdif_priv->sysclk);
1102 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1105 if (spdif_priv->dpll_locked)
1106 rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL);
1122 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1123 struct regmap *regmap = spdif_priv->regmap;
1141 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
1142 struct regmap *regmap = spdif_priv->regmap;
1426 static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
1432 bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk);
1456 spdif_priv->txclk_df[index] = txclk_df;
1457 spdif_priv->sysclk_df[index] = sysclk_df;
1458 spdif_priv->txrate[index] = arate;
1467 spdif_priv->txclk_df[index] = txclk_df;
1468 spdif_priv->sysclk_df[index] = sysclk_df;
1469 spdif_priv->txrate[index] = arate;
1477 spdif_priv->txclk_df[index] = txclk_df;
1478 spdif_priv->sysclk_df[index] = sysclk_df;
1479 spdif_priv->txrate[index] = arate;
1488 static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv,
1493 struct platform_device *pdev = spdif_priv->pdev;
1500 clk = spdif_priv->txclk[i];
1508 ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index,
1509 fsl_spdif_can_set_clk_rate(spdif_priv, i));
1514 spdif_priv->txclk_src[index] = i;
1522 spdif_priv->txclk_src[index], rate[index]);
1524 spdif_priv->txclk_df[index], rate[index]);
1525 if (clk_is_match(spdif_priv->txclk[spdif_priv->txclk_src[index]], spdif_priv->sysclk))
1527 spdif_priv->sysclk_df[index], rate[index]);
1529 rate[index], spdif_priv->txrate[index]);
1536 struct fsl_spdif_priv *spdif_priv;
1543 spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL);
1544 if (!spdif_priv)
1547 spdif_priv->pdev = pdev;
1549 spdif_priv->soc = of_device_get_match_data(&pdev->dev);
1552 memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai));
1553 spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev);
1554 spdif_priv->cpu_dai_drv.playback.formats =
1555 spdif_priv->soc->tx_formats;
1562 spdif_priv->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &fsl_spdif_regmap_config);
1563 if (IS_ERR(spdif_priv->regmap)) {
1565 return PTR_ERR(spdif_priv->regmap);
1568 for (i = 0; i < spdif_priv->soc->interrupts; i++) {
1574 dev_name(&pdev->dev), spdif_priv);
1583 spdif_priv->txclk[i] = devm_clk_get(&pdev->dev, tmp);
1584 if (IS_ERR(spdif_priv->txclk[i])) {
1586 return PTR_ERR(spdif_priv->txclk[i]);
1591 spdif_priv->sysclk = spdif_priv->txclk[5];
1592 if (IS_ERR(spdif_priv->sysclk)) {
1594 return PTR_ERR(spdif_priv->sysclk);
1598 spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core");
1599 if (IS_ERR(spdif_priv->coreclk)) {
1601 return PTR_ERR(spdif_priv->coreclk);
1604 spdif_priv->spbaclk = devm_clk_get(&pdev->dev, "spba");
1605 if (IS_ERR(spdif_priv->spbaclk))
1609 spdif_priv->rxclk = spdif_priv->txclk[1];
1610 if (IS_ERR(spdif_priv->rxclk)) {
1612 return PTR_ERR(spdif_priv->rxclk);
1614 spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC;
1616 fsl_asoc_get_pll_clocks(&pdev->dev, &spdif_priv->pll8k_clk,
1617 &spdif_priv->pll11k_clk);
1620 ctrl = &spdif_priv->fsl_spdif_control;
1631 spdif_priv->dpll_locked = false;
1633 spdif_priv->dma_params_tx.maxburst = spdif_priv->soc->tx_burst;
1634 spdif_priv->dma_params_rx.maxburst = spdif_priv->soc->rx_burst;
1635 spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL;
1636 spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL;
1639 dev_set_drvdata(&pdev->dev, spdif_priv);
1641 regcache_cache_only(spdif_priv->regmap, true);
1654 &spdif_priv->cpu_dai_drv, 1);
1675 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1679 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SIE, 0xffffff, 0);
1681 regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC,
1682 &spdif_priv->regcache_srpc);
1683 regcache_cache_only(spdif_priv->regmap, true);
1686 clk_disable_unprepare(spdif_priv->txclk[i]);
1688 if (!IS_ERR(spdif_priv->spbaclk))
1689 clk_disable_unprepare(spdif_priv->spbaclk);
1690 clk_disable_unprepare(spdif_priv->coreclk);
1697 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
1701 ret = clk_prepare_enable(spdif_priv->coreclk);
1707 if (!IS_ERR(spdif_priv->spbaclk)) {
1708 ret = clk_prepare_enable(spdif_priv->spbaclk);
1716 ret = clk_prepare_enable(spdif_priv->txclk[i]);
1721 regcache_cache_only(spdif_priv->regmap, false);
1722 regcache_mark_dirty(spdif_priv->regmap);
1724 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC,
1726 spdif_priv->regcache_srpc);
1728 ret = regcache_sync(spdif_priv->regmap);
1736 clk_disable_unprepare(spdif_priv->txclk[i]);
1737 if (!IS_ERR(spdif_priv->spbaclk))
1738 clk_disable_unprepare(spdif_priv->spbaclk);
1740 clk_disable_unprepare(spdif_priv->coreclk);