diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 12:09:47 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 12:09:47 -0800 | 
| commit | 55b81e6f2795484ea8edf5805c95c007cacfa736 (patch) | |
| tree | c3724975107857fcc03b5dd649c462e4f72397be /drivers/usb/serial/cyberjack.c | |
| parent | 5983faf942f260023e547f3c5f38c1033c35cc9b (diff) | |
| parent | 08e87d0d773dc9ca5faf4c3306e238ed0ea129b0 (diff) | |
| download | olio-linux-3.10-55b81e6f2795484ea8edf5805c95c007cacfa736.tar.xz olio-linux-3.10-55b81e6f2795484ea8edf5805c95c007cacfa736.zip  | |
Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
* 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (232 commits)
  USB: Add USB-ID for Multiplex RC serial adapter to cp210x.c
  xhci: Clean up 32-bit build warnings.
  USB: update documentation for usbmon
  usb: usb-storage doesn't support dynamic id currently, the patch disables the feature to fix an oops
  drivers/usb/class/cdc-acm.c: clear dangling pointer
  drivers/usb/dwc3/dwc3-pci.c: introduce missing kfree
  drivers/usb/host/isp1760-if.c: introduce missing kfree
  usb: option: add ZD Incorporated HSPA modem
  usb: ch9: fix up MaxStreams helper
  USB: usb-skeleton.c: cleanup open_count
  USB: usb-skeleton.c: fix open/disconnect race
  xhci: Properly handle COMP_2ND_BW_ERR
  USB: remove dead code from suspend/resume path
  USB: add quirk for another camera
  drivers: usb: wusbcore: Fix dependency for USB_WUSB
  xhci: Better debugging for critical host errors.
  xhci: Be less verbose during URB cancellation.
  xhci: Remove debugging about ring structure allocation.
  xhci: Remove debugging about toggling cycle bits.
  xhci: Remove debugging for individual transfers.
  ...
Diffstat (limited to 'drivers/usb/serial/cyberjack.c')
| -rw-r--r-- | drivers/usb/serial/cyberjack.c | 33 | 
1 files changed, 6 insertions, 27 deletions
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c index f744ab7a3b1..98bf8334983 100644 --- a/drivers/usb/serial/cyberjack.c +++ b/drivers/usb/serial/cyberjack.c @@ -138,7 +138,6 @@ static int cyberjack_startup(struct usb_serial *serial)  	for (i = 0; i < serial->num_ports; ++i) {  		int result; -		serial->port[i]->interrupt_in_urb->dev = serial->dev;  		result = usb_submit_urb(serial->port[i]->interrupt_in_urb,  					GFP_KERNEL);  		if (result) @@ -208,7 +207,6 @@ static void cyberjack_close(struct usb_serial_port *port)  static int cyberjack_write(struct tty_struct *tty,  	struct usb_serial_port *port, const unsigned char *buf, int count)  { -	struct usb_serial *serial = port->serial;  	struct cyberjack_private *priv = usb_get_serial_port_data(port);  	unsigned long flags;  	int result; @@ -221,22 +219,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;  	} @@ -265,13 +259,7 @@ static int cyberjack_write(struct tty_struct *tty,  		priv->wrsent = length;  		/* set up our urb */ -		usb_fill_bulk_urb(port->write_urb, serial->dev, -			      usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress), -			      port->write_urb->transfer_buffer, length, -			      ((serial->type->write_bulk_callback) ? -			       serial->type->write_bulk_callback : -			       cyberjack_write_bulk_callback), -			      port); +		port->write_urb->transfer_buffer_length = length;  		/* send the data out the bulk port */  		result = usb_submit_urb(port->write_urb, GFP_ATOMIC); @@ -283,7 +271,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;  		} @@ -351,7 +339,6 @@ static void cyberjack_read_int_callback(struct urb *urb)  		spin_unlock(&priv->lock);  		if (!old_rdtodo) { -			port->read_urb->dev = port->serial->dev;  			result = usb_submit_urb(port->read_urb, GFP_ATOMIC);  			if (result)  				dev_err(&port->dev, "%s - failed resubmitting " @@ -362,7 +349,6 @@ static void cyberjack_read_int_callback(struct urb *urb)  	}  resubmit: -	port->interrupt_in_urb->dev = port->serial->dev;  	result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);  	if (result)  		dev_err(&port->dev, "usb_submit_urb(read int) failed\n"); @@ -415,7 +401,6 @@ static void cyberjack_read_bulk_callback(struct urb *urb)  	/* Continue to read if we have still urbs to do. */  	if (todo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/) { -		port->read_urb->dev = port->serial->dev;  		result = usb_submit_urb(port->read_urb, GFP_ATOMIC);  		if (result)  			dev_err(&port->dev, "%s - failed resubmitting read " @@ -432,7 +417,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); @@ -455,13 +440,7 @@ static void cyberjack_write_bulk_callback(struct urb *urb)  		priv->wrsent += length;  		/* set up our urb */ -		usb_fill_bulk_urb(port->write_urb, port->serial->dev, -			      usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), -			      port->write_urb->transfer_buffer, length, -			      ((port->serial->type->write_bulk_callback) ? -			       port->serial->type->write_bulk_callback : -			       cyberjack_write_bulk_callback), -			      port); +		port->write_urb->transfer_buffer_length = length;  		/* send the data out the bulk port */  		result = usb_submit_urb(port->write_urb, GFP_ATOMIC);  |