Lines Matching refs:asrc

25 	dev_err(&asrc->pdev->dev, "Pair %c: " fmt, 'A' + index, ##__VA_ARGS__)
28 dev_dbg(&asrc->pdev->dev, "Pair %c: " fmt, 'A' + index, ##__VA_ARGS__)
213 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_request_pair() local
214 struct device *dev = &asrc->pdev->dev; in fsl_asrc_request_pair()
218 spin_lock_irqsave(&asrc->lock, lock_flags); in fsl_asrc_request_pair()
221 if (asrc->pair[i] != NULL) in fsl_asrc_request_pair()
233 } else if (asrc->channel_avail < channels) { in fsl_asrc_request_pair()
237 asrc->channel_avail -= channels; in fsl_asrc_request_pair()
238 asrc->pair[index] = pair; in fsl_asrc_request_pair()
243 spin_unlock_irqrestore(&asrc->lock, lock_flags); in fsl_asrc_request_pair()
256 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_release_pair() local
261 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_release_pair()
264 spin_lock_irqsave(&asrc->lock, lock_flags); in fsl_asrc_release_pair()
266 asrc->channel_avail += pair->channels; in fsl_asrc_release_pair()
267 asrc->pair[index] = NULL; in fsl_asrc_release_pair()
270 spin_unlock_irqrestore(&asrc->lock, lock_flags); in fsl_asrc_release_pair()
281 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_set_watermarks() local
284 regmap_update_bits(asrc->regmap, REG_ASRMCR(index), in fsl_asrc_set_watermarks()
322 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_set_ideal_ratio() local
351 regmap_write(asrc->regmap, REG_ASRIDRL(index), ratio); in fsl_asrc_set_ideal_ratio()
352 regmap_write(asrc->regmap, REG_ASRIDRH(index), ratio >> 24); in fsl_asrc_set_ideal_ratio()
377 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_config_pair() local
378 struct fsl_asrc_priv *asrc_priv = asrc->private; in fsl_asrc_config_pair()
508 regmap_update_bits(asrc->regmap, REG_ASRCNCR, in fsl_asrc_config_pair()
513 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_config_pair()
515 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_config_pair()
519 regmap_update_bits(asrc->regmap, REG_ASRCSR, in fsl_asrc_config_pair()
529 regmap_update_bits(asrc->regmap, REG_ASRCDR(index), in fsl_asrc_config_pair()
535 regmap_update_bits(asrc->regmap, REG_ASRMCR1(index), in fsl_asrc_config_pair()
541 regmap_update_bits(asrc->regmap, REG_ASRMCR(index), in fsl_asrc_config_pair()
553 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_config_pair()
557 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_config_pair()
564 regmap_update_bits(asrc->regmap, REG_ASRCFG, in fsl_asrc_config_pair()
580 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_start_pair() local
585 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_start_pair()
591 regmap_read(asrc->regmap, REG_ASRCFG, &reg); in fsl_asrc_start_pair()
596 regmap_read(asrc->regmap, REG_ASRCNCR, &reg); in fsl_asrc_start_pair()
598 regmap_write(asrc->regmap, REG_ASRDI(index), 0); in fsl_asrc_start_pair()
601 regmap_write(asrc->regmap, REG_ASRIER, ASRIER_AOLIE); in fsl_asrc_start_pair()
610 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_stop_pair() local
614 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_stop_pair()
626 struct fsl_asrc *asrc = pair->asrc; in fsl_asrc_get_dma_channel() local
632 return dma_request_slave_channel(&asrc->pdev->dev, name); in fsl_asrc_get_dma_channel()
638 struct fsl_asrc *asrc = snd_soc_dai_get_drvdata(dai); in fsl_asrc_dai_startup() local
639 struct fsl_asrc_priv *asrc_priv = asrc->private; in fsl_asrc_dai_startup()
693 struct fsl_asrc *asrc = snd_soc_dai_get_drvdata(dai); in fsl_asrc_dai_hw_params() local
694 struct fsl_asrc_priv *asrc_priv = asrc->private; in fsl_asrc_dai_hw_params()
716 config.output_format = asrc->asrc_format; in fsl_asrc_dai_hw_params()
718 config.output_sample_rate = asrc->asrc_rate; in fsl_asrc_dai_hw_params()
720 config.input_format = asrc->asrc_format; in fsl_asrc_dai_hw_params()
722 config.input_sample_rate = asrc->asrc_rate; in fsl_asrc_dai_hw_params()
784 struct fsl_asrc *asrc = snd_soc_dai_get_drvdata(dai); in fsl_asrc_dai_probe() local
786 snd_soc_dai_init_dma_data(dai, &asrc->dma_params_tx, in fsl_asrc_dai_probe()
787 &asrc->dma_params_rx); in fsl_asrc_dai_probe()
967 static int fsl_asrc_init(struct fsl_asrc *asrc) in fsl_asrc_init() argument
972 regmap_write(asrc->regmap, REG_ASRCTR, ASRCTR_ASRCEN); in fsl_asrc_init()
975 regmap_write(asrc->regmap, REG_ASRIER, 0x0); in fsl_asrc_init()
978 regmap_write(asrc->regmap, REG_ASRPM1, 0x7fffff); in fsl_asrc_init()
979 regmap_write(asrc->regmap, REG_ASRPM2, 0x255555); in fsl_asrc_init()
980 regmap_write(asrc->regmap, REG_ASRPM3, 0xff7280); in fsl_asrc_init()
981 regmap_write(asrc->regmap, REG_ASRPM4, 0xff7280); in fsl_asrc_init()
982 regmap_write(asrc->regmap, REG_ASRPM5, 0xff7280); in fsl_asrc_init()
985 regmap_update_bits(asrc->regmap, REG_ASRTFR1, in fsl_asrc_init()
993 ipg_rate = clk_get_rate(asrc->ipg_clk); in fsl_asrc_init()
994 regmap_write(asrc->regmap, REG_ASR76K, ipg_rate / 76000); in fsl_asrc_init()
995 return regmap_write(asrc->regmap, REG_ASR56K, ipg_rate / 56000); in fsl_asrc_init()
1005 struct fsl_asrc *asrc = (struct fsl_asrc *)dev_id; in fsl_asrc_isr() local
1006 struct device *dev = &asrc->pdev->dev; in fsl_asrc_isr()
1010 regmap_read(asrc->regmap, REG_ASRSTR, &status); in fsl_asrc_isr()
1013 regmap_write(asrc->regmap, REG_ASRSTR, ASRSTR_AOLE); in fsl_asrc_isr()
1021 if (!asrc->pair[index]) in fsl_asrc_isr()
1025 asrc->pair[index]->error |= ASRC_TASK_Q_OVERLOAD; in fsl_asrc_isr()
1030 asrc->pair[index]->error |= ASRC_OUTPUT_TASK_OVERLOAD; in fsl_asrc_isr()
1035 asrc->pair[index]->error |= ASRC_INPUT_TASK_OVERLOAD; in fsl_asrc_isr()
1040 asrc->pair[index]->error |= ASRC_OUTPUT_BUFFER_OVERFLOW; in fsl_asrc_isr()
1045 asrc->pair[index]->error |= ASRC_INPUT_BUFFER_UNDERRUN; in fsl_asrc_isr()
1065 struct fsl_asrc *asrc; in fsl_asrc_probe() local
1074 asrc = devm_kzalloc(&pdev->dev, sizeof(*asrc), GFP_KERNEL); in fsl_asrc_probe()
1075 if (!asrc) in fsl_asrc_probe()
1082 asrc->pdev = pdev; in fsl_asrc_probe()
1083 asrc->private = asrc_priv; in fsl_asrc_probe()
1090 asrc->paddr = res->start; in fsl_asrc_probe()
1092 asrc->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &fsl_asrc_regmap_config); in fsl_asrc_probe()
1093 if (IS_ERR(asrc->regmap)) { in fsl_asrc_probe()
1095 return PTR_ERR(asrc->regmap); in fsl_asrc_probe()
1103 dev_name(&pdev->dev), asrc); in fsl_asrc_probe()
1109 asrc->mem_clk = devm_clk_get(&pdev->dev, "mem"); in fsl_asrc_probe()
1110 if (IS_ERR(asrc->mem_clk)) { in fsl_asrc_probe()
1112 return PTR_ERR(asrc->mem_clk); in fsl_asrc_probe()
1115 asrc->ipg_clk = devm_clk_get(&pdev->dev, "ipg"); in fsl_asrc_probe()
1116 if (IS_ERR(asrc->ipg_clk)) { in fsl_asrc_probe()
1118 return PTR_ERR(asrc->ipg_clk); in fsl_asrc_probe()
1121 asrc->spba_clk = devm_clk_get(&pdev->dev, "spba"); in fsl_asrc_probe()
1122 if (IS_ERR(asrc->spba_clk)) in fsl_asrc_probe()
1135 asrc->use_edma = asrc_priv->soc->use_edma; in fsl_asrc_probe()
1136 asrc->get_dma_channel = fsl_asrc_get_dma_channel; in fsl_asrc_probe()
1137 asrc->request_pair = fsl_asrc_request_pair; in fsl_asrc_probe()
1138 asrc->release_pair = fsl_asrc_release_pair; in fsl_asrc_probe()
1139 asrc->get_fifo_addr = fsl_asrc_get_fifo_addr; in fsl_asrc_probe()
1140 asrc->pair_priv_size = sizeof(struct fsl_asrc_pair_priv); in fsl_asrc_probe()
1169 asrc->channel_avail = 10; in fsl_asrc_probe()
1172 &asrc->asrc_rate); in fsl_asrc_probe()
1179 asrc->asrc_format = (__force snd_pcm_format_t)asrc_fmt; in fsl_asrc_probe()
1189 asrc->asrc_format = SNDRV_PCM_FORMAT_S16_LE; in fsl_asrc_probe()
1192 asrc->asrc_format = SNDRV_PCM_FORMAT_S24_LE; in fsl_asrc_probe()
1197 asrc->asrc_format = SNDRV_PCM_FORMAT_S24_LE; in fsl_asrc_probe()
1202 if (!(FSL_ASRC_FORMATS & pcm_format_to_bits(asrc->asrc_format))) { in fsl_asrc_probe()
1204 asrc->asrc_format = SNDRV_PCM_FORMAT_S24_LE; in fsl_asrc_probe()
1207 platform_set_drvdata(pdev, asrc); in fsl_asrc_probe()
1208 spin_lock_init(&asrc->lock); in fsl_asrc_probe()
1220 ret = fsl_asrc_init(asrc); in fsl_asrc_probe()
1258 struct fsl_asrc *asrc = dev_get_drvdata(dev); in fsl_asrc_runtime_resume() local
1259 struct fsl_asrc_priv *asrc_priv = asrc->private; in fsl_asrc_runtime_resume()
1263 ret = clk_prepare_enable(asrc->mem_clk); in fsl_asrc_runtime_resume()
1266 ret = clk_prepare_enable(asrc->ipg_clk); in fsl_asrc_runtime_resume()
1269 if (!IS_ERR(asrc->spba_clk)) { in fsl_asrc_runtime_resume()
1270 ret = clk_prepare_enable(asrc->spba_clk); in fsl_asrc_runtime_resume()
1281 regmap_read(asrc->regmap, REG_ASRCTR, &asrctr); in fsl_asrc_runtime_resume()
1282 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_runtime_resume()
1286 regcache_cache_only(asrc->regmap, false); in fsl_asrc_runtime_resume()
1287 regcache_mark_dirty(asrc->regmap); in fsl_asrc_runtime_resume()
1288 regcache_sync(asrc->regmap); in fsl_asrc_runtime_resume()
1290 regmap_update_bits(asrc->regmap, REG_ASRCFG, in fsl_asrc_runtime_resume()
1295 regmap_update_bits(asrc->regmap, REG_ASRCTR, in fsl_asrc_runtime_resume()
1303 if (!IS_ERR(asrc->spba_clk)) in fsl_asrc_runtime_resume()
1304 clk_disable_unprepare(asrc->spba_clk); in fsl_asrc_runtime_resume()
1306 clk_disable_unprepare(asrc->ipg_clk); in fsl_asrc_runtime_resume()
1308 clk_disable_unprepare(asrc->mem_clk); in fsl_asrc_runtime_resume()
1314 struct fsl_asrc *asrc = dev_get_drvdata(dev); in fsl_asrc_runtime_suspend() local
1315 struct fsl_asrc_priv *asrc_priv = asrc->private; in fsl_asrc_runtime_suspend()
1318 regmap_read(asrc->regmap, REG_ASRCFG, in fsl_asrc_runtime_suspend()
1321 regcache_cache_only(asrc->regmap, true); in fsl_asrc_runtime_suspend()
1325 if (!IS_ERR(asrc->spba_clk)) in fsl_asrc_runtime_suspend()
1326 clk_disable_unprepare(asrc->spba_clk); in fsl_asrc_runtime_suspend()
1327 clk_disable_unprepare(asrc->ipg_clk); in fsl_asrc_runtime_suspend()
1328 clk_disable_unprepare(asrc->mem_clk); in fsl_asrc_runtime_suspend()