diff options
Diffstat (limited to 'drivers/usb/serial/f81232.c')
| -rw-r--r-- | drivers/usb/serial/f81232.c | 43 | 
1 files changed, 17 insertions, 26 deletions
diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c index 244477107e2..6e4eb57d017 100644 --- a/drivers/usb/serial/f81232.c +++ b/drivers/usb/serial/f81232.c @@ -318,39 +318,30 @@ static int f81232_ioctl(struct tty_struct *tty,  	return -ENOIOCTLCMD;  } -static int f81232_startup(struct usb_serial *serial) +static int f81232_port_probe(struct usb_serial_port *port)  {  	struct f81232_private *priv; -	int i; -	for (i = 0; i < serial->num_ports; ++i) { -		priv = kzalloc(sizeof(struct f81232_private), GFP_KERNEL); -		if (!priv) -			goto cleanup; -		spin_lock_init(&priv->lock); -		init_waitqueue_head(&priv->delta_msr_wait); -		usb_set_serial_port_data(serial->port[i], priv); -	} -	return 0; +	priv = kzalloc(sizeof(*priv), GFP_KERNEL); +	if (!priv) +		return -ENOMEM; -cleanup: -	for (--i; i >= 0; --i) { -		priv = usb_get_serial_port_data(serial->port[i]); -		kfree(priv); -		usb_set_serial_port_data(serial->port[i], NULL); -	} -	return -ENOMEM; +	spin_lock_init(&priv->lock); +	init_waitqueue_head(&priv->delta_msr_wait); + +	usb_set_serial_port_data(port, priv); + +	return 0;  } -static void f81232_release(struct usb_serial *serial) +static int f81232_port_remove(struct usb_serial_port *port)  { -	int i;  	struct f81232_private *priv; -	for (i = 0; i < serial->num_ports; ++i) { -		priv = usb_get_serial_port_data(serial->port[i]); -		kfree(priv); -	} +	priv = usb_get_serial_port_data(port); +	kfree(priv); + +	return 0;  }  static struct usb_serial_driver f81232_device = { @@ -373,8 +364,8 @@ static struct usb_serial_driver f81232_device = {  	.tiocmset =		f81232_tiocmset,  	.process_read_urb =	f81232_process_read_urb,  	.read_int_callback =	f81232_read_int_callback, -	.attach =		f81232_startup, -	.release =		f81232_release, +	.port_probe =		f81232_port_probe, +	.port_remove =		f81232_port_remove,  };  static struct usb_serial_driver * const serial_drivers[] = {  |