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

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6:
USB: new Novatel device ids for option driver
USB: berry_charge: correct dbg string for second magic command
usblp: quirk flag and device entry for Seiko Epson M129C printer
airprime: USB ID for Novatel EV620 mini PCI-E card
USB: necessary update for mos7720 driver
USB: RAZR v3i unusual_devs
USB: two more device ids for dm9601 usbnet driver
USB: fix usb-serial regression

+43 -14
+5 -1
drivers/usb/class/usblp.c
··· 202 203 #define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires unidirectional mode (no INs/reads) */ 204 #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ 205 206 static const struct quirk_printer_struct quirk_printers[] = { 207 { 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */ ··· 219 { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */ 220 { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ 221 { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, by zut <kernel@zut.de> */ 222 { 0, 0 } 223 }; 224 ··· 1050 ifd = &if_alt->altsetting[i]; 1051 1052 if (ifd->desc.bInterfaceClass != 7 || ifd->desc.bInterfaceSubClass != 1) 1053 - continue; 1054 1055 if (ifd->desc.bInterfaceProtocol < USBLP_FIRST_PROTOCOL || 1056 ifd->desc.bInterfaceProtocol > USBLP_LAST_PROTOCOL) ··· 1235 { USB_INTERFACE_INFO(7, 1, 1) }, 1236 { USB_INTERFACE_INFO(7, 1, 2) }, 1237 { USB_INTERFACE_INFO(7, 1, 3) }, 1238 { } /* Terminating entry */ 1239 }; 1240
··· 202 203 #define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires unidirectional mode (no INs/reads) */ 204 #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ 205 + #define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific Class or SubClass */ 206 207 static const struct quirk_printer_struct quirk_printers[] = { 208 { 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */ ··· 218 { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */ 219 { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ 220 { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, by zut <kernel@zut.de> */ 221 + { 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt Printer M129C */ 222 { 0, 0 } 223 }; 224 ··· 1048 ifd = &if_alt->altsetting[i]; 1049 1050 if (ifd->desc.bInterfaceClass != 7 || ifd->desc.bInterfaceSubClass != 1) 1051 + if (!(usblp->quirks & USBLP_QUIRK_BAD_CLASS)) 1052 + continue; 1053 1054 if (ifd->desc.bInterfaceProtocol < USBLP_FIRST_PROTOCOL || 1055 ifd->desc.bInterfaceProtocol > USBLP_LAST_PROTOCOL) ··· 1232 { USB_INTERFACE_INFO(7, 1, 1) }, 1233 { USB_INTERFACE_INFO(7, 1, 2) }, 1234 { USB_INTERFACE_INFO(7, 1, 3) }, 1235 + { USB_DEVICE(0x04b8, 0x0202) }, /* Seiko Epson Receipt Printer M129C */ 1236 { } /* Terminating entry */ 1237 }; 1238
+1 -1
drivers/usb/misc/berry_charge.c
··· 69 return retval; 70 } 71 72 - dbg(&udev->dev, "Sending first magic command\n"); 73 retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 74 0xa2, 0x40, 0, 1, dummy_buffer, 0, 100); 75 if (retval != 0) {
··· 69 return retval; 70 } 71 72 + dbg(&udev->dev, "Sending second magic command\n"); 73 retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 74 0xa2, 0x40, 0, 1, dummy_buffer, 0, 100); 75 if (retval != 0) {
+8
drivers/usb/net/dm9601.c
··· 578 USB_DEVICE(0x0a46, 0x9601), /* Davicom USB-100 */ 579 .driver_info = (unsigned long)&dm9601_info, 580 }, 581 {}, // END 582 }; 583
··· 578 USB_DEVICE(0x0a46, 0x9601), /* Davicom USB-100 */ 579 .driver_info = (unsigned long)&dm9601_info, 580 }, 581 + { 582 + USB_DEVICE(0x0a46, 0x6688), /* ZT6688 USB NIC */ 583 + .driver_info = (unsigned long)&dm9601_info, 584 + }, 585 + { 586 + USB_DEVICE(0x0a46, 0x0268), /* ShanTou ST268 USB NIC */ 587 + .driver_info = (unsigned long)&dm9601_info, 588 + }, 589 {}, // END 590 }; 591
-4
drivers/usb/serial/airprime.c
··· 18 19 static struct usb_device_id id_table [] = { 20 { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */ 21 - { USB_DEVICE(0x1410, 0x1110) }, /* Novatel Wireless Merlin CDMA */ 22 - { USB_DEVICE(0x1410, 0x1130) }, /* Novatel Wireless S720 CDMA/EV-DO */ 23 - { USB_DEVICE(0x1410, 0x2110) }, /* Novatel Wireless U720 CDMA/EV-DO */ 24 - { USB_DEVICE(0x1410, 0x1430) }, /* Novatel Merlin XU870 HSDPA/3G */ 25 { USB_DEVICE(0x1410, 0x1100) }, /* ExpressCard34 Qualcomm 3G CDMA */ 26 { USB_DEVICE(0x413c, 0x8115) }, /* Dell Wireless HSDPA 5500 */ 27 { },
··· 18 19 static struct usb_device_id id_table [] = { 20 { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */ 21 { USB_DEVICE(0x1410, 0x1100) }, /* ExpressCard34 Qualcomm 3G CDMA */ 22 { USB_DEVICE(0x413c, 0x8115) }, /* Dell Wireless HSDPA 5500 */ 23 { },
+1
drivers/usb/serial/mos7720.c
··· 1628 .chars_in_buffer = mos7720_chars_in_buffer, 1629 .break_ctl = mos7720_break, 1630 .read_bulk_callback = mos7720_bulk_in_callback, 1631 }; 1632 1633 static int __init moschip7720_init(void)
··· 1628 .chars_in_buffer = mos7720_chars_in_buffer, 1629 .break_ctl = mos7720_break, 1630 .read_bulk_callback = mos7720_bulk_in_callback, 1631 + .read_int_callback = mos7720_interrupt_callback, 1632 }; 1633 1634 static int __init moschip7720_init(void)
+13 -2
drivers/usb/serial/option.c
··· 109 #define HUAWEI_PRODUCT_E220 0x1003 110 111 #define NOVATELWIRELESS_VENDOR_ID 0x1410 112 - #define NOVATELWIRELESS_PRODUCT_U740 0x1400 113 114 #define ANYDATA_VENDOR_ID 0x16d5 115 #define ANYDATA_PRODUCT_ID 0x6501 ··· 151 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, 152 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, 153 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) }, 154 - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID,NOVATELWIRELESS_PRODUCT_U740) }, 155 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) }, 156 { } /* Terminating entry */ 157 };
··· 109 #define HUAWEI_PRODUCT_E220 0x1003 110 111 #define NOVATELWIRELESS_VENDOR_ID 0x1410 112 113 #define ANYDATA_VENDOR_ID 0x16d5 114 #define ANYDATA_PRODUCT_ID 0x6501 ··· 152 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, 153 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, 154 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) }, 155 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1100) }, /* Novatel Merlin XS620/S640 */ 156 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1110) }, /* Novatel Merlin S620 */ 157 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1120) }, /* Novatel Merlin EX720 */ 158 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1130) }, /* Novatel Merlin S720 */ 159 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1400) }, /* Novatel U730 */ 160 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1410) }, /* Novatel U740 */ 161 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1420) }, /* Novatel EU870 */ 162 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1430) }, /* Novatel Merlin XU870 HSDPA/3G */ 163 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1430) }, /* Novatel XU870 */ 164 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2100) }, /* Novatel EV620 CDMA/EV-DO */ 165 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2110) }, /* Novatel Merlin ES620 / Merlin ES720 / Ovation U720 */ 166 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */ 167 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */ 168 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) }, 169 { } /* Terminating entry */ 170 };
+5 -6
drivers/usb/serial/usb-serial.c
··· 138 139 dbg("%s - %s", __FUNCTION__, serial->type->description); 140 141 for (i = 0; i < serial->num_ports; ++i) 142 serial->port[i]->open_count = 0; 143 ··· 152 device_unregister(&serial->port[i]->dev); 153 serial->port[i] = NULL; 154 } 155 - 156 - if (serial->type->shutdown) 157 - serial->type->shutdown(serial); 158 - 159 - /* return the minor range that this device had */ 160 - return_serial(serial); 161 162 /* If this is a "fake" port, we have to clean it up here, as it will 163 * not get cleaned up in port_release() as it was never registered with
··· 138 139 dbg("%s - %s", __FUNCTION__, serial->type->description); 140 141 + serial->type->shutdown(serial); 142 + 143 + /* return the minor range that this device had */ 144 + return_serial(serial); 145 + 146 for (i = 0; i < serial->num_ports; ++i) 147 serial->port[i]->open_count = 0; 148 ··· 147 device_unregister(&serial->port[i]->dev); 148 serial->port[i] = NULL; 149 } 150 151 /* If this is a "fake" port, we have to clean it up here, as it will 152 * not get cleaned up in port_release() as it was never registered with
+10
drivers/usb/storage/unusual_devs.h
··· 1411 US_SC_DEVICE, US_PR_DEVICE, NULL, 1412 US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), 1413 1414 /* Reported by Radovan Garabik <garabik@kassiopeia.juls.savba.sk> */ 1415 UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999, 1416 "MPIO",
··· 1411 US_SC_DEVICE, US_PR_DEVICE, NULL, 1412 US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), 1413 1414 + /* 1415 + * Patch by Pete Zaitcev <zaitcev@redhat.com> 1416 + * Report by Mark Patton. Red Hat bz#208928. 1417 + */ 1418 + UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0001, 1419 + "Motorola", 1420 + "RAZR V3i", 1421 + US_SC_DEVICE, US_PR_DEVICE, NULL, 1422 + US_FL_FIX_CAPACITY), 1423 + 1424 /* Reported by Radovan Garabik <garabik@kassiopeia.juls.savba.sk> */ 1425 UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999, 1426 "MPIO",