Lines Matching refs:spdif_priv
196 static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv) in spdif_irq_dpll_lock() argument
198 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_dpll_lock()
199 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_dpll_lock()
208 spdif_priv->dpll_locked = locked ? true : false; in spdif_irq_dpll_lock()
212 static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv) in spdif_irq_sym_error() argument
214 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_sym_error()
215 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_sym_error()
220 if (!spdif_priv->dpll_locked) in spdif_irq_sym_error()
225 static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name) in spdif_irq_uqrx_full() argument
227 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uqrx_full()
228 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_uqrx_full()
229 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uqrx_full()
264 static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv) in spdif_irq_uq_sync() argument
266 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uq_sync()
267 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uq_sync()
280 static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv) in spdif_irq_uq_err() argument
282 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uq_err()
283 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_uq_err()
284 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uq_err()
300 static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv) in spdif_intr_status_clear() argument
302 struct regmap *regmap = spdif_priv->regmap; in spdif_intr_status_clear()
315 struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid; in spdif_isr() local
316 struct platform_device *pdev = spdif_priv->pdev; in spdif_isr()
319 sis = spdif_intr_status_clear(spdif_priv); in spdif_isr()
322 spdif_irq_dpll_lock(spdif_priv); in spdif_isr()
337 spdif_irq_sym_error(spdif_priv); in spdif_isr()
343 spdif_irq_uqrx_full(spdif_priv, 'U'); in spdif_isr()
349 spdif_irq_uqrx_full(spdif_priv, 'Q'); in spdif_isr()
355 spdif_irq_uq_sync(spdif_priv); in spdif_isr()
358 spdif_irq_uq_err(spdif_priv); in spdif_isr()
367 spdif_irq_dpll_lock(spdif_priv); in spdif_isr()
380 static int spdif_softreset(struct fsl_spdif_priv *spdif_priv) in spdif_softreset() argument
382 struct regmap *regmap = spdif_priv->regmap; in spdif_softreset()
414 static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv) in spdif_write_channel_status() argument
416 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_write_channel_status()
417 struct regmap *regmap = spdif_priv->regmap; in spdif_write_channel_status()
418 struct platform_device *pdev = spdif_priv->pdev; in spdif_write_channel_status()
435 static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv, in spdif_set_rx_clksrc() argument
438 struct regmap *regmap = spdif_priv->regmap; in spdif_set_rx_clksrc()
439 u8 clksrc = spdif_priv->rxclk_src; in spdif_set_rx_clksrc()
455 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in spdif_set_sample_rate() local
456 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_set_sample_rate()
457 struct regmap *regmap = spdif_priv->regmap; in spdif_set_sample_rate()
458 struct platform_device *pdev = spdif_priv->pdev; in spdif_set_sample_rate()
499 clk = spdif_priv->txclk_src[rate]; in spdif_set_sample_rate()
505 txclk_df = spdif_priv->txclk_df[rate]; in spdif_set_sample_rate()
511 sysclk_df = spdif_priv->sysclk_df[rate]; in spdif_set_sample_rate()
513 if (!fsl_spdif_can_set_clk_rate(spdif_priv, clk)) in spdif_set_sample_rate()
517 ret = clk_set_rate(spdif_priv->txclk[rate], in spdif_set_sample_rate()
528 clk_get_rate(spdif_priv->txclk[rate])); in spdif_set_sample_rate()
541 spdif_priv->txrate[rate], sample_rate); in spdif_set_sample_rate()
550 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in fsl_spdif_startup() local
551 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_startup()
552 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_startup()
558 ret = spdif_softreset(spdif_priv); in fsl_spdif_startup()
592 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in fsl_spdif_shutdown() local
593 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_shutdown()
610 spdif_intr_status_clear(spdif_priv); in fsl_spdif_shutdown()
621 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in fsl_spdif_hw_params() local
622 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_hw_params()
623 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_hw_params()
636 spdif_write_channel_status(spdif_priv); in fsl_spdif_hw_params()
639 ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1); in fsl_spdif_hw_params()
649 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); in fsl_spdif_trigger() local
650 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_trigger()
706 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_pb_get() local
707 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_pb_get()
721 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_pb_put() local
722 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_pb_put()
729 spdif_write_channel_status(spdif_priv); in fsl_spdif_pb_put()
739 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_capture_get() local
740 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_capture_get()
771 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_subcode_get() local
772 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_subcode_get()
803 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_qget() local
804 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_qget()
825 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_rx_vbit_get() local
826 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_rx_vbit_get()
840 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_tx_vbit_get() local
841 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_tx_vbit_get()
856 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_tx_vbit_put() local
857 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_tx_vbit_put()
869 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_rx_rcm_get() local
870 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_rx_rcm_get()
884 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_rx_rcm_put() local
885 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_rx_rcm_put()
915 static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv, in spdif_get_rxclk_rate() argument
918 struct regmap *regmap = spdif_priv->regmap; in spdif_get_rxclk_rate()
919 struct platform_device *pdev = spdif_priv->pdev; in spdif_get_rxclk_rate()
931 busclk_freq = clk_get_rate(spdif_priv->sysclk); in spdif_get_rxclk_rate()
954 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_rxrate_get() local
957 if (spdif_priv->dpll_locked) in fsl_spdif_rxrate_get()
958 rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL); in fsl_spdif_rxrate_get()
974 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_usync_get() local
975 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_usync_get()
993 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_usync_put() local
994 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_usync_put()
1224 static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv, in fsl_spdif_txclk_caldiv() argument
1230 bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk); in fsl_spdif_txclk_caldiv()
1254 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1255 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1256 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1265 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1266 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1267 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1275 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1276 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1277 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1286 static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv, in fsl_spdif_probe_txclk() argument
1291 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_probe_txclk()
1308 ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index, in fsl_spdif_probe_txclk()
1309 fsl_spdif_can_set_clk_rate(spdif_priv, i)); in fsl_spdif_probe_txclk()
1314 spdif_priv->txclk[index] = clk; in fsl_spdif_probe_txclk()
1315 spdif_priv->txclk_src[index] = i; in fsl_spdif_probe_txclk()
1323 spdif_priv->txclk_src[index], rate[index]); in fsl_spdif_probe_txclk()
1325 spdif_priv->txclk_df[index], rate[index]); in fsl_spdif_probe_txclk()
1326 if (clk_is_match(spdif_priv->txclk[index], spdif_priv->sysclk)) in fsl_spdif_probe_txclk()
1328 spdif_priv->sysclk_df[index], rate[index]); in fsl_spdif_probe_txclk()
1330 rate[index], spdif_priv->txrate[index]); in fsl_spdif_probe_txclk()
1337 struct fsl_spdif_priv *spdif_priv; in fsl_spdif_probe() local
1343 spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL); in fsl_spdif_probe()
1344 if (!spdif_priv) in fsl_spdif_probe()
1347 spdif_priv->pdev = pdev; in fsl_spdif_probe()
1349 spdif_priv->soc = of_device_get_match_data(&pdev->dev); in fsl_spdif_probe()
1352 memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai)); in fsl_spdif_probe()
1353 spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev); in fsl_spdif_probe()
1354 spdif_priv->cpu_dai_drv.playback.formats = in fsl_spdif_probe()
1355 spdif_priv->soc->tx_formats; in fsl_spdif_probe()
1362 spdif_priv->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &fsl_spdif_regmap_config); in fsl_spdif_probe()
1363 if (IS_ERR(spdif_priv->regmap)) { in fsl_spdif_probe()
1365 return PTR_ERR(spdif_priv->regmap); in fsl_spdif_probe()
1368 for (i = 0; i < spdif_priv->soc->interrupts; i++) { in fsl_spdif_probe()
1374 dev_name(&pdev->dev), spdif_priv); in fsl_spdif_probe()
1382 spdif_priv->sysclk = devm_clk_get(&pdev->dev, "rxtx5"); in fsl_spdif_probe()
1383 if (IS_ERR(spdif_priv->sysclk)) { in fsl_spdif_probe()
1385 return PTR_ERR(spdif_priv->sysclk); in fsl_spdif_probe()
1389 spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core"); in fsl_spdif_probe()
1390 if (IS_ERR(spdif_priv->coreclk)) { in fsl_spdif_probe()
1392 return PTR_ERR(spdif_priv->coreclk); in fsl_spdif_probe()
1395 spdif_priv->spbaclk = devm_clk_get(&pdev->dev, "spba"); in fsl_spdif_probe()
1396 if (IS_ERR(spdif_priv->spbaclk)) in fsl_spdif_probe()
1400 spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1"); in fsl_spdif_probe()
1401 if (IS_ERR(spdif_priv->rxclk)) { in fsl_spdif_probe()
1403 return PTR_ERR(spdif_priv->rxclk); in fsl_spdif_probe()
1405 spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC; in fsl_spdif_probe()
1408 ret = fsl_spdif_probe_txclk(spdif_priv, i); in fsl_spdif_probe()
1414 ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_probe()
1425 spdif_priv->dpll_locked = false; in fsl_spdif_probe()
1427 spdif_priv->dma_params_tx.maxburst = spdif_priv->soc->tx_burst; in fsl_spdif_probe()
1428 spdif_priv->dma_params_rx.maxburst = spdif_priv->soc->rx_burst; in fsl_spdif_probe()
1429 spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL; in fsl_spdif_probe()
1430 spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL; in fsl_spdif_probe()
1433 dev_set_drvdata(&pdev->dev, spdif_priv); in fsl_spdif_probe()
1435 regcache_cache_only(spdif_priv->regmap, true); in fsl_spdif_probe()
1448 &spdif_priv->cpu_dai_drv, 1); in fsl_spdif_probe()
1471 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev); in fsl_spdif_runtime_suspend() local
1475 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SIE, 0xffffff, 0); in fsl_spdif_runtime_suspend()
1477 regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC, in fsl_spdif_runtime_suspend()
1478 &spdif_priv->regcache_srpc); in fsl_spdif_runtime_suspend()
1479 regcache_cache_only(spdif_priv->regmap, true); in fsl_spdif_runtime_suspend()
1481 clk_disable_unprepare(spdif_priv->rxclk); in fsl_spdif_runtime_suspend()
1484 clk_disable_unprepare(spdif_priv->txclk[i]); in fsl_spdif_runtime_suspend()
1486 if (!IS_ERR(spdif_priv->spbaclk)) in fsl_spdif_runtime_suspend()
1487 clk_disable_unprepare(spdif_priv->spbaclk); in fsl_spdif_runtime_suspend()
1488 clk_disable_unprepare(spdif_priv->coreclk); in fsl_spdif_runtime_suspend()
1495 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev); in fsl_spdif_runtime_resume() local
1499 ret = clk_prepare_enable(spdif_priv->coreclk); in fsl_spdif_runtime_resume()
1505 if (!IS_ERR(spdif_priv->spbaclk)) { in fsl_spdif_runtime_resume()
1506 ret = clk_prepare_enable(spdif_priv->spbaclk); in fsl_spdif_runtime_resume()
1514 ret = clk_prepare_enable(spdif_priv->txclk[i]); in fsl_spdif_runtime_resume()
1519 ret = clk_prepare_enable(spdif_priv->rxclk); in fsl_spdif_runtime_resume()
1523 regcache_cache_only(spdif_priv->regmap, false); in fsl_spdif_runtime_resume()
1524 regcache_mark_dirty(spdif_priv->regmap); in fsl_spdif_runtime_resume()
1526 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC, in fsl_spdif_runtime_resume()
1528 spdif_priv->regcache_srpc); in fsl_spdif_runtime_resume()
1530 ret = regcache_sync(spdif_priv->regmap); in fsl_spdif_runtime_resume()
1537 clk_disable_unprepare(spdif_priv->rxclk); in fsl_spdif_runtime_resume()
1540 clk_disable_unprepare(spdif_priv->txclk[i]); in fsl_spdif_runtime_resume()
1541 if (!IS_ERR(spdif_priv->spbaclk)) in fsl_spdif_runtime_resume()
1542 clk_disable_unprepare(spdif_priv->spbaclk); in fsl_spdif_runtime_resume()
1544 clk_disable_unprepare(spdif_priv->coreclk); in fsl_spdif_runtime_resume()