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: serial: add more Onda device ids to option driver
USB: usb-storage: unusual_devs entry for Nikon D2H
USB: storage: unusual_devs entry for Mio C520-GPS
USB: fsl_usb2_udc: Report disconnect before unbinding
USB: fsl_qe_udc: Report disconnect before unbinding
USB: fix SB600 USB subsystem hang bug
Revert "USB: improve ehci_watchdog's side effect in CPU power management"

+71 -10
+3
drivers/usb/gadget/fsl_qe_udc.c
··· 2363 nuke(loop_ep, -ESHUTDOWN); 2364 spin_unlock_irqrestore(&udc_controller->lock, flags); 2365 2366 /* unbind gadget and unhook driver. */ 2367 driver->unbind(&udc_controller->gadget); 2368 udc_controller->gadget.dev.driver = NULL;
··· 2363 nuke(loop_ep, -ESHUTDOWN); 2364 spin_unlock_irqrestore(&udc_controller->lock, flags); 2365 2366 + /* report disconnect; the controller is already quiesced */ 2367 + driver->disconnect(&udc_controller->gadget); 2368 + 2369 /* unbind gadget and unhook driver. */ 2370 driver->unbind(&udc_controller->gadget); 2371 udc_controller->gadget.dev.driver = NULL;
+3
drivers/usb/gadget/fsl_usb2_udc.c
··· 1836 nuke(loop_ep, -ESHUTDOWN); 1837 spin_unlock_irqrestore(&udc_controller->lock, flags); 1838 1839 /* unbind gadget and unhook driver. */ 1840 driver->unbind(&udc_controller->gadget); 1841 udc_controller->gadget.dev.driver = NULL;
··· 1836 nuke(loop_ep, -ESHUTDOWN); 1837 spin_unlock_irqrestore(&udc_controller->lock, flags); 1838 1839 + /* report disconnect; the controller is already quiesced */ 1840 + driver->disconnect(&udc_controller->gadget); 1841 + 1842 /* unbind gadget and unhook driver. */ 1843 driver->unbind(&udc_controller->gadget); 1844 udc_controller->gadget.dev.driver = NULL;
+6 -3
drivers/usb/host/ehci-pci.c
··· 169 } 170 break; 171 case PCI_VENDOR_ID_ATI: 172 - /* SB700 old version has a bug in EHCI controller, 173 * which causes usb devices lose response in some cases. 174 */ 175 - if (pdev->device == 0x4396) { 176 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI, 177 PCI_DEVICE_ID_ATI_SBX00_SMBUS, 178 NULL); 179 if (!p_smbus) 180 break; 181 rev = p_smbus->revision; 182 - if ((rev == 0x3a) || (rev == 0x3b)) { 183 u8 tmp; 184 pci_read_config_byte(pdev, 0x53, &tmp); 185 pci_write_config_byte(pdev, 0x53, tmp | (1<<3)); 186 }
··· 169 } 170 break; 171 case PCI_VENDOR_ID_ATI: 172 + /* SB600 and old version of SB700 have a bug in EHCI controller, 173 * which causes usb devices lose response in some cases. 174 */ 175 + if ((pdev->device == 0x4386) || (pdev->device == 0x4396)) { 176 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI, 177 PCI_DEVICE_ID_ATI_SBX00_SMBUS, 178 NULL); 179 if (!p_smbus) 180 break; 181 rev = p_smbus->revision; 182 + if ((pdev->device == 0x4386) || (rev == 0x3a) 183 + || (rev == 0x3b)) { 184 u8 tmp; 185 + ehci_info(ehci, "applying AMD SB600/SB700 USB " 186 + "freeze workaround\n"); 187 pci_read_config_byte(pdev, 0x53, &tmp); 188 pci_write_config_byte(pdev, 0x53, tmp | (1<<3)); 189 }
+5 -7
drivers/usb/host/ehci.h
··· 183 * the async ring; just the I/O watchdog. Note that if a 184 * SHRINK were pending, OFF would never be requested. 185 */ 186 - enum ehci_timer_action oldactions = ehci->actions; 187 188 if (!test_and_set_bit (action, &ehci->actions)) { 189 unsigned long t; 190 - 191 - if (timer_pending(&ehci->watchdog) 192 - && ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF)) 193 - & oldactions)) 194 - return; 195 196 switch (action) { 197 case TIMER_IO_WATCHDOG: ··· 206 t = DIV_ROUND_UP(EHCI_SHRINK_FRAMES * HZ, 1000) + 1; 207 break; 208 } 209 - mod_timer(&ehci->watchdog, round_jiffies(t + jiffies)); 210 } 211 } 212
··· 183 * the async ring; just the I/O watchdog. Note that if a 184 * SHRINK were pending, OFF would never be requested. 185 */ 186 + if (timer_pending(&ehci->watchdog) 187 + && ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF)) 188 + & ehci->actions)) 189 + return; 190 191 if (!test_and_set_bit (action, &ehci->actions)) { 192 unsigned long t; 193 194 switch (action) { 195 case TIMER_IO_WATCHDOG: ··· 208 t = DIV_ROUND_UP(EHCI_SHRINK_FRAMES * HZ, 1000) + 1; 209 break; 210 } 211 + mod_timer(&ehci->watchdog, t + jiffies); 212 } 213 } 214
+35
drivers/usb/serial/option.c
··· 224 #define ONDA_VENDOR_ID 0x19d2 225 #define ONDA_PRODUCT_MSA501HS 0x0001 226 #define ONDA_PRODUCT_ET502HS 0x0002 227 228 #define BANDRICH_VENDOR_ID 0x1A8D 229 #define BANDRICH_PRODUCT_C100_1 0x1002 ··· 414 { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) }, 415 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MSA501HS) }, 416 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) }, 417 { USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) }, 418 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, 419 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
··· 224 #define ONDA_VENDOR_ID 0x19d2 225 #define ONDA_PRODUCT_MSA501HS 0x0001 226 #define ONDA_PRODUCT_ET502HS 0x0002 227 + #define ONDA_PRODUCT_MT503HS 0x0200 228 229 #define BANDRICH_VENDOR_ID 0x1A8D 230 #define BANDRICH_PRODUCT_C100_1 0x1002 ··· 413 { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) }, 414 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MSA501HS) }, 415 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) }, 416 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0003) }, 417 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0004) }, 418 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0005) }, 419 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0006) }, 420 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0007) }, 421 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0008) }, 422 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0009) }, 423 + { USB_DEVICE(ONDA_VENDOR_ID, 0x000a) }, 424 + { USB_DEVICE(ONDA_VENDOR_ID, 0x000b) }, 425 + { USB_DEVICE(ONDA_VENDOR_ID, 0x000c) }, 426 + { USB_DEVICE(ONDA_VENDOR_ID, 0x000d) }, 427 + { USB_DEVICE(ONDA_VENDOR_ID, 0x000e) }, 428 + { USB_DEVICE(ONDA_VENDOR_ID, 0x000f) }, 429 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0010) }, 430 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0011) }, 431 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0012) }, 432 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0013) }, 433 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0014) }, 434 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0015) }, 435 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0016) }, 436 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0017) }, 437 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0018) }, 438 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0019) }, 439 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0020) }, 440 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0021) }, 441 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0022) }, 442 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0023) }, 443 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0024) }, 444 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0025) }, 445 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0026) }, 446 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0027) }, 447 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0028) }, 448 + { USB_DEVICE(ONDA_VENDOR_ID, 0x0029) }, 449 + { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MT503HS) }, 450 { USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) }, 451 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, 452 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
+19
drivers/usb/storage/unusual_devs.h
··· 318 US_SC_SCSI, US_PR_KARMA, rio_karma_init, 0), 319 #endif 320 321 /* 322 * This virtual floppy is found in Sun equipment (x4600, x4200m2, etc.) 323 * Reported by Pete Zaitcev <zaitcev@redhat.com> ··· 386 UNUSUAL_DEV( 0x04b0, 0x0401, 0x0200, 0x0200, 387 "NIKON", 388 "NIKON DSC D100", 389 US_SC_DEVICE, US_PR_DEVICE, NULL, 390 US_FL_FIX_CAPACITY), 391
··· 318 US_SC_SCSI, US_PR_KARMA, rio_karma_init, 0), 319 #endif 320 321 + /* Reported by Tamas Kerecsen <kerecsen@bigfoot.com> 322 + * Obviously the PROM has not been customized by the VAR; 323 + * the Vendor and Product string descriptors are: 324 + * Generic Mass Storage (PROTOTYPE--Remember to change idVendor) 325 + * Generic Manufacturer (PROTOTYPE--Remember to change idVendor) 326 + */ 327 + UNUSUAL_DEV( 0x045e, 0xffff, 0x0000, 0x0000, 328 + "Mitac", 329 + "GPS", 330 + US_SC_DEVICE, US_PR_DEVICE, NULL, 331 + US_FL_MAX_SECTORS_64 ), 332 + 333 /* 334 * This virtual floppy is found in Sun equipment (x4600, x4200m2, etc.) 335 * Reported by Pete Zaitcev <zaitcev@redhat.com> ··· 374 UNUSUAL_DEV( 0x04b0, 0x0401, 0x0200, 0x0200, 375 "NIKON", 376 "NIKON DSC D100", 377 + US_SC_DEVICE, US_PR_DEVICE, NULL, 378 + US_FL_FIX_CAPACITY), 379 + 380 + /* Reported by Tobias Kunze Briseno <t-linux@fictive.com> */ 381 + UNUSUAL_DEV( 0x04b0, 0x0403, 0x0200, 0x0200, 382 + "NIKON", 383 + "NIKON DSC D2H", 384 US_SC_DEVICE, US_PR_DEVICE, NULL, 385 US_FL_FIX_CAPACITY), 386