Lines Matching refs:dmac

7  * based on rcar-dmac.c
151 static void usb_dmac_write(struct usb_dmac *dmac, u32 reg, u32 data)
153 writel(data, dmac->iomem + reg);
156 static u32 usb_dmac_read(struct usb_dmac *dmac, u32 reg)
158 return readl(dmac->iomem + reg);
244 static int usb_dmac_init(struct usb_dmac *dmac)
249 usb_dmac_write(dmac, USB_DMAOR, USB_DMAOR_DME);
251 dmaor = usb_dmac_read(dmac, USB_DMAOR);
253 dev_warn(dmac->dev, "DMAOR initialization failed.\n");
346 struct usb_dmac *dmac = to_usb_dmac(chan->device);
350 for (i = 0; i < dmac->n_channels; ++i) {
355 usb_dmac_write(dmac, USB_DMAOR, 0);
356 usb_dmac_write(dmac, USB_DMASWR, USB_DMASWR_SWR);
358 usb_dmac_write(dmac, USB_DMASWR, 0);
359 usb_dmac_write(dmac, USB_DMAOR, 1);
372 static void usb_dmac_stop(struct usb_dmac *dmac)
374 usb_dmac_write(dmac, USB_DMAOR, 0);
676 struct usb_dmac *dmac = dev_get_drvdata(dev);
679 for (i = 0; i < dmac->n_channels; ++i) {
680 if (!dmac->channels[i].iomem)
682 usb_dmac_chan_halt(&dmac->channels[i]);
690 struct usb_dmac *dmac = dev_get_drvdata(dev);
692 return usb_dmac_init(dmac);
707 static int usb_dmac_chan_probe(struct usb_dmac *dmac,
711 struct platform_device *pdev = to_platform_device(dmac->dev);
717 uchan->iomem = dmac->iomem + USB_DMAC_CHAN_OFFSET(index);
725 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u",
726 dev_name(dmac->dev), index);
730 ret = devm_request_irq(dmac->dev, uchan->irq, usb_dmac_isr_channel,
733 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n",
739 vchan_init(&uchan->vc, &dmac->engine);
746 static int usb_dmac_parse_of(struct device *dev, struct usb_dmac *dmac)
751 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels);
757 if (dmac->n_channels <= 0 || dmac->n_channels >= 100) {
759 dmac->n_channels);
770 struct usb_dmac *dmac;
774 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL);
775 if (!dmac)
778 dmac->dev = &pdev->dev;
779 platform_set_drvdata(pdev, dmac);
781 ret = usb_dmac_parse_of(&pdev->dev, dmac);
785 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels,
786 sizeof(*dmac->channels), GFP_KERNEL);
787 if (!dmac->channels)
791 dmac->iomem = devm_platform_ioremap_resource(pdev, 0);
792 if (IS_ERR(dmac->iomem))
793 return PTR_ERR(dmac->iomem);
803 ret = usb_dmac_init(dmac);
811 INIT_LIST_HEAD(&dmac->engine.channels);
813 for (i = 0; i < dmac->n_channels; ++i) {
814 ret = usb_dmac_chan_probe(dmac, &dmac->channels[i], i);
830 engine = &dmac->engine;
862 static void usb_dmac_chan_remove(struct usb_dmac *dmac,
866 devm_free_irq(dmac->dev, uchan->irq, uchan);
871 struct usb_dmac *dmac = platform_get_drvdata(pdev);
874 for (i = 0; i < dmac->n_channels; ++i)
875 usb_dmac_chan_remove(dmac, &dmac->channels[i]);
877 dma_async_device_unregister(&dmac->engine);
884 struct usb_dmac *dmac = platform_get_drvdata(pdev);
886 usb_dmac_stop(dmac);
890 { .compatible = "renesas,usb-dmac", },
898 .name = "usb-dmac",