Lines Matching refs:asrc
26 dev_err(&asrc->pdev->dev, "Pair %c: " fmt, 'A' + index, ##__VA_ARGS__)
29 dev_dbg(&asrc->pdev->dev, "Pair %c: " fmt, 'A' + index, ##__VA_ARGS__)
32 dev_warn(&asrc->pdev->dev, "Pair %c: " fmt, 'A' + index, ##__VA_ARGS__)
217 struct fsl_asrc *asrc = pair->asrc;
218 struct device *dev = &asrc->pdev->dev;
222 spin_lock_irqsave(&asrc->lock, lock_flags);
225 if (asrc->pair[i] != NULL)
237 } else if (asrc->channel_avail < channels) {
241 asrc->channel_avail -= channels;
242 asrc->pair[index] = pair;
247 spin_unlock_irqrestore(&asrc->lock, lock_flags);
256 * It clears the resource from asrc and releases the occupied channels.
260 struct fsl_asrc *asrc = pair->asrc;
265 regmap_update_bits(asrc->regmap, REG_ASRCTR,
268 spin_lock_irqsave(&asrc->lock, lock_flags);
270 asrc->channel_avail += pair->channels;
271 asrc->pair[index] = NULL;
274 spin_unlock_irqrestore(&asrc->lock, lock_flags);
285 struct fsl_asrc *asrc = pair->asrc;
288 regmap_update_bits(asrc->regmap, REG_ASRMCR(index),
326 struct fsl_asrc *asrc = pair->asrc;
355 regmap_write(asrc->regmap, REG_ASRIDRL(index), ratio);
356 regmap_write(asrc->regmap, REG_ASRIDRH(index), ratio >> 24);
381 struct fsl_asrc *asrc = pair->asrc;
382 struct fsl_asrc_priv *asrc_priv = asrc->private;
512 regmap_update_bits(asrc->regmap, REG_ASRCNCR,
517 regmap_update_bits(asrc->regmap, REG_ASRCTR,
519 regmap_update_bits(asrc->regmap, REG_ASRCTR,
523 regmap_update_bits(asrc->regmap, REG_ASRCSR,
533 regmap_update_bits(asrc->regmap, REG_ASRCDR(index),
539 regmap_update_bits(asrc->regmap, REG_ASRMCR1(index),
545 regmap_update_bits(asrc->regmap, REG_ASRMCR(index),
557 regmap_update_bits(asrc->regmap, REG_ASRCTR,
561 regmap_update_bits(asrc->regmap, REG_ASRCTR,
568 regmap_update_bits(asrc->regmap, REG_ASRCFG,
584 struct fsl_asrc *asrc = pair->asrc;
589 regmap_update_bits(asrc->regmap, REG_ASRCTR,
595 regmap_read(asrc->regmap, REG_ASRCFG, ®);
604 regmap_read(asrc->regmap, REG_ASRCNCR, ®);
606 regmap_write(asrc->regmap, REG_ASRDI(index), 0);
609 regmap_write(asrc->regmap, REG_ASRIER, ASRIER_AOLIE);
618 struct fsl_asrc *asrc = pair->asrc;
622 regmap_update_bits(asrc->regmap, REG_ASRCTR,
634 struct fsl_asrc *asrc = pair->asrc;
640 return dma_request_slave_channel(&asrc->pdev->dev, name);
646 struct fsl_asrc *asrc = snd_soc_dai_get_drvdata(dai);
647 struct fsl_asrc_priv *asrc_priv = asrc->private;
701 struct fsl_asrc *asrc = snd_soc_dai_get_drvdata(dai);
702 struct fsl_asrc_priv *asrc_priv = asrc->private;
713 dev_err(dai->dev, "fail to request asrc pair\n");
724 config.output_format = asrc->asrc_format;
726 config.output_sample_rate = asrc->asrc_rate;
728 config.input_format = asrc->asrc_format;
730 config.input_sample_rate = asrc->asrc_rate;
740 dev_err(dai->dev, "fail to config asrc pair\n");
785 struct fsl_asrc *asrc = snd_soc_dai_get_drvdata(dai);
787 snd_soc_dai_init_dma_data(dai, &asrc->dma_params_tx,
788 &asrc->dma_params_rx);
973 * @asrc: ASRC context
975 static int fsl_asrc_init(struct fsl_asrc *asrc)
980 regmap_write(asrc->regmap, REG_ASRCTR, ASRCTR_ASRCEN);
983 regmap_write(asrc->regmap, REG_ASRIER, 0x0);
986 regmap_write(asrc->regmap, REG_ASRPM1, 0x7fffff);
987 regmap_write(asrc->regmap, REG_ASRPM2, 0x255555);
988 regmap_write(asrc->regmap, REG_ASRPM3, 0xff7280);
989 regmap_write(asrc->regmap, REG_ASRPM4, 0xff7280);
990 regmap_write(asrc->regmap, REG_ASRPM5, 0xff7280);
993 regmap_update_bits(asrc->regmap, REG_ASRTFR1,
1001 ipg_rate = clk_get_rate(asrc->ipg_clk);
1002 regmap_write(asrc->regmap, REG_ASR76K, ipg_rate / 76000);
1003 return regmap_write(asrc->regmap, REG_ASR56K, ipg_rate / 56000);
1013 struct fsl_asrc *asrc = (struct fsl_asrc *)dev_id;
1014 struct device *dev = &asrc->pdev->dev;
1018 regmap_read(asrc->regmap, REG_ASRSTR, &status);
1021 regmap_write(asrc->regmap, REG_ASRSTR, ASRSTR_AOLE);
1029 if (!asrc->pair[index])
1033 asrc->pair[index]->error |= ASRC_TASK_Q_OVERLOAD;
1038 asrc->pair[index]->error |= ASRC_OUTPUT_TASK_OVERLOAD;
1043 asrc->pair[index]->error |= ASRC_INPUT_TASK_OVERLOAD;
1048 asrc->pair[index]->error |= ASRC_OUTPUT_BUFFER_OVERFLOW;
1053 asrc->pair[index]->error |= ASRC_INPUT_BUFFER_UNDERRUN;
1073 struct fsl_asrc *asrc;
1082 asrc = devm_kzalloc(&pdev->dev, sizeof(*asrc), GFP_KERNEL);
1083 if (!asrc)
1090 asrc->pdev = pdev;
1091 asrc->private = asrc_priv;
1098 asrc->paddr = res->start;
1100 asrc->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &fsl_asrc_regmap_config);
1101 if (IS_ERR(asrc->regmap)) {
1103 return PTR_ERR(asrc->regmap);
1111 dev_name(&pdev->dev), asrc);
1117 asrc->mem_clk = devm_clk_get(&pdev->dev, "mem");
1118 if (IS_ERR(asrc->mem_clk)) {
1120 return PTR_ERR(asrc->mem_clk);
1123 asrc->ipg_clk = devm_clk_get(&pdev->dev, "ipg");
1124 if (IS_ERR(asrc->ipg_clk)) {
1126 return PTR_ERR(asrc->ipg_clk);
1129 asrc->spba_clk = devm_clk_get(&pdev->dev, "spba");
1130 if (IS_ERR(asrc->spba_clk))
1143 asrc->use_edma = asrc_priv->soc->use_edma;
1144 asrc->get_dma_channel = fsl_asrc_get_dma_channel;
1145 asrc->request_pair = fsl_asrc_request_pair;
1146 asrc->release_pair = fsl_asrc_release_pair;
1147 asrc->get_fifo_addr = fsl_asrc_get_fifo_addr;
1148 asrc->pair_priv_size = sizeof(struct fsl_asrc_pair_priv);
1150 if (of_device_is_compatible(np, "fsl,imx35-asrc")) {
1153 } else if (of_device_is_compatible(np, "fsl,imx53-asrc")) {
1156 } else if (of_device_is_compatible(np, "fsl,imx8qm-asrc") ||
1157 of_device_is_compatible(np, "fsl,imx8qxp-asrc")) {
1158 ret = of_property_read_u32(np, "fsl,asrc-clk-map", &map_idx);
1168 if (of_device_is_compatible(np, "fsl,imx8qm-asrc")) {
1177 asrc->channel_avail = 10;
1179 ret = of_property_read_u32(np, "fsl,asrc-rate",
1180 &asrc->asrc_rate);
1186 ret = of_property_read_u32(np, "fsl,asrc-format", &asrc_fmt);
1187 asrc->asrc_format = (__force snd_pcm_format_t)asrc_fmt;
1189 ret = of_property_read_u32(np, "fsl,asrc-width", &width);
1197 asrc->asrc_format = SNDRV_PCM_FORMAT_S16_LE;
1200 asrc->asrc_format = SNDRV_PCM_FORMAT_S24_LE;
1205 asrc->asrc_format = SNDRV_PCM_FORMAT_S24_LE;
1210 if (!(FSL_ASRC_FORMATS & pcm_format_to_bits(asrc->asrc_format))) {
1212 asrc->asrc_format = SNDRV_PCM_FORMAT_S24_LE;
1215 platform_set_drvdata(pdev, asrc);
1216 spin_lock_init(&asrc->lock);
1228 ret = fsl_asrc_init(asrc);
1230 dev_err(&pdev->dev, "failed to init asrc %d\n", ret);
1264 struct fsl_asrc *asrc = dev_get_drvdata(dev);
1265 struct fsl_asrc_priv *asrc_priv = asrc->private;
1270 ret = clk_prepare_enable(asrc->mem_clk);
1273 ret = clk_prepare_enable(asrc->ipg_clk);
1276 if (!IS_ERR(asrc->spba_clk)) {
1277 ret = clk_prepare_enable(asrc->spba_clk);
1288 regmap_read(asrc->regmap, REG_ASRCTR, &asrctr);
1289 regmap_update_bits(asrc->regmap, REG_ASRCTR,
1293 regcache_cache_only(asrc->regmap, false);
1294 regcache_mark_dirty(asrc->regmap);
1295 regcache_sync(asrc->regmap);
1297 regmap_update_bits(asrc->regmap, REG_ASRCFG,
1302 regmap_update_bits(asrc->regmap, REG_ASRCTR,
1308 regmap_read(asrc->regmap, REG_ASRCFG, ®);
1328 if (!IS_ERR(asrc->spba_clk))
1329 clk_disable_unprepare(asrc->spba_clk);
1331 clk_disable_unprepare(asrc->ipg_clk);
1333 clk_disable_unprepare(asrc->mem_clk);
1339 struct fsl_asrc *asrc = dev_get_drvdata(dev);
1340 struct fsl_asrc_priv *asrc_priv = asrc->private;
1343 regmap_read(asrc->regmap, REG_ASRCFG,
1346 regcache_cache_only(asrc->regmap, true);
1350 if (!IS_ERR(asrc->spba_clk))
1351 clk_disable_unprepare(asrc->spba_clk);
1352 clk_disable_unprepare(asrc->ipg_clk);
1353 clk_disable_unprepare(asrc->mem_clk);
1385 { .compatible = "fsl,imx35-asrc", .data = &fsl_asrc_imx35_data },
1386 { .compatible = "fsl,imx53-asrc", .data = &fsl_asrc_imx53_data },
1387 { .compatible = "fsl,imx8qm-asrc", .data = &fsl_asrc_imx8qm_data },
1388 { .compatible = "fsl,imx8qxp-asrc", .data = &fsl_asrc_imx8qxp_data },
1397 .name = "fsl-asrc",
1406 MODULE_ALIAS("platform:fsl-asrc");