• Home
  • Raw
  • Download

Lines Matching +full:rk3066 +full:- +full:i2s

3  * ALSA SoC Audio Layer - Rockchip I2S Controller driver
6 * Author: Jianqun <jay.xu@rock-chips.com>
48 { .compatible = "rockchip,rk3066-spdif",
50 { .compatible = "rockchip,rk3188-spdif",
52 { .compatible = "rockchip,rk3228-spdif",
54 { .compatible = "rockchip,rk3288-spdif",
56 { .compatible = "rockchip,rk3328-spdif",
58 { .compatible = "rockchip,rk3366-spdif",
60 { .compatible = "rockchip,rk3368-spdif",
62 { .compatible = "rockchip,rk3399-spdif",
72 regcache_cache_only(spdif->regmap, true); in rk_spdif_runtime_suspend()
73 clk_disable_unprepare(spdif->mclk); in rk_spdif_runtime_suspend()
74 clk_disable_unprepare(spdif->hclk); in rk_spdif_runtime_suspend()
84 ret = clk_prepare_enable(spdif->mclk); in rk_spdif_runtime_resume()
86 dev_err(spdif->dev, "mclk clock enable failed %d\n", ret); in rk_spdif_runtime_resume()
90 ret = clk_prepare_enable(spdif->hclk); in rk_spdif_runtime_resume()
92 dev_err(spdif->dev, "hclk clock enable failed %d\n", ret); in rk_spdif_runtime_resume()
96 regcache_cache_only(spdif->regmap, false); in rk_spdif_runtime_resume()
97 regcache_mark_dirty(spdif->regmap); in rk_spdif_runtime_resume()
99 ret = regcache_sync(spdif->regmap); in rk_spdif_runtime_resume()
101 clk_disable_unprepare(spdif->mclk); in rk_spdif_runtime_resume()
102 clk_disable_unprepare(spdif->hclk); in rk_spdif_runtime_resume()
131 return -EINVAL; in rk_spdif_hw_params()
135 ret = clk_set_rate(spdif->mclk, mclk); in rk_spdif_hw_params()
137 dev_err(spdif->dev, "Failed to set module clock rate: %d\n", in rk_spdif_hw_params()
142 ret = regmap_update_bits(spdif->regmap, SPDIF_CFGR, in rk_spdif_hw_params()
160 ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR, in rk_spdif_trigger()
169 ret = regmap_update_bits(spdif->regmap, SPDIF_XFER, in rk_spdif_trigger()
176 ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR, in rk_spdif_trigger()
183 ret = regmap_update_bits(spdif->regmap, SPDIF_XFER, in rk_spdif_trigger()
188 ret = -EINVAL; in rk_spdif_trigger()
199 dai->playback_dma_data = &spdif->playback_dma_data; in rk_spdif_dai_probe()
228 .name = "rockchip-spdif",
283 struct device_node *np = pdev->dev.of_node; in rk_spdif_probe()
291 if (match->data == (void *)RK_SPDIF_RK3288) { in rk_spdif_probe()
296 dev_err(&pdev->dev, in rk_spdif_probe()
307 spdif = devm_kzalloc(&pdev->dev, sizeof(*spdif), GFP_KERNEL); in rk_spdif_probe()
309 return -ENOMEM; in rk_spdif_probe()
311 spdif->hclk = devm_clk_get(&pdev->dev, "hclk"); in rk_spdif_probe()
312 if (IS_ERR(spdif->hclk)) { in rk_spdif_probe()
313 dev_err(&pdev->dev, "Can't retrieve rk_spdif bus clock\n"); in rk_spdif_probe()
314 return PTR_ERR(spdif->hclk); in rk_spdif_probe()
316 ret = clk_prepare_enable(spdif->hclk); in rk_spdif_probe()
318 dev_err(spdif->dev, "hclock enable failed %d\n", ret); in rk_spdif_probe()
322 spdif->mclk = devm_clk_get(&pdev->dev, "mclk"); in rk_spdif_probe()
323 if (IS_ERR(spdif->mclk)) { in rk_spdif_probe()
324 dev_err(&pdev->dev, "Can't retrieve rk_spdif master clock\n"); in rk_spdif_probe()
325 ret = PTR_ERR(spdif->mclk); in rk_spdif_probe()
329 ret = clk_prepare_enable(spdif->mclk); in rk_spdif_probe()
331 dev_err(spdif->dev, "clock enable failed %d\n", ret); in rk_spdif_probe()
336 regs = devm_ioremap_resource(&pdev->dev, res); in rk_spdif_probe()
342 spdif->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "hclk", regs, in rk_spdif_probe()
344 if (IS_ERR(spdif->regmap)) { in rk_spdif_probe()
345 dev_err(&pdev->dev, in rk_spdif_probe()
347 ret = PTR_ERR(spdif->regmap); in rk_spdif_probe()
351 spdif->playback_dma_data.addr = res->start + SPDIF_SMPDR; in rk_spdif_probe()
352 spdif->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; in rk_spdif_probe()
353 spdif->playback_dma_data.maxburst = 4; in rk_spdif_probe()
355 spdif->dev = &pdev->dev; in rk_spdif_probe()
356 dev_set_drvdata(&pdev->dev, spdif); in rk_spdif_probe()
358 pm_runtime_set_active(&pdev->dev); in rk_spdif_probe()
359 pm_runtime_enable(&pdev->dev); in rk_spdif_probe()
360 pm_request_idle(&pdev->dev); in rk_spdif_probe()
362 ret = devm_snd_soc_register_component(&pdev->dev, in rk_spdif_probe()
366 dev_err(&pdev->dev, "Could not register DAI\n"); in rk_spdif_probe()
370 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); in rk_spdif_probe()
372 dev_err(&pdev->dev, "Could not register PCM\n"); in rk_spdif_probe()
379 pm_runtime_disable(&pdev->dev); in rk_spdif_probe()
381 clk_disable_unprepare(spdif->mclk); in rk_spdif_probe()
383 clk_disable_unprepare(spdif->hclk); in rk_spdif_probe()
390 struct rk_spdif_dev *spdif = dev_get_drvdata(&pdev->dev); in rk_spdif_remove()
392 pm_runtime_disable(&pdev->dev); in rk_spdif_remove()
393 if (!pm_runtime_status_suspended(&pdev->dev)) in rk_spdif_remove()
394 rk_spdif_runtime_suspend(&pdev->dev); in rk_spdif_remove()
396 clk_disable_unprepare(spdif->mclk); in rk_spdif_remove()
397 clk_disable_unprepare(spdif->hclk); in rk_spdif_remove()
411 .name = "rockchip-spdif",
418 MODULE_ALIAS("platform:rockchip-spdif");