Commit b4dcfbee authored by Linus Torvalds's avatar Linus Torvalds

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"
parents ecf318cc 5bb4bd98
...@@ -2363,6 +2363,9 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) ...@@ -2363,6 +2363,9 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
nuke(loop_ep, -ESHUTDOWN); nuke(loop_ep, -ESHUTDOWN);
spin_unlock_irqrestore(&udc_controller->lock, flags); spin_unlock_irqrestore(&udc_controller->lock, flags);
/* report disconnect; the controller is already quiesced */
driver->disconnect(&udc_controller->gadget);
/* unbind gadget and unhook driver. */ /* unbind gadget and unhook driver. */
driver->unbind(&udc_controller->gadget); driver->unbind(&udc_controller->gadget);
udc_controller->gadget.dev.driver = NULL; udc_controller->gadget.dev.driver = NULL;
......
...@@ -1836,6 +1836,9 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) ...@@ -1836,6 +1836,9 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
nuke(loop_ep, -ESHUTDOWN); nuke(loop_ep, -ESHUTDOWN);
spin_unlock_irqrestore(&udc_controller->lock, flags); spin_unlock_irqrestore(&udc_controller->lock, flags);
/* report disconnect; the controller is already quiesced */
driver->disconnect(&udc_controller->gadget);
/* unbind gadget and unhook driver. */ /* unbind gadget and unhook driver. */
driver->unbind(&udc_controller->gadget); driver->unbind(&udc_controller->gadget);
udc_controller->gadget.dev.driver = NULL; udc_controller->gadget.dev.driver = NULL;
......
...@@ -169,18 +169,21 @@ static int ehci_pci_setup(struct usb_hcd *hcd) ...@@ -169,18 +169,21 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
} }
break; break;
case PCI_VENDOR_ID_ATI: case PCI_VENDOR_ID_ATI:
/* SB700 old version has a bug in EHCI controller, /* SB600 and old version of SB700 have a bug in EHCI controller,
* which causes usb devices lose response in some cases. * which causes usb devices lose response in some cases.
*/ */
if (pdev->device == 0x4396) { if ((pdev->device == 0x4386) || (pdev->device == 0x4396)) {
p_smbus = pci_get_device(PCI_VENDOR_ID_ATI, p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
PCI_DEVICE_ID_ATI_SBX00_SMBUS, PCI_DEVICE_ID_ATI_SBX00_SMBUS,
NULL); NULL);
if (!p_smbus) if (!p_smbus)
break; break;
rev = p_smbus->revision; rev = p_smbus->revision;
if ((rev == 0x3a) || (rev == 0x3b)) { if ((pdev->device == 0x4386) || (rev == 0x3a)
|| (rev == 0x3b)) {
u8 tmp; u8 tmp;
ehci_info(ehci, "applying AMD SB600/SB700 USB "
"freeze workaround\n");
pci_read_config_byte(pdev, 0x53, &tmp); pci_read_config_byte(pdev, 0x53, &tmp);
pci_write_config_byte(pdev, 0x53, tmp | (1<<3)); pci_write_config_byte(pdev, 0x53, tmp | (1<<3));
} }
......
...@@ -183,16 +183,14 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) ...@@ -183,16 +183,14 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action)
* the async ring; just the I/O watchdog. Note that if a * the async ring; just the I/O watchdog. Note that if a
* SHRINK were pending, OFF would never be requested. * SHRINK were pending, OFF would never be requested.
*/ */
enum ehci_timer_action oldactions = ehci->actions; if (timer_pending(&ehci->watchdog)
&& ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF))
& ehci->actions))
return;
if (!test_and_set_bit (action, &ehci->actions)) { if (!test_and_set_bit (action, &ehci->actions)) {
unsigned long t; unsigned long t;
if (timer_pending(&ehci->watchdog)
&& ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF))
& oldactions))
return;
switch (action) { switch (action) {
case TIMER_IO_WATCHDOG: case TIMER_IO_WATCHDOG:
t = EHCI_IO_JIFFIES; t = EHCI_IO_JIFFIES;
...@@ -208,7 +206,7 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) ...@@ -208,7 +206,7 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action)
t = DIV_ROUND_UP(EHCI_SHRINK_FRAMES * HZ, 1000) + 1; t = DIV_ROUND_UP(EHCI_SHRINK_FRAMES * HZ, 1000) + 1;
break; break;
} }
mod_timer(&ehci->watchdog, round_jiffies(t + jiffies)); mod_timer(&ehci->watchdog, t + jiffies);
} }
} }
......
...@@ -224,6 +224,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po ...@@ -224,6 +224,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
#define ONDA_VENDOR_ID 0x19d2 #define ONDA_VENDOR_ID 0x19d2
#define ONDA_PRODUCT_MSA501HS 0x0001 #define ONDA_PRODUCT_MSA501HS 0x0001
#define ONDA_PRODUCT_ET502HS 0x0002 #define ONDA_PRODUCT_ET502HS 0x0002
#define ONDA_PRODUCT_MT503HS 0x0200
#define BANDRICH_VENDOR_ID 0x1A8D #define BANDRICH_VENDOR_ID 0x1A8D
#define BANDRICH_PRODUCT_C100_1 0x1002 #define BANDRICH_PRODUCT_C100_1 0x1002
...@@ -413,6 +414,40 @@ static struct usb_device_id option_ids[] = { ...@@ -413,6 +414,40 @@ static struct usb_device_id option_ids[] = {
{ USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) }, { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) },
{ USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MSA501HS) }, { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MSA501HS) },
{ USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) }, { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0003) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0004) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0005) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0006) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0007) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0008) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0009) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x000a) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x000b) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x000c) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x000d) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x000e) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x000f) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0010) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0011) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0012) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0013) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0014) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0015) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0016) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0017) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0018) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0019) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0020) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0021) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0022) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0023) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0024) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0025) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0026) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0027) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0028) },
{ USB_DEVICE(ONDA_VENDOR_ID, 0x0029) },
{ USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MT503HS) },
{ USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) }, { USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) },
{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
......
...@@ -318,6 +318,18 @@ UNUSUAL_DEV( 0x045a, 0x5210, 0x0101, 0x0101, ...@@ -318,6 +318,18 @@ UNUSUAL_DEV( 0x045a, 0x5210, 0x0101, 0x0101,
US_SC_SCSI, US_PR_KARMA, rio_karma_init, 0), US_SC_SCSI, US_PR_KARMA, rio_karma_init, 0),
#endif #endif
/* Reported by Tamas Kerecsen <kerecsen@bigfoot.com>
* Obviously the PROM has not been customized by the VAR;
* the Vendor and Product string descriptors are:
* Generic Mass Storage (PROTOTYPE--Remember to change idVendor)
* Generic Manufacturer (PROTOTYPE--Remember to change idVendor)
*/
UNUSUAL_DEV( 0x045e, 0xffff, 0x0000, 0x0000,
"Mitac",
"GPS",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_MAX_SECTORS_64 ),
/* /*
* This virtual floppy is found in Sun equipment (x4600, x4200m2, etc.) * This virtual floppy is found in Sun equipment (x4600, x4200m2, etc.)
* Reported by Pete Zaitcev <zaitcev@redhat.com> * Reported by Pete Zaitcev <zaitcev@redhat.com>
...@@ -377,6 +389,13 @@ UNUSUAL_DEV( 0x04b0, 0x0401, 0x0200, 0x0200, ...@@ -377,6 +389,13 @@ UNUSUAL_DEV( 0x04b0, 0x0401, 0x0200, 0x0200,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY), US_FL_FIX_CAPACITY),
/* Reported by Tobias Kunze Briseno <t-linux@fictive.com> */
UNUSUAL_DEV( 0x04b0, 0x0403, 0x0200, 0x0200,
"NIKON",
"NIKON DSC D2H",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY),
/* Reported by Milinevsky Dmitry <niam.niam@gmail.com> */ /* Reported by Milinevsky Dmitry <niam.niam@gmail.com> */
UNUSUAL_DEV( 0x04b0, 0x0409, 0x0100, 0x0100, UNUSUAL_DEV( 0x04b0, 0x0409, 0x0100, 0x0100,
"NIKON", "NIKON",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment