diff options
Diffstat (limited to 'drivers/usb/serial/keyspan_pda.c')
| -rw-r--r-- | drivers/usb/serial/keyspan_pda.c | 30 | 
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c index ca43ecb4a2b..bb87e29c4ac 100644 --- a/drivers/usb/serial/keyspan_pda.c +++ b/drivers/usb/serial/keyspan_pda.c @@ -713,29 +713,33 @@ MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");  MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");  #endif -static int keyspan_pda_startup(struct usb_serial *serial) +static int keyspan_pda_port_probe(struct usb_serial_port *port)  {  	struct keyspan_pda_private *priv; -	/* allocate the private data structures for all ports. Well, for all -	   one ports. */ -  	priv = kmalloc(sizeof(struct keyspan_pda_private), GFP_KERNEL);  	if (!priv) -		return 1; /* error */ -	usb_set_serial_port_data(serial->port[0], priv); -	init_waitqueue_head(&serial->port[0]->write_wait); +		return -ENOMEM; +  	INIT_WORK(&priv->wakeup_work, keyspan_pda_wakeup_write);  	INIT_WORK(&priv->unthrottle_work, keyspan_pda_request_unthrottle); -	priv->serial = serial; -	priv->port = serial->port[0]; +	priv->serial = port->serial; +	priv->port = port; + +	usb_set_serial_port_data(port, priv); +  	return 0;  } -static void keyspan_pda_release(struct usb_serial *serial) +static int keyspan_pda_port_remove(struct usb_serial_port *port)  { -	kfree(usb_get_serial_port_data(serial->port[0])); +	struct keyspan_pda_private *priv; + +	priv = usb_get_serial_port_data(port); +	kfree(priv); + +	return 0;  }  #ifdef KEYSPAN @@ -786,8 +790,8 @@ static struct usb_serial_driver keyspan_pda_device = {  	.break_ctl =		keyspan_pda_break_ctl,  	.tiocmget =		keyspan_pda_tiocmget,  	.tiocmset =		keyspan_pda_tiocmset, -	.attach =		keyspan_pda_startup, -	.release =		keyspan_pda_release, +	.port_probe =		keyspan_pda_port_probe, +	.port_remove =		keyspan_pda_port_remove,  };  static struct usb_serial_driver * const serial_drivers[] = {  |