diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-06-23 01:07:15 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-06-23 01:07:15 -0400 |
| commit | 0a6a2daf1c7a30c3ca66a8ddb8fc4ff7820051e2 (patch) | |
| tree | a1ceb74aba952c748fbce4ff742586b786d04d4e | |
| parent | 0070513b5e005161a7a7fd9a3f48f982b41eb094 (diff) | |
| parent | 8c778db9f01a1b6c785890b5fd83c7addfd3eb3a (diff) | |
Merge tag 'fixes-for-v3.5-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus
usb: fixes for v3.5-rc3
A few remaining fixes for our v3.5 cycle containing a fix
for a long standing bug which would cause musb to starve its
dma channels by never releasing them, a build fix on lpc32xx_udc,
another fix to Ido's endpoint descriptor series on fsl udc, a
fix to the order of arguments on twl6030-usb driver and a
fix to dwc3's dequeue method.
All patches have been pending on the list for quite a while.
| -rw-r--r-- | drivers/usb/dwc3/gadget.c | 3 | ||||
| -rw-r--r-- | drivers/usb/gadget/fsl_qe_udc.h | 4 | ||||
| -rw-r--r-- | drivers/usb/gadget/lpc32xx_udc.c | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_host.c | 14 | ||||
| -rw-r--r-- | drivers/usb/otg/twl6030-usb.c | 15 |
5 files changed, 23 insertions, 14 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 3df1a1973b05..ec70df7aba17 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
| @@ -1091,7 +1091,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, | |||
| 1091 | if (r == req) { | 1091 | if (r == req) { |
| 1092 | /* wait until it is processed */ | 1092 | /* wait until it is processed */ |
| 1093 | dwc3_stop_active_transfer(dwc, dep->number); | 1093 | dwc3_stop_active_transfer(dwc, dep->number); |
| 1094 | goto out0; | 1094 | goto out1; |
| 1095 | } | 1095 | } |
| 1096 | dev_err(dwc->dev, "request %p was not queued to %s\n", | 1096 | dev_err(dwc->dev, "request %p was not queued to %s\n", |
| 1097 | request, ep->name); | 1097 | request, ep->name); |
| @@ -1099,6 +1099,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, | |||
| 1099 | goto out0; | 1099 | goto out0; |
| 1100 | } | 1100 | } |
| 1101 | 1101 | ||
| 1102 | out1: | ||
| 1102 | /* giveback the request */ | 1103 | /* giveback the request */ |
| 1103 | dwc3_gadget_giveback(dep, req, -ECONNRESET); | 1104 | dwc3_gadget_giveback(dep, req, -ECONNRESET); |
| 1104 | 1105 | ||
diff --git a/drivers/usb/gadget/fsl_qe_udc.h b/drivers/usb/gadget/fsl_qe_udc.h index 4c07ca9cebf3..7026919fc901 100644 --- a/drivers/usb/gadget/fsl_qe_udc.h +++ b/drivers/usb/gadget/fsl_qe_udc.h | |||
| @@ -153,10 +153,10 @@ struct usb_ep_para{ | |||
| 153 | #define USB_BUSMODE_DTB 0x02 | 153 | #define USB_BUSMODE_DTB 0x02 |
| 154 | 154 | ||
| 155 | /* Endpoint basic handle */ | 155 | /* Endpoint basic handle */ |
| 156 | #define ep_index(EP) ((EP)->desc->bEndpointAddress & 0xF) | 156 | #define ep_index(EP) ((EP)->ep.desc->bEndpointAddress & 0xF) |
| 157 | #define ep_maxpacket(EP) ((EP)->ep.maxpacket) | 157 | #define ep_maxpacket(EP) ((EP)->ep.maxpacket) |
| 158 | #define ep_is_in(EP) ((ep_index(EP) == 0) ? (EP->udc->ep0_dir == \ | 158 | #define ep_is_in(EP) ((ep_index(EP) == 0) ? (EP->udc->ep0_dir == \ |
| 159 | USB_DIR_IN) : ((EP)->desc->bEndpointAddress \ | 159 | USB_DIR_IN) : ((EP)->ep.desc->bEndpointAddress \ |
| 160 | & USB_DIR_IN) == USB_DIR_IN) | 160 | & USB_DIR_IN) == USB_DIR_IN) |
| 161 | 161 | ||
| 162 | /* ep0 transfer state */ | 162 | /* ep0 transfer state */ |
diff --git a/drivers/usb/gadget/lpc32xx_udc.c b/drivers/usb/gadget/lpc32xx_udc.c index 262acfd53e32..2ab0388d93eb 100644 --- a/drivers/usb/gadget/lpc32xx_udc.c +++ b/drivers/usb/gadget/lpc32xx_udc.c | |||
| @@ -61,6 +61,7 @@ | |||
| 61 | #include <mach/irqs.h> | 61 | #include <mach/irqs.h> |
| 62 | #include <mach/board.h> | 62 | #include <mach/board.h> |
| 63 | #ifdef CONFIG_USB_GADGET_DEBUG_FILES | 63 | #ifdef CONFIG_USB_GADGET_DEBUG_FILES |
| 64 | #include <linux/debugfs.h> | ||
| 64 | #include <linux/seq_file.h> | 65 | #include <linux/seq_file.h> |
| 65 | #endif | 66 | #endif |
| 66 | 67 | ||
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index ef8d744800ac..e090c799d87b 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c | |||
| @@ -375,11 +375,21 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb, | |||
| 375 | */ | 375 | */ |
| 376 | if (list_empty(&qh->hep->urb_list)) { | 376 | if (list_empty(&qh->hep->urb_list)) { |
| 377 | struct list_head *head; | 377 | struct list_head *head; |
| 378 | struct dma_controller *dma = musb->dma_controller; | ||
| 378 | 379 | ||
| 379 | if (is_in) | 380 | if (is_in) { |
| 380 | ep->rx_reinit = 1; | 381 | ep->rx_reinit = 1; |
| 381 | else | 382 | if (ep->rx_channel) { |
| 383 | dma->channel_release(ep->rx_channel); | ||
| 384 | ep->rx_channel = NULL; | ||
| 385 | } | ||
| 386 | } else { | ||
| 382 | ep->tx_reinit = 1; | 387 | ep->tx_reinit = 1; |
| 388 | if (ep->tx_channel) { | ||
| 389 | dma->channel_release(ep->tx_channel); | ||
| 390 | ep->tx_channel = NULL; | ||
| 391 | } | ||
| 392 | } | ||
| 383 | 393 | ||
| 384 | /* Clobber old pointers to this qh */ | 394 | /* Clobber old pointers to this qh */ |
| 385 | musb_ep_set_qh(ep, is_in, NULL); | 395 | musb_ep_set_qh(ep, is_in, NULL); |
diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c index d2a9a8e691b9..0eabb049b6a9 100644 --- a/drivers/usb/otg/twl6030-usb.c +++ b/drivers/usb/otg/twl6030-usb.c | |||
| @@ -305,9 +305,8 @@ static irqreturn_t twl6030_usbotg_irq(int irq, void *_twl) | |||
| 305 | 305 | ||
| 306 | regulator_enable(twl->usb3v3); | 306 | regulator_enable(twl->usb3v3); |
| 307 | twl->asleep = 1; | 307 | twl->asleep = 1; |
| 308 | twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_EN_HI_CLR, 0x1); | 308 | twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_CLR); |
| 309 | twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_EN_HI_SET, | 309 | twl6030_writeb(twl, TWL_MODULE_USB, 0x10, USB_ID_INT_EN_HI_SET); |
| 310 | 0x10); | ||
| 311 | status = USB_EVENT_ID; | 310 | status = USB_EVENT_ID; |
| 312 | otg->default_a = true; | 311 | otg->default_a = true; |
| 313 | twl->phy.state = OTG_STATE_A_IDLE; | 312 | twl->phy.state = OTG_STATE_A_IDLE; |
| @@ -316,12 +315,10 @@ static irqreturn_t twl6030_usbotg_irq(int irq, void *_twl) | |||
| 316 | atomic_notifier_call_chain(&twl->phy.notifier, status, | 315 | atomic_notifier_call_chain(&twl->phy.notifier, status, |
| 317 | otg->gadget); | 316 | otg->gadget); |
| 318 | } else { | 317 | } else { |
| 319 | twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_EN_HI_CLR, | 318 | twl6030_writeb(twl, TWL_MODULE_USB, 0x10, USB_ID_INT_EN_HI_CLR); |
| 320 | 0x10); | 319 | twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_SET); |
| 321 | twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_EN_HI_SET, | ||
| 322 | 0x1); | ||
| 323 | } | 320 | } |
| 324 | twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_LATCH_CLR, status); | 321 | twl6030_writeb(twl, TWL_MODULE_USB, status, USB_ID_INT_LATCH_CLR); |
| 325 | 322 | ||
| 326 | return IRQ_HANDLED; | 323 | return IRQ_HANDLED; |
| 327 | } | 324 | } |
| @@ -343,7 +340,7 @@ static int twl6030_enable_irq(struct usb_phy *x) | |||
| 343 | { | 340 | { |
| 344 | struct twl6030_usb *twl = phy_to_twl(x); | 341 | struct twl6030_usb *twl = phy_to_twl(x); |
| 345 | 342 | ||
| 346 | twl6030_writeb(twl, TWL_MODULE_USB, USB_ID_INT_EN_HI_SET, 0x1); | 343 | twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_SET); |
| 347 | twl6030_interrupt_unmask(0x05, REG_INT_MSK_LINE_C); | 344 | twl6030_interrupt_unmask(0x05, REG_INT_MSK_LINE_C); |
| 348 | twl6030_interrupt_unmask(0x05, REG_INT_MSK_STS_C); | 345 | twl6030_interrupt_unmask(0x05, REG_INT_MSK_STS_C); |
| 349 | 346 | ||
