cqdma 164 drivers/dma/mediatek/mtk-cqdma.c static struct device *cqdma2dev(struct mtk_cqdma_device *cqdma) cqdma 166 drivers/dma/mediatek/mtk-cqdma.c return cqdma->ddev.dev; cqdma 388 drivers/dma/mediatek/mtk-cqdma.c struct mtk_cqdma_device *cqdma = devid; cqdma 394 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; ++i, schedule_tasklet = false) { cqdma 395 drivers/dma/mediatek/mtk-cqdma.c spin_lock(&cqdma->pc[i]->lock); cqdma 396 drivers/dma/mediatek/mtk-cqdma.c if (mtk_dma_read(cqdma->pc[i], cqdma 399 drivers/dma/mediatek/mtk-cqdma.c mtk_dma_clr(cqdma->pc[i], MTK_CQDMA_INT_FLAG, cqdma 405 drivers/dma/mediatek/mtk-cqdma.c spin_unlock(&cqdma->pc[i]->lock); cqdma 409 drivers/dma/mediatek/mtk-cqdma.c disable_irq_nosync(cqdma->pc[i]->irq); cqdma 412 drivers/dma/mediatek/mtk-cqdma.c tasklet_schedule(&cqdma->pc[i]->tasklet); cqdma 615 drivers/dma/mediatek/mtk-cqdma.c struct mtk_cqdma_device *cqdma = to_cqdma_dev(c); cqdma 622 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; ++i) { cqdma 623 drivers/dma/mediatek/mtk-cqdma.c refcnt = refcount_read(&cqdma->pc[i]->refcnt); cqdma 625 drivers/dma/mediatek/mtk-cqdma.c pc = cqdma->pc[i]; cqdma 689 drivers/dma/mediatek/mtk-cqdma.c static int mtk_cqdma_hw_init(struct mtk_cqdma_device *cqdma) cqdma 695 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_enable(cqdma2dev(cqdma)); cqdma 696 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_get_sync(cqdma2dev(cqdma)); cqdma 698 drivers/dma/mediatek/mtk-cqdma.c err = clk_prepare_enable(cqdma->clk); cqdma 701 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_put_sync(cqdma2dev(cqdma)); cqdma 702 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_disable(cqdma2dev(cqdma)); cqdma 707 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; ++i) { cqdma 708 drivers/dma/mediatek/mtk-cqdma.c spin_lock_irqsave(&cqdma->pc[i]->lock, flags); cqdma 709 drivers/dma/mediatek/mtk-cqdma.c if (mtk_cqdma_hard_reset(cqdma->pc[i]) < 0) { cqdma 710 drivers/dma/mediatek/mtk-cqdma.c dev_err(cqdma2dev(cqdma), "cqdma hard reset timeout\n"); cqdma 711 drivers/dma/mediatek/mtk-cqdma.c spin_unlock_irqrestore(&cqdma->pc[i]->lock, flags); cqdma 713 drivers/dma/mediatek/mtk-cqdma.c clk_disable_unprepare(cqdma->clk); cqdma 714 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_put_sync(cqdma2dev(cqdma)); cqdma 715 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_disable(cqdma2dev(cqdma)); cqdma 718 drivers/dma/mediatek/mtk-cqdma.c spin_unlock_irqrestore(&cqdma->pc[i]->lock, flags); cqdma 724 drivers/dma/mediatek/mtk-cqdma.c static void mtk_cqdma_hw_deinit(struct mtk_cqdma_device *cqdma) cqdma 730 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; ++i) { cqdma 731 drivers/dma/mediatek/mtk-cqdma.c spin_lock_irqsave(&cqdma->pc[i]->lock, flags); cqdma 732 drivers/dma/mediatek/mtk-cqdma.c if (mtk_cqdma_hard_reset(cqdma->pc[i]) < 0) cqdma 733 drivers/dma/mediatek/mtk-cqdma.c dev_err(cqdma2dev(cqdma), "cqdma hard reset timeout\n"); cqdma 734 drivers/dma/mediatek/mtk-cqdma.c spin_unlock_irqrestore(&cqdma->pc[i]->lock, flags); cqdma 737 drivers/dma/mediatek/mtk-cqdma.c clk_disable_unprepare(cqdma->clk); cqdma 739 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_put_sync(cqdma2dev(cqdma)); cqdma 740 drivers/dma/mediatek/mtk-cqdma.c pm_runtime_disable(cqdma2dev(cqdma)); cqdma 751 drivers/dma/mediatek/mtk-cqdma.c struct mtk_cqdma_device *cqdma; cqdma 758 drivers/dma/mediatek/mtk-cqdma.c cqdma = devm_kzalloc(&pdev->dev, sizeof(*cqdma), GFP_KERNEL); cqdma 759 drivers/dma/mediatek/mtk-cqdma.c if (!cqdma) cqdma 762 drivers/dma/mediatek/mtk-cqdma.c dd = &cqdma->ddev; cqdma 764 drivers/dma/mediatek/mtk-cqdma.c cqdma->clk = devm_clk_get(&pdev->dev, "cqdma"); cqdma 765 drivers/dma/mediatek/mtk-cqdma.c if (IS_ERR(cqdma->clk)) { cqdma 768 drivers/dma/mediatek/mtk-cqdma.c return PTR_ERR(cqdma->clk); cqdma 789 drivers/dma/mediatek/mtk-cqdma.c &cqdma->dma_requests)) { cqdma 794 drivers/dma/mediatek/mtk-cqdma.c cqdma->dma_requests = MTK_CQDMA_NR_VCHANS; cqdma 799 drivers/dma/mediatek/mtk-cqdma.c &cqdma->dma_channels)) { cqdma 804 drivers/dma/mediatek/mtk-cqdma.c cqdma->dma_channels = MTK_CQDMA_NR_PCHANS; cqdma 807 drivers/dma/mediatek/mtk-cqdma.c cqdma->pc = devm_kcalloc(&pdev->dev, cqdma->dma_channels, cqdma 808 drivers/dma/mediatek/mtk-cqdma.c sizeof(*cqdma->pc), GFP_KERNEL); cqdma 809 drivers/dma/mediatek/mtk-cqdma.c if (!cqdma->pc) cqdma 813 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; ++i) { cqdma 814 drivers/dma/mediatek/mtk-cqdma.c cqdma->pc[i] = devm_kcalloc(&pdev->dev, 1, cqdma 815 drivers/dma/mediatek/mtk-cqdma.c sizeof(**cqdma->pc), GFP_KERNEL); cqdma 816 drivers/dma/mediatek/mtk-cqdma.c if (!cqdma->pc[i]) cqdma 819 drivers/dma/mediatek/mtk-cqdma.c INIT_LIST_HEAD(&cqdma->pc[i]->queue); cqdma 820 drivers/dma/mediatek/mtk-cqdma.c spin_lock_init(&cqdma->pc[i]->lock); cqdma 821 drivers/dma/mediatek/mtk-cqdma.c refcount_set(&cqdma->pc[i]->refcnt, 0); cqdma 830 drivers/dma/mediatek/mtk-cqdma.c cqdma->pc[i]->base = devm_ioremap_resource(&pdev->dev, res); cqdma 831 drivers/dma/mediatek/mtk-cqdma.c if (IS_ERR(cqdma->pc[i]->base)) cqdma 832 drivers/dma/mediatek/mtk-cqdma.c return PTR_ERR(cqdma->pc[i]->base); cqdma 841 drivers/dma/mediatek/mtk-cqdma.c cqdma->pc[i]->irq = res->start; cqdma 843 drivers/dma/mediatek/mtk-cqdma.c err = devm_request_irq(&pdev->dev, cqdma->pc[i]->irq, cqdma 845 drivers/dma/mediatek/mtk-cqdma.c cqdma); cqdma 854 drivers/dma/mediatek/mtk-cqdma.c cqdma->vc = devm_kcalloc(&pdev->dev, cqdma->dma_requests, cqdma 855 drivers/dma/mediatek/mtk-cqdma.c sizeof(*cqdma->vc), GFP_KERNEL); cqdma 856 drivers/dma/mediatek/mtk-cqdma.c if (!cqdma->vc) cqdma 859 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_requests; i++) { cqdma 860 drivers/dma/mediatek/mtk-cqdma.c vc = &cqdma->vc[i]; cqdma 871 drivers/dma/mediatek/mtk-cqdma.c of_dma_xlate_by_chan_id, cqdma); cqdma 878 drivers/dma/mediatek/mtk-cqdma.c err = mtk_cqdma_hw_init(cqdma); cqdma 885 drivers/dma/mediatek/mtk-cqdma.c platform_set_drvdata(pdev, cqdma); cqdma 888 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; ++i) cqdma 889 drivers/dma/mediatek/mtk-cqdma.c tasklet_init(&cqdma->pc[i]->tasklet, mtk_cqdma_tasklet_cb, cqdma 890 drivers/dma/mediatek/mtk-cqdma.c (unsigned long)cqdma->pc[i]); cqdma 904 drivers/dma/mediatek/mtk-cqdma.c struct mtk_cqdma_device *cqdma = platform_get_drvdata(pdev); cqdma 910 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_requests; i++) { cqdma 911 drivers/dma/mediatek/mtk-cqdma.c vc = &cqdma->vc[i]; cqdma 918 drivers/dma/mediatek/mtk-cqdma.c for (i = 0; i < cqdma->dma_channels; i++) { cqdma 919 drivers/dma/mediatek/mtk-cqdma.c spin_lock_irqsave(&cqdma->pc[i]->lock, flags); cqdma 920 drivers/dma/mediatek/mtk-cqdma.c mtk_dma_clr(cqdma->pc[i], MTK_CQDMA_INT_EN, cqdma 922 drivers/dma/mediatek/mtk-cqdma.c spin_unlock_irqrestore(&cqdma->pc[i]->lock, flags); cqdma 925 drivers/dma/mediatek/mtk-cqdma.c synchronize_irq(cqdma->pc[i]->irq); cqdma 927 drivers/dma/mediatek/mtk-cqdma.c tasklet_kill(&cqdma->pc[i]->tasklet); cqdma 931 drivers/dma/mediatek/mtk-cqdma.c mtk_cqdma_hw_deinit(cqdma); cqdma 933 drivers/dma/mediatek/mtk-cqdma.c dma_async_device_unregister(&cqdma->ddev);