diff options
Diffstat (limited to 'drivers/usb/serial')
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 3 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio_ids.h | 9 | ||||
| -rw-r--r-- | drivers/usb/serial/keyspan.c | 4 | ||||
| -rw-r--r-- | drivers/usb/serial/option.c | 11 | ||||
| -rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.c | 10 | ||||
| -rw-r--r-- | drivers/usb/serial/usb-serial.c | 5 | ||||
| -rw-r--r-- | drivers/usb/serial/whiteheat.c | 13 | ||||
| -rw-r--r-- | drivers/usb/serial/whiteheat.h | 2 | 
8 files changed, 40 insertions, 17 deletions
| diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 4b3a049561f3..e25352932ba7 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -1030,6 +1030,9 @@ static const struct usb_device_id id_table_combined[] = {  	/* EZPrototypes devices */  	{ USB_DEVICE(EZPROTOTYPES_VID, HJELMSLUND_USB485_ISO_PID) },  	{ USB_DEVICE_INTERFACE_NUMBER(UNJO_VID, UNJO_ISODEBUG_V1_PID, 1) }, +	/* Sienna devices */ +	{ USB_DEVICE(FTDI_VID, FTDI_SIENNA_PID) }, +	{ USB_DEVICE(ECHELON_VID, ECHELON_U20_PID) },  	{ }					/* Terminating entry */  }; diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index f12d806220b4..22d66217cb41 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h @@ -39,6 +39,9 @@  #define FTDI_LUMEL_PD12_PID	0x6002 +/* Sienna Serial Interface by Secyourit GmbH */ +#define FTDI_SIENNA_PID		0x8348 +  /* Cyber Cortex AV by Fabulous Silicon (http://fabuloussilicon.com) */  #define CYBER_CORTEX_AV_PID	0x8698 @@ -689,6 +692,12 @@  #define BANDB_ZZ_PROG1_USB_PID	0xBA02  /* + * Echelon USB Serial Interface + */ +#define ECHELON_VID		0x0920 +#define ECHELON_U20_PID		0x7500 + +/*   * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI   */  #define INTREPID_VID		0x093C diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c index d34779fe4a8d..e66a59ef43a1 100644 --- a/drivers/usb/serial/keyspan.c +++ b/drivers/usb/serial/keyspan.c @@ -1741,8 +1741,8 @@ static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,  	ep_desc = find_ep(serial, endpoint);  	if (!ep_desc) { -		/* leak the urb, something's wrong and the callers don't care */ -		return urb; +		usb_free_urb(urb); +		return NULL;  	}  	if (usb_endpoint_xfer_int(ep_desc)) {  		ep_type_name = "INT"; diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 38e920ac7f82..06ab016be0b6 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c @@ -419,6 +419,7 @@ static void option_instat_callback(struct urb *urb);  #define CINTERION_PRODUCT_PH8_AUDIO		0x0083  #define CINTERION_PRODUCT_AHXX_2RMNET		0x0084  #define CINTERION_PRODUCT_AHXX_AUDIO		0x0085 +#define CINTERION_PRODUCT_CLS8			0x00b0  /* Olivetti products */  #define OLIVETTI_VENDOR_ID			0x0b3c @@ -1154,6 +1155,14 @@ static const struct usb_device_id option_ids[] = {  	  .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },  	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG5, 0xff),  	  .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, +	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1050, 0xff),	/* Telit FN980 (rmnet) */ +	  .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, +	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1051, 0xff),	/* Telit FN980 (MBIM) */ +	  .driver_info = NCTRL(0) | RSVD(1) }, +	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1052, 0xff),	/* Telit FN980 (RNDIS) */ +	  .driver_info = NCTRL(2) | RSVD(3) }, +	{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1053, 0xff),	/* Telit FN980 (ECM) */ +	  .driver_info = NCTRL(0) | RSVD(1) },  	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),  	  .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },  	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM), @@ -1847,6 +1856,8 @@ static const struct usb_device_id option_ids[] = {  	  .driver_info = RSVD(4) },  	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_2RMNET, 0xff) },  	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_AUDIO, 0xff) }, +	{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_CLS8, 0xff), +	  .driver_info = RSVD(0) | RSVD(4) },  	{ USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },  	{ USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },  	{ USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) }, diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index dd0ad67aa71e..9174ba2e06da 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c @@ -776,7 +776,6 @@ static void ti_close(struct usb_serial_port *port)  	struct ti_port *tport;  	int port_number;  	int status; -	int do_unlock;  	unsigned long flags;  	tdev = usb_get_serial_data(port->serial); @@ -800,16 +799,13 @@ static void ti_close(struct usb_serial_port *port)  			"%s - cannot send close port command, %d\n"  							, __func__, status); -	/* if mutex_lock is interrupted, continue anyway */ -	do_unlock = !mutex_lock_interruptible(&tdev->td_open_close_lock); +	mutex_lock(&tdev->td_open_close_lock);  	--tport->tp_tdev->td_open_port_count; -	if (tport->tp_tdev->td_open_port_count <= 0) { +	if (tport->tp_tdev->td_open_port_count == 0) {  		/* last port is closed, shut down interrupt urb */  		usb_kill_urb(port->serial->port[0]->interrupt_in_urb); -		tport->tp_tdev->td_open_port_count = 0;  	} -	if (do_unlock) -		mutex_unlock(&tdev->td_open_close_lock); +	mutex_unlock(&tdev->td_open_close_lock);  } diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index a3179fea38c8..8f066bb55d7d 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -314,10 +314,7 @@ static void serial_cleanup(struct tty_struct *tty)  	serial = port->serial;  	owner = serial->type->driver.owner; -	mutex_lock(&serial->disc_mutex); -	if (!serial->disconnected) -		usb_autopm_put_interface(serial->interface); -	mutex_unlock(&serial->disc_mutex); +	usb_autopm_put_interface(serial->interface);  	usb_serial_put(serial);  	module_put(owner); diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c index 79314d8c94a4..ca3bd58f2025 100644 --- a/drivers/usb/serial/whiteheat.c +++ b/drivers/usb/serial/whiteheat.c @@ -559,6 +559,10 @@ static int firm_send_command(struct usb_serial_port *port, __u8 command,  	command_port = port->serial->port[COMMAND_PORT];  	command_info = usb_get_serial_port_data(command_port); + +	if (command_port->bulk_out_size < datasize + 1) +		return -EIO; +  	mutex_lock(&command_info->mutex);  	command_info->command_finished = false; @@ -632,6 +636,7 @@ static void firm_setup_port(struct tty_struct *tty)  	struct device *dev = &port->dev;  	struct whiteheat_port_settings port_settings;  	unsigned int cflag = tty->termios.c_cflag; +	speed_t baud;  	port_settings.port = port->port_number + 1; @@ -692,11 +697,13 @@ static void firm_setup_port(struct tty_struct *tty)  	dev_dbg(dev, "%s - XON = %2x, XOFF = %2x\n", __func__, port_settings.xon, port_settings.xoff);  	/* get the baud rate wanted */ -	port_settings.baud = tty_get_baud_rate(tty); -	dev_dbg(dev, "%s - baud rate = %d\n", __func__, port_settings.baud); +	baud = tty_get_baud_rate(tty); +	port_settings.baud = cpu_to_le32(baud); +	dev_dbg(dev, "%s - baud rate = %u\n", __func__, baud);  	/* fixme: should set validated settings */ -	tty_encode_baud_rate(tty, port_settings.baud, port_settings.baud); +	tty_encode_baud_rate(tty, baud, baud); +  	/* handle any settings that aren't specified in the tty structure */  	port_settings.lloop = 0; diff --git a/drivers/usb/serial/whiteheat.h b/drivers/usb/serial/whiteheat.h index 00398149cd8d..269e727a92f9 100644 --- a/drivers/usb/serial/whiteheat.h +++ b/drivers/usb/serial/whiteheat.h @@ -87,7 +87,7 @@ struct whiteheat_simple {  struct whiteheat_port_settings {  	__u8	port;		/* port number (1 to N) */ -	__u32	baud;		/* any value 7 - 460800, firmware calculates +	__le32	baud;		/* any value 7 - 460800, firmware calculates  				   best fit; arrives little endian */  	__u8	bits;		/* 5, 6, 7, or 8 */  	__u8	stop;		/* 1 or 2, default 1 (2 = 1.5 if bits = 5) */ | 
