USB: kl5usb105: reimplement using generic framework
[safe/jmp/linux-2.6] / drivers / usb / serial / keyspan.c
index 9878c0f..297163c 100644 (file)
@@ -464,13 +464,9 @@ static void        usa26_indat_callback(struct urb *urb)
 
        /* Resubmit urb so we continue receiving */
        urb->dev = port->serial->dev;
-       if (port->port.count) {
-               err = usb_submit_urb(urb, GFP_ATOMIC);
-               if (err != 0)
-                       dbg("%s - resubmit read urb failed. (%d)",
-                                       __func__, err);
-       }
-       return;
+       err = usb_submit_urb(urb, GFP_ATOMIC);
+       if (err != 0)
+               dbg("%s - resubmit read urb failed. (%d)", __func__, err);
 }
 
 /* Outdat handling is common for all devices */
@@ -483,8 +479,7 @@ static void usa2x_outdat_callback(struct urb *urb)
        p_priv = usb_get_serial_port_data(port);
        dbg("%s - urb %d", __func__, urb == p_priv->out_urbs[1]);
 
-       if (port->port.count)
-               usb_serial_port_softint(port);
+       usb_serial_port_softint(port);
 }
 
 static void    usa26_inack_callback(struct urb *urb)
@@ -615,12 +610,10 @@ static void usa28_indat_callback(struct urb *urb)
 
                /* Resubmit urb so we continue receiving */
                urb->dev = port->serial->dev;
-               if (port->port.count) {
-                       err = usb_submit_urb(urb, GFP_ATOMIC);
-                       if (err != 0)
-                               dbg("%s - resubmit read urb failed. (%d)",
-                                                               __func__, err);
-               }
+               err = usb_submit_urb(urb, GFP_ATOMIC);
+               if (err != 0)
+                       dbg("%s - resubmit read urb failed. (%d)",
+                                                       __func__, err);
                p_priv->in_flip ^= 1;
 
                urb = p_priv->in_urbs[p_priv->in_flip];
@@ -856,12 +849,9 @@ static void        usa49_indat_callback(struct urb *urb)
 
        /* Resubmit urb so we continue receiving */
        urb->dev = port->serial->dev;
-       if (port->port.count) {
-               err = usb_submit_urb(urb, GFP_ATOMIC);
-               if (err != 0)
-                       dbg("%s - resubmit read urb failed. (%d)",
-                                                       __func__, err);
-       }
+       err = usb_submit_urb(urb, GFP_ATOMIC);
+       if (err != 0)
+               dbg("%s - resubmit read urb failed. (%d)", __func__, err);
 }
 
 static void usa49wg_indat_callback(struct urb *urb)
@@ -904,11 +894,7 @@ static void usa49wg_indat_callback(struct urb *urb)
                                /* no error on any byte */
                                i++;
                                for (x = 1; x < len ; ++x)
-                                       if (port->port.count)
-                                               tty_insert_flip_char(tty,
-                                                               data[i++], 0);
-                                       else
-                                               i++;
+                                       tty_insert_flip_char(tty, data[i++], 0);
                        } else {
                                /*
                                 * some bytes had errors, every byte has status
@@ -922,14 +908,12 @@ static void usa49wg_indat_callback(struct urb *urb)
                                        if (stat & RXERROR_PARITY)
                                                flag |= TTY_PARITY;
                                        /* XXX should handle break (0x10) */
-                                       if (port->port.count)
-                                               tty_insert_flip_char(tty,
+                                       tty_insert_flip_char(tty,
                                                        data[i+1], flag);
                                        i += 2;
                                }
                        }
-                       if (port->port.count)
-                               tty_flip_buffer_push(tty);
+                       tty_flip_buffer_push(tty);
                        tty_kref_put(tty);
                }
        }
@@ -1013,13 +997,9 @@ static void usa90_indat_callback(struct urb *urb)
 
        /* Resubmit urb so we continue receiving */
        urb->dev = port->serial->dev;
-       if (port->port.count) {
-               err = usb_submit_urb(urb, GFP_ATOMIC);
-               if (err != 0)
-                       dbg("%s - resubmit read urb failed. (%d)",
-                                                       __func__, err);
-       }
-       return;
+       err = usb_submit_urb(urb, GFP_ATOMIC);
+       if (err != 0)
+               dbg("%s - resubmit read urb failed. (%d)", __func__, err);
 }
 
 
@@ -1209,8 +1189,7 @@ static int keyspan_write_room(struct tty_struct *tty)
 }
 
 
-static int keyspan_open(struct tty_struct *tty,
-                       struct usb_serial_port *port, struct file *filp)
+static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
 {
        struct keyspan_port_private     *p_priv;
        struct keyspan_serial_private   *s_priv;
@@ -1298,8 +1277,16 @@ static inline void stop_urb(struct urb *urb)
                usb_kill_urb(urb);
 }
 
-static void keyspan_close(struct tty_struct *tty,
-                       struct usb_serial_port *port, struct file *filp)
+static void keyspan_dtr_rts(struct usb_serial_port *port, int on)
+{
+       struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
+
+       p_priv->rts_state = on;
+       p_priv->dtr_state = on;
+       keyspan_send_setup(port, 0);
+}
+
+static void keyspan_close(struct usb_serial_port *port)
 {
        int                     i;
        struct usb_serial       *serial = port->serial;
@@ -1336,7 +1323,6 @@ static void keyspan_close(struct tty_struct *tty,
                        stop_urb(p_priv->out_urbs[i]);
                }
        }
-       tty_port_tty_set(&port->port, NULL);
 }
 
 /* download the firmware to a pre-renumeration device */
@@ -1507,7 +1493,7 @@ static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
        } else {
                dev_warn(&serial->interface->dev,
                         "unsupported endpoint type %x\n",
-                        ep_desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK);
+                        usb_endpoint_type(ep_desc));
                usb_free_urb(urb);
                return NULL;
        }
@@ -2412,8 +2398,7 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
                msg.portEnabled = 0;
        /* Sending intermediate configs */
        else {
-               if (port->port.count)
-                       msg.portEnabled = 1;
+               msg.portEnabled = 1;
                msg.txBreak = (p_priv->break_on);
        }
 
@@ -2682,7 +2667,7 @@ static int keyspan_startup(struct usb_serial *serial)
        return 0;
 }
 
-static void keyspan_shutdown(struct usb_serial *serial)
+static void keyspan_disconnect(struct usb_serial *serial)
 {
        int                             i, j;
        struct usb_serial_port          *port;
@@ -2722,6 +2707,17 @@ static void keyspan_shutdown(struct usb_serial *serial)
                        usb_free_urb(p_priv->out_urbs[j]);
                }
        }
+}
+
+static void keyspan_release(struct usb_serial *serial)
+{
+       int                             i;
+       struct usb_serial_port          *port;
+       struct keyspan_serial_private   *s_priv;
+
+       dbg("%s", __func__);
+
+       s_priv = usb_get_serial_data(serial);
 
        /*  dbg("Freeing serial->private."); */
        kfree(s_priv);