Lines Matching +full:hs +full:- +full:usb +full:- +full:if
1 // SPDX-License-Identifier: GPL-2.0+
3 * amd5536udc_pci.c -- AMD 5536 UDC high/full speed USB device controller
5 * Copyright (C) 2005-2007 AMD (https://www.amd.com)
11 * It is a USB Highspeed DMA capable USB device controller. Beside ep0 it
18 * UDC DMA requires 32-bit aligned buffers so DMA with gadget ether does not
26 * Synopsys device controller IP (different than HS OTG IP) in UDCs
32 #define UDC_MOD_DESCRIPTION "AMD 5536 UDC - USB Device Controller"
52 static const char name[] = "amd5536udc-pci";
61 usb_del_gadget_udc(&udc->gadget); in udc_pci_remove()
63 if (WARN_ON(dev->driver)) in udc_pci_remove()
70 writel(AMD_BIT(UDC_DEVCFG_SOFTRESET), &dev->regs->cfg); in udc_pci_remove()
71 free_irq(pdev->irq, dev); in udc_pci_remove()
72 iounmap(dev->virt_addr); in udc_pci_remove()
92 if (udc) { in udc_pci_probe()
93 dev_dbg(&pdev->dev, "already probed\n"); in udc_pci_probe()
94 return -EBUSY; in udc_pci_probe()
99 if (!dev) in udc_pci_probe()
100 return -ENOMEM; in udc_pci_probe()
103 if (pci_enable_device(pdev) < 0) { in udc_pci_probe()
104 retval = -ENODEV; in udc_pci_probe()
112 if (!request_mem_region(resource, len, name)) { in udc_pci_probe()
113 dev_dbg(&pdev->dev, "pci device used already\n"); in udc_pci_probe()
114 retval = -EBUSY; in udc_pci_probe()
118 dev->virt_addr = ioremap(resource, len); in udc_pci_probe()
119 if (!dev->virt_addr) { in udc_pci_probe()
120 dev_dbg(&pdev->dev, "start address cannot be mapped\n"); in udc_pci_probe()
121 retval = -EFAULT; in udc_pci_probe()
125 if (!pdev->irq) { in udc_pci_probe()
126 dev_err(&pdev->dev, "irq not set\n"); in udc_pci_probe()
127 retval = -ENODEV; in udc_pci_probe()
131 spin_lock_init(&dev->lock); in udc_pci_probe()
133 dev->csr = dev->virt_addr + UDC_CSR_ADDR; in udc_pci_probe()
135 dev->regs = dev->virt_addr + UDC_DEVCFG_ADDR; in udc_pci_probe()
137 dev->ep_regs = dev->virt_addr + UDC_EPREGS_ADDR; in udc_pci_probe()
139 dev->rxfifo = (u32 __iomem *)(dev->virt_addr + UDC_RXFIFO_ADDR); in udc_pci_probe()
140 dev->txfifo = (u32 __iomem *)(dev->virt_addr + UDC_TXFIFO_ADDR); in udc_pci_probe()
142 if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) { in udc_pci_probe()
143 dev_dbg(&pdev->dev, "request_irq(%d) fail\n", pdev->irq); in udc_pci_probe()
144 retval = -EBUSY; in udc_pci_probe()
150 /* chip revision for Hs AMD5536 */ in udc_pci_probe()
151 dev->chiprev = pdev->revision; in udc_pci_probe()
156 dev->phys_addr = resource; in udc_pci_probe()
157 dev->irq = pdev->irq; in udc_pci_probe()
158 dev->pdev = pdev; in udc_pci_probe()
159 dev->dev = &pdev->dev; in udc_pci_probe()
162 if (use_dma) { in udc_pci_probe()
164 if (retval != 0) in udc_pci_probe()
169 if (udc_probe(dev)) { in udc_pci_probe()
170 retval = -ENODEV; in udc_pci_probe()
176 if (use_dma) in udc_pci_probe()
179 free_irq(pdev->irq, dev); in udc_pci_probe()
181 iounmap(dev->virt_addr); in udc_pci_probe()