diff options
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 3 | ||||
| -rw-r--r-- | drivers/usb/core/hcd.c | 38 | ||||
| -rw-r--r-- | drivers/usb/core/hub.c | 15 | ||||
| -rw-r--r-- | drivers/usb/host/ehci.h | 19 | ||||
| -rw-r--r-- | drivers/usb/host/ohci-hcd.c | 15 | ||||
| -rw-r--r-- | drivers/usb/host/ohci-q.c | 12 | ||||
| -rw-r--r-- | drivers/usb/misc/sisusbvga/sisusb.c | 2 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.h | 3 | ||||
| -rw-r--r-- | drivers/usb/serial/ipaq.c | 7 | ||||
| -rw-r--r-- | drivers/usb/serial/option.c | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/pl2303.c | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/pl2303.h | 1 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_devs.h | 8 |
14 files changed, 89 insertions, 37 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 63c34043b4d9..c3201affa0b6 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
| @@ -1125,9 +1125,6 @@ static void stop_data_traffic(struct acm *acm) | |||
| 1125 | for (i = 0; i < acm->rx_buflimit; i++) | 1125 | for (i = 0; i < acm->rx_buflimit; i++) |
| 1126 | usb_kill_urb(acm->ru[i].urb); | 1126 | usb_kill_urb(acm->ru[i].urb); |
| 1127 | 1127 | ||
| 1128 | INIT_LIST_HEAD(&acm->filled_read_bufs); | ||
| 1129 | INIT_LIST_HEAD(&acm->spare_read_bufs); | ||
| 1130 | |||
| 1131 | tasklet_enable(&acm->urb_task); | 1128 | tasklet_enable(&acm->urb_task); |
| 1132 | 1129 | ||
| 1133 | cancel_work_sync(&acm->work); | 1130 | cancel_work_sync(&acm->work); |
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 09a53e7f3327..7158dbb6e4b4 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
| @@ -1684,19 +1684,30 @@ EXPORT_SYMBOL_GPL(usb_bus_start_enum); | |||
| 1684 | irqreturn_t usb_hcd_irq (int irq, void *__hcd) | 1684 | irqreturn_t usb_hcd_irq (int irq, void *__hcd) |
| 1685 | { | 1685 | { |
| 1686 | struct usb_hcd *hcd = __hcd; | 1686 | struct usb_hcd *hcd = __hcd; |
| 1687 | int start = hcd->state; | 1687 | unsigned long flags; |
| 1688 | irqreturn_t rc; | ||
| 1688 | 1689 | ||
| 1689 | if (unlikely(start == HC_STATE_HALT || | 1690 | /* IRQF_DISABLED doesn't work correctly with shared IRQs |
| 1690 | !test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))) | 1691 | * when the first handler doesn't use it. So let's just |
| 1691 | return IRQ_NONE; | 1692 | * assume it's never used. |
| 1692 | if (hcd->driver->irq (hcd) == IRQ_NONE) | 1693 | */ |
| 1693 | return IRQ_NONE; | 1694 | local_irq_save(flags); |
| 1694 | 1695 | ||
| 1695 | set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags); | 1696 | if (unlikely(hcd->state == HC_STATE_HALT || |
| 1697 | !test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))) { | ||
| 1698 | rc = IRQ_NONE; | ||
| 1699 | } else if (hcd->driver->irq(hcd) == IRQ_NONE) { | ||
| 1700 | rc = IRQ_NONE; | ||
| 1701 | } else { | ||
| 1702 | set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags); | ||
| 1696 | 1703 | ||
| 1697 | if (unlikely(hcd->state == HC_STATE_HALT)) | 1704 | if (unlikely(hcd->state == HC_STATE_HALT)) |
| 1698 | usb_hc_died (hcd); | 1705 | usb_hc_died(hcd); |
| 1699 | return IRQ_HANDLED; | 1706 | rc = IRQ_HANDLED; |
| 1707 | } | ||
| 1708 | |||
| 1709 | local_irq_restore(flags); | ||
| 1710 | return rc; | ||
| 1700 | } | 1711 | } |
| 1701 | 1712 | ||
| 1702 | /*-------------------------------------------------------------------------*/ | 1713 | /*-------------------------------------------------------------------------*/ |
| @@ -1860,6 +1871,13 @@ int usb_add_hcd(struct usb_hcd *hcd, | |||
| 1860 | 1871 | ||
| 1861 | /* enable irqs just before we start the controller */ | 1872 | /* enable irqs just before we start the controller */ |
| 1862 | if (hcd->driver->irq) { | 1873 | if (hcd->driver->irq) { |
| 1874 | |||
| 1875 | /* IRQF_DISABLED doesn't work as advertised when used together | ||
| 1876 | * with IRQF_SHARED. As usb_hcd_irq() will always disable | ||
| 1877 | * interrupts we can remove it here. | ||
| 1878 | */ | ||
| 1879 | irqflags &= ~IRQF_DISABLED; | ||
| 1880 | |||
| 1863 | snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", | 1881 | snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", |
| 1864 | hcd->driver->description, hcd->self.busnum); | 1882 | hcd->driver->description, hcd->self.busnum); |
| 1865 | if ((retval = request_irq(irqnum, &usb_hcd_irq, irqflags, | 1883 | if ((retval = request_irq(irqnum, &usb_hcd_irq, irqflags, |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 94789be54ca3..512d2d57d41e 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -713,18 +713,11 @@ static void hub_restart(struct usb_hub *hub, int type) | |||
| 713 | } | 713 | } |
| 714 | 714 | ||
| 715 | /* Was the power session lost while we were suspended? */ | 715 | /* Was the power session lost while we were suspended? */ |
| 716 | switch (type) { | 716 | status = hub_port_status(hub, port1, &portstatus, &portchange); |
| 717 | case HUB_RESET_RESUME: | ||
| 718 | portstatus = 0; | ||
| 719 | portchange = USB_PORT_STAT_C_CONNECTION; | ||
| 720 | break; | ||
| 721 | 717 | ||
| 722 | case HUB_RESET: | 718 | /* If the device is gone, khubd will handle it later */ |
| 723 | case HUB_RESUME: | 719 | if (status == 0 && !(portstatus & USB_PORT_STAT_CONNECTION)) |
| 724 | status = hub_port_status(hub, port1, | 720 | continue; |
| 725 | &portstatus, &portchange); | ||
| 726 | break; | ||
| 727 | } | ||
| 728 | 721 | ||
| 729 | /* For "USB_PERSIST"-enabled children we must | 722 | /* For "USB_PERSIST"-enabled children we must |
| 730 | * mark the child device for reset-resume and | 723 | * mark the child device for reset-resume and |
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index 35a03095757e..90245fd8bac4 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
| @@ -177,6 +177,15 @@ timer_action_done (struct ehci_hcd *ehci, enum ehci_timer_action action) | |||
| 177 | static inline void | 177 | static inline void |
| 178 | timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) | 178 | timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) |
| 179 | { | 179 | { |
| 180 | /* Don't override timeouts which shrink or (later) disable | ||
| 181 | * the async ring; just the I/O watchdog. Note that if a | ||
| 182 | * SHRINK were pending, OFF would never be requested. | ||
| 183 | */ | ||
| 184 | if (timer_pending(&ehci->watchdog) | ||
| 185 | && ((BIT(TIMER_ASYNC_SHRINK) | BIT(TIMER_ASYNC_OFF)) | ||
| 186 | & ehci->actions)) | ||
| 187 | return; | ||
| 188 | |||
| 180 | if (!test_and_set_bit (action, &ehci->actions)) { | 189 | if (!test_and_set_bit (action, &ehci->actions)) { |
| 181 | unsigned long t; | 190 | unsigned long t; |
| 182 | 191 | ||
| @@ -192,15 +201,7 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) | |||
| 192 | t = EHCI_SHRINK_JIFFIES; | 201 | t = EHCI_SHRINK_JIFFIES; |
| 193 | break; | 202 | break; |
| 194 | } | 203 | } |
| 195 | t += jiffies; | 204 | mod_timer(&ehci->watchdog, t + jiffies); |
| 196 | // all timings except IAA watchdog can be overridden. | ||
| 197 | // async queue SHRINK often precedes IAA. while it's ready | ||
| 198 | // to go OFF neither can matter, and afterwards the IO | ||
| 199 | // watchdog stops unless there's still periodic traffic. | ||
| 200 | if (time_before_eq(t, ehci->watchdog.expires) | ||
| 201 | && timer_pending (&ehci->watchdog)) | ||
| 202 | return; | ||
| 203 | mod_timer (&ehci->watchdog, t); | ||
| 204 | } | 205 | } |
| 205 | } | 206 | } |
| 206 | 207 | ||
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 33f1c1c32edf..a8160d65f32b 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c | |||
| @@ -1054,7 +1054,7 @@ MODULE_LICENSE ("GPL"); | |||
| 1054 | 1054 | ||
| 1055 | #ifdef CONFIG_MFD_SM501 | 1055 | #ifdef CONFIG_MFD_SM501 |
| 1056 | #include "ohci-sm501.c" | 1056 | #include "ohci-sm501.c" |
| 1057 | #define PLATFORM_DRIVER ohci_hcd_sm501_driver | 1057 | #define SM501_OHCI_DRIVER ohci_hcd_sm501_driver |
| 1058 | #endif | 1058 | #endif |
| 1059 | 1059 | ||
| 1060 | #if !defined(PCI_DRIVER) && \ | 1060 | #if !defined(PCI_DRIVER) && \ |
| @@ -1062,6 +1062,7 @@ MODULE_LICENSE ("GPL"); | |||
| 1062 | !defined(OF_PLATFORM_DRIVER) && \ | 1062 | !defined(OF_PLATFORM_DRIVER) && \ |
| 1063 | !defined(SA1111_DRIVER) && \ | 1063 | !defined(SA1111_DRIVER) && \ |
| 1064 | !defined(PS3_SYSTEM_BUS_DRIVER) && \ | 1064 | !defined(PS3_SYSTEM_BUS_DRIVER) && \ |
| 1065 | !defined(SM501_OHCI_DRIVER) && \ | ||
| 1065 | !defined(SSB_OHCI_DRIVER) | 1066 | !defined(SSB_OHCI_DRIVER) |
| 1066 | #error "missing bus glue for ohci-hcd" | 1067 | #error "missing bus glue for ohci-hcd" |
| 1067 | #endif | 1068 | #endif |
| @@ -1121,9 +1122,18 @@ static int __init ohci_hcd_mod_init(void) | |||
| 1121 | goto error_ssb; | 1122 | goto error_ssb; |
| 1122 | #endif | 1123 | #endif |
| 1123 | 1124 | ||
| 1125 | #ifdef SM501_OHCI_DRIVER | ||
| 1126 | retval = platform_driver_register(&SM501_OHCI_DRIVER); | ||
| 1127 | if (retval < 0) | ||
| 1128 | goto error_sm501; | ||
| 1129 | #endif | ||
| 1130 | |||
| 1124 | return retval; | 1131 | return retval; |
| 1125 | 1132 | ||
| 1126 | /* Error path */ | 1133 | /* Error path */ |
| 1134 | #ifdef SM501_OHCI_DRIVER | ||
| 1135 | error_sm501: | ||
| 1136 | #endif | ||
| 1127 | #ifdef SSB_OHCI_DRIVER | 1137 | #ifdef SSB_OHCI_DRIVER |
| 1128 | error_ssb: | 1138 | error_ssb: |
| 1129 | #endif | 1139 | #endif |
| @@ -1159,6 +1169,9 @@ module_init(ohci_hcd_mod_init); | |||
| 1159 | 1169 | ||
| 1160 | static void __exit ohci_hcd_mod_exit(void) | 1170 | static void __exit ohci_hcd_mod_exit(void) |
| 1161 | { | 1171 | { |
| 1172 | #ifdef SM501_OHCI_DRIVER | ||
| 1173 | platform_driver_unregister(&SM501_OHCI_DRIVER); | ||
| 1174 | #endif | ||
| 1162 | #ifdef SSB_OHCI_DRIVER | 1175 | #ifdef SSB_OHCI_DRIVER |
| 1163 | ssb_driver_unregister(&SSB_OHCI_DRIVER); | 1176 | ssb_driver_unregister(&SSB_OHCI_DRIVER); |
| 1164 | #endif | 1177 | #endif |
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c index 9c9f3b59186f..9b547407c934 100644 --- a/drivers/usb/host/ohci-q.c +++ b/drivers/usb/host/ohci-q.c | |||
| @@ -952,6 +952,7 @@ rescan_this: | |||
| 952 | struct urb *urb; | 952 | struct urb *urb; |
| 953 | urb_priv_t *urb_priv; | 953 | urb_priv_t *urb_priv; |
| 954 | __hc32 savebits; | 954 | __hc32 savebits; |
| 955 | u32 tdINFO; | ||
| 955 | 956 | ||
| 956 | td = list_entry (entry, struct td, td_list); | 957 | td = list_entry (entry, struct td, td_list); |
| 957 | urb = td->urb; | 958 | urb = td->urb; |
| @@ -966,6 +967,17 @@ rescan_this: | |||
| 966 | savebits = *prev & ~cpu_to_hc32 (ohci, TD_MASK); | 967 | savebits = *prev & ~cpu_to_hc32 (ohci, TD_MASK); |
| 967 | *prev = td->hwNextTD | savebits; | 968 | *prev = td->hwNextTD | savebits; |
| 968 | 969 | ||
| 970 | /* If this was unlinked, the TD may not have been | ||
| 971 | * retired ... so manually save the data toggle. | ||
| 972 | * The controller ignores the value we save for | ||
| 973 | * control and ISO endpoints. | ||
| 974 | */ | ||
| 975 | tdINFO = hc32_to_cpup(ohci, &td->hwINFO); | ||
| 976 | if ((tdINFO & TD_T) == TD_T_DATA0) | ||
| 977 | ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_C); | ||
| 978 | else if ((tdINFO & TD_T) == TD_T_DATA1) | ||
| 979 | ed->hwHeadP |= cpu_to_hc32(ohci, ED_C); | ||
| 980 | |||
| 969 | /* HC may have partly processed this TD */ | 981 | /* HC may have partly processed this TD */ |
| 970 | td_done (ohci, urb, td); | 982 | td_done (ohci, urb, td); |
| 971 | urb_priv->td_cnt++; | 983 | urb_priv->td_cnt++; |
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c index cb7fa0eaf3ae..33182f4c2267 100644 --- a/drivers/usb/misc/sisusbvga/sisusb.c +++ b/drivers/usb/misc/sisusbvga/sisusb.c | |||
| @@ -3264,8 +3264,6 @@ static void sisusb_disconnect(struct usb_interface *intf) | |||
| 3264 | 3264 | ||
| 3265 | /* decrement our usage count */ | 3265 | /* decrement our usage count */ |
| 3266 | kref_put(&sisusb->kref, sisusb_delete); | 3266 | kref_put(&sisusb->kref, sisusb_delete); |
| 3267 | |||
| 3268 | dev_info(&sisusb->sisusb_dev->dev, "Disconnected\n"); | ||
| 3269 | } | 3267 | } |
| 3270 | 3268 | ||
| 3271 | static struct usb_device_id sisusb_table [] = { | 3269 | static struct usb_device_id sisusb_table [] = { |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 5234e7a3bd2c..0ff4a3971e45 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -637,6 +637,7 @@ static struct usb_device_id id_table_combined [] = { | |||
| 637 | { USB_DEVICE(FTDI_VID, FTDI_OOCDLINK_PID), | 637 | { USB_DEVICE(FTDI_VID, FTDI_OOCDLINK_PID), |
| 638 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 638 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
| 639 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, | 639 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, |
| 640 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, | ||
| 640 | { }, /* Optional parameter entry */ | 641 | { }, /* Optional parameter entry */ |
| 641 | { } /* Terminating entry */ | 642 | { } /* Terminating entry */ |
| 642 | }; | 643 | }; |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 06e0ecabb3eb..8302eca893ea 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -828,6 +828,9 @@ | |||
| 828 | /* Propox devices */ | 828 | /* Propox devices */ |
| 829 | #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 | 829 | #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 |
| 830 | 830 | ||
| 831 | /* Rig Expert Ukraine devices */ | ||
| 832 | #define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ | ||
| 833 | |||
| 831 | /* Commands */ | 834 | /* Commands */ |
| 832 | #define FTDI_SIO_RESET 0 /* Reset the port */ | 835 | #define FTDI_SIO_RESET 0 /* Reset the port */ |
| 833 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ | 836 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ |
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c index ea924dc48496..d9fb3768a2d7 100644 --- a/drivers/usb/serial/ipaq.c +++ b/drivers/usb/serial/ipaq.c | |||
| @@ -570,7 +570,12 @@ static struct usb_serial_driver ipaq_device = { | |||
| 570 | .description = "PocketPC PDA", | 570 | .description = "PocketPC PDA", |
| 571 | .usb_driver = &ipaq_driver, | 571 | .usb_driver = &ipaq_driver, |
| 572 | .id_table = ipaq_id_table, | 572 | .id_table = ipaq_id_table, |
| 573 | .num_ports = 2, | 573 | /* |
| 574 | * some devices have an extra endpoint, which | ||
| 575 | * must be ignored as it would make the core | ||
| 576 | * create a second port which oopses when used | ||
| 577 | */ | ||
| 578 | .num_ports = 1, | ||
| 574 | .open = ipaq_open, | 579 | .open = ipaq_open, |
| 575 | .close = ipaq_close, | 580 | .close = ipaq_close, |
| 576 | .attach = ipaq_startup, | 581 | .attach = ipaq_startup, |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 43cfde83a93b..a73420dd052a 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -306,6 +306,7 @@ static struct usb_device_id option_ids[] = { | |||
| 306 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, | 306 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, |
| 307 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, | 307 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, |
| 308 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, | 308 | { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, |
| 309 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ | ||
| 309 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | 310 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ |
| 310 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 311 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
| 311 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 312 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 103195abd417..2a0dd1b50dc4 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
| @@ -57,6 +57,7 @@ static struct usb_device_id id_table [] = { | |||
| 57 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, | 57 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, |
| 58 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, | 58 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, |
| 59 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, | 59 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, |
| 60 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, | ||
| 60 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, | 61 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, |
| 61 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, | 62 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, |
| 62 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, | 63 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, |
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h index cff160abb130..6ac3bbcf7a22 100644 --- a/drivers/usb/serial/pl2303.h +++ b/drivers/usb/serial/pl2303.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 | 15 | #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 |
| 16 | #define PL2303_PRODUCT_ID_ALDIGA 0x0611 | 16 | #define PL2303_PRODUCT_ID_ALDIGA 0x0611 |
| 17 | #define PL2303_PRODUCT_ID_MMX 0x0612 | 17 | #define PL2303_PRODUCT_ID_MMX 0x0612 |
| 18 | #define PL2303_PRODUCT_ID_GPRS 0x0609 | ||
| 18 | 19 | ||
| 19 | #define ATEN_VENDOR_ID 0x0557 | 20 | #define ATEN_VENDOR_ID 0x0557 |
| 20 | #define ATEN_VENDOR_ID2 0x0547 | 21 | #define ATEN_VENDOR_ID2 0x0547 |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 45fe3663fa7f..39a7c11795c4 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -402,11 +402,19 @@ UNUSUAL_DEV( 0x04a5, 0x3010, 0x0100, 0x0100, | |||
| 402 | US_FL_IGNORE_RESIDUE ), | 402 | US_FL_IGNORE_RESIDUE ), |
| 403 | 403 | ||
| 404 | #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB | 404 | #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB |
| 405 | /* CY7C68300 : support atacb */ | ||
| 405 | UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, | 406 | UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, |
| 406 | "Cypress", | 407 | "Cypress", |
| 407 | "Cypress AT2LP", | 408 | "Cypress AT2LP", |
| 408 | US_SC_CYP_ATACB, US_PR_DEVICE, NULL, | 409 | US_SC_CYP_ATACB, US_PR_DEVICE, NULL, |
| 409 | 0), | 410 | 0), |
| 411 | |||
| 412 | /* CY7C68310 : support atacb and atacb2 */ | ||
| 413 | UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999, | ||
| 414 | "Cypress", | ||
| 415 | "Cypress ISD-300LP", | ||
| 416 | US_SC_CYP_ATACB, US_PR_DEVICE, NULL, | ||
| 417 | 0), | ||
| 410 | #endif | 418 | #endif |
| 411 | 419 | ||
| 412 | /* Reported by Simon Levitt <simon@whattf.com> | 420 | /* Reported by Simon Levitt <simon@whattf.com> |
