diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/arch/arm/configs/omap3_evm_defconfig linux-2.6.31-rc4-git5-usb.current/arch/arm/configs/omap3_evm_defconfig --- linux-2.6.31-rc4-git5-driver-core.current/arch/arm/configs/omap3_evm_defconfig 2009-07-24 11:07:25.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/arch/arm/configs/omap3_evm_defconfig 2009-07-31 09:56:28.000000000 -0700 @@ -1107,7 +1107,7 @@ CONFIG_USB_OTG_UTILS=y # CONFIG_USB_GPIO_VBUS is not set # CONFIG_ISP1301_OMAP is not set -CONFIG_TWL4030_USB=y +# CONFIG_TWL4030_USB is not set # CONFIG_NOP_USB_XCEIV is not set CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/arch/arm/mach-omap2/board-omap3evm.c linux-2.6.31-rc4-git5-usb.current/arch/arm/mach-omap2/board-omap3evm.c --- linux-2.6.31-rc4-git5-driver-core.current/arch/arm/mach-omap2/board-omap3evm.c 2009-07-24 11:07:26.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/arch/arm/mach-omap2/board-omap3evm.c 2009-07-31 09:56:28.000000000 -0700 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -307,6 +308,10 @@ ARRAY_SIZE(omap3evm_spi_board_info)); omap_serial_init(); +#ifdef CONFIG_NOP_USB_XCEIV + /* OMAP3EVM uses ISP1504 phy and so register nop transceiver */ + usb_nop_xceiv_register(); +#endif usb_musb_init(); ads7846_dev_init(); } diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/arch/arm/mach-omap2/usb-musb.c linux-2.6.31-rc4-git5-usb.current/arch/arm/mach-omap2/usb-musb.c --- linux-2.6.31-rc4-git5-driver-core.current/arch/arm/mach-omap2/usb-musb.c 2009-07-24 11:07:26.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/arch/arm/mach-omap2/usb-musb.c 2009-07-31 09:56:28.000000000 -0700 @@ -155,20 +155,6 @@ .resource = musb_resources, }; -#ifdef CONFIG_NOP_USB_XCEIV -static u64 nop_xceiv_dmamask = DMA_BIT_MASK(32); - -static struct platform_device nop_xceiv_device = { - .name = "nop_usb_xceiv", - .id = -1, - .dev = { - .dma_mask = &nop_xceiv_dmamask, - .coherent_dma_mask = DMA_BIT_MASK(32), - .platform_data = NULL, - }, -}; -#endif - void __init usb_musb_init(void) { if (cpu_is_omap243x()) @@ -183,13 +169,6 @@ */ musb_plat.clock = "ick"; -#ifdef CONFIG_NOP_USB_XCEIV - if (platform_device_register(&nop_xceiv_device) < 0) { - printk(KERN_ERR "Unable to register NOP-XCEIV device\n"); - return; - } -#endif - if (platform_device_register(&musb_device) < 0) { printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n"); return; diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/core/devio.c linux-2.6.31-rc4-git5-usb.current/drivers/usb/core/devio.c --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/core/devio.c 2009-07-24 11:07:46.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/core/devio.c 2009-07-31 09:56:28.000000000 -0700 @@ -595,7 +595,7 @@ if (!ps) goto out; - ret = -ENOENT; + ret = -ENODEV; /* usbdev device-node */ if (imajor(inode) == USB_DEVICE_MAJOR) @@ -1321,7 +1321,8 @@ struct usbdevfs_urb32 __user *uurb) { __u32 uptr; - if (get_user(kurb->type, &uurb->type) || + if (!access_ok(VERIFY_READ, uurb, sizeof(*uurb)) || + __get_user(kurb->type, &uurb->type) || __get_user(kurb->endpoint, &uurb->endpoint) || __get_user(kurb->status, &uurb->status) || __get_user(kurb->flags, &uurb->flags) || @@ -1536,8 +1537,9 @@ u32 udata; uioc = compat_ptr((long)arg); - if (get_user(ctrl.ifno, &uioc->ifno) || - get_user(ctrl.ioctl_code, &uioc->ioctl_code) || + if (!access_ok(VERIFY_READ, uioc, sizeof(*uioc)) || + __get_user(ctrl.ifno, &uioc->ifno) || + __get_user(ctrl.ioctl_code, &uioc->ioctl_code) || __get_user(udata, &uioc->data)) return -EFAULT; ctrl.data = compat_ptr(udata); diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/host/ehci-hcd.c linux-2.6.31-rc4-git5-usb.current/drivers/usb/host/ehci-hcd.c --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/host/ehci-hcd.c 2009-07-24 11:07:47.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/host/ehci-hcd.c 2009-07-31 09:56:28.000000000 -0700 @@ -903,7 +903,8 @@ /* already started */ break; case QH_STATE_IDLE: - WARN_ON(1); + /* QH might be waiting for a Clear-TT-Buffer */ + qh_completions(ehci, qh); break; } break; diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/host/ehci-q.c linux-2.6.31-rc4-git5-usb.current/drivers/usb/host/ehci-q.c --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/host/ehci-q.c 2009-07-24 11:07:47.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/host/ehci-q.c 2009-07-31 09:56:28.000000000 -0700 @@ -375,12 +375,11 @@ */ if ((token & QTD_STS_XACT) && QTD_CERR(token) == 0 && - --qh->xacterrs > 0 && + ++qh->xacterrs < QH_XACTERR_MAX && !urb->unlinked) { ehci_dbg(ehci, "detected XactErr len %zu/%zu retry %d\n", - qtd->length - QTD_LENGTH(token), qtd->length, - QH_XACTERR_MAX - qh->xacterrs); + qtd->length - QTD_LENGTH(token), qtd->length, qh->xacterrs); /* reset the token in the qtd and the * qh overlay (which still contains @@ -494,7 +493,7 @@ last = qtd; /* reinit the xacterr counter for the next qtd */ - qh->xacterrs = QH_XACTERR_MAX; + qh->xacterrs = 0; } /* last urb's completion might still need calling */ @@ -940,7 +939,8 @@ head->qh_next.qh = qh; head->hw_next = dma; - qh->xacterrs = QH_XACTERR_MAX; + qh_get(qh); + qh->xacterrs = 0; qh->qh_state = QH_STATE_LINKED; /* qtd completions reported later by interrupt */ } @@ -1080,7 +1080,7 @@ * the HC and TT handle it when the TT has a buffer ready. */ if (likely (qh->qh_state == QH_STATE_IDLE)) - qh_link_async (ehci, qh_get (qh)); + qh_link_async(ehci, qh); done: spin_unlock_irqrestore (&ehci->lock, flags); if (unlikely (qh == NULL)) @@ -1115,8 +1115,6 @@ && HC_IS_RUNNING (ehci_to_hcd(ehci)->state)) qh_link_async (ehci, qh); else { - qh_put (qh); // refcount from async list - /* it's not free to turn the async schedule on/off; leave it * active but idle for a while once it empties. */ @@ -1124,6 +1122,7 @@ && ehci->async->qh_next.qh == NULL) timer_action (ehci, TIMER_ASYNC_OFF); } + qh_put(qh); /* refcount from async list */ if (next) { ehci->reclaim = NULL; diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/host/ehci-sched.c linux-2.6.31-rc4-git5-usb.current/drivers/usb/host/ehci-sched.c --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/host/ehci-sched.c 2009-07-24 11:07:47.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/host/ehci-sched.c 2009-07-31 09:56:28.000000000 -0700 @@ -542,6 +542,7 @@ } } qh->qh_state = QH_STATE_LINKED; + qh->xacterrs = 0; qh_get (qh); /* update per-qh bandwidth for usbfs */ diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/musb/Kconfig linux-2.6.31-rc4-git5-usb.current/drivers/usb/musb/Kconfig --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/musb/Kconfig 2009-07-24 11:07:47.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/musb/Kconfig 2009-07-31 09:56:28.000000000 -0700 @@ -12,6 +12,7 @@ depends on !SUPERH select NOP_USB_XCEIV if ARCH_DAVINCI select TWL4030_USB if MACH_OMAP_3430SDP + select NOP_USB_XCEIV if MACH_OMAP3EVM select USB_OTG_UTILS tristate 'Inventra Highspeed Dual Role Controller (TI, ADI, ...)' help diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/serial/pl2303.c linux-2.6.31-rc4-git5-usb.current/drivers/usb/serial/pl2303.c --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/serial/pl2303.c 2009-07-24 11:07:47.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/serial/pl2303.c 2009-07-31 09:56:28.000000000 -0700 @@ -95,6 +95,7 @@ { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, + { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, { } /* Terminating entry */ }; diff -Naur -X linux-2.6.31-rc4-git5-driver-core.current/Documentation/dontdiff linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/serial/pl2303.h linux-2.6.31-rc4-git5-usb.current/drivers/usb/serial/pl2303.h --- linux-2.6.31-rc4-git5-driver-core.current/drivers/usb/serial/pl2303.h 2009-07-24 11:07:47.000000000 -0700 +++ linux-2.6.31-rc4-git5-usb.current/drivers/usb/serial/pl2303.h 2009-07-31 09:56:28.000000000 -0700 @@ -126,3 +126,7 @@ /* Cressi Edy (diving computer) PC interface */ #define CRESSI_VENDOR_ID 0x04b8 #define CRESSI_EDY_PRODUCT_ID 0x0521 + +/* Sony, USB data cable for CMD-Jxx mobile phones */ +#define SONY_VENDOR_ID 0x054c +#define SONY_QN3USB_PRODUCT_ID 0x0437