Lines Matching refs:cygaud

249 	struct cygnus_audio *cygaud = snd_soc_dai_get_drvdata(dai);  in cygnus_dai_get_portinfo()  local
251 return &cygaud->portinfo[dai->id]; in cygnus_dai_get_portinfo()
261 value = readl(aio->cygaud->audio + aio->regs.i2s_stream_cfg); in audio_ssp_init_portregs()
266 aio->cygaud->audio + aio->regs.bf_sourcech_grp); in audio_ssp_init_portregs()
272 writel(value, aio->cygaud->audio + aio->regs.i2s_stream_cfg); in audio_ssp_init_portregs()
275 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_init_portregs()
279 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_init_portregs()
282 value = readl(aio->cygaud->i2s_in + in audio_ssp_init_portregs()
286 writel(value, aio->cygaud->i2s_in + in audio_ssp_init_portregs()
292 value = readl(aio->cygaud->audio + aio->regs.bf_destch_cfg); in audio_ssp_init_portregs()
297 writel(value, aio->cygaud->audio + aio->regs.bf_destch_cfg); in audio_ssp_init_portregs()
300 value = readl(aio->cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in audio_ssp_init_portregs()
302 writel(value, aio->cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in audio_ssp_init_portregs()
305 writel(aio->portnum, aio->cygaud->audio + BF_SRC_GRP3_OFFSET); in audio_ssp_init_portregs()
307 value = readl(aio->cygaud->audio + SPDIF_CTRL_OFFSET); in audio_ssp_init_portregs()
309 writel(value, aio->cygaud->audio + SPDIF_CTRL_OFFSET); in audio_ssp_init_portregs()
312 value = readl(aio->cygaud->audio + SPDIF_STREAM_CFG_OFFSET); in audio_ssp_init_portregs()
316 writel(value, aio->cygaud->audio + SPDIF_STREAM_CFG_OFFSET); in audio_ssp_init_portregs()
318 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_init_portregs()
322 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_init_portregs()
325 value = readl(aio->cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in audio_ssp_init_portregs()
327 writel(value, aio->cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in audio_ssp_init_portregs()
330 dev_err(aio->cygaud->dev, "Port not supported\n"); in audio_ssp_init_portregs()
341 value = readl(aio->cygaud->audio + aio->regs.bf_destch_cfg); in audio_ssp_in_enable()
343 writel(value, aio->cygaud->audio + aio->regs.bf_destch_cfg); in audio_ssp_in_enable()
345 writel(0x1, aio->cygaud->audio + aio->regs.bf_destch_ctrl); in audio_ssp_in_enable()
347 value = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_in_enable()
350 writel(value, aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_in_enable()
352 value = readl(aio->cygaud->i2s_in + aio->regs.i2s_cap_stream_cfg); in audio_ssp_in_enable()
354 writel(value, aio->cygaud->i2s_in + aio->regs.i2s_cap_stream_cfg); in audio_ssp_in_enable()
363 value = readl(aio->cygaud->i2s_in + aio->regs.i2s_cap_stream_cfg); in audio_ssp_in_disable()
365 writel(value, aio->cygaud->i2s_in + aio->regs.i2s_cap_stream_cfg); in audio_ssp_in_disable()
371 value = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_in_disable()
374 writel(value, aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_in_disable()
377 writel(0x0, aio->cygaud->audio + aio->regs.bf_destch_ctrl); in audio_ssp_in_disable()
379 value = readl(aio->cygaud->audio + aio->regs.bf_destch_cfg); in audio_ssp_in_disable()
381 writel(value, aio->cygaud->audio + aio->regs.bf_destch_cfg); in audio_ssp_in_disable()
391 value = readl(aio->cygaud->audio + aio->regs.i2s_stream_cfg); in audio_ssp_out_enable()
393 writel(value, aio->cygaud->audio + aio->regs.i2s_stream_cfg); in audio_ssp_out_enable()
395 writel(1, aio->cygaud->audio + aio->regs.bf_sourcech_ctrl); in audio_ssp_out_enable()
397 value = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_out_enable()
400 writel(value, aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_out_enable()
402 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_enable()
404 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_enable()
409 value = readl(aio->cygaud->audio + SPDIF_FORMAT_CFG_OFFSET); in audio_ssp_out_enable()
411 writel(value, aio->cygaud->audio + SPDIF_FORMAT_CFG_OFFSET); in audio_ssp_out_enable()
413 writel(1, aio->cygaud->audio + aio->regs.bf_sourcech_ctrl); in audio_ssp_out_enable()
415 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_enable()
417 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_enable()
420 dev_err(aio->cygaud->dev, in audio_ssp_out_enable()
439 value = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_out_disable()
442 writel(value, aio->cygaud->audio + aio->regs.i2s_cfg); in audio_ssp_out_disable()
446 value = readl(aio->cygaud->audio + BF_SRC_GRP_SYNC_DIS_OFFSET); in audio_ssp_out_disable()
448 writel(value, aio->cygaud->audio + BF_SRC_GRP_SYNC_DIS_OFFSET); in audio_ssp_out_disable()
450 writel(0, aio->cygaud->audio + aio->regs.bf_sourcech_ctrl); in audio_ssp_out_disable()
452 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_disable()
454 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_disable()
457 value = readl(aio->cygaud->audio + BF_SRC_GRP_SYNC_DIS_OFFSET); in audio_ssp_out_disable()
459 writel(value, aio->cygaud->audio + BF_SRC_GRP_SYNC_DIS_OFFSET); in audio_ssp_out_disable()
461 value = readl(aio->cygaud->audio + aio->regs.i2s_stream_cfg); in audio_ssp_out_disable()
463 writel(value, aio->cygaud->audio + aio->regs.i2s_stream_cfg); in audio_ssp_out_disable()
466 value = readl(aio->cygaud->i2s_in + IOP_SW_INIT_LOGIC); in audio_ssp_out_disable()
468 writel(value, aio->cygaud->i2s_in + IOP_SW_INIT_LOGIC); in audio_ssp_out_disable()
470 writel(value, aio->cygaud->i2s_in + IOP_SW_INIT_LOGIC); in audio_ssp_out_disable()
473 value = readl(aio->cygaud->audio + SPDIF_FORMAT_CFG_OFFSET); in audio_ssp_out_disable()
475 writel(value, aio->cygaud->audio + SPDIF_FORMAT_CFG_OFFSET); in audio_ssp_out_disable()
476 writel(0, aio->cygaud->audio + aio->regs.bf_sourcech_ctrl); in audio_ssp_out_disable()
478 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_disable()
480 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in audio_ssp_out_disable()
483 dev_err(aio->cygaud->dev, in audio_ssp_out_disable()
491 static int pll_configure_mclk(struct cygnus_audio *cygaud, u32 mclk, in pll_configure_mclk() argument
507 dev_err(cygaud->dev, in pll_configure_mclk()
512 ch_clk = cygaud->audio_clk[p_entry->pll_ch_num]; in pll_configure_mclk()
517 dev_err(cygaud->dev, "%s clk_prepare_enable failed %d\n", in pll_configure_mclk()
527 dev_err(cygaud->dev, "%s clk_prepare_enable failed %d\n", in pll_configure_mclk()
536 dev_err(cygaud->dev, "%s Set MCLK rate failed: %d\n", in pll_configure_mclk()
576 dev_err(aio->cygaud->dev, in cygnus_ssp_set_clocks()
578 dev_err(aio->cygaud->dev, "lrclk = %u, bits/frame = %u, mclk = %u\n", in cygnus_ssp_set_clocks()
594 value = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in cygnus_ssp_set_clocks()
597 writel(value, aio->cygaud->audio + aio->regs.i2s_cfg); in cygnus_ssp_set_clocks()
598 dev_dbg(aio->cygaud->dev, in cygnus_ssp_set_clocks()
604 dev_err(aio->cygaud->dev, "Unknown port type\n"); in cygnus_ssp_set_clocks()
609 value = readl(aio->cygaud->audio + aio->regs.i2s_mclk_cfg); in cygnus_ssp_set_clocks()
612 writel(value, aio->cygaud->audio + aio->regs.i2s_mclk_cfg); in cygnus_ssp_set_clocks()
614 dev_dbg(aio->cygaud->dev, "mclk cfg reg = 0x%x\n", value); in cygnus_ssp_set_clocks()
615 dev_dbg(aio->cygaud->dev, "bits per frame = %u, mclk = %u Hz, lrclk = %u Hz\n", in cygnus_ssp_set_clocks()
630 dev_dbg(aio->cygaud->dev, "%s port = %d\n", __func__, aio->portnum); in cygnus_ssp_hw_params()
631 dev_dbg(aio->cygaud->dev, "params_channels %d\n", in cygnus_ssp_hw_params()
633 dev_dbg(aio->cygaud->dev, "rate %d\n", params_rate(params)); in cygnus_ssp_hw_params()
634 dev_dbg(aio->cygaud->dev, "format %d\n", params_format(params)); in cygnus_ssp_hw_params()
641 dev_err(aio->cygaud->dev, "Cannot run %d channels at %dHz\n", in cygnus_ssp_hw_params()
650 dev_err(aio->cygaud->dev, in cygnus_ssp_hw_params()
656 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in cygnus_ssp_hw_params()
659 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in cygnus_ssp_hw_params()
675 value = readl(aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in cygnus_ssp_hw_params()
678 writel(value, aio->cygaud->audio + aio->regs.bf_sourcech_cfg); in cygnus_ssp_hw_params()
684 value = readl(aio->cygaud->audio + in cygnus_ssp_hw_params()
687 writel(value, aio->cygaud->audio + in cygnus_ssp_hw_params()
692 value = readl(aio->cygaud->audio + in cygnus_ssp_hw_params()
695 writel(value, aio->cygaud->audio + in cygnus_ssp_hw_params()
721 struct cygnus_audio *cygaud = snd_soc_dai_get_drvdata(dai); in cygnus_ssp_set_sysclk() local
723 dev_dbg(aio->cygaud->dev, in cygnus_ssp_set_sysclk()
725 sel = pll_configure_mclk(cygaud, freq, aio); in cygnus_ssp_set_sysclk()
727 dev_err(aio->cygaud->dev, in cygnus_ssp_set_sysclk()
734 dev_dbg(aio->cygaud->dev, "%s Setting MCLKSEL to %d\n", __func__, sel); in cygnus_ssp_set_sysclk()
735 value = readl(aio->cygaud->audio + aio->regs.i2s_mclk_cfg); in cygnus_ssp_set_sysclk()
738 writel(value, aio->cygaud->audio + aio->regs.i2s_mclk_cfg); in cygnus_ssp_set_sysclk()
775 val = readl(aio->cygaud->audio + aio->regs.i2s_mclk_cfg); in cygnus_ssp_shutdown()
777 if (val >= ARRAY_SIZE(aio->cygaud->audio_clk)) { in cygnus_ssp_shutdown()
778 dev_err(aio->cygaud->dev, "Clk index %u is out of bounds\n", in cygnus_ssp_shutdown()
785 clk_disable_unprepare(aio->cygaud-> in cygnus_ssp_shutdown()
791 clk_disable_unprepare(aio->cygaud-> in cygnus_ssp_shutdown()
844 dev_dbg(aio->cygaud->dev, "%s Enter fmt: %x\n", __func__, fmt); in cygnus_ssp_set_fmt()
896 ssp_curcfg = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in cygnus_ssp_set_fmt()
898 writel(ssp_outcfg, aio->cygaud->audio + aio->regs.i2s_cfg); in cygnus_ssp_set_fmt()
904 ssp_curcfg = readl(aio->cygaud->i2s_in + aio->regs.i2s_cap_cfg); in cygnus_ssp_set_fmt()
906 writel(ssp_incfg, aio->cygaud->i2s_in + aio->regs.i2s_cap_cfg); in cygnus_ssp_set_fmt()
908 val = readl(aio->cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in cygnus_ssp_set_fmt()
926 dev_dbg(aio->cygaud->dev, "%s Set OE bits 0x%x\n", __func__, val); in cygnus_ssp_set_fmt()
927 writel(val, aio->cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in cygnus_ssp_set_fmt()
936 struct cygnus_audio *cygaud = snd_soc_dai_get_drvdata(dai); in cygnus_ssp_trigger() local
938 dev_dbg(aio->cygaud->dev, in cygnus_ssp_trigger()
949 cygaud->active_ports++; in cygnus_ssp_trigger()
960 cygaud->active_ports--; in cygnus_ssp_trigger()
982 dev_err(aio->cygaud->dev, in cygnus_set_dai_tdm_slot()
1010 dev_warn(aio->cygaud->dev, in cygnus_set_dai_tdm_slot()
1024 dev_err(aio->cygaud->dev, in cygnus_set_dai_tdm_slot()
1032 dev_dbg(aio->cygaud->dev, "%s active_slots %u, bits per frame %d\n", in cygnus_set_dai_tdm_slot()
1036 value = readl(aio->cygaud->i2s_in + aio->regs.i2s_cap_cfg); in cygnus_set_dai_tdm_slot()
1041 writel(value, aio->cygaud->i2s_in + aio->regs.i2s_cap_cfg); in cygnus_set_dai_tdm_slot()
1044 value = readl(aio->cygaud->audio + aio->regs.i2s_cfg); in cygnus_set_dai_tdm_slot()
1049 writel(value, aio->cygaud->audio + aio->regs.i2s_cfg); in cygnus_set_dai_tdm_slot()
1062 val = readl(aio->cygaud->audio + aio->regs.i2s_mclk_cfg); in cygnus_ssp_suspend()
1064 if (val >= ARRAY_SIZE(aio->cygaud->audio_clk)) { in cygnus_ssp_suspend()
1065 dev_err(aio->cygaud->dev, "Clk index %u is out of bounds\n", in cygnus_ssp_suspend()
1071 clk_disable_unprepare(aio->cygaud->audio_clk[val]); in cygnus_ssp_suspend()
1073 clk_disable_unprepare(aio->cygaud->audio_clk[val]); in cygnus_ssp_suspend()
1088 error = clk_prepare_enable(aio->cygaud-> in cygnus_ssp_resume()
1091 dev_err(aio->cygaud->dev, "%s clk_prepare_enable failed\n", in cygnus_ssp_resume()
1097 error = clk_prepare_enable(aio->cygaud-> in cygnus_ssp_resume()
1101 clk_disable_unprepare(aio->cygaud-> in cygnus_ssp_resume()
1103 dev_err(aio->cygaud->dev, "%s clk_prepare_enable failed\n", in cygnus_ssp_resume()
1189 struct cygnus_audio *cygaud, in parse_ssp_child_node() argument
1225 aio = &cygaud->portinfo[portnum]; in parse_ssp_child_node()
1226 aio->cygaud = cygaud; in parse_ssp_child_node()
1255 aio->cygaud->dev = &pdev->dev; in parse_ssp_child_node()
1264 struct cygnus_audio *cygaud) in audio_clk_init() argument
1269 for (i = 0; i < ARRAY_SIZE(cygaud->audio_clk); i++) { in audio_clk_init()
1272 cygaud->audio_clk[i] = devm_clk_get(&pdev->dev, clk_name); in audio_clk_init()
1273 if (IS_ERR(cygaud->audio_clk[i])) in audio_clk_init()
1274 return PTR_ERR(cygaud->audio_clk[i]); in audio_clk_init()
1285 struct cygnus_audio *cygaud; in cygnus_ssp_probe() local
1290 cygaud = devm_kzalloc(dev, sizeof(struct cygnus_audio), GFP_KERNEL); in cygnus_ssp_probe()
1291 if (!cygaud) in cygnus_ssp_probe()
1294 dev_set_drvdata(dev, cygaud); in cygnus_ssp_probe()
1297 cygaud->audio = devm_ioremap_resource(dev, res); in cygnus_ssp_probe()
1298 if (IS_ERR(cygaud->audio)) in cygnus_ssp_probe()
1299 return PTR_ERR(cygaud->audio); in cygnus_ssp_probe()
1302 cygaud->i2s_in = devm_ioremap_resource(dev, res); in cygnus_ssp_probe()
1303 if (IS_ERR(cygaud->i2s_in)) in cygnus_ssp_probe()
1304 return PTR_ERR(cygaud->i2s_in); in cygnus_ssp_probe()
1308 cygaud->audio + AUD_MISC_SEROUT_OE_REG_BASE); in cygnus_ssp_probe()
1320 err = parse_ssp_child_node(pdev, child_node, cygaud, in cygnus_ssp_probe()
1333 cygaud->dev = dev; in cygnus_ssp_probe()
1334 cygaud->active_ports = 0; in cygnus_ssp_probe()
1344 cygaud->irq_num = platform_get_irq(pdev, 0); in cygnus_ssp_probe()
1345 if (cygaud->irq_num <= 0) { in cygnus_ssp_probe()
1347 err = cygaud->irq_num; in cygnus_ssp_probe()
1351 err = audio_clk_init(pdev, cygaud); in cygnus_ssp_probe()
1357 err = cygnus_soc_platform_register(dev, cygaud); in cygnus_ssp_probe()