aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/amd5536udc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/amd5536udc.c')
-rw-r--r--drivers/usb/gadget/amd5536udc.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index 731150d4b1d9..95e8138cd48f 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -60,6 +60,7 @@
60#include <linux/device.h> 60#include <linux/device.h>
61#include <linux/io.h> 61#include <linux/io.h>
62#include <linux/irq.h> 62#include <linux/irq.h>
63#include <linux/prefetch.h>
63 64
64#include <asm/byteorder.h> 65#include <asm/byteorder.h>
65#include <asm/system.h> 66#include <asm/system.h>
@@ -203,7 +204,7 @@ static void print_regs(struct udc *dev)
203 DBG(dev, "DMA mode = PPBNDU (packet per buffer " 204 DBG(dev, "DMA mode = PPBNDU (packet per buffer "
204 "WITHOUT desc. update)\n"); 205 "WITHOUT desc. update)\n");
205 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "PPBNDU"); 206 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "PPBNDU");
206 } else if (use_dma && use_dma_ppb_du && use_dma_ppb_du) { 207 } else if (use_dma && use_dma_ppb && use_dma_ppb_du) {
207 DBG(dev, "DMA mode = PPBDU (packet per buffer " 208 DBG(dev, "DMA mode = PPBDU (packet per buffer "
208 "WITH desc. update)\n"); 209 "WITH desc. update)\n");
209 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "PPBDU"); 210 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "PPBDU");
@@ -278,7 +279,7 @@ static int udc_enable_dev_setup_interrupts(struct udc *dev)
278 return 0; 279 return 0;
279} 280}
280 281
281/* Calculates fifo start of endpoint based on preceeding endpoints */ 282/* Calculates fifo start of endpoint based on preceding endpoints */
282static int udc_set_txfifo_addr(struct udc_ep *ep) 283static int udc_set_txfifo_addr(struct udc_ep *ep)
283{ 284{
284 struct udc *dev; 285 struct udc *dev;
@@ -1954,13 +1955,14 @@ static int setup_ep0(struct udc *dev)
1954} 1955}
1955 1956
1956/* Called by gadget driver to register itself */ 1957/* Called by gadget driver to register itself */
1957int usb_gadget_register_driver(struct usb_gadget_driver *driver) 1958int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
1959 int (*bind)(struct usb_gadget *))
1958{ 1960{
1959 struct udc *dev = udc; 1961 struct udc *dev = udc;
1960 int retval; 1962 int retval;
1961 u32 tmp; 1963 u32 tmp;
1962 1964
1963 if (!driver || !driver->bind || !driver->setup 1965 if (!driver || !bind || !driver->setup
1964 || driver->speed != USB_SPEED_HIGH) 1966 || driver->speed != USB_SPEED_HIGH)
1965 return -EINVAL; 1967 return -EINVAL;
1966 if (!dev) 1968 if (!dev)
@@ -1972,7 +1974,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1972 dev->driver = driver; 1974 dev->driver = driver;
1973 dev->gadget.dev.driver = &driver->driver; 1975 dev->gadget.dev.driver = &driver->driver;
1974 1976
1975 retval = driver->bind(&dev->gadget); 1977 retval = bind(&dev->gadget);
1976 1978
1977 /* Some gadget drivers use both ep0 directions. 1979 /* Some gadget drivers use both ep0 directions.
1978 * NOTE: to gadget driver, ep0 is just one endpoint... 1980 * NOTE: to gadget driver, ep0 is just one endpoint...
@@ -2000,7 +2002,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
2000 2002
2001 return 0; 2003 return 0;
2002} 2004}
2003EXPORT_SYMBOL(usb_gadget_register_driver); 2005EXPORT_SYMBOL(usb_gadget_probe_driver);
2004 2006
2005/* shutdown requests and disconnect from gadget */ 2007/* shutdown requests and disconnect from gadget */
2006static void 2008static void
@@ -2136,7 +2138,7 @@ static irqreturn_t udc_data_out_isr(struct udc *dev, int ep_ix)
2136 if (use_dma) { 2138 if (use_dma) {
2137 /* BNA event ? */ 2139 /* BNA event ? */
2138 if (tmp & AMD_BIT(UDC_EPSTS_BNA)) { 2140 if (tmp & AMD_BIT(UDC_EPSTS_BNA)) {
2139 DBG(dev, "BNA ep%dout occured - DESPTR = %x \n", 2141 DBG(dev, "BNA ep%dout occurred - DESPTR = %x \n",
2140 ep->num, readl(&ep->regs->desptr)); 2142 ep->num, readl(&ep->regs->desptr));
2141 /* clear BNA */ 2143 /* clear BNA */
2142 writel(tmp | AMD_BIT(UDC_EPSTS_BNA), &ep->regs->sts); 2144 writel(tmp | AMD_BIT(UDC_EPSTS_BNA), &ep->regs->sts);
@@ -2150,7 +2152,7 @@ static irqreturn_t udc_data_out_isr(struct udc *dev, int ep_ix)
2150 } 2152 }
2151 /* HE event ? */ 2153 /* HE event ? */
2152 if (tmp & AMD_BIT(UDC_EPSTS_HE)) { 2154 if (tmp & AMD_BIT(UDC_EPSTS_HE)) {
2153 dev_err(&dev->pdev->dev, "HE ep%dout occured\n", ep->num); 2155 dev_err(&dev->pdev->dev, "HE ep%dout occurred\n", ep->num);
2154 2156
2155 /* clear HE */ 2157 /* clear HE */
2156 writel(tmp | AMD_BIT(UDC_EPSTS_HE), &ep->regs->sts); 2158 writel(tmp | AMD_BIT(UDC_EPSTS_HE), &ep->regs->sts);
@@ -2353,7 +2355,7 @@ static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix)
2353 /* BNA ? */ 2355 /* BNA ? */
2354 if (epsts & AMD_BIT(UDC_EPSTS_BNA)) { 2356 if (epsts & AMD_BIT(UDC_EPSTS_BNA)) {
2355 dev_err(&dev->pdev->dev, 2357 dev_err(&dev->pdev->dev,
2356 "BNA ep%din occured - DESPTR = %08lx \n", 2358 "BNA ep%din occurred - DESPTR = %08lx \n",
2357 ep->num, 2359 ep->num,
2358 (unsigned long) readl(&ep->regs->desptr)); 2360 (unsigned long) readl(&ep->regs->desptr));
2359 2361
@@ -2366,7 +2368,7 @@ static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix)
2366 /* HE event ? */ 2368 /* HE event ? */
2367 if (epsts & AMD_BIT(UDC_EPSTS_HE)) { 2369 if (epsts & AMD_BIT(UDC_EPSTS_HE)) {
2368 dev_err(&dev->pdev->dev, 2370 dev_err(&dev->pdev->dev,
2369 "HE ep%dn occured - DESPTR = %08lx \n", 2371 "HE ep%dn occurred - DESPTR = %08lx \n",
2370 ep->num, (unsigned long) readl(&ep->regs->desptr)); 2372 ep->num, (unsigned long) readl(&ep->regs->desptr));
2371 2373
2372 /* clear HE */ 2374 /* clear HE */
@@ -2383,7 +2385,7 @@ static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix)
2383 req = list_entry(ep->queue.next, 2385 req = list_entry(ep->queue.next,
2384 struct udc_request, queue); 2386 struct udc_request, queue);
2385 /* 2387 /*
2386 * length bytes transfered 2388 * length bytes transferred
2387 * check dma done of last desc. in PPBDU mode 2389 * check dma done of last desc. in PPBDU mode
2388 */ 2390 */
2389 if (use_dma_ppb_du) { 2391 if (use_dma_ppb_du) {
@@ -2783,7 +2785,7 @@ static irqreturn_t udc_control_in_isr(struct udc *dev)
2783 /* write fifo */ 2785 /* write fifo */
2784 udc_txfifo_write(ep, &req->req); 2786 udc_txfifo_write(ep, &req->req);
2785 2787
2786 /* lengh bytes transfered */ 2788 /* lengh bytes transferred */
2787 len = req->req.length - req->req.actual; 2789 len = req->req.length - req->req.actual;
2788 if (len > ep->ep.maxpacket) 2790 if (len > ep->ep.maxpacket)
2789 len = ep->ep.maxpacket; 2791 len = ep->ep.maxpacket;
@@ -3358,7 +3360,6 @@ static int udc_probe(struct udc *dev)
3358 dev_set_name(&dev->gadget.dev, "gadget"); 3360 dev_set_name(&dev->gadget.dev, "gadget");
3359 dev->gadget.dev.release = gadget_release; 3361 dev->gadget.dev.release = gadget_release;
3360 dev->gadget.name = name; 3362 dev->gadget.name = name;
3361 dev->gadget.name = name;
3362 dev->gadget.is_dualspeed = 1; 3363 dev->gadget.is_dualspeed = 1;
3363 3364
3364 /* init registers, interrupts, ... */ 3365 /* init registers, interrupts, ... */
@@ -3382,8 +3383,10 @@ static int udc_probe(struct udc *dev)
3382 udc = dev; 3383 udc = dev;
3383 3384
3384 retval = device_register(&dev->gadget.dev); 3385 retval = device_register(&dev->gadget.dev);
3385 if (retval) 3386 if (retval) {
3387 put_device(&dev->gadget.dev);
3386 goto finished; 3388 goto finished;
3389 }
3387 3390
3388 /* timer init */ 3391 /* timer init */
3389 init_timer(&udc_timer); 3392 init_timer(&udc_timer);