Lines Matching refs:dmac
154 static void usb_dmac_write(struct usb_dmac *dmac, u32 reg, u32 data) in usb_dmac_write() argument
156 writel(data, dmac->iomem + reg); in usb_dmac_write()
159 static u32 usb_dmac_read(struct usb_dmac *dmac, u32 reg) in usb_dmac_read() argument
161 return readl(dmac->iomem + reg); in usb_dmac_read()
247 static int usb_dmac_init(struct usb_dmac *dmac) in usb_dmac_init() argument
252 usb_dmac_write(dmac, USB_DMAOR, USB_DMAOR_DME); in usb_dmac_init()
254 dmaor = usb_dmac_read(dmac, USB_DMAOR); in usb_dmac_init()
256 dev_warn(dmac->dev, "DMAOR initialization failed.\n"); in usb_dmac_init()
349 struct usb_dmac *dmac = to_usb_dmac(chan->device); in usb_dmac_soft_reset() local
353 for (i = 0; i < dmac->n_channels; ++i) { in usb_dmac_soft_reset()
358 usb_dmac_write(dmac, USB_DMAOR, 0); in usb_dmac_soft_reset()
359 usb_dmac_write(dmac, USB_DMASWR, USB_DMASWR_SWR); in usb_dmac_soft_reset()
361 usb_dmac_write(dmac, USB_DMASWR, 0); in usb_dmac_soft_reset()
362 usb_dmac_write(dmac, USB_DMAOR, 1); in usb_dmac_soft_reset()
375 static void usb_dmac_stop(struct usb_dmac *dmac) in usb_dmac_stop() argument
377 usb_dmac_write(dmac, USB_DMAOR, 0); in usb_dmac_stop()
679 struct usb_dmac *dmac = dev_get_drvdata(dev); in usb_dmac_runtime_suspend() local
682 for (i = 0; i < dmac->n_channels; ++i) { in usb_dmac_runtime_suspend()
683 if (!dmac->channels[i].iomem) in usb_dmac_runtime_suspend()
685 usb_dmac_chan_halt(&dmac->channels[i]); in usb_dmac_runtime_suspend()
693 struct usb_dmac *dmac = dev_get_drvdata(dev); in usb_dmac_runtime_resume() local
695 return usb_dmac_init(dmac); in usb_dmac_runtime_resume()
708 static int usb_dmac_chan_probe(struct usb_dmac *dmac, in usb_dmac_chan_probe() argument
712 struct platform_device *pdev = to_platform_device(dmac->dev); in usb_dmac_chan_probe()
718 uchan->iomem = dmac->iomem + USB_DMAC_CHAN_OFFSET(index); in usb_dmac_chan_probe()
724 dev_err(dmac->dev, "no IRQ specified for channel %u\n", index); in usb_dmac_chan_probe()
728 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u", in usb_dmac_chan_probe()
729 dev_name(dmac->dev), index); in usb_dmac_chan_probe()
733 ret = devm_request_irq(dmac->dev, uchan->irq, usb_dmac_isr_channel, in usb_dmac_chan_probe()
736 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n", in usb_dmac_chan_probe()
742 vchan_init(&uchan->vc, &dmac->engine); in usb_dmac_chan_probe()
749 static int usb_dmac_parse_of(struct device *dev, struct usb_dmac *dmac) in usb_dmac_parse_of() argument
754 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels); in usb_dmac_parse_of()
760 if (dmac->n_channels <= 0 || dmac->n_channels >= 100) { in usb_dmac_parse_of()
762 dmac->n_channels); in usb_dmac_parse_of()
773 struct usb_dmac *dmac; in usb_dmac_probe() local
778 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL); in usb_dmac_probe()
779 if (!dmac) in usb_dmac_probe()
782 dmac->dev = &pdev->dev; in usb_dmac_probe()
783 platform_set_drvdata(pdev, dmac); in usb_dmac_probe()
785 ret = usb_dmac_parse_of(&pdev->dev, dmac); in usb_dmac_probe()
789 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels, in usb_dmac_probe()
790 sizeof(*dmac->channels), GFP_KERNEL); in usb_dmac_probe()
791 if (!dmac->channels) in usb_dmac_probe()
796 dmac->iomem = devm_ioremap_resource(&pdev->dev, mem); in usb_dmac_probe()
797 if (IS_ERR(dmac->iomem)) in usb_dmac_probe()
798 return PTR_ERR(dmac->iomem); in usb_dmac_probe()
808 ret = usb_dmac_init(dmac); in usb_dmac_probe()
816 INIT_LIST_HEAD(&dmac->engine.channels); in usb_dmac_probe()
818 for (i = 0; i < dmac->n_channels; ++i) { in usb_dmac_probe()
819 ret = usb_dmac_chan_probe(dmac, &dmac->channels[i], i); in usb_dmac_probe()
835 engine = &dmac->engine; in usb_dmac_probe()
867 static void usb_dmac_chan_remove(struct usb_dmac *dmac, in usb_dmac_chan_remove() argument
871 devm_free_irq(dmac->dev, uchan->irq, uchan); in usb_dmac_chan_remove()
876 struct usb_dmac *dmac = platform_get_drvdata(pdev); in usb_dmac_remove() local
879 for (i = 0; i < dmac->n_channels; ++i) in usb_dmac_remove()
880 usb_dmac_chan_remove(dmac, &dmac->channels[i]); in usb_dmac_remove()
882 dma_async_device_unregister(&dmac->engine); in usb_dmac_remove()
891 struct usb_dmac *dmac = platform_get_drvdata(pdev); in usb_dmac_shutdown() local
893 usb_dmac_stop(dmac); in usb_dmac_shutdown()