diff options
Diffstat (limited to 'drivers/usb/gadget/amd5536udc.c')
-rw-r--r-- | drivers/usb/gadget/amd5536udc.c | 31 |
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 */ |
282 | static int udc_set_txfifo_addr(struct udc_ep *ep) | 283 | static 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 */ |
1957 | int usb_gadget_register_driver(struct usb_gadget_driver *driver) | 1958 | int 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 | } |
2003 | EXPORT_SYMBOL(usb_gadget_register_driver); | 2005 | EXPORT_SYMBOL(usb_gadget_probe_driver); |
2004 | 2006 | ||
2005 | /* shutdown requests and disconnect from gadget */ | 2007 | /* shutdown requests and disconnect from gadget */ |
2006 | static void | 2008 | static 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); |