Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
USB: update Kconfig help text for CONFIG_USB_SUSPEND
usb: musb: gadget: restart request on clearing endpoint halt
usb: musb: host: Issue a memory barrier before starting DMA
usb: musb: gadget: fix dma length in txstate
usb: musb: gadget: complete request only if data is transfered over
usb: musb: gadget: fix DMA length for OUT transfer
usb: musb: gadget: enable autoclear for OUT transfer in both DMA 0 and DMA 1
usb: musb: gadget: fix bulk IN infinit hangs in double buffer case
usb: musb: gadget: fix kernel panic if using out ep with FIFO_TXRX style
USB: fix bug in initialization of interface minor numbers

+77 -58
+3 -3
drivers/usb/core/Kconfig
··· 91 91 If you are unsure about this, say N here. 92 92 93 93 config USB_SUSPEND 94 - bool "USB runtime power management (suspend/resume and wakeup)" 94 + bool "USB runtime power management (autosuspend) and wakeup" 95 95 depends on USB && PM_RUNTIME 96 96 help 97 97 If you say Y here, you can use driver calls or the sysfs 98 - "power/level" file to suspend or resume individual USB 99 - peripherals and to enable or disable autosuspend (see 98 + "power/control" file to enable or disable autosuspend for 99 + individual USB peripherals (see 100 100 Documentation/usb/power-management.txt for more details). 101 101 102 102 Also, USB "remote wakeup" signaling is supported, whereby some
+16 -19
drivers/usb/core/file.c
··· 159 159 int usb_register_dev(struct usb_interface *intf, 160 160 struct usb_class_driver *class_driver) 161 161 { 162 - int retval = -EINVAL; 162 + int retval; 163 163 int minor_base = class_driver->minor_base; 164 - int minor = 0; 164 + int minor; 165 165 char name[20]; 166 166 char *temp; 167 167 ··· 173 173 */ 174 174 minor_base = 0; 175 175 #endif 176 - intf->minor = -1; 177 - 178 - dbg ("looking for a minor, starting at %d", minor_base); 179 176 180 177 if (class_driver->fops == NULL) 181 - goto exit; 178 + return -EINVAL; 179 + if (intf->minor >= 0) 180 + return -EADDRINUSE; 181 + 182 + retval = init_usb_class(); 183 + if (retval) 184 + return retval; 185 + 186 + dev_dbg(&intf->dev, "looking for a minor, starting at %d", minor_base); 182 187 183 188 down_write(&minor_rwsem); 184 189 for (minor = minor_base; minor < MAX_USB_MINORS; ++minor) { ··· 191 186 continue; 192 187 193 188 usb_minors[minor] = class_driver->fops; 194 - 195 - retval = 0; 189 + intf->minor = minor; 196 190 break; 197 191 } 198 192 up_write(&minor_rwsem); 199 - 200 - if (retval) 201 - goto exit; 202 - 203 - retval = init_usb_class(); 204 - if (retval) 205 - goto exit; 206 - 207 - intf->minor = minor; 193 + if (intf->minor < 0) 194 + return -EXFULL; 208 195 209 196 /* create a usb class device for this usb interface */ 210 197 snprintf(name, sizeof(name), class_driver->name, minor - minor_base); ··· 210 213 "%s", temp); 211 214 if (IS_ERR(intf->usb_dev)) { 212 215 down_write(&minor_rwsem); 213 - usb_minors[intf->minor] = NULL; 216 + usb_minors[minor] = NULL; 217 + intf->minor = -1; 214 218 up_write(&minor_rwsem); 215 219 retval = PTR_ERR(intf->usb_dev); 216 220 } 217 - exit: 218 221 return retval; 219 222 } 220 223 EXPORT_SYMBOL_GPL(usb_register_dev);
+1
drivers/usb/core/message.c
··· 1802 1802 intf->dev.groups = usb_interface_groups; 1803 1803 intf->dev.dma_mask = dev->dev.dma_mask; 1804 1804 INIT_WORK(&intf->reset_ws, __usb_queue_reset_device); 1805 + intf->minor = -1; 1805 1806 device_initialize(&intf->dev); 1806 1807 dev_set_name(&intf->dev, "%d-%s:%d.%d", 1807 1808 dev->bus->busnum, dev->devpath,
+1
drivers/usb/musb/cppi_dma.c
··· 322 322 index, transmit ? 'T' : 'R', cppi_ch); 323 323 cppi_ch->hw_ep = ep; 324 324 cppi_ch->channel.status = MUSB_DMA_STATUS_FREE; 325 + cppi_ch->channel.max_len = 0x7fffffff; 325 326 326 327 DBG(4, "Allocate CPPI%d %cX\n", index, transmit ? 'T' : 'R'); 327 328 return &cppi_ch->channel;
+39 -36
drivers/usb/musb/musb_gadget.c
··· 300 300 #ifndef CONFIG_MUSB_PIO_ONLY 301 301 if (is_dma_capable() && musb_ep->dma) { 302 302 struct dma_controller *c = musb->dma_controller; 303 + size_t request_size; 304 + 305 + /* setup DMA, then program endpoint CSR */ 306 + request_size = min_t(size_t, request->length - request->actual, 307 + musb_ep->dma->max_len); 303 308 304 309 use_dma = (request->dma != DMA_ADDR_INVALID); 305 310 ··· 312 307 313 308 #ifdef CONFIG_USB_INVENTRA_DMA 314 309 { 315 - size_t request_size; 316 - 317 - /* setup DMA, then program endpoint CSR */ 318 - request_size = min_t(size_t, request->length, 319 - musb_ep->dma->max_len); 320 310 if (request_size < musb_ep->packet_sz) 321 311 musb_ep->dma->desired_mode = 0; 322 312 else ··· 373 373 use_dma = use_dma && c->channel_program( 374 374 musb_ep->dma, musb_ep->packet_sz, 375 375 0, 376 - request->dma, 377 - request->length); 376 + request->dma + request->actual, 377 + request_size); 378 378 if (!use_dma) { 379 379 c->channel_release(musb_ep->dma); 380 380 musb_ep->dma = NULL; ··· 386 386 use_dma = use_dma && c->channel_program( 387 387 musb_ep->dma, musb_ep->packet_sz, 388 388 request->zero, 389 - request->dma, 390 - request->length); 389 + request->dma + request->actual, 390 + request_size); 391 391 #endif 392 392 } 393 393 #endif ··· 501 501 request->zero = 0; 502 502 } 503 503 504 - /* ... or if not, then complete it. */ 505 - musb_g_giveback(musb_ep, request, 0); 506 - 507 - /* 508 - * Kickstart next transfer if appropriate; 509 - * the packet that just completed might not 510 - * be transmitted for hours or days. 511 - * REVISIT for double buffering... 512 - * FIXME revisit for stalls too... 513 - */ 514 - musb_ep_select(mbase, epnum); 515 - csr = musb_readw(epio, MUSB_TXCSR); 516 - if (csr & MUSB_TXCSR_FIFONOTEMPTY) 517 - return; 518 - 519 - request = musb_ep->desc ? next_request(musb_ep) : NULL; 520 - if (!request) { 521 - DBG(4, "%s idle now\n", 522 - musb_ep->end_point.name); 523 - return; 504 + if (request->actual == request->length) { 505 + musb_g_giveback(musb_ep, request, 0); 506 + request = musb_ep->desc ? next_request(musb_ep) : NULL; 507 + if (!request) { 508 + DBG(4, "%s idle now\n", 509 + musb_ep->end_point.name); 510 + return; 511 + } 524 512 } 525 513 } 526 514 ··· 556 568 { 557 569 const u8 epnum = req->epnum; 558 570 struct usb_request *request = &req->request; 559 - struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out; 571 + struct musb_ep *musb_ep; 560 572 void __iomem *epio = musb->endpoints[epnum].regs; 561 573 unsigned fifo_count = 0; 562 - u16 len = musb_ep->packet_sz; 574 + u16 len; 563 575 u16 csr = musb_readw(epio, MUSB_RXCSR); 576 + struct musb_hw_ep *hw_ep = &musb->endpoints[epnum]; 577 + 578 + if (hw_ep->is_shared_fifo) 579 + musb_ep = &hw_ep->ep_in; 580 + else 581 + musb_ep = &hw_ep->ep_out; 582 + 583 + len = musb_ep->packet_sz; 564 584 565 585 /* We shouldn't get here while DMA is active, but we do... */ 566 586 if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) { ··· 643 647 */ 644 648 645 649 csr |= MUSB_RXCSR_DMAENAB; 646 - #ifdef USE_MODE1 647 650 csr |= MUSB_RXCSR_AUTOCLEAR; 651 + #ifdef USE_MODE1 648 652 /* csr |= MUSB_RXCSR_DMAMODE; */ 649 653 650 654 /* this special sequence (enabling and then ··· 659 663 if (request->actual < request->length) { 660 664 int transfer_size = 0; 661 665 #ifdef USE_MODE1 662 - transfer_size = min(request->length, 666 + transfer_size = min(request->length - request->actual, 663 667 channel->max_len); 664 668 #else 665 - transfer_size = len; 669 + transfer_size = min(request->length - request->actual, 670 + (unsigned)len); 666 671 #endif 667 672 if (transfer_size <= musb_ep->packet_sz) 668 673 musb_ep->dma->desired_mode = 0; ··· 737 740 u16 csr; 738 741 struct usb_request *request; 739 742 void __iomem *mbase = musb->mregs; 740 - struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out; 743 + struct musb_ep *musb_ep; 741 744 void __iomem *epio = musb->endpoints[epnum].regs; 742 745 struct dma_channel *dma; 746 + struct musb_hw_ep *hw_ep = &musb->endpoints[epnum]; 747 + 748 + if (hw_ep->is_shared_fifo) 749 + musb_ep = &hw_ep->ep_in; 750 + else 751 + musb_ep = &hw_ep->ep_out; 743 752 744 753 musb_ep_select(mbase, epnum); 745 754 ··· 1084 1081 /* 1085 1082 * Context: controller locked, IRQs blocked. 1086 1083 */ 1087 - static void musb_ep_restart(struct musb *musb, struct musb_request *req) 1084 + void musb_ep_restart(struct musb *musb, struct musb_request *req) 1088 1085 { 1089 1086 DBG(3, "<== %s request %p len %u on hw_ep%d\n", 1090 1087 req->tx ? "TX/IN" : "RX/OUT",
+2
drivers/usb/musb/musb_gadget.h
··· 105 105 106 106 extern void musb_g_giveback(struct musb_ep *, struct usb_request *, int); 107 107 108 + extern void musb_ep_restart(struct musb *, struct musb_request *); 109 + 108 110 #endif /* __MUSB_GADGET_H */
+9
drivers/usb/musb/musb_gadget_ep0.c
··· 261 261 ctrlrequest->wIndex & 0x0f; 262 262 struct musb_ep *musb_ep; 263 263 struct musb_hw_ep *ep; 264 + struct musb_request *request; 264 265 void __iomem *regs; 265 266 int is_in; 266 267 u16 csr; ··· 301 300 csr &= ~(MUSB_RXCSR_P_SENDSTALL | 302 301 MUSB_RXCSR_P_SENTSTALL); 303 302 musb_writew(regs, MUSB_RXCSR, csr); 303 + } 304 + 305 + /* Maybe start the first request in the queue */ 306 + request = to_musb_request( 307 + next_request(musb_ep)); 308 + if (!musb_ep->busy && request) { 309 + DBG(3, "restarting the request\n"); 310 + musb_ep_restart(musb, request); 304 311 } 305 312 306 313 /* select ep0 again */
+6
drivers/usb/musb/musb_host.c
··· 660 660 661 661 qh->segsize = length; 662 662 663 + /* 664 + * Ensure the data reaches to main memory before starting 665 + * DMA transfer 666 + */ 667 + wmb(); 668 + 663 669 if (!dma->channel_program(channel, pkt_size, mode, 664 670 urb->transfer_dma + offset, length)) { 665 671 dma->channel_release(channel);