diff options
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 107 | 
1 files changed, 64 insertions, 43 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 3dc93b542b3..51d7bdea286 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -578,6 +578,7 @@ static struct usb_device_id id_table_combined [] = {  	{ USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },  	{ USB_DEVICE(FALCOM_VID, FALCOM_SAMBA_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) }, +	{ USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) },  	{ USB_DEVICE(TTI_VID, TTI_QL355P_PID) },  	{ USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },  	{ USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) }, @@ -860,7 +861,7 @@ static int update_mctrl(struct usb_serial_port *port, unsigned int set,  	kfree(buf);  	if (rv < 0) { -		err("%s Error from MODEM_CTRL urb: DTR %s, RTS %s", +		dbg("%s Error from MODEM_CTRL urb: DTR %s, RTS %s",  				__func__,  				(set & TIOCM_DTR) ? "HIGH" :  				(clear & TIOCM_DTR) ? "LOW" : "unchanged", @@ -1153,7 +1154,7 @@ static void ftdi_determine_type(struct usb_serial_port *port)  		/* Assume its an FT232R  */  		priv->chip_type = FT232RL;  	} -	info("Detected %s", ftdi_chip_name[priv->chip_type]); +	dev_info(&udev->dev, "Detected %s\n", ftdi_chip_name[priv->chip_type]);  } @@ -1326,7 +1327,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)  	priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL);  	if (!priv) { -		err("%s- kmalloc(%Zd) failed.", __func__, +		dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__,  					sizeof(struct ftdi_private));  		return -ENOMEM;  	} @@ -1409,7 +1410,8 @@ static int ftdi_jtag_probe(struct usb_serial *serial)  	dbg("%s", __func__);  	if (interface == udev->actconfig->interface[0]) { -		info("Ignoring serial port reserved for JTAG"); +		dev_info(&udev->dev, +			 "Ignoring serial port reserved for JTAG\n");  		return -ENODEV;  	} @@ -1427,7 +1429,8 @@ static int ftdi_mtxorb_hack_setup(struct usb_serial *serial)  	if (ep->enabled && ep_desc->wMaxPacketSize == 0) {  		ep_desc->wMaxPacketSize = cpu_to_le16(0x40); -		info("Fixing invalid wMaxPacketSize on read pipe"); +		dev_info(&serial->dev->dev, +			 "Fixing invalid wMaxPacketSize on read pipe\n");  	}  	return 0; @@ -1521,8 +1524,9 @@ static int ftdi_open(struct tty_struct *tty,  			ftdi_read_bulk_callback, port);  	result = usb_submit_urb(port->read_urb, GFP_KERNEL);  	if (result) -		err("%s - failed submitting read urb, error %d", -							__func__, result); +		dev_err(&port->dev, +			"%s - failed submitting read urb, error %d\n", +			__func__, result);  	return result; @@ -1556,7 +1560,7 @@ static void ftdi_close(struct tty_struct *tty,  				    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,  				    0, priv->interface, buf, 0,  				    WDR_TIMEOUT) < 0) { -			err("error from flowcontrol urb"); +			dev_err(&port->dev, "error from flowcontrol urb\n");  		}  		/* drop RTS and DTR */ @@ -1621,14 +1625,15 @@ static int ftdi_write(struct tty_struct *tty, struct usb_serial_port *port,  	buffer = kmalloc(transfer_size, GFP_ATOMIC);  	if (!buffer) { -		err("%s ran out of kernel memory for urb ...", __func__); +		dev_err(&port->dev, +			"%s ran out of kernel memory for urb ...\n", __func__);  		count = -ENOMEM;  		goto error_no_buffer;  	}  	urb = usb_alloc_urb(0, GFP_ATOMIC);  	if (!urb) { -		err("%s - no more free urbs", __func__); +		dev_err(&port->dev, "%s - no more free urbs\n", __func__);  		count = -ENOMEM;  		goto error_no_urb;  	} @@ -1672,8 +1677,9 @@ static int ftdi_write(struct tty_struct *tty, struct usb_serial_port *port,  	status = usb_submit_urb(urb, GFP_ATOMIC);  	if (status) { -		err("%s - failed submitting write urb, error %d", -							__func__, status); +		dev_err(&port->dev, +			"%s - failed submitting write urb, error %d\n", +			__func__, status);  		count = status;  		goto error;  	} else { @@ -1780,7 +1786,8 @@ static int ftdi_chars_in_buffer(struct tty_struct *tty)  	buffered = (int)priv->tx_outstanding_bytes;  	spin_unlock_irqrestore(&priv->tx_lock, flags);  	if (buffered < 0) { -		err("%s outstanding tx bytes is negative!", __func__); +		dev_err(&port->dev, "%s outstanding tx bytes is negative!\n", +			__func__);  		buffered = 0;  	}  	return buffered; @@ -1796,11 +1803,12 @@ static void ftdi_read_bulk_callback(struct urb *urb)  	int status = urb->status;  	if (urb->number_of_packets > 0) { -		err("%s transfer_buffer_length %d actual_length %d number of packets %d", -				__func__, -				urb->transfer_buffer_length, -				urb->actual_length, urb->number_of_packets); -		err("%s transfer_flags %x ", __func__, urb->transfer_flags); +		dev_err(&port->dev, "%s transfer_buffer_length %d " +			"actual_length %d number of packets %d\n", __func__, +			urb->transfer_buffer_length, +			urb->actual_length, urb->number_of_packets); +		dev_err(&port->dev, "%s transfer_flags %x\n", __func__, +			urb->transfer_flags);  	}  	dbg("%s - port %d", __func__, port->number); @@ -1808,7 +1816,7 @@ static void ftdi_read_bulk_callback(struct urb *urb)  	if (port->port.count <= 0)  		return; -	tty = port->port.tty; +	tty = tty_port_tty_get(&port->port);  	if (!tty) {  		dbg("%s - bad tty pointer - exiting", __func__);  		return; @@ -1817,17 +1825,17 @@ static void ftdi_read_bulk_callback(struct urb *urb)  	priv = usb_get_serial_port_data(port);  	if (!priv) {  		dbg("%s - bad port private data pointer - exiting", __func__); -		return; +		goto out;  	}  	if (urb != port->read_urb) -		err("%s - Not my urb!", __func__); +		dev_err(&port->dev, "%s - Not my urb!\n", __func__);  	if (status) {  		/* This will happen at close every time so it is a dbg not an  		   err */  		dbg("(this is ok on close) nonzero read bulk status received: %d", status); -		return; +		goto out;  	}  	/* count data bytes, but not status bytes */ @@ -1838,7 +1846,8 @@ static void ftdi_read_bulk_callback(struct urb *urb)  	spin_unlock_irqrestore(&priv->rx_lock, flags);  	ftdi_process_read(&priv->rx_work.work); - +out: +	tty_kref_put(tty);  } /* ftdi_read_bulk_callback */ @@ -1863,7 +1872,7 @@ static void ftdi_process_read(struct work_struct *work)  	if (port->port.count <= 0)  		return; -	tty = port->port.tty; +	tty = tty_port_tty_get(&port->port);  	if (!tty) {  		dbg("%s - bad tty pointer - exiting", __func__);  		return; @@ -1872,13 +1881,13 @@ static void ftdi_process_read(struct work_struct *work)  	priv = usb_get_serial_port_data(port);  	if (!priv) {  		dbg("%s - bad port private data pointer - exiting", __func__); -		return; +		goto out;  	}  	urb = port->read_urb;  	if (!urb) {  		dbg("%s - bad read_urb pointer - exiting", __func__); -		return; +		goto out;  	}  	data = urb->transfer_buffer; @@ -1923,7 +1932,8 @@ static void ftdi_process_read(struct work_struct *work)  		length = min(PKTSZ, urb->actual_length-packet_offset)-2;  		if (length < 0) { -			err("%s - bad packet length: %d", __func__, length+2); +			dev_err(&port->dev, "%s - bad packet length: %d\n", +				__func__, length+2);  			length = 0;  		} @@ -2020,7 +2030,7 @@ static void ftdi_process_read(struct work_struct *work)  			schedule_delayed_work(&priv->rx_work, 1);  		else  			dbg("%s - port is closed", __func__); -		return; +		goto out;  	}  	/* urb is completely processed */ @@ -2038,9 +2048,12 @@ static void ftdi_process_read(struct work_struct *work)  		result = usb_submit_urb(port->read_urb, GFP_ATOMIC);  		if (result) -			err("%s - failed resubmitting read urb, error %d", -							__func__, result); +			dev_err(&port->dev, +				"%s - failed resubmitting read urb, error %d\n", +				__func__, result);  	} +out: +	tty_kref_put(tty);  } /* ftdi_process_read */ @@ -2066,8 +2079,8 @@ static void ftdi_break_ctl(struct tty_struct *tty, int break_state)  			FTDI_SIO_SET_DATA_REQUEST_TYPE,  			urb_value , priv->interface,  			buf, 0, WDR_TIMEOUT) < 0) { -		err("%s FAILED to enable/disable break state (state was %d)", -							__func__, break_state); +		dev_err(&port->dev, "%s FAILED to enable/disable break state " +			"(state was %d)\n", __func__, break_state);  	}  	dbg("%s break state is %d - urb is %d", __func__, @@ -2139,7 +2152,7 @@ static void ftdi_set_termios(struct tty_struct *tty,  		case CS7: urb_value |= 7; dbg("Setting CS7"); break;  		case CS8: urb_value |= 8; dbg("Setting CS8"); break;  		default: -			err("CSIZE was set but not CS5-CS8"); +			dev_err(&port->dev, "CSIZE was set but not CS5-CS8\n");  		}  	} @@ -2152,7 +2165,8 @@ static void ftdi_set_termios(struct tty_struct *tty,  			    FTDI_SIO_SET_DATA_REQUEST_TYPE,  			    urb_value , priv->interface,  			    buf, 0, WDR_SHORT_TIMEOUT) < 0) { -		err("%s FAILED to set databits/stopbits/parity", __func__); +		dev_err(&port->dev, "%s FAILED to set " +			"databits/stopbits/parity\n", __func__);  	}  	/* Now do the baudrate */ @@ -2163,14 +2177,17 @@ static void ftdi_set_termios(struct tty_struct *tty,  				    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,  				    0, priv->interface,  				    buf, 0, WDR_TIMEOUT) < 0) { -			err("%s error from disable flowcontrol urb", __func__); +			dev_err(&port->dev, +				"%s error from disable flowcontrol urb\n", +				__func__);  		}  		/* Drop RTS and DTR */  		clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);  	} else {  		/* set the baudrate determined before */  		if (change_speed(tty, port)) -			err("%s urb failed to set baudrate", __func__); +			dev_err(&port->dev, "%s urb failed to set baudrate\n", +				__func__);  		/* Ensure RTS and DTR are raised when baudrate changed from 0 */  		if (!old_termios || (old_termios->c_cflag & CBAUD) == B0)  			set_mctrl(port, TIOCM_DTR | TIOCM_RTS); @@ -2186,7 +2203,8 @@ static void ftdi_set_termios(struct tty_struct *tty,  				    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,  				    0 , (FTDI_SIO_RTS_CTS_HS | priv->interface),  				    buf, 0, WDR_TIMEOUT) < 0) { -			err("urb failed to set to rts/cts flow control"); +			dev_err(&port->dev, +				"urb failed to set to rts/cts flow control\n");  		}  	} else { @@ -2217,7 +2235,8 @@ static void ftdi_set_termios(struct tty_struct *tty,  					    urb_value , (FTDI_SIO_XON_XOFF_HS  							 | priv->interface),  					    buf, 0, WDR_TIMEOUT) < 0) { -				err("urb failed to set to xon/xoff flow control"); +				dev_err(&port->dev, "urb failed to set to " +					"xon/xoff flow control\n");  			}  		} else {  			/* else clause to only run if cflag ! CRTSCTS and iflag @@ -2230,7 +2249,8 @@ static void ftdi_set_termios(struct tty_struct *tty,  					    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,  					    0, priv->interface,  					    buf, 0, WDR_TIMEOUT) < 0) { -				err("urb failed to clear flow control"); +				dev_err(&port->dev, +					"urb failed to clear flow control\n");  			}  		} @@ -2256,7 +2276,7 @@ static int ftdi_tiocmget(struct tty_struct *tty, struct file *file)  			   0, 0,  			   buf, 1, WDR_TIMEOUT);  		if (ret < 0) { -			err("%s Could not get modem status of device - err: %d", __func__, +			dbg("%s Could not get modem status of device - err: %d", __func__,  			    ret);  			return ret;  		} @@ -2275,7 +2295,7 @@ static int ftdi_tiocmget(struct tty_struct *tty, struct file *file)  				   0, priv->interface,  				   buf, 2, WDR_TIMEOUT);  		if (ret < 0) { -			err("%s Could not get modem status of device - err: %d", __func__, +			dbg("%s Could not get modem status of device - err: %d", __func__,  			    ret);  			return ret;  		} @@ -2422,7 +2442,8 @@ static int __init ftdi_init(void)  	if (retval)  		goto failed_usb_register; -	info(DRIVER_VERSION ":" DRIVER_DESC); +	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" +	       DRIVER_DESC "\n");  	return 0;  failed_usb_register:  	usb_serial_deregister(&ftdi_sio_device); @@ -2455,5 +2476,5 @@ module_param(vendor, ushort, 0);  MODULE_PARM_DESC(vendor, "User specified vendor ID (default="  		__MODULE_STRING(FTDI_VID)")");  module_param(product, ushort, 0); -MODULE_PARM_DESC(vendor, "User specified product ID"); +MODULE_PARM_DESC(product, "User specified product ID");  | 
