Lines Matching refs:sdc

916 	struct sun6i_dma_dev *sdc;  in sun6i_dma_probe()  local
920 sdc = devm_kzalloc(&pdev->dev, sizeof(*sdc), GFP_KERNEL); in sun6i_dma_probe()
921 if (!sdc) in sun6i_dma_probe()
927 sdc->cfg = device->data; in sun6i_dma_probe()
930 sdc->base = devm_ioremap_resource(&pdev->dev, res); in sun6i_dma_probe()
931 if (IS_ERR(sdc->base)) in sun6i_dma_probe()
932 return PTR_ERR(sdc->base); in sun6i_dma_probe()
934 sdc->irq = platform_get_irq(pdev, 0); in sun6i_dma_probe()
935 if (sdc->irq < 0) { in sun6i_dma_probe()
937 return sdc->irq; in sun6i_dma_probe()
940 sdc->clk = devm_clk_get(&pdev->dev, NULL); in sun6i_dma_probe()
941 if (IS_ERR(sdc->clk)) { in sun6i_dma_probe()
943 return PTR_ERR(sdc->clk); in sun6i_dma_probe()
946 sdc->rstc = devm_reset_control_get(&pdev->dev, NULL); in sun6i_dma_probe()
947 if (IS_ERR(sdc->rstc)) { in sun6i_dma_probe()
949 return PTR_ERR(sdc->rstc); in sun6i_dma_probe()
952 sdc->pool = dmam_pool_create(dev_name(&pdev->dev), &pdev->dev, in sun6i_dma_probe()
954 if (!sdc->pool) { in sun6i_dma_probe()
959 platform_set_drvdata(pdev, sdc); in sun6i_dma_probe()
960 INIT_LIST_HEAD(&sdc->pending); in sun6i_dma_probe()
961 spin_lock_init(&sdc->lock); in sun6i_dma_probe()
963 dma_cap_set(DMA_PRIVATE, sdc->slave.cap_mask); in sun6i_dma_probe()
964 dma_cap_set(DMA_MEMCPY, sdc->slave.cap_mask); in sun6i_dma_probe()
965 dma_cap_set(DMA_SLAVE, sdc->slave.cap_mask); in sun6i_dma_probe()
967 INIT_LIST_HEAD(&sdc->slave.channels); in sun6i_dma_probe()
968 sdc->slave.device_free_chan_resources = sun6i_dma_free_chan_resources; in sun6i_dma_probe()
969 sdc->slave.device_tx_status = sun6i_dma_tx_status; in sun6i_dma_probe()
970 sdc->slave.device_issue_pending = sun6i_dma_issue_pending; in sun6i_dma_probe()
971 sdc->slave.device_prep_slave_sg = sun6i_dma_prep_slave_sg; in sun6i_dma_probe()
972 sdc->slave.device_prep_dma_memcpy = sun6i_dma_prep_dma_memcpy; in sun6i_dma_probe()
973 sdc->slave.copy_align = DMAENGINE_ALIGN_4_BYTES; in sun6i_dma_probe()
974 sdc->slave.device_config = sun6i_dma_config; in sun6i_dma_probe()
975 sdc->slave.device_pause = sun6i_dma_pause; in sun6i_dma_probe()
976 sdc->slave.device_resume = sun6i_dma_resume; in sun6i_dma_probe()
977 sdc->slave.device_terminate_all = sun6i_dma_terminate_all; in sun6i_dma_probe()
978 sdc->slave.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | in sun6i_dma_probe()
981 sdc->slave.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | in sun6i_dma_probe()
984 sdc->slave.directions = BIT(DMA_DEV_TO_MEM) | in sun6i_dma_probe()
986 sdc->slave.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; in sun6i_dma_probe()
987 sdc->slave.dev = &pdev->dev; in sun6i_dma_probe()
989 sdc->pchans = devm_kcalloc(&pdev->dev, sdc->cfg->nr_max_channels, in sun6i_dma_probe()
991 if (!sdc->pchans) in sun6i_dma_probe()
994 sdc->vchans = devm_kcalloc(&pdev->dev, sdc->cfg->nr_max_vchans, in sun6i_dma_probe()
996 if (!sdc->vchans) in sun6i_dma_probe()
999 tasklet_init(&sdc->task, sun6i_dma_tasklet, (unsigned long)sdc); in sun6i_dma_probe()
1001 for (i = 0; i < sdc->cfg->nr_max_channels; i++) { in sun6i_dma_probe()
1002 struct sun6i_pchan *pchan = &sdc->pchans[i]; in sun6i_dma_probe()
1005 pchan->base = sdc->base + 0x100 + i * 0x40; in sun6i_dma_probe()
1008 for (i = 0; i < sdc->cfg->nr_max_vchans; i++) { in sun6i_dma_probe()
1009 struct sun6i_vchan *vchan = &sdc->vchans[i]; in sun6i_dma_probe()
1013 vchan_init(&vchan->vc, &sdc->slave); in sun6i_dma_probe()
1016 ret = reset_control_deassert(sdc->rstc); in sun6i_dma_probe()
1022 ret = clk_prepare_enable(sdc->clk); in sun6i_dma_probe()
1028 ret = devm_request_irq(&pdev->dev, sdc->irq, sun6i_dma_interrupt, 0, in sun6i_dma_probe()
1029 dev_name(&pdev->dev), sdc); in sun6i_dma_probe()
1035 ret = dma_async_device_register(&sdc->slave); in sun6i_dma_probe()
1042 sdc); in sun6i_dma_probe()
1055 writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE); in sun6i_dma_probe()
1060 dma_async_device_unregister(&sdc->slave); in sun6i_dma_probe()
1062 sun6i_kill_tasklet(sdc); in sun6i_dma_probe()
1064 clk_disable_unprepare(sdc->clk); in sun6i_dma_probe()
1066 reset_control_assert(sdc->rstc); in sun6i_dma_probe()
1068 sun6i_dma_free(sdc); in sun6i_dma_probe()
1074 struct sun6i_dma_dev *sdc = platform_get_drvdata(pdev); in sun6i_dma_remove() local
1077 dma_async_device_unregister(&sdc->slave); in sun6i_dma_remove()
1079 sun6i_kill_tasklet(sdc); in sun6i_dma_remove()
1081 clk_disable_unprepare(sdc->clk); in sun6i_dma_remove()
1082 reset_control_assert(sdc->rstc); in sun6i_dma_remove()
1084 sun6i_dma_free(sdc); in sun6i_dma_remove()