Lines Matching refs:spdif_priv

114 static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv)  in spdif_irq_dpll_lock()  argument
116 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_dpll_lock()
117 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_dpll_lock()
126 spdif_priv->dpll_locked = locked ? true : false; in spdif_irq_dpll_lock()
130 static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv) in spdif_irq_sym_error() argument
132 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_sym_error()
133 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_sym_error()
138 if (!spdif_priv->dpll_locked) in spdif_irq_sym_error()
143 static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name) in spdif_irq_uqrx_full() argument
145 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uqrx_full()
146 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_uqrx_full()
147 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uqrx_full()
182 static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv) in spdif_irq_uq_sync() argument
184 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uq_sync()
185 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uq_sync()
198 static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv) in spdif_irq_uq_err() argument
200 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uq_err()
201 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_uq_err()
202 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uq_err()
218 static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv) in spdif_intr_status_clear() argument
220 struct regmap *regmap = spdif_priv->regmap; in spdif_intr_status_clear()
233 struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid; in spdif_isr() local
234 struct platform_device *pdev = spdif_priv->pdev; in spdif_isr()
237 sis = spdif_intr_status_clear(spdif_priv); in spdif_isr()
240 spdif_irq_dpll_lock(spdif_priv); in spdif_isr()
255 spdif_irq_sym_error(spdif_priv); in spdif_isr()
261 spdif_irq_uqrx_full(spdif_priv, 'U'); in spdif_isr()
267 spdif_irq_uqrx_full(spdif_priv, 'Q'); in spdif_isr()
273 spdif_irq_uq_sync(spdif_priv); in spdif_isr()
276 spdif_irq_uq_err(spdif_priv); in spdif_isr()
285 spdif_irq_dpll_lock(spdif_priv); in spdif_isr()
298 static int spdif_softreset(struct fsl_spdif_priv *spdif_priv) in spdif_softreset() argument
300 struct regmap *regmap = spdif_priv->regmap; in spdif_softreset()
326 static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv) in spdif_write_channel_status() argument
328 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_write_channel_status()
329 struct regmap *regmap = spdif_priv->regmap; in spdif_write_channel_status()
330 struct platform_device *pdev = spdif_priv->pdev; in spdif_write_channel_status()
347 static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv, in spdif_set_rx_clksrc() argument
350 struct regmap *regmap = spdif_priv->regmap; in spdif_set_rx_clksrc()
351 u8 clksrc = spdif_priv->rxclk_src; in spdif_set_rx_clksrc()
367 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in spdif_set_sample_rate() local
368 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_set_sample_rate()
369 struct regmap *regmap = spdif_priv->regmap; in spdif_set_sample_rate()
370 struct platform_device *pdev = spdif_priv->pdev; in spdif_set_sample_rate()
402 clk = spdif_priv->txclk_src[rate]; in spdif_set_sample_rate()
408 txclk_df = spdif_priv->txclk_df[rate]; in spdif_set_sample_rate()
414 sysclk_df = spdif_priv->sysclk_df[rate]; in spdif_set_sample_rate()
424 ret = clk_set_rate(spdif_priv->txclk[rate], 64 * sample_rate * (txclk_df + 1)); in spdif_set_sample_rate()
434 clk_get_rate(spdif_priv->txclk[rate])); in spdif_set_sample_rate()
447 spdif_priv->txrate[rate], sample_rate); in spdif_set_sample_rate()
456 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_startup() local
457 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_startup()
458 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_startup()
464 ret = clk_prepare_enable(spdif_priv->coreclk); in fsl_spdif_startup()
470 ret = spdif_softreset(spdif_priv); in fsl_spdif_startup()
488 clk_prepare_enable(spdif_priv->txclk[i]); in fsl_spdif_startup()
493 clk_prepare_enable(spdif_priv->rxclk); in fsl_spdif_startup()
503 clk_disable_unprepare(spdif_priv->coreclk); in fsl_spdif_startup()
512 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_shutdown() local
513 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_shutdown()
522 clk_disable_unprepare(spdif_priv->txclk[i]); in fsl_spdif_shutdown()
527 clk_disable_unprepare(spdif_priv->rxclk); in fsl_spdif_shutdown()
533 spdif_intr_status_clear(spdif_priv); in fsl_spdif_shutdown()
536 clk_disable_unprepare(spdif_priv->coreclk); in fsl_spdif_shutdown()
545 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_hw_params() local
546 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_hw_params()
547 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_hw_params()
560 spdif_write_channel_status(spdif_priv); in fsl_spdif_hw_params()
563 ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1); in fsl_spdif_hw_params()
573 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_trigger() local
574 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_trigger()
630 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_pb_get() local
631 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_pb_get()
645 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_pb_put() local
646 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_pb_put()
653 spdif_write_channel_status(spdif_priv); in fsl_spdif_pb_put()
663 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_capture_get() local
664 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_capture_get()
695 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_subcode_get() local
696 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_subcode_get()
727 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_qget() local
728 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_qget()
761 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_vbit_get() local
762 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_vbit_get()
789 static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv, in spdif_get_rxclk_rate() argument
792 struct regmap *regmap = spdif_priv->regmap; in spdif_get_rxclk_rate()
793 struct platform_device *pdev = spdif_priv->pdev; in spdif_get_rxclk_rate()
805 busclk_freq = clk_get_rate(spdif_priv->sysclk); in spdif_get_rxclk_rate()
828 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_rxrate_get() local
831 if (spdif_priv->dpll_locked) in fsl_spdif_rxrate_get()
832 rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL); in fsl_spdif_rxrate_get()
860 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_usync_get() local
861 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_usync_get()
879 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_usync_put() local
880 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_usync_put()
1047 static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv, in fsl_spdif_txclk_caldiv() argument
1052 bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk); in fsl_spdif_txclk_caldiv()
1075 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1076 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1077 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1086 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1087 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1088 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1096 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1097 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1098 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1107 static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv, in fsl_spdif_probe_txclk() argument
1111 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_probe_txclk()
1128 ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index, in fsl_spdif_probe_txclk()
1134 spdif_priv->txclk[index] = clk; in fsl_spdif_probe_txclk()
1135 spdif_priv->txclk_src[index] = i; in fsl_spdif_probe_txclk()
1143 spdif_priv->txclk_src[index], rate[index]); in fsl_spdif_probe_txclk()
1145 spdif_priv->txclk_df[index], rate[index]); in fsl_spdif_probe_txclk()
1146 if (clk_is_match(spdif_priv->txclk[index], spdif_priv->sysclk)) in fsl_spdif_probe_txclk()
1148 spdif_priv->sysclk_df[index], rate[index]); in fsl_spdif_probe_txclk()
1150 rate[index], spdif_priv->txrate[index]); in fsl_spdif_probe_txclk()
1158 struct fsl_spdif_priv *spdif_priv; in fsl_spdif_probe() local
1167 spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL); in fsl_spdif_probe()
1168 if (!spdif_priv) in fsl_spdif_probe()
1171 spdif_priv->pdev = pdev; in fsl_spdif_probe()
1174 memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai)); in fsl_spdif_probe()
1175 spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev); in fsl_spdif_probe()
1183 spdif_priv->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_spdif_probe()
1185 if (IS_ERR(spdif_priv->regmap)) { in fsl_spdif_probe()
1187 return PTR_ERR(spdif_priv->regmap); in fsl_spdif_probe()
1197 dev_name(&pdev->dev), spdif_priv); in fsl_spdif_probe()
1204 spdif_priv->sysclk = devm_clk_get(&pdev->dev, "rxtx5"); in fsl_spdif_probe()
1205 if (IS_ERR(spdif_priv->sysclk)) { in fsl_spdif_probe()
1207 return PTR_ERR(spdif_priv->sysclk); in fsl_spdif_probe()
1211 spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core"); in fsl_spdif_probe()
1212 if (IS_ERR(spdif_priv->coreclk)) { in fsl_spdif_probe()
1214 return PTR_ERR(spdif_priv->coreclk); in fsl_spdif_probe()
1218 spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1"); in fsl_spdif_probe()
1219 if (IS_ERR(spdif_priv->rxclk)) { in fsl_spdif_probe()
1221 return PTR_ERR(spdif_priv->rxclk); in fsl_spdif_probe()
1223 spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC; in fsl_spdif_probe()
1226 ret = fsl_spdif_probe_txclk(spdif_priv, i); in fsl_spdif_probe()
1232 ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_probe()
1243 spdif_priv->dpll_locked = false; in fsl_spdif_probe()
1245 spdif_priv->dma_params_tx.maxburst = FSL_SPDIF_TXFIFO_WML; in fsl_spdif_probe()
1246 spdif_priv->dma_params_rx.maxburst = FSL_SPDIF_RXFIFO_WML; in fsl_spdif_probe()
1247 spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL; in fsl_spdif_probe()
1248 spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL; in fsl_spdif_probe()
1251 dev_set_drvdata(&pdev->dev, spdif_priv); in fsl_spdif_probe()
1254 &spdif_priv->cpu_dai_drv, 1); in fsl_spdif_probe()