USB: cyberjack: clean up write-urb busy handling
[deliverable/linux.git] / drivers / usb / serial / cyberjack.c
index b0f6402a91ca57423769c16a8e0690896958fafa..5a41252807cbdcd904c979edf9c596cffbdd457f 100644 (file)
@@ -70,7 +70,7 @@ static void cyberjack_read_int_callback(struct urb *urb);
 static void cyberjack_read_bulk_callback(struct urb *urb);
 static void cyberjack_write_bulk_callback(struct urb *urb);
 
-static struct usb_device_id id_table [] = {
+static const struct usb_device_id id_table[] = {
        { USB_DEVICE(CYBERJACK_VENDOR_ID, CYBERJACK_PRODUCT_ID) },
        { }                     /* Terminating entry */
 };
@@ -221,22 +221,18 @@ static int cyberjack_write(struct tty_struct *tty,
                return 0;
        }
 
-       spin_lock_bh(&port->lock);
-       if (port->write_urb_busy) {
-               spin_unlock_bh(&port->lock);
+       if (!test_and_clear_bit(0, &port->write_urbs_free)) {
                dbg("%s - already writing", __func__);
                return 0;
        }
-       port->write_urb_busy = 1;
-       spin_unlock_bh(&port->lock);
 
        spin_lock_irqsave(&priv->lock, flags);
 
        if (count+priv->wrfilled > sizeof(priv->wrbuf)) {
                /* To much data for buffer. Reset buffer. */
                priv->wrfilled = 0;
-               port->write_urb_busy = 0;
                spin_unlock_irqrestore(&priv->lock, flags);
+               set_bit(0, &port->write_urbs_free);
                return 0;
        }
 
@@ -283,7 +279,7 @@ static int cyberjack_write(struct tty_struct *tty,
                        priv->wrfilled = 0;
                        priv->wrsent = 0;
                        spin_unlock_irqrestore(&priv->lock, flags);
-                       port->write_urb_busy = 0;
+                       set_bit(0, &port->write_urbs_free);
                        return 0;
                }
 
@@ -391,11 +387,10 @@ static void cyberjack_read_bulk_callback(struct urb *urb)
 
        tty = tty_port_tty_get(&port->port);
        if (!tty) {
-               dbg("%s - ignoring since device not open\n", __func__);
+               dbg("%s - ignoring since device not open", __func__);
                return;
        }
        if (urb->actual_length) {
-               tty_buffer_request_room(tty, urb->actual_length);
                tty_insert_flip_string(tty, data, urb->actual_length);
                tty_flip_buffer_push(tty);
        }
@@ -433,7 +428,7 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
 
        dbg("%s - port %d", __func__, port->number);
 
-       port->write_urb_busy = 0;
+       set_bit(0, &port->write_urbs_free);
        if (status) {
                dbg("%s - nonzero write bulk status received: %d",
                    __func__, status);
This page took 0.027442 seconds and 5 git commands to generate.