]> err.no Git - linux-2.6/blobdiff - drivers/usb/serial/sierra.c
USB: Add support for Sierra Wireless Aircard 595U
[linux-2.6] / drivers / usb / serial / sierra.c
index ecedd833818d960ceed8751856351394893d8847..ac1829c6e8f02da29aecc3a5383a0c1dfa7a2b2e 100644 (file)
@@ -35,6 +35,7 @@ static struct usb_device_id id_table [] = {
        { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
        { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
        { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
+       { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless AirCard 595U */
        { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
        { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
        { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */
@@ -60,6 +61,7 @@ static struct usb_device_id id_table_3port [] = {
        { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
        { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
        { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
+       { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless AirCard 595U */
        { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
        { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
        { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */
@@ -456,12 +458,6 @@ static int sierra_open(struct usb_serial_port *port, struct file *filp)
        return (0);
 }
 
-static inline void stop_urb(struct urb *urb)
-{
-       if (urb && urb->status == -EINPROGRESS)
-               usb_kill_urb(urb);
-}
-
 static void sierra_close(struct usb_serial_port *port, struct file *filp)
 {
        int i;
@@ -479,9 +475,9 @@ static void sierra_close(struct usb_serial_port *port, struct file *filp)
 
                /* Stop reading/writing urbs */
                for (i = 0; i < N_IN_URB; i++)
-                       stop_urb(portdata->in_urbs[i]);
+                       usb_unlink_urb(portdata->in_urbs[i]);
                for (i = 0; i < N_OUT_URB; i++)
-                       stop_urb(portdata->out_urbs[i]);
+                       usb_unlink_urb(portdata->out_urbs[i]);
        }
        port->tty = NULL;
 }
@@ -583,17 +579,26 @@ static void sierra_shutdown(struct usb_serial *serial)
        /* Stop reading/writing urbs */
        for (i = 0; i < serial->num_ports; ++i) {
                port = serial->port[i];
+               if (!port)
+                       continue;
                portdata = usb_get_serial_port_data(port);
+               if (!portdata)
+                       continue;
+
                for (j = 0; j < N_IN_URB; j++)
-                       stop_urb(portdata->in_urbs[j]);
+                       usb_unlink_urb(portdata->in_urbs[j]);
                for (j = 0; j < N_OUT_URB; j++)
-                       stop_urb(portdata->out_urbs[j]);
+                       usb_unlink_urb(portdata->out_urbs[j]);
        }
 
        /* Now free them */
        for (i = 0; i < serial->num_ports; ++i) {
                port = serial->port[i];
+               if (!port)
+                       continue;
                portdata = usb_get_serial_port_data(port);
+               if (!portdata)
+                       continue;
 
                for (j = 0; j < N_IN_URB; j++) {
                        if (portdata->in_urbs[j]) {
@@ -612,6 +617,8 @@ static void sierra_shutdown(struct usb_serial *serial)
        /* Now free per port private data */
        for (i = 0; i < serial->num_ports; i++) {
                port = serial->port[i];
+               if (!port)
+                       continue;
                kfree(usb_get_serial_port_data(port));
        }
 }