xref: /openbmc/linux/drivers/usb/serial/keyspan.c (revision 8a10bc9d)
1 /*
2   Keyspan USB to Serial Converter driver
3 
4   (C) Copyright (C) 2000-2001	Hugh Blemings <hugh@blemings.org>
5   (C) Copyright (C) 2002	Greg Kroah-Hartman <greg@kroah.com>
6 
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation; either version 2 of the License, or
10   (at your option) any later version.
11 
12   See http://blemings.org/hugh/keyspan.html for more information.
13 
14   Code in this driver inspired by and in a number of places taken
15   from Brian Warner's original Keyspan-PDA driver.
16 
17   This driver has been put together with the support of Innosys, Inc.
18   and Keyspan, Inc the manufacturers of the Keyspan USB-serial products.
19   Thanks Guys :)
20 
21   Thanks to Paulus for miscellaneous tidy ups, some largish chunks
22   of much nicer and/or completely new code and (perhaps most uniquely)
23   having the patience to sit down and explain why and where he'd changed
24   stuff.
25 
26   Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
27   staff in their work on open source projects.
28 */
29 
30 
31 #include <linux/kernel.h>
32 #include <linux/jiffies.h>
33 #include <linux/errno.h>
34 #include <linux/slab.h>
35 #include <linux/tty.h>
36 #include <linux/tty_driver.h>
37 #include <linux/tty_flip.h>
38 #include <linux/module.h>
39 #include <linux/spinlock.h>
40 #include <linux/uaccess.h>
41 #include <linux/usb.h>
42 #include <linux/usb/serial.h>
43 #include <linux/usb/ezusb.h>
44 #include "keyspan.h"
45 
46 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu"
47 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
48 
49 #define INSTAT_BUFLEN	32
50 #define GLOCONT_BUFLEN	64
51 #define INDAT49W_BUFLEN	512
52 #define IN_BUFLEN	64
53 #define OUT_BUFLEN	64
54 #define INACK_BUFLEN	1
55 #define OUTCONT_BUFLEN	64
56 
57 	/* Per device and per port private data */
58 struct keyspan_serial_private {
59 	const struct keyspan_device_details	*device_details;
60 
61 	struct urb	*instat_urb;
62 	char		*instat_buf;
63 
64 	/* added to support 49wg, where data from all 4 ports comes in
65 	   on 1 EP and high-speed supported */
66 	struct urb	*indat_urb;
67 	char		*indat_buf;
68 
69 	/* XXX this one probably will need a lock */
70 	struct urb	*glocont_urb;
71 	char		*glocont_buf;
72 	char		*ctrl_buf;	/* for EP0 control message */
73 };
74 
75 struct keyspan_port_private {
76 	/* Keep track of which input & output endpoints to use */
77 	int		in_flip;
78 	int		out_flip;
79 
80 	/* Keep duplicate of device details in each port
81 	   structure as well - simplifies some of the
82 	   callback functions etc. */
83 	const struct keyspan_device_details	*device_details;
84 
85 	/* Input endpoints and buffer for this port */
86 	struct urb	*in_urbs[2];
87 	char		*in_buffer[2];
88 	/* Output endpoints and buffer for this port */
89 	struct urb	*out_urbs[2];
90 	char		*out_buffer[2];
91 
92 	/* Input ack endpoint */
93 	struct urb	*inack_urb;
94 	char		*inack_buffer;
95 
96 	/* Output control endpoint */
97 	struct urb	*outcont_urb;
98 	char		*outcont_buffer;
99 
100 	/* Settings for the port */
101 	int		baud;
102 	int		old_baud;
103 	unsigned int	cflag;
104 	unsigned int	old_cflag;
105 	enum		{flow_none, flow_cts, flow_xon} flow_control;
106 	int		rts_state;	/* Handshaking pins (outputs) */
107 	int		dtr_state;
108 	int		cts_state;	/* Handshaking pins (inputs) */
109 	int		dsr_state;
110 	int		dcd_state;
111 	int		ri_state;
112 	int		break_on;
113 
114 	unsigned long	tx_start_time[2];
115 	int		resend_cont;	/* need to resend control packet */
116 };
117 
118 /* Include Keyspan message headers.  All current Keyspan Adapters
119    make use of one of five message formats which are referred
120    to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and
121    within this driver. */
122 #include "keyspan_usa26msg.h"
123 #include "keyspan_usa28msg.h"
124 #include "keyspan_usa49msg.h"
125 #include "keyspan_usa90msg.h"
126 #include "keyspan_usa67msg.h"
127 
128 
129 module_usb_serial_driver(serial_drivers, keyspan_ids_combined);
130 
131 static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
132 {
133 	struct usb_serial_port *port = tty->driver_data;
134 	struct keyspan_port_private 	*p_priv;
135 
136 	p_priv = usb_get_serial_port_data(port);
137 
138 	if (break_state == -1)
139 		p_priv->break_on = 1;
140 	else
141 		p_priv->break_on = 0;
142 
143 	keyspan_send_setup(port, 0);
144 }
145 
146 
147 static void keyspan_set_termios(struct tty_struct *tty,
148 		struct usb_serial_port *port, struct ktermios *old_termios)
149 {
150 	int				baud_rate, device_port;
151 	struct keyspan_port_private 	*p_priv;
152 	const struct keyspan_device_details	*d_details;
153 	unsigned int 			cflag;
154 
155 	p_priv = usb_get_serial_port_data(port);
156 	d_details = p_priv->device_details;
157 	cflag = tty->termios.c_cflag;
158 	device_port = port->port_number;
159 
160 	/* Baud rate calculation takes baud rate as an integer
161 	   so other rates can be generated if desired. */
162 	baud_rate = tty_get_baud_rate(tty);
163 	/* If no match or invalid, don't change */
164 	if (d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
165 				NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
166 		/* FIXME - more to do here to ensure rate changes cleanly */
167 		/* FIXME - calculate exact rate from divisor ? */
168 		p_priv->baud = baud_rate;
169 	} else
170 		baud_rate = tty_termios_baud_rate(old_termios);
171 
172 	tty_encode_baud_rate(tty, baud_rate, baud_rate);
173 	/* set CTS/RTS handshake etc. */
174 	p_priv->cflag = cflag;
175 	p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
176 
177 	/* Mark/Space not supported */
178 	tty->termios.c_cflag &= ~CMSPAR;
179 
180 	keyspan_send_setup(port, 0);
181 }
182 
183 static int keyspan_tiocmget(struct tty_struct *tty)
184 {
185 	struct usb_serial_port *port = tty->driver_data;
186 	struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
187 	unsigned int			value;
188 
189 	value = ((p_priv->rts_state) ? TIOCM_RTS : 0) |
190 		((p_priv->dtr_state) ? TIOCM_DTR : 0) |
191 		((p_priv->cts_state) ? TIOCM_CTS : 0) |
192 		((p_priv->dsr_state) ? TIOCM_DSR : 0) |
193 		((p_priv->dcd_state) ? TIOCM_CAR : 0) |
194 		((p_priv->ri_state) ? TIOCM_RNG : 0);
195 
196 	return value;
197 }
198 
199 static int keyspan_tiocmset(struct tty_struct *tty,
200 			    unsigned int set, unsigned int clear)
201 {
202 	struct usb_serial_port *port = tty->driver_data;
203 	struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
204 
205 	if (set & TIOCM_RTS)
206 		p_priv->rts_state = 1;
207 	if (set & TIOCM_DTR)
208 		p_priv->dtr_state = 1;
209 	if (clear & TIOCM_RTS)
210 		p_priv->rts_state = 0;
211 	if (clear & TIOCM_DTR)
212 		p_priv->dtr_state = 0;
213 	keyspan_send_setup(port, 0);
214 	return 0;
215 }
216 
217 /* Write function is similar for the four protocols used
218    with only a minor change for usa90 (usa19hs) required */
219 static int keyspan_write(struct tty_struct *tty,
220 	struct usb_serial_port *port, const unsigned char *buf, int count)
221 {
222 	struct keyspan_port_private 	*p_priv;
223 	const struct keyspan_device_details	*d_details;
224 	int				flip;
225 	int 				left, todo;
226 	struct urb			*this_urb;
227 	int 				err, maxDataLen, dataOffset;
228 
229 	p_priv = usb_get_serial_port_data(port);
230 	d_details = p_priv->device_details;
231 
232 	if (d_details->msg_format == msg_usa90) {
233 		maxDataLen = 64;
234 		dataOffset = 0;
235 	} else {
236 		maxDataLen = 63;
237 		dataOffset = 1;
238 	}
239 
240 	dev_dbg(&port->dev, "%s - %d chars, flip=%d\n", __func__, count,
241 		p_priv->out_flip);
242 
243 	for (left = count; left > 0; left -= todo) {
244 		todo = left;
245 		if (todo > maxDataLen)
246 			todo = maxDataLen;
247 
248 		flip = p_priv->out_flip;
249 
250 		/* Check we have a valid urb/endpoint before we use it... */
251 		this_urb = p_priv->out_urbs[flip];
252 		if (this_urb == NULL) {
253 			/* no bulk out, so return 0 bytes written */
254 			dev_dbg(&port->dev, "%s - no output urb :(\n", __func__);
255 			return count;
256 		}
257 
258 		dev_dbg(&port->dev, "%s - endpoint %d flip %d\n",
259 			__func__, usb_pipeendpoint(this_urb->pipe), flip);
260 
261 		if (this_urb->status == -EINPROGRESS) {
262 			if (time_before(jiffies,
263 					p_priv->tx_start_time[flip] + 10 * HZ))
264 				break;
265 			usb_unlink_urb(this_urb);
266 			break;
267 		}
268 
269 		/* First byte in buffer is "last flag" (except for usa19hx)
270 		   - unused so for now so set to zero */
271 		((char *)this_urb->transfer_buffer)[0] = 0;
272 
273 		memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
274 		buf += todo;
275 
276 		/* send the data out the bulk port */
277 		this_urb->transfer_buffer_length = todo + dataOffset;
278 
279 		err = usb_submit_urb(this_urb, GFP_ATOMIC);
280 		if (err != 0)
281 			dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed (%d)\n", err);
282 		p_priv->tx_start_time[flip] = jiffies;
283 
284 		/* Flip for next time if usa26 or usa28 interface
285 		   (not used on usa49) */
286 		p_priv->out_flip = (flip + 1) & d_details->outdat_endp_flip;
287 	}
288 
289 	return count - left;
290 }
291 
292 static void	usa26_indat_callback(struct urb *urb)
293 {
294 	int			i, err;
295 	int			endpoint;
296 	struct usb_serial_port	*port;
297 	unsigned char 		*data = urb->transfer_buffer;
298 	int status = urb->status;
299 
300 	endpoint = usb_pipeendpoint(urb->pipe);
301 
302 	if (status) {
303 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
304 			__func__, status, endpoint);
305 		return;
306 	}
307 
308 	port =  urb->context;
309 	if (urb->actual_length) {
310 		/* 0x80 bit is error flag */
311 		if ((data[0] & 0x80) == 0) {
312 			/* no errors on individual bytes, only
313 			   possible overrun err */
314 			if (data[0] & RXERROR_OVERRUN)
315 				err = TTY_OVERRUN;
316 			else
317 				err = 0;
318 			for (i = 1; i < urb->actual_length ; ++i)
319 				tty_insert_flip_char(&port->port, data[i], err);
320 		} else {
321 			/* some bytes had errors, every byte has status */
322 			dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
323 			for (i = 0; i + 1 < urb->actual_length; i += 2) {
324 				int stat = data[i], flag = 0;
325 				if (stat & RXERROR_OVERRUN)
326 					flag |= TTY_OVERRUN;
327 				if (stat & RXERROR_FRAMING)
328 					flag |= TTY_FRAME;
329 				if (stat & RXERROR_PARITY)
330 					flag |= TTY_PARITY;
331 				/* XXX should handle break (0x10) */
332 				tty_insert_flip_char(&port->port, data[i+1],
333 						flag);
334 			}
335 		}
336 		tty_flip_buffer_push(&port->port);
337 	}
338 
339 	/* Resubmit urb so we continue receiving */
340 	err = usb_submit_urb(urb, GFP_ATOMIC);
341 	if (err != 0)
342 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
343 }
344 
345 /* Outdat handling is common for all devices */
346 static void	usa2x_outdat_callback(struct urb *urb)
347 {
348 	struct usb_serial_port *port;
349 	struct keyspan_port_private *p_priv;
350 
351 	port =  urb->context;
352 	p_priv = usb_get_serial_port_data(port);
353 	dev_dbg(&port->dev, "%s - urb %d\n", __func__, urb == p_priv->out_urbs[1]);
354 
355 	usb_serial_port_softint(port);
356 }
357 
358 static void	usa26_inack_callback(struct urb *urb)
359 {
360 }
361 
362 static void	usa26_outcont_callback(struct urb *urb)
363 {
364 	struct usb_serial_port *port;
365 	struct keyspan_port_private *p_priv;
366 
367 	port =  urb->context;
368 	p_priv = usb_get_serial_port_data(port);
369 
370 	if (p_priv->resend_cont) {
371 		dev_dbg(&port->dev, "%s - sending setup\n", __func__);
372 		keyspan_usa26_send_setup(port->serial, port,
373 						p_priv->resend_cont - 1);
374 	}
375 }
376 
377 static void	usa26_instat_callback(struct urb *urb)
378 {
379 	unsigned char 				*data = urb->transfer_buffer;
380 	struct keyspan_usa26_portStatusMessage	*msg;
381 	struct usb_serial			*serial;
382 	struct usb_serial_port			*port;
383 	struct keyspan_port_private	 	*p_priv;
384 	int old_dcd_state, err;
385 	int status = urb->status;
386 
387 	serial =  urb->context;
388 
389 	if (status) {
390 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
391 		return;
392 	}
393 	if (urb->actual_length != 9) {
394 		dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
395 		goto exit;
396 	}
397 
398 	msg = (struct keyspan_usa26_portStatusMessage *)data;
399 
400 #if 0
401 	dev_dbg(&urb->dev->dev,
402 		"%s - port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d",
403 		__func__, msg->port, msg->hskia_cts, msg->gpia_dcd, msg->dsr,
404 		msg->ri, msg->_txOff, msg->_txXoff, msg->rxEnabled,
405 		msg->controlResponse);
406 #endif
407 
408 	/* Now do something useful with the data */
409 
410 
411 	/* Check port number from message and retrieve private data */
412 	if (msg->port >= serial->num_ports) {
413 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
414 		goto exit;
415 	}
416 	port = serial->port[msg->port];
417 	p_priv = usb_get_serial_port_data(port);
418 
419 	/* Update handshaking pin state information */
420 	old_dcd_state = p_priv->dcd_state;
421 	p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
422 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
423 	p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
424 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
425 
426 	if (old_dcd_state != p_priv->dcd_state)
427 		tty_port_tty_hangup(&port->port, true);
428 
429 	/* Resubmit urb so we continue receiving */
430 	err = usb_submit_urb(urb, GFP_ATOMIC);
431 	if (err != 0)
432 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
433 exit: ;
434 }
435 
436 static void	usa26_glocont_callback(struct urb *urb)
437 {
438 }
439 
440 
441 static void usa28_indat_callback(struct urb *urb)
442 {
443 	int                     err;
444 	struct usb_serial_port  *port;
445 	unsigned char           *data;
446 	struct keyspan_port_private             *p_priv;
447 	int status = urb->status;
448 
449 	port =  urb->context;
450 	p_priv = usb_get_serial_port_data(port);
451 	data = urb->transfer_buffer;
452 
453 	if (urb != p_priv->in_urbs[p_priv->in_flip])
454 		return;
455 
456 	do {
457 		if (status) {
458 			dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
459 				__func__, status, usb_pipeendpoint(urb->pipe));
460 			return;
461 		}
462 
463 		port =  urb->context;
464 		p_priv = usb_get_serial_port_data(port);
465 		data = urb->transfer_buffer;
466 
467 		if (urb->actual_length) {
468 			tty_insert_flip_string(&port->port, data,
469 					urb->actual_length);
470 			tty_flip_buffer_push(&port->port);
471 		}
472 
473 		/* Resubmit urb so we continue receiving */
474 		err = usb_submit_urb(urb, GFP_ATOMIC);
475 		if (err != 0)
476 			dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n",
477 							__func__, err);
478 		p_priv->in_flip ^= 1;
479 
480 		urb = p_priv->in_urbs[p_priv->in_flip];
481 	} while (urb->status != -EINPROGRESS);
482 }
483 
484 static void	usa28_inack_callback(struct urb *urb)
485 {
486 }
487 
488 static void	usa28_outcont_callback(struct urb *urb)
489 {
490 	struct usb_serial_port *port;
491 	struct keyspan_port_private *p_priv;
492 
493 	port =  urb->context;
494 	p_priv = usb_get_serial_port_data(port);
495 
496 	if (p_priv->resend_cont) {
497 		dev_dbg(&port->dev, "%s - sending setup\n", __func__);
498 		keyspan_usa28_send_setup(port->serial, port,
499 						p_priv->resend_cont - 1);
500 	}
501 }
502 
503 static void	usa28_instat_callback(struct urb *urb)
504 {
505 	int					err;
506 	unsigned char 				*data = urb->transfer_buffer;
507 	struct keyspan_usa28_portStatusMessage	*msg;
508 	struct usb_serial			*serial;
509 	struct usb_serial_port			*port;
510 	struct keyspan_port_private	 	*p_priv;
511 	int old_dcd_state;
512 	int status = urb->status;
513 
514 	serial =  urb->context;
515 
516 	if (status) {
517 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
518 		return;
519 	}
520 
521 	if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) {
522 		dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
523 		goto exit;
524 	}
525 
526 	/*dev_dbg(&urb->dev->dev, "%s %12ph", __func__, data);*/
527 
528 	/* Now do something useful with the data */
529 	msg = (struct keyspan_usa28_portStatusMessage *)data;
530 
531 	/* Check port number from message and retrieve private data */
532 	if (msg->port >= serial->num_ports) {
533 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
534 		goto exit;
535 	}
536 	port = serial->port[msg->port];
537 	p_priv = usb_get_serial_port_data(port);
538 
539 	/* Update handshaking pin state information */
540 	old_dcd_state = p_priv->dcd_state;
541 	p_priv->cts_state = ((msg->cts) ? 1 : 0);
542 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
543 	p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
544 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
545 
546 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
547 		tty_port_tty_hangup(&port->port, true);
548 
549 		/* Resubmit urb so we continue receiving */
550 	err = usb_submit_urb(urb, GFP_ATOMIC);
551 	if (err != 0)
552 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
553 exit: ;
554 }
555 
556 static void	usa28_glocont_callback(struct urb *urb)
557 {
558 }
559 
560 
561 static void	usa49_glocont_callback(struct urb *urb)
562 {
563 	struct usb_serial *serial;
564 	struct usb_serial_port *port;
565 	struct keyspan_port_private *p_priv;
566 	int i;
567 
568 	serial =  urb->context;
569 	for (i = 0; i < serial->num_ports; ++i) {
570 		port = serial->port[i];
571 		p_priv = usb_get_serial_port_data(port);
572 
573 		if (p_priv->resend_cont) {
574 			dev_dbg(&port->dev, "%s - sending setup\n", __func__);
575 			keyspan_usa49_send_setup(serial, port,
576 						p_priv->resend_cont - 1);
577 			break;
578 		}
579 	}
580 }
581 
582 	/* This is actually called glostat in the Keyspan
583 	   doco */
584 static void	usa49_instat_callback(struct urb *urb)
585 {
586 	int					err;
587 	unsigned char 				*data = urb->transfer_buffer;
588 	struct keyspan_usa49_portStatusMessage	*msg;
589 	struct usb_serial			*serial;
590 	struct usb_serial_port			*port;
591 	struct keyspan_port_private	 	*p_priv;
592 	int old_dcd_state;
593 	int status = urb->status;
594 
595 	serial =  urb->context;
596 
597 	if (status) {
598 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
599 		return;
600 	}
601 
602 	if (urb->actual_length !=
603 			sizeof(struct keyspan_usa49_portStatusMessage)) {
604 		dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
605 		goto exit;
606 	}
607 
608 	/*dev_dbg(&urb->dev->dev, "%s: %11ph", __func__, data);*/
609 
610 	/* Now do something useful with the data */
611 	msg = (struct keyspan_usa49_portStatusMessage *)data;
612 
613 	/* Check port number from message and retrieve private data */
614 	if (msg->portNumber >= serial->num_ports) {
615 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
616 			__func__, msg->portNumber);
617 		goto exit;
618 	}
619 	port = serial->port[msg->portNumber];
620 	p_priv = usb_get_serial_port_data(port);
621 
622 	/* Update handshaking pin state information */
623 	old_dcd_state = p_priv->dcd_state;
624 	p_priv->cts_state = ((msg->cts) ? 1 : 0);
625 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
626 	p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
627 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
628 
629 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
630 		tty_port_tty_hangup(&port->port, true);
631 
632 	/* Resubmit urb so we continue receiving */
633 	err = usb_submit_urb(urb, GFP_ATOMIC);
634 	if (err != 0)
635 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
636 exit:	;
637 }
638 
639 static void	usa49_inack_callback(struct urb *urb)
640 {
641 }
642 
643 static void	usa49_indat_callback(struct urb *urb)
644 {
645 	int			i, err;
646 	int			endpoint;
647 	struct usb_serial_port	*port;
648 	unsigned char 		*data = urb->transfer_buffer;
649 	int status = urb->status;
650 
651 	endpoint = usb_pipeendpoint(urb->pipe);
652 
653 	if (status) {
654 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
655 			__func__, status, endpoint);
656 		return;
657 	}
658 
659 	port =  urb->context;
660 	if (urb->actual_length) {
661 		/* 0x80 bit is error flag */
662 		if ((data[0] & 0x80) == 0) {
663 			/* no error on any byte */
664 			tty_insert_flip_string(&port->port, data + 1,
665 						urb->actual_length - 1);
666 		} else {
667 			/* some bytes had errors, every byte has status */
668 			for (i = 0; i + 1 < urb->actual_length; i += 2) {
669 				int stat = data[i], flag = 0;
670 				if (stat & RXERROR_OVERRUN)
671 					flag |= TTY_OVERRUN;
672 				if (stat & RXERROR_FRAMING)
673 					flag |= TTY_FRAME;
674 				if (stat & RXERROR_PARITY)
675 					flag |= TTY_PARITY;
676 				/* XXX should handle break (0x10) */
677 				tty_insert_flip_char(&port->port, data[i+1],
678 						flag);
679 			}
680 		}
681 		tty_flip_buffer_push(&port->port);
682 	}
683 
684 	/* Resubmit urb so we continue receiving */
685 	err = usb_submit_urb(urb, GFP_ATOMIC);
686 	if (err != 0)
687 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
688 }
689 
690 static void usa49wg_indat_callback(struct urb *urb)
691 {
692 	int			i, len, x, err;
693 	struct usb_serial	*serial;
694 	struct usb_serial_port	*port;
695 	unsigned char 		*data = urb->transfer_buffer;
696 	int status = urb->status;
697 
698 	serial = urb->context;
699 
700 	if (status) {
701 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
702 		return;
703 	}
704 
705 	/* inbound data is in the form P#, len, status, data */
706 	i = 0;
707 	len = 0;
708 
709 	while (i < urb->actual_length) {
710 
711 		/* Check port number from message */
712 		if (data[i] >= serial->num_ports) {
713 			dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
714 				__func__, data[i]);
715 			return;
716 		}
717 		port = serial->port[data[i++]];
718 		len = data[i++];
719 
720 		/* 0x80 bit is error flag */
721 		if ((data[i] & 0x80) == 0) {
722 			/* no error on any byte */
723 			i++;
724 			for (x = 1; x < len && i < urb->actual_length; ++x)
725 				tty_insert_flip_char(&port->port,
726 						data[i++], 0);
727 		} else {
728 			/*
729 			 * some bytes had errors, every byte has status
730 			 */
731 			for (x = 0; x + 1 < len &&
732 				    i + 1 < urb->actual_length; x += 2) {
733 				int stat = data[i], flag = 0;
734 
735 				if (stat & RXERROR_OVERRUN)
736 					flag |= TTY_OVERRUN;
737 				if (stat & RXERROR_FRAMING)
738 					flag |= TTY_FRAME;
739 				if (stat & RXERROR_PARITY)
740 					flag |= TTY_PARITY;
741 				/* XXX should handle break (0x10) */
742 				tty_insert_flip_char(&port->port, data[i+1],
743 						     flag);
744 				i += 2;
745 			}
746 		}
747 		tty_flip_buffer_push(&port->port);
748 	}
749 
750 	/* Resubmit urb so we continue receiving */
751 	err = usb_submit_urb(urb, GFP_ATOMIC);
752 	if (err != 0)
753 		dev_dbg(&urb->dev->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
754 }
755 
756 /* not used, usa-49 doesn't have per-port control endpoints */
757 static void usa49_outcont_callback(struct urb *urb)
758 {
759 }
760 
761 static void usa90_indat_callback(struct urb *urb)
762 {
763 	int			i, err;
764 	int			endpoint;
765 	struct usb_serial_port	*port;
766 	struct keyspan_port_private	 	*p_priv;
767 	unsigned char 		*data = urb->transfer_buffer;
768 	int status = urb->status;
769 
770 	endpoint = usb_pipeendpoint(urb->pipe);
771 
772 	if (status) {
773 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
774 		    __func__, status, endpoint);
775 		return;
776 	}
777 
778 	port =  urb->context;
779 	p_priv = usb_get_serial_port_data(port);
780 
781 	if (urb->actual_length) {
782 		/* if current mode is DMA, looks like usa28 format
783 		   otherwise looks like usa26 data format */
784 
785 		if (p_priv->baud > 57600)
786 			tty_insert_flip_string(&port->port, data,
787 					urb->actual_length);
788 		else {
789 			/* 0x80 bit is error flag */
790 			if ((data[0] & 0x80) == 0) {
791 				/* no errors on individual bytes, only
792 				   possible overrun err*/
793 				if (data[0] & RXERROR_OVERRUN)
794 					err = TTY_OVERRUN;
795 				else
796 					err = 0;
797 				for (i = 1; i < urb->actual_length ; ++i)
798 					tty_insert_flip_char(&port->port,
799 							data[i], err);
800 			}  else {
801 			/* some bytes had errors, every byte has status */
802 				dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
803 				for (i = 0; i + 1 < urb->actual_length; i += 2) {
804 					int stat = data[i], flag = 0;
805 					if (stat & RXERROR_OVERRUN)
806 						flag |= TTY_OVERRUN;
807 					if (stat & RXERROR_FRAMING)
808 						flag |= TTY_FRAME;
809 					if (stat & RXERROR_PARITY)
810 						flag |= TTY_PARITY;
811 					/* XXX should handle break (0x10) */
812 					tty_insert_flip_char(&port->port,
813 							data[i+1], flag);
814 				}
815 			}
816 		}
817 		tty_flip_buffer_push(&port->port);
818 	}
819 
820 	/* Resubmit urb so we continue receiving */
821 	err = usb_submit_urb(urb, GFP_ATOMIC);
822 	if (err != 0)
823 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
824 }
825 
826 
827 static void	usa90_instat_callback(struct urb *urb)
828 {
829 	unsigned char 				*data = urb->transfer_buffer;
830 	struct keyspan_usa90_portStatusMessage	*msg;
831 	struct usb_serial			*serial;
832 	struct usb_serial_port			*port;
833 	struct keyspan_port_private	 	*p_priv;
834 	int old_dcd_state, err;
835 	int status = urb->status;
836 
837 	serial =  urb->context;
838 
839 	if (status) {
840 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
841 		return;
842 	}
843 	if (urb->actual_length < 14) {
844 		dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
845 		goto exit;
846 	}
847 
848 	msg = (struct keyspan_usa90_portStatusMessage *)data;
849 
850 	/* Now do something useful with the data */
851 
852 	port = serial->port[0];
853 	p_priv = usb_get_serial_port_data(port);
854 
855 	/* Update handshaking pin state information */
856 	old_dcd_state = p_priv->dcd_state;
857 	p_priv->cts_state = ((msg->cts) ? 1 : 0);
858 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
859 	p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
860 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
861 
862 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
863 		tty_port_tty_hangup(&port->port, true);
864 
865 	/* Resubmit urb so we continue receiving */
866 	err = usb_submit_urb(urb, GFP_ATOMIC);
867 	if (err != 0)
868 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
869 exit:
870 	;
871 }
872 
873 static void	usa90_outcont_callback(struct urb *urb)
874 {
875 	struct usb_serial_port *port;
876 	struct keyspan_port_private *p_priv;
877 
878 	port =  urb->context;
879 	p_priv = usb_get_serial_port_data(port);
880 
881 	if (p_priv->resend_cont) {
882 		dev_dbg(&urb->dev->dev, "%s - sending setup\n", __func__);
883 		keyspan_usa90_send_setup(port->serial, port,
884 						p_priv->resend_cont - 1);
885 	}
886 }
887 
888 /* Status messages from the 28xg */
889 static void	usa67_instat_callback(struct urb *urb)
890 {
891 	int					err;
892 	unsigned char 				*data = urb->transfer_buffer;
893 	struct keyspan_usa67_portStatusMessage	*msg;
894 	struct usb_serial			*serial;
895 	struct usb_serial_port			*port;
896 	struct keyspan_port_private	 	*p_priv;
897 	int old_dcd_state;
898 	int status = urb->status;
899 
900 	serial = urb->context;
901 
902 	if (status) {
903 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
904 		return;
905 	}
906 
907 	if (urb->actual_length !=
908 			sizeof(struct keyspan_usa67_portStatusMessage)) {
909 		dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
910 		return;
911 	}
912 
913 
914 	/* Now do something useful with the data */
915 	msg = (struct keyspan_usa67_portStatusMessage *)data;
916 
917 	/* Check port number from message and retrieve private data */
918 	if (msg->port >= serial->num_ports) {
919 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
920 		return;
921 	}
922 
923 	port = serial->port[msg->port];
924 	p_priv = usb_get_serial_port_data(port);
925 
926 	/* Update handshaking pin state information */
927 	old_dcd_state = p_priv->dcd_state;
928 	p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
929 	p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
930 
931 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
932 		tty_port_tty_hangup(&port->port, true);
933 
934 	/* Resubmit urb so we continue receiving */
935 	err = usb_submit_urb(urb, GFP_ATOMIC);
936 	if (err != 0)
937 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
938 }
939 
940 static void usa67_glocont_callback(struct urb *urb)
941 {
942 	struct usb_serial *serial;
943 	struct usb_serial_port *port;
944 	struct keyspan_port_private *p_priv;
945 	int i;
946 
947 	serial = urb->context;
948 	for (i = 0; i < serial->num_ports; ++i) {
949 		port = serial->port[i];
950 		p_priv = usb_get_serial_port_data(port);
951 
952 		if (p_priv->resend_cont) {
953 			dev_dbg(&port->dev, "%s - sending setup\n", __func__);
954 			keyspan_usa67_send_setup(serial, port,
955 						p_priv->resend_cont - 1);
956 			break;
957 		}
958 	}
959 }
960 
961 static int keyspan_write_room(struct tty_struct *tty)
962 {
963 	struct usb_serial_port *port = tty->driver_data;
964 	struct keyspan_port_private	*p_priv;
965 	const struct keyspan_device_details	*d_details;
966 	int				flip;
967 	int				data_len;
968 	struct urb			*this_urb;
969 
970 	p_priv = usb_get_serial_port_data(port);
971 	d_details = p_priv->device_details;
972 
973 	/* FIXME: locking */
974 	if (d_details->msg_format == msg_usa90)
975 		data_len = 64;
976 	else
977 		data_len = 63;
978 
979 	flip = p_priv->out_flip;
980 
981 	/* Check both endpoints to see if any are available. */
982 	this_urb = p_priv->out_urbs[flip];
983 	if (this_urb != NULL) {
984 		if (this_urb->status != -EINPROGRESS)
985 			return data_len;
986 		flip = (flip + 1) & d_details->outdat_endp_flip;
987 		this_urb = p_priv->out_urbs[flip];
988 		if (this_urb != NULL) {
989 			if (this_urb->status != -EINPROGRESS)
990 				return data_len;
991 		}
992 	}
993 	return 0;
994 }
995 
996 
997 static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
998 {
999 	struct keyspan_port_private 	*p_priv;
1000 	const struct keyspan_device_details	*d_details;
1001 	int				i, err;
1002 	int				baud_rate, device_port;
1003 	struct urb			*urb;
1004 	unsigned int			cflag = 0;
1005 
1006 	p_priv = usb_get_serial_port_data(port);
1007 	d_details = p_priv->device_details;
1008 
1009 	/* Set some sane defaults */
1010 	p_priv->rts_state = 1;
1011 	p_priv->dtr_state = 1;
1012 	p_priv->baud = 9600;
1013 
1014 	/* force baud and lcr to be set on open */
1015 	p_priv->old_baud = 0;
1016 	p_priv->old_cflag = 0;
1017 
1018 	p_priv->out_flip = 0;
1019 	p_priv->in_flip = 0;
1020 
1021 	/* Reset low level data toggle and start reading from endpoints */
1022 	for (i = 0; i < 2; i++) {
1023 		urb = p_priv->in_urbs[i];
1024 		if (urb == NULL)
1025 			continue;
1026 
1027 		/* make sure endpoint data toggle is synchronized
1028 		   with the device */
1029 		usb_clear_halt(urb->dev, urb->pipe);
1030 		err = usb_submit_urb(urb, GFP_KERNEL);
1031 		if (err != 0)
1032 			dev_dbg(&port->dev, "%s - submit urb %d failed (%d)\n", __func__, i, err);
1033 	}
1034 
1035 	/* Reset low level data toggle on out endpoints */
1036 	for (i = 0; i < 2; i++) {
1037 		urb = p_priv->out_urbs[i];
1038 		if (urb == NULL)
1039 			continue;
1040 		/* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1041 						usb_pipeout(urb->pipe), 0); */
1042 	}
1043 
1044 	/* get the terminal config for the setup message now so we don't
1045 	 * need to send 2 of them */
1046 
1047 	device_port = port->port_number;
1048 	if (tty) {
1049 		cflag = tty->termios.c_cflag;
1050 		/* Baud rate calculation takes baud rate as an integer
1051 		   so other rates can be generated if desired. */
1052 		baud_rate = tty_get_baud_rate(tty);
1053 		/* If no match or invalid, leave as default */
1054 		if (baud_rate >= 0
1055 		    && d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
1056 					NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
1057 			p_priv->baud = baud_rate;
1058 		}
1059 	}
1060 	/* set CTS/RTS handshake etc. */
1061 	p_priv->cflag = cflag;
1062 	p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
1063 
1064 	keyspan_send_setup(port, 1);
1065 	/* mdelay(100); */
1066 	/* keyspan_set_termios(port, NULL); */
1067 
1068 	return 0;
1069 }
1070 
1071 static inline void stop_urb(struct urb *urb)
1072 {
1073 	if (urb && urb->status == -EINPROGRESS)
1074 		usb_kill_urb(urb);
1075 }
1076 
1077 static void keyspan_dtr_rts(struct usb_serial_port *port, int on)
1078 {
1079 	struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
1080 
1081 	p_priv->rts_state = on;
1082 	p_priv->dtr_state = on;
1083 	keyspan_send_setup(port, 0);
1084 }
1085 
1086 static void keyspan_close(struct usb_serial_port *port)
1087 {
1088 	int			i;
1089 	struct keyspan_port_private 	*p_priv;
1090 
1091 	p_priv = usb_get_serial_port_data(port);
1092 
1093 	p_priv->rts_state = 0;
1094 	p_priv->dtr_state = 0;
1095 
1096 	keyspan_send_setup(port, 2);
1097 	/* pilot-xfer seems to work best with this delay */
1098 	mdelay(100);
1099 
1100 	p_priv->out_flip = 0;
1101 	p_priv->in_flip = 0;
1102 
1103 	stop_urb(p_priv->inack_urb);
1104 	for (i = 0; i < 2; i++) {
1105 		stop_urb(p_priv->in_urbs[i]);
1106 		stop_urb(p_priv->out_urbs[i]);
1107 	}
1108 }
1109 
1110 /* download the firmware to a pre-renumeration device */
1111 static int keyspan_fake_startup(struct usb_serial *serial)
1112 {
1113 	char	*fw_name;
1114 
1115 	dev_dbg(&serial->dev->dev, "Keyspan startup version %04x product %04x\n",
1116 		le16_to_cpu(serial->dev->descriptor.bcdDevice),
1117 		le16_to_cpu(serial->dev->descriptor.idProduct));
1118 
1119 	if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000)
1120 								!= 0x8000) {
1121 		dev_dbg(&serial->dev->dev, "Firmware already loaded.  Quitting.\n");
1122 		return 1;
1123 	}
1124 
1125 		/* Select firmware image on the basis of idProduct */
1126 	switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
1127 	case keyspan_usa28_pre_product_id:
1128 		fw_name = "keyspan/usa28.fw";
1129 		break;
1130 
1131 	case keyspan_usa28x_pre_product_id:
1132 		fw_name = "keyspan/usa28x.fw";
1133 		break;
1134 
1135 	case keyspan_usa28xa_pre_product_id:
1136 		fw_name = "keyspan/usa28xa.fw";
1137 		break;
1138 
1139 	case keyspan_usa28xb_pre_product_id:
1140 		fw_name = "keyspan/usa28xb.fw";
1141 		break;
1142 
1143 	case keyspan_usa19_pre_product_id:
1144 		fw_name = "keyspan/usa19.fw";
1145 		break;
1146 
1147 	case keyspan_usa19qi_pre_product_id:
1148 		fw_name = "keyspan/usa19qi.fw";
1149 		break;
1150 
1151 	case keyspan_mpr_pre_product_id:
1152 		fw_name = "keyspan/mpr.fw";
1153 		break;
1154 
1155 	case keyspan_usa19qw_pre_product_id:
1156 		fw_name = "keyspan/usa19qw.fw";
1157 		break;
1158 
1159 	case keyspan_usa18x_pre_product_id:
1160 		fw_name = "keyspan/usa18x.fw";
1161 		break;
1162 
1163 	case keyspan_usa19w_pre_product_id:
1164 		fw_name = "keyspan/usa19w.fw";
1165 		break;
1166 
1167 	case keyspan_usa49w_pre_product_id:
1168 		fw_name = "keyspan/usa49w.fw";
1169 		break;
1170 
1171 	case keyspan_usa49wlc_pre_product_id:
1172 		fw_name = "keyspan/usa49wlc.fw";
1173 		break;
1174 
1175 	default:
1176 		dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n",
1177 			le16_to_cpu(serial->dev->descriptor.idProduct));
1178 		return 1;
1179 	}
1180 
1181 	dev_dbg(&serial->dev->dev, "Uploading Keyspan %s firmware.\n", fw_name);
1182 
1183 	if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) {
1184 		dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
1185 			fw_name);
1186 		return -ENOENT;
1187 	}
1188 
1189 	/* after downloading firmware Renumeration will occur in a
1190 	  moment and the new device will bind to the real driver */
1191 
1192 	/* we don't want this device to have a driver assigned to it. */
1193 	return 1;
1194 }
1195 
1196 /* Helper functions used by keyspan_setup_urbs */
1197 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial,
1198 						     int endpoint)
1199 {
1200 	struct usb_host_interface *iface_desc;
1201 	struct usb_endpoint_descriptor *ep;
1202 	int i;
1203 
1204 	iface_desc = serial->interface->cur_altsetting;
1205 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1206 		ep = &iface_desc->endpoint[i].desc;
1207 		if (ep->bEndpointAddress == endpoint)
1208 			return ep;
1209 	}
1210 	dev_warn(&serial->interface->dev, "found no endpoint descriptor for "
1211 		 "endpoint %x\n", endpoint);
1212 	return NULL;
1213 }
1214 
1215 static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
1216 				      int dir, void *ctx, char *buf, int len,
1217 				      void (*callback)(struct urb *))
1218 {
1219 	struct urb *urb;
1220 	struct usb_endpoint_descriptor const *ep_desc;
1221 	char const *ep_type_name;
1222 
1223 	if (endpoint == -1)
1224 		return NULL;		/* endpoint not needed */
1225 
1226 	dev_dbg(&serial->interface->dev, "%s - alloc for endpoint %d.\n", __func__, endpoint);
1227 	urb = usb_alloc_urb(0, GFP_KERNEL);		/* No ISO */
1228 	if (!urb)
1229 		return NULL;
1230 
1231 	if (endpoint == 0) {
1232 		/* control EP filled in when used */
1233 		return urb;
1234 	}
1235 
1236 	ep_desc = find_ep(serial, endpoint);
1237 	if (!ep_desc) {
1238 		/* leak the urb, something's wrong and the callers don't care */
1239 		return urb;
1240 	}
1241 	if (usb_endpoint_xfer_int(ep_desc)) {
1242 		ep_type_name = "INT";
1243 		usb_fill_int_urb(urb, serial->dev,
1244 				 usb_sndintpipe(serial->dev, endpoint) | dir,
1245 				 buf, len, callback, ctx,
1246 				 ep_desc->bInterval);
1247 	} else if (usb_endpoint_xfer_bulk(ep_desc)) {
1248 		ep_type_name = "BULK";
1249 		usb_fill_bulk_urb(urb, serial->dev,
1250 				  usb_sndbulkpipe(serial->dev, endpoint) | dir,
1251 				  buf, len, callback, ctx);
1252 	} else {
1253 		dev_warn(&serial->interface->dev,
1254 			 "unsupported endpoint type %x\n",
1255 			 usb_endpoint_type(ep_desc));
1256 		usb_free_urb(urb);
1257 		return NULL;
1258 	}
1259 
1260 	dev_dbg(&serial->interface->dev, "%s - using urb %p for %s endpoint %x\n",
1261 	    __func__, urb, ep_type_name, endpoint);
1262 	return urb;
1263 }
1264 
1265 static struct callbacks {
1266 	void	(*instat_callback)(struct urb *);
1267 	void	(*glocont_callback)(struct urb *);
1268 	void	(*indat_callback)(struct urb *);
1269 	void	(*outdat_callback)(struct urb *);
1270 	void	(*inack_callback)(struct urb *);
1271 	void	(*outcont_callback)(struct urb *);
1272 } keyspan_callbacks[] = {
1273 	{
1274 		/* msg_usa26 callbacks */
1275 		.instat_callback =	usa26_instat_callback,
1276 		.glocont_callback =	usa26_glocont_callback,
1277 		.indat_callback =	usa26_indat_callback,
1278 		.outdat_callback =	usa2x_outdat_callback,
1279 		.inack_callback =	usa26_inack_callback,
1280 		.outcont_callback =	usa26_outcont_callback,
1281 	}, {
1282 		/* msg_usa28 callbacks */
1283 		.instat_callback =	usa28_instat_callback,
1284 		.glocont_callback =	usa28_glocont_callback,
1285 		.indat_callback =	usa28_indat_callback,
1286 		.outdat_callback =	usa2x_outdat_callback,
1287 		.inack_callback =	usa28_inack_callback,
1288 		.outcont_callback =	usa28_outcont_callback,
1289 	}, {
1290 		/* msg_usa49 callbacks */
1291 		.instat_callback =	usa49_instat_callback,
1292 		.glocont_callback =	usa49_glocont_callback,
1293 		.indat_callback =	usa49_indat_callback,
1294 		.outdat_callback =	usa2x_outdat_callback,
1295 		.inack_callback =	usa49_inack_callback,
1296 		.outcont_callback =	usa49_outcont_callback,
1297 	}, {
1298 		/* msg_usa90 callbacks */
1299 		.instat_callback =	usa90_instat_callback,
1300 		.glocont_callback =	usa28_glocont_callback,
1301 		.indat_callback =	usa90_indat_callback,
1302 		.outdat_callback =	usa2x_outdat_callback,
1303 		.inack_callback =	usa28_inack_callback,
1304 		.outcont_callback =	usa90_outcont_callback,
1305 	}, {
1306 		/* msg_usa67 callbacks */
1307 		.instat_callback =	usa67_instat_callback,
1308 		.glocont_callback =	usa67_glocont_callback,
1309 		.indat_callback =	usa26_indat_callback,
1310 		.outdat_callback =	usa2x_outdat_callback,
1311 		.inack_callback =	usa26_inack_callback,
1312 		.outcont_callback =	usa26_outcont_callback,
1313 	}
1314 };
1315 
1316 	/* Generic setup urbs function that uses
1317 	   data in device_details */
1318 static void keyspan_setup_urbs(struct usb_serial *serial)
1319 {
1320 	struct keyspan_serial_private 	*s_priv;
1321 	const struct keyspan_device_details	*d_details;
1322 	struct callbacks		*cback;
1323 
1324 	s_priv = usb_get_serial_data(serial);
1325 	d_details = s_priv->device_details;
1326 
1327 	/* Setup values for the various callback routines */
1328 	cback = &keyspan_callbacks[d_details->msg_format];
1329 
1330 	/* Allocate and set up urbs for each one that is in use,
1331 	   starting with instat endpoints */
1332 	s_priv->instat_urb = keyspan_setup_urb
1333 		(serial, d_details->instat_endpoint, USB_DIR_IN,
1334 		 serial, s_priv->instat_buf, INSTAT_BUFLEN,
1335 		 cback->instat_callback);
1336 
1337 	s_priv->indat_urb = keyspan_setup_urb
1338 		(serial, d_details->indat_endpoint, USB_DIR_IN,
1339 		 serial, s_priv->indat_buf, INDAT49W_BUFLEN,
1340 		 usa49wg_indat_callback);
1341 
1342 	s_priv->glocont_urb = keyspan_setup_urb
1343 		(serial, d_details->glocont_endpoint, USB_DIR_OUT,
1344 		 serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1345 		 cback->glocont_callback);
1346 }
1347 
1348 /* usa19 function doesn't require prescaler */
1349 static int keyspan_usa19_calc_baud(struct usb_serial_port *port,
1350 				   u32 baud_rate, u32 baudclk, u8 *rate_hi,
1351 				   u8 *rate_low, u8 *prescaler, int portnum)
1352 {
1353 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1354 		div,	/* divisor */
1355 		cnt;	/* inverse of divisor (programmed into 8051) */
1356 
1357 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1358 
1359 	/* prevent divide by zero...  */
1360 	b16 = baud_rate * 16L;
1361 	if (b16 == 0)
1362 		return KEYSPAN_INVALID_BAUD_RATE;
1363 	/* Any "standard" rate over 57k6 is marginal on the USA-19
1364 	   as we run out of divisor resolution. */
1365 	if (baud_rate > 57600)
1366 		return KEYSPAN_INVALID_BAUD_RATE;
1367 
1368 	/* calculate the divisor and the counter (its inverse) */
1369 	div = baudclk / b16;
1370 	if (div == 0)
1371 		return KEYSPAN_INVALID_BAUD_RATE;
1372 	else
1373 		cnt = 0 - div;
1374 
1375 	if (div > 0xffff)
1376 		return KEYSPAN_INVALID_BAUD_RATE;
1377 
1378 	/* return the counter values if non-null */
1379 	if (rate_low)
1380 		*rate_low = (u8) (cnt & 0xff);
1381 	if (rate_hi)
1382 		*rate_hi = (u8) ((cnt >> 8) & 0xff);
1383 	if (rate_low && rate_hi)
1384 		dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1385 				__func__, baud_rate, *rate_hi, *rate_low);
1386 	return KEYSPAN_BAUD_RATE_OK;
1387 }
1388 
1389 /* usa19hs function doesn't require prescaler */
1390 static int keyspan_usa19hs_calc_baud(struct usb_serial_port *port,
1391 				     u32 baud_rate, u32 baudclk, u8 *rate_hi,
1392 				     u8 *rate_low, u8 *prescaler, int portnum)
1393 {
1394 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1395 			div;	/* divisor */
1396 
1397 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1398 
1399 	/* prevent divide by zero...  */
1400 	b16 = baud_rate * 16L;
1401 	if (b16 == 0)
1402 		return KEYSPAN_INVALID_BAUD_RATE;
1403 
1404 	/* calculate the divisor */
1405 	div = baudclk / b16;
1406 	if (div == 0)
1407 		return KEYSPAN_INVALID_BAUD_RATE;
1408 
1409 	if (div > 0xffff)
1410 		return KEYSPAN_INVALID_BAUD_RATE;
1411 
1412 	/* return the counter values if non-null */
1413 	if (rate_low)
1414 		*rate_low = (u8) (div & 0xff);
1415 
1416 	if (rate_hi)
1417 		*rate_hi = (u8) ((div >> 8) & 0xff);
1418 
1419 	if (rate_low && rate_hi)
1420 		dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1421 			__func__, baud_rate, *rate_hi, *rate_low);
1422 
1423 	return KEYSPAN_BAUD_RATE_OK;
1424 }
1425 
1426 static int keyspan_usa19w_calc_baud(struct usb_serial_port *port,
1427 				    u32 baud_rate, u32 baudclk, u8 *rate_hi,
1428 				    u8 *rate_low, u8 *prescaler, int portnum)
1429 {
1430 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1431 		clk,	/* clock with 13/8 prescaler */
1432 		div,	/* divisor using 13/8 prescaler */
1433 		res,	/* resulting baud rate using 13/8 prescaler */
1434 		diff,	/* error using 13/8 prescaler */
1435 		smallest_diff;
1436 	u8	best_prescaler;
1437 	int	i;
1438 
1439 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1440 
1441 	/* prevent divide by zero */
1442 	b16 = baud_rate * 16L;
1443 	if (b16 == 0)
1444 		return KEYSPAN_INVALID_BAUD_RATE;
1445 
1446 	/* Calculate prescaler by trying them all and looking
1447 	   for best fit */
1448 
1449 	/* start with largest possible difference */
1450 	smallest_diff = 0xffffffff;
1451 
1452 		/* 0 is an invalid prescaler, used as a flag */
1453 	best_prescaler = 0;
1454 
1455 	for (i = 8; i <= 0xff; ++i) {
1456 		clk = (baudclk * 8) / (u32) i;
1457 
1458 		div = clk / b16;
1459 		if (div == 0)
1460 			continue;
1461 
1462 		res = clk / div;
1463 		diff = (res > b16) ? (res-b16) : (b16-res);
1464 
1465 		if (diff < smallest_diff) {
1466 			best_prescaler = i;
1467 			smallest_diff = diff;
1468 		}
1469 	}
1470 
1471 	if (best_prescaler == 0)
1472 		return KEYSPAN_INVALID_BAUD_RATE;
1473 
1474 	clk = (baudclk * 8) / (u32) best_prescaler;
1475 	div = clk / b16;
1476 
1477 	/* return the divisor and prescaler if non-null */
1478 	if (rate_low)
1479 		*rate_low = (u8) (div & 0xff);
1480 	if (rate_hi)
1481 		*rate_hi = (u8) ((div >> 8) & 0xff);
1482 	if (prescaler) {
1483 		*prescaler = best_prescaler;
1484 		/*  dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */
1485 	}
1486 	return KEYSPAN_BAUD_RATE_OK;
1487 }
1488 
1489 	/* USA-28 supports different maximum baud rates on each port */
1490 static int keyspan_usa28_calc_baud(struct usb_serial_port *port,
1491 				   u32 baud_rate, u32 baudclk, u8 *rate_hi,
1492 				   u8 *rate_low, u8 *prescaler, int portnum)
1493 {
1494 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1495 		div,	/* divisor */
1496 		cnt;	/* inverse of divisor (programmed into 8051) */
1497 
1498 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1499 
1500 		/* prevent divide by zero */
1501 	b16 = baud_rate * 16L;
1502 	if (b16 == 0)
1503 		return KEYSPAN_INVALID_BAUD_RATE;
1504 
1505 	/* calculate the divisor and the counter (its inverse) */
1506 	div = KEYSPAN_USA28_BAUDCLK / b16;
1507 	if (div == 0)
1508 		return KEYSPAN_INVALID_BAUD_RATE;
1509 	else
1510 		cnt = 0 - div;
1511 
1512 	/* check for out of range, based on portnum,
1513 	   and return result */
1514 	if (portnum == 0) {
1515 		if (div > 0xffff)
1516 			return KEYSPAN_INVALID_BAUD_RATE;
1517 	} else {
1518 		if (portnum == 1) {
1519 			if (div > 0xff)
1520 				return KEYSPAN_INVALID_BAUD_RATE;
1521 		} else
1522 			return KEYSPAN_INVALID_BAUD_RATE;
1523 	}
1524 
1525 		/* return the counter values if not NULL
1526 		   (port 1 will ignore retHi) */
1527 	if (rate_low)
1528 		*rate_low = (u8) (cnt & 0xff);
1529 	if (rate_hi)
1530 		*rate_hi = (u8) ((cnt >> 8) & 0xff);
1531 	dev_dbg(&port->dev, "%s - %d OK.\n", __func__, baud_rate);
1532 	return KEYSPAN_BAUD_RATE_OK;
1533 }
1534 
1535 static int keyspan_usa26_send_setup(struct usb_serial *serial,
1536 				    struct usb_serial_port *port,
1537 				    int reset_port)
1538 {
1539 	struct keyspan_usa26_portControlMessage	msg;
1540 	struct keyspan_serial_private 		*s_priv;
1541 	struct keyspan_port_private 		*p_priv;
1542 	const struct keyspan_device_details	*d_details;
1543 	struct urb				*this_urb;
1544 	int 					device_port, err;
1545 
1546 	dev_dbg(&port->dev, "%s reset=%d\n", __func__, reset_port);
1547 
1548 	s_priv = usb_get_serial_data(serial);
1549 	p_priv = usb_get_serial_port_data(port);
1550 	d_details = s_priv->device_details;
1551 	device_port = port->port_number;
1552 
1553 	this_urb = p_priv->outcont_urb;
1554 
1555 	dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe));
1556 
1557 		/* Make sure we have an urb then send the message */
1558 	if (this_urb == NULL) {
1559 		dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1560 		return -1;
1561 	}
1562 
1563 	/* Save reset port val for resend.
1564 	   Don't overwrite resend for open/close condition. */
1565 	if ((reset_port + 1) > p_priv->resend_cont)
1566 		p_priv->resend_cont = reset_port + 1;
1567 	if (this_urb->status == -EINPROGRESS) {
1568 		/*  dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1569 		mdelay(5);
1570 		return -1;
1571 	}
1572 
1573 	memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage));
1574 
1575 	/* Only set baud rate if it's changed */
1576 	if (p_priv->old_baud != p_priv->baud) {
1577 		p_priv->old_baud = p_priv->baud;
1578 		msg.setClocking = 0xff;
1579 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1580 						   &msg.baudHi, &msg.baudLo, &msg.prescaler,
1581 						   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1582 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
1583 				__func__, p_priv->baud);
1584 			msg.baudLo = 0;
1585 			msg.baudHi = 125;	/* Values for 9600 baud */
1586 			msg.prescaler = 10;
1587 		}
1588 		msg.setPrescaler = 0xff;
1589 	}
1590 
1591 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
1592 	switch (p_priv->cflag & CSIZE) {
1593 	case CS5:
1594 		msg.lcr |= USA_DATABITS_5;
1595 		break;
1596 	case CS6:
1597 		msg.lcr |= USA_DATABITS_6;
1598 		break;
1599 	case CS7:
1600 		msg.lcr |= USA_DATABITS_7;
1601 		break;
1602 	case CS8:
1603 		msg.lcr |= USA_DATABITS_8;
1604 		break;
1605 	}
1606 	if (p_priv->cflag & PARENB) {
1607 		/* note USA_PARITY_NONE == 0 */
1608 		msg.lcr |= (p_priv->cflag & PARODD) ?
1609 			USA_PARITY_ODD : USA_PARITY_EVEN;
1610 	}
1611 	msg.setLcr = 0xff;
1612 
1613 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1614 	msg.xonFlowControl = 0;
1615 	msg.setFlowControl = 0xff;
1616 	msg.forwardingLength = 16;
1617 	msg.xonChar = 17;
1618 	msg.xoffChar = 19;
1619 
1620 	/* Opening port */
1621 	if (reset_port == 1) {
1622 		msg._txOn = 1;
1623 		msg._txOff = 0;
1624 		msg.txFlush = 0;
1625 		msg.txBreak = 0;
1626 		msg.rxOn = 1;
1627 		msg.rxOff = 0;
1628 		msg.rxFlush = 1;
1629 		msg.rxForward = 0;
1630 		msg.returnStatus = 0;
1631 		msg.resetDataToggle = 0xff;
1632 	}
1633 
1634 	/* Closing port */
1635 	else if (reset_port == 2) {
1636 		msg._txOn = 0;
1637 		msg._txOff = 1;
1638 		msg.txFlush = 0;
1639 		msg.txBreak = 0;
1640 		msg.rxOn = 0;
1641 		msg.rxOff = 1;
1642 		msg.rxFlush = 1;
1643 		msg.rxForward = 0;
1644 		msg.returnStatus = 0;
1645 		msg.resetDataToggle = 0;
1646 	}
1647 
1648 	/* Sending intermediate configs */
1649 	else {
1650 		msg._txOn = (!p_priv->break_on);
1651 		msg._txOff = 0;
1652 		msg.txFlush = 0;
1653 		msg.txBreak = (p_priv->break_on);
1654 		msg.rxOn = 0;
1655 		msg.rxOff = 0;
1656 		msg.rxFlush = 0;
1657 		msg.rxForward = 0;
1658 		msg.returnStatus = 0;
1659 		msg.resetDataToggle = 0x0;
1660 	}
1661 
1662 	/* Do handshaking outputs */
1663 	msg.setTxTriState_setRts = 0xff;
1664 	msg.txTriState_rts = p_priv->rts_state;
1665 
1666 	msg.setHskoa_setDtr = 0xff;
1667 	msg.hskoa_dtr = p_priv->dtr_state;
1668 
1669 	p_priv->resend_cont = 0;
1670 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1671 
1672 	/* send the data out the device on control endpoint */
1673 	this_urb->transfer_buffer_length = sizeof(msg);
1674 
1675 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
1676 	if (err != 0)
1677 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1678 	return 0;
1679 }
1680 
1681 static int keyspan_usa28_send_setup(struct usb_serial *serial,
1682 				    struct usb_serial_port *port,
1683 				    int reset_port)
1684 {
1685 	struct keyspan_usa28_portControlMessage	msg;
1686 	struct keyspan_serial_private	 	*s_priv;
1687 	struct keyspan_port_private 		*p_priv;
1688 	const struct keyspan_device_details	*d_details;
1689 	struct urb				*this_urb;
1690 	int 					device_port, err;
1691 
1692 	s_priv = usb_get_serial_data(serial);
1693 	p_priv = usb_get_serial_port_data(port);
1694 	d_details = s_priv->device_details;
1695 	device_port = port->port_number;
1696 
1697 	/* only do something if we have a bulk out endpoint */
1698 	this_urb = p_priv->outcont_urb;
1699 	if (this_urb == NULL) {
1700 		dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1701 		return -1;
1702 	}
1703 
1704 	/* Save reset port val for resend.
1705 	   Don't overwrite resend for open/close condition. */
1706 	if ((reset_port + 1) > p_priv->resend_cont)
1707 		p_priv->resend_cont = reset_port + 1;
1708 	if (this_urb->status == -EINPROGRESS) {
1709 		dev_dbg(&port->dev, "%s already writing\n", __func__);
1710 		mdelay(5);
1711 		return -1;
1712 	}
1713 
1714 	memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage));
1715 
1716 	msg.setBaudRate = 1;
1717 	if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1718 					   &msg.baudHi, &msg.baudLo, NULL,
1719 					   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1720 		dev_dbg(&port->dev, "%s - Invalid baud rate requested %d.\n",
1721 						__func__, p_priv->baud);
1722 		msg.baudLo = 0xff;
1723 		msg.baudHi = 0xb2;	/* Values for 9600 baud */
1724 	}
1725 
1726 	/* If parity is enabled, we must calculate it ourselves. */
1727 	msg.parity = 0;		/* XXX for now */
1728 
1729 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1730 	msg.xonFlowControl = 0;
1731 
1732 	/* Do handshaking outputs, DTR is inverted relative to RTS */
1733 	msg.rts = p_priv->rts_state;
1734 	msg.dtr = p_priv->dtr_state;
1735 
1736 	msg.forwardingLength = 16;
1737 	msg.forwardMs = 10;
1738 	msg.breakThreshold = 45;
1739 	msg.xonChar = 17;
1740 	msg.xoffChar = 19;
1741 
1742 	/*msg.returnStatus = 1;
1743 	msg.resetDataToggle = 0xff;*/
1744 	/* Opening port */
1745 	if (reset_port == 1) {
1746 		msg._txOn = 1;
1747 		msg._txOff = 0;
1748 		msg.txFlush = 0;
1749 		msg.txForceXoff = 0;
1750 		msg.txBreak = 0;
1751 		msg.rxOn = 1;
1752 		msg.rxOff = 0;
1753 		msg.rxFlush = 1;
1754 		msg.rxForward = 0;
1755 		msg.returnStatus = 0;
1756 		msg.resetDataToggle = 0xff;
1757 	}
1758 	/* Closing port */
1759 	else if (reset_port == 2) {
1760 		msg._txOn = 0;
1761 		msg._txOff = 1;
1762 		msg.txFlush = 0;
1763 		msg.txForceXoff = 0;
1764 		msg.txBreak = 0;
1765 		msg.rxOn = 0;
1766 		msg.rxOff = 1;
1767 		msg.rxFlush = 1;
1768 		msg.rxForward = 0;
1769 		msg.returnStatus = 0;
1770 		msg.resetDataToggle = 0;
1771 	}
1772 	/* Sending intermediate configs */
1773 	else {
1774 		msg._txOn = (!p_priv->break_on);
1775 		msg._txOff = 0;
1776 		msg.txFlush = 0;
1777 		msg.txForceXoff = 0;
1778 		msg.txBreak = (p_priv->break_on);
1779 		msg.rxOn = 0;
1780 		msg.rxOff = 0;
1781 		msg.rxFlush = 0;
1782 		msg.rxForward = 0;
1783 		msg.returnStatus = 0;
1784 		msg.resetDataToggle = 0x0;
1785 	}
1786 
1787 	p_priv->resend_cont = 0;
1788 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1789 
1790 	/* send the data out the device on control endpoint */
1791 	this_urb->transfer_buffer_length = sizeof(msg);
1792 
1793 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
1794 	if (err != 0)
1795 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed\n", __func__);
1796 #if 0
1797 	else {
1798 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) OK %d bytes\n", __func__,
1799 		    this_urb->transfer_buffer_length);
1800 	}
1801 #endif
1802 
1803 	return 0;
1804 }
1805 
1806 static int keyspan_usa49_send_setup(struct usb_serial *serial,
1807 				    struct usb_serial_port *port,
1808 				    int reset_port)
1809 {
1810 	struct keyspan_usa49_portControlMessage	msg;
1811 	struct usb_ctrlrequest 			*dr = NULL;
1812 	struct keyspan_serial_private 		*s_priv;
1813 	struct keyspan_port_private 		*p_priv;
1814 	const struct keyspan_device_details	*d_details;
1815 	struct urb				*this_urb;
1816 	int 					err, device_port;
1817 
1818 	s_priv = usb_get_serial_data(serial);
1819 	p_priv = usb_get_serial_port_data(port);
1820 	d_details = s_priv->device_details;
1821 
1822 	this_urb = s_priv->glocont_urb;
1823 
1824 	/* Work out which port within the device is being setup */
1825 	device_port = port->port_number;
1826 
1827 	/* Make sure we have an urb then send the message */
1828 	if (this_urb == NULL) {
1829 		dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
1830 		return -1;
1831 	}
1832 
1833 	dev_dbg(&port->dev, "%s - endpoint %d (%d)\n",
1834 		__func__, usb_pipeendpoint(this_urb->pipe), device_port);
1835 
1836 	/* Save reset port val for resend.
1837 	   Don't overwrite resend for open/close condition. */
1838 	if ((reset_port + 1) > p_priv->resend_cont)
1839 		p_priv->resend_cont = reset_port + 1;
1840 
1841 	if (this_urb->status == -EINPROGRESS) {
1842 		/*  dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1843 		mdelay(5);
1844 		return -1;
1845 	}
1846 
1847 	memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
1848 
1849 	msg.portNumber = device_port;
1850 
1851 	/* Only set baud rate if it's changed */
1852 	if (p_priv->old_baud != p_priv->baud) {
1853 		p_priv->old_baud = p_priv->baud;
1854 		msg.setClocking = 0xff;
1855 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1856 						   &msg.baudHi, &msg.baudLo, &msg.prescaler,
1857 						   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1858 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
1859 				__func__, p_priv->baud);
1860 			msg.baudLo = 0;
1861 			msg.baudHi = 125;	/* Values for 9600 baud */
1862 			msg.prescaler = 10;
1863 		}
1864 		/* msg.setPrescaler = 0xff; */
1865 	}
1866 
1867 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
1868 	switch (p_priv->cflag & CSIZE) {
1869 	case CS5:
1870 		msg.lcr |= USA_DATABITS_5;
1871 		break;
1872 	case CS6:
1873 		msg.lcr |= USA_DATABITS_6;
1874 		break;
1875 	case CS7:
1876 		msg.lcr |= USA_DATABITS_7;
1877 		break;
1878 	case CS8:
1879 		msg.lcr |= USA_DATABITS_8;
1880 		break;
1881 	}
1882 	if (p_priv->cflag & PARENB) {
1883 		/* note USA_PARITY_NONE == 0 */
1884 		msg.lcr |= (p_priv->cflag & PARODD) ?
1885 			USA_PARITY_ODD : USA_PARITY_EVEN;
1886 	}
1887 	msg.setLcr = 0xff;
1888 
1889 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1890 	msg.xonFlowControl = 0;
1891 	msg.setFlowControl = 0xff;
1892 
1893 	msg.forwardingLength = 16;
1894 	msg.xonChar = 17;
1895 	msg.xoffChar = 19;
1896 
1897 	/* Opening port */
1898 	if (reset_port == 1) {
1899 		msg._txOn = 1;
1900 		msg._txOff = 0;
1901 		msg.txFlush = 0;
1902 		msg.txBreak = 0;
1903 		msg.rxOn = 1;
1904 		msg.rxOff = 0;
1905 		msg.rxFlush = 1;
1906 		msg.rxForward = 0;
1907 		msg.returnStatus = 0;
1908 		msg.resetDataToggle = 0xff;
1909 		msg.enablePort = 1;
1910 		msg.disablePort = 0;
1911 	}
1912 	/* Closing port */
1913 	else if (reset_port == 2) {
1914 		msg._txOn = 0;
1915 		msg._txOff = 1;
1916 		msg.txFlush = 0;
1917 		msg.txBreak = 0;
1918 		msg.rxOn = 0;
1919 		msg.rxOff = 1;
1920 		msg.rxFlush = 1;
1921 		msg.rxForward = 0;
1922 		msg.returnStatus = 0;
1923 		msg.resetDataToggle = 0;
1924 		msg.enablePort = 0;
1925 		msg.disablePort = 1;
1926 	}
1927 	/* Sending intermediate configs */
1928 	else {
1929 		msg._txOn = (!p_priv->break_on);
1930 		msg._txOff = 0;
1931 		msg.txFlush = 0;
1932 		msg.txBreak = (p_priv->break_on);
1933 		msg.rxOn = 0;
1934 		msg.rxOff = 0;
1935 		msg.rxFlush = 0;
1936 		msg.rxForward = 0;
1937 		msg.returnStatus = 0;
1938 		msg.resetDataToggle = 0x0;
1939 		msg.enablePort = 0;
1940 		msg.disablePort = 0;
1941 	}
1942 
1943 	/* Do handshaking outputs */
1944 	msg.setRts = 0xff;
1945 	msg.rts = p_priv->rts_state;
1946 
1947 	msg.setDtr = 0xff;
1948 	msg.dtr = p_priv->dtr_state;
1949 
1950 	p_priv->resend_cont = 0;
1951 
1952 	/* if the device is a 49wg, we send control message on usb
1953 	   control EP 0 */
1954 
1955 	if (d_details->product_id == keyspan_usa49wg_product_id) {
1956 		dr = (void *)(s_priv->ctrl_buf);
1957 		dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT;
1958 		dr->bRequest = 0xB0;	/* 49wg control message */;
1959 		dr->wValue = 0;
1960 		dr->wIndex = 0;
1961 		dr->wLength = cpu_to_le16(sizeof(msg));
1962 
1963 		memcpy(s_priv->glocont_buf, &msg, sizeof(msg));
1964 
1965 		usb_fill_control_urb(this_urb, serial->dev,
1966 				usb_sndctrlpipe(serial->dev, 0),
1967 				(unsigned char *)dr, s_priv->glocont_buf,
1968 				sizeof(msg), usa49_glocont_callback, serial);
1969 
1970 	} else {
1971 		memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1972 
1973 		/* send the data out the device on control endpoint */
1974 		this_urb->transfer_buffer_length = sizeof(msg);
1975 	}
1976 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
1977 	if (err != 0)
1978 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1979 #if 0
1980 	else {
1981 		dev_dbg(&port->dev, "%s - usb_submit_urb(%d) OK %d bytes (end %d)\n", __func__,
1982 			outcont_urb, this_urb->transfer_buffer_length,
1983 			usb_pipeendpoint(this_urb->pipe));
1984 	}
1985 #endif
1986 
1987 	return 0;
1988 }
1989 
1990 static int keyspan_usa90_send_setup(struct usb_serial *serial,
1991 				    struct usb_serial_port *port,
1992 				    int reset_port)
1993 {
1994 	struct keyspan_usa90_portControlMessage	msg;
1995 	struct keyspan_serial_private 		*s_priv;
1996 	struct keyspan_port_private 		*p_priv;
1997 	const struct keyspan_device_details	*d_details;
1998 	struct urb				*this_urb;
1999 	int 					err;
2000 	u8						prescaler;
2001 
2002 	s_priv = usb_get_serial_data(serial);
2003 	p_priv = usb_get_serial_port_data(port);
2004 	d_details = s_priv->device_details;
2005 
2006 	/* only do something if we have a bulk out endpoint */
2007 	this_urb = p_priv->outcont_urb;
2008 	if (this_urb == NULL) {
2009 		dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
2010 		return -1;
2011 	}
2012 
2013 	/* Save reset port val for resend.
2014 	   Don't overwrite resend for open/close condition. */
2015 	if ((reset_port + 1) > p_priv->resend_cont)
2016 		p_priv->resend_cont = reset_port + 1;
2017 	if (this_urb->status == -EINPROGRESS) {
2018 		dev_dbg(&port->dev, "%s already writing\n", __func__);
2019 		mdelay(5);
2020 		return -1;
2021 	}
2022 
2023 	memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage));
2024 
2025 	/* Only set baud rate if it's changed */
2026 	if (p_priv->old_baud != p_priv->baud) {
2027 		p_priv->old_baud = p_priv->baud;
2028 		msg.setClocking = 0x01;
2029 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2030 						   &msg.baudHi, &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) {
2031 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2032 				__func__, p_priv->baud);
2033 			p_priv->baud = 9600;
2034 			d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2035 				&msg.baudHi, &msg.baudLo, &prescaler, 0);
2036 		}
2037 		msg.setRxMode = 1;
2038 		msg.setTxMode = 1;
2039 	}
2040 
2041 	/* modes must always be correctly specified */
2042 	if (p_priv->baud > 57600) {
2043 		msg.rxMode = RXMODE_DMA;
2044 		msg.txMode = TXMODE_DMA;
2045 	} else {
2046 		msg.rxMode = RXMODE_BYHAND;
2047 		msg.txMode = TXMODE_BYHAND;
2048 	}
2049 
2050 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2051 	switch (p_priv->cflag & CSIZE) {
2052 	case CS5:
2053 		msg.lcr |= USA_DATABITS_5;
2054 		break;
2055 	case CS6:
2056 		msg.lcr |= USA_DATABITS_6;
2057 		break;
2058 	case CS7:
2059 		msg.lcr |= USA_DATABITS_7;
2060 		break;
2061 	case CS8:
2062 		msg.lcr |= USA_DATABITS_8;
2063 		break;
2064 	}
2065 	if (p_priv->cflag & PARENB) {
2066 		/* note USA_PARITY_NONE == 0 */
2067 		msg.lcr |= (p_priv->cflag & PARODD) ?
2068 			USA_PARITY_ODD : USA_PARITY_EVEN;
2069 	}
2070 	if (p_priv->old_cflag != p_priv->cflag) {
2071 		p_priv->old_cflag = p_priv->cflag;
2072 		msg.setLcr = 0x01;
2073 	}
2074 
2075 	if (p_priv->flow_control == flow_cts)
2076 		msg.txFlowControl = TXFLOW_CTS;
2077 	msg.setTxFlowControl = 0x01;
2078 	msg.setRxFlowControl = 0x01;
2079 
2080 	msg.rxForwardingLength = 16;
2081 	msg.rxForwardingTimeout = 16;
2082 	msg.txAckSetting = 0;
2083 	msg.xonChar = 17;
2084 	msg.xoffChar = 19;
2085 
2086 	/* Opening port */
2087 	if (reset_port == 1) {
2088 		msg.portEnabled = 1;
2089 		msg.rxFlush = 1;
2090 		msg.txBreak = (p_priv->break_on);
2091 	}
2092 	/* Closing port */
2093 	else if (reset_port == 2)
2094 		msg.portEnabled = 0;
2095 	/* Sending intermediate configs */
2096 	else {
2097 		msg.portEnabled = 1;
2098 		msg.txBreak = (p_priv->break_on);
2099 	}
2100 
2101 	/* Do handshaking outputs */
2102 	msg.setRts = 0x01;
2103 	msg.rts = p_priv->rts_state;
2104 
2105 	msg.setDtr = 0x01;
2106 	msg.dtr = p_priv->dtr_state;
2107 
2108 	p_priv->resend_cont = 0;
2109 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2110 
2111 	/* send the data out the device on control endpoint */
2112 	this_urb->transfer_buffer_length = sizeof(msg);
2113 
2114 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2115 	if (err != 0)
2116 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2117 	return 0;
2118 }
2119 
2120 static int keyspan_usa67_send_setup(struct usb_serial *serial,
2121 				    struct usb_serial_port *port,
2122 				    int reset_port)
2123 {
2124 	struct keyspan_usa67_portControlMessage	msg;
2125 	struct keyspan_serial_private 		*s_priv;
2126 	struct keyspan_port_private 		*p_priv;
2127 	const struct keyspan_device_details	*d_details;
2128 	struct urb				*this_urb;
2129 	int 					err, device_port;
2130 
2131 	s_priv = usb_get_serial_data(serial);
2132 	p_priv = usb_get_serial_port_data(port);
2133 	d_details = s_priv->device_details;
2134 
2135 	this_urb = s_priv->glocont_urb;
2136 
2137 	/* Work out which port within the device is being setup */
2138 	device_port = port->port_number;
2139 
2140 	/* Make sure we have an urb then send the message */
2141 	if (this_urb == NULL) {
2142 		dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
2143 		return -1;
2144 	}
2145 
2146 	/* Save reset port val for resend.
2147 	   Don't overwrite resend for open/close condition. */
2148 	if ((reset_port + 1) > p_priv->resend_cont)
2149 		p_priv->resend_cont = reset_port + 1;
2150 	if (this_urb->status == -EINPROGRESS) {
2151 		/*  dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2152 		mdelay(5);
2153 		return -1;
2154 	}
2155 
2156 	memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
2157 
2158 	msg.port = device_port;
2159 
2160 	/* Only set baud rate if it's changed */
2161 	if (p_priv->old_baud != p_priv->baud) {
2162 		p_priv->old_baud = p_priv->baud;
2163 		msg.setClocking = 0xff;
2164 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2165 						   &msg.baudHi, &msg.baudLo, &msg.prescaler,
2166 						   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2167 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2168 				__func__, p_priv->baud);
2169 			msg.baudLo = 0;
2170 			msg.baudHi = 125;	/* Values for 9600 baud */
2171 			msg.prescaler = 10;
2172 		}
2173 		msg.setPrescaler = 0xff;
2174 	}
2175 
2176 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2177 	switch (p_priv->cflag & CSIZE) {
2178 	case CS5:
2179 		msg.lcr |= USA_DATABITS_5;
2180 		break;
2181 	case CS6:
2182 		msg.lcr |= USA_DATABITS_6;
2183 		break;
2184 	case CS7:
2185 		msg.lcr |= USA_DATABITS_7;
2186 		break;
2187 	case CS8:
2188 		msg.lcr |= USA_DATABITS_8;
2189 		break;
2190 	}
2191 	if (p_priv->cflag & PARENB) {
2192 		/* note USA_PARITY_NONE == 0 */
2193 		msg.lcr |= (p_priv->cflag & PARODD) ?
2194 					USA_PARITY_ODD : USA_PARITY_EVEN;
2195 	}
2196 	msg.setLcr = 0xff;
2197 
2198 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2199 	msg.xonFlowControl = 0;
2200 	msg.setFlowControl = 0xff;
2201 	msg.forwardingLength = 16;
2202 	msg.xonChar = 17;
2203 	msg.xoffChar = 19;
2204 
2205 	if (reset_port == 1) {
2206 		/* Opening port */
2207 		msg._txOn = 1;
2208 		msg._txOff = 0;
2209 		msg.txFlush = 0;
2210 		msg.txBreak = 0;
2211 		msg.rxOn = 1;
2212 		msg.rxOff = 0;
2213 		msg.rxFlush = 1;
2214 		msg.rxForward = 0;
2215 		msg.returnStatus = 0;
2216 		msg.resetDataToggle = 0xff;
2217 	} else if (reset_port == 2) {
2218 		/* Closing port */
2219 		msg._txOn = 0;
2220 		msg._txOff = 1;
2221 		msg.txFlush = 0;
2222 		msg.txBreak = 0;
2223 		msg.rxOn = 0;
2224 		msg.rxOff = 1;
2225 		msg.rxFlush = 1;
2226 		msg.rxForward = 0;
2227 		msg.returnStatus = 0;
2228 		msg.resetDataToggle = 0;
2229 	} else {
2230 		/* Sending intermediate configs */
2231 		msg._txOn = (!p_priv->break_on);
2232 		msg._txOff = 0;
2233 		msg.txFlush = 0;
2234 		msg.txBreak = (p_priv->break_on);
2235 		msg.rxOn = 0;
2236 		msg.rxOff = 0;
2237 		msg.rxFlush = 0;
2238 		msg.rxForward = 0;
2239 		msg.returnStatus = 0;
2240 		msg.resetDataToggle = 0x0;
2241 	}
2242 
2243 	/* Do handshaking outputs */
2244 	msg.setTxTriState_setRts = 0xff;
2245 	msg.txTriState_rts = p_priv->rts_state;
2246 
2247 	msg.setHskoa_setDtr = 0xff;
2248 	msg.hskoa_dtr = p_priv->dtr_state;
2249 
2250 	p_priv->resend_cont = 0;
2251 
2252 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2253 
2254 	/* send the data out the device on control endpoint */
2255 	this_urb->transfer_buffer_length = sizeof(msg);
2256 
2257 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2258 	if (err != 0)
2259 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2260 	return 0;
2261 }
2262 
2263 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2264 {
2265 	struct usb_serial *serial = port->serial;
2266 	struct keyspan_serial_private *s_priv;
2267 	const struct keyspan_device_details *d_details;
2268 
2269 	s_priv = usb_get_serial_data(serial);
2270 	d_details = s_priv->device_details;
2271 
2272 	switch (d_details->msg_format) {
2273 	case msg_usa26:
2274 		keyspan_usa26_send_setup(serial, port, reset_port);
2275 		break;
2276 	case msg_usa28:
2277 		keyspan_usa28_send_setup(serial, port, reset_port);
2278 		break;
2279 	case msg_usa49:
2280 		keyspan_usa49_send_setup(serial, port, reset_port);
2281 		break;
2282 	case msg_usa90:
2283 		keyspan_usa90_send_setup(serial, port, reset_port);
2284 		break;
2285 	case msg_usa67:
2286 		keyspan_usa67_send_setup(serial, port, reset_port);
2287 		break;
2288 	}
2289 }
2290 
2291 
2292 /* Gets called by the "real" driver (ie once firmware is loaded
2293    and renumeration has taken place. */
2294 static int keyspan_startup(struct usb_serial *serial)
2295 {
2296 	int				i, err;
2297 	struct keyspan_serial_private 	*s_priv;
2298 	const struct keyspan_device_details	*d_details;
2299 
2300 	for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2301 		if (d_details->product_id ==
2302 				le16_to_cpu(serial->dev->descriptor.idProduct))
2303 			break;
2304 	if (d_details == NULL) {
2305 		dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2306 		    __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2307 		return -ENODEV;
2308 	}
2309 
2310 	/* Setup private data for serial driver */
2311 	s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
2312 	if (!s_priv)
2313 		return -ENOMEM;
2314 
2315 	s_priv->instat_buf = kzalloc(INSTAT_BUFLEN, GFP_KERNEL);
2316 	if (!s_priv->instat_buf)
2317 		goto err_instat_buf;
2318 
2319 	s_priv->indat_buf = kzalloc(INDAT49W_BUFLEN, GFP_KERNEL);
2320 	if (!s_priv->indat_buf)
2321 		goto err_indat_buf;
2322 
2323 	s_priv->glocont_buf = kzalloc(GLOCONT_BUFLEN, GFP_KERNEL);
2324 	if (!s_priv->glocont_buf)
2325 		goto err_glocont_buf;
2326 
2327 	s_priv->ctrl_buf = kzalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
2328 	if (!s_priv->ctrl_buf)
2329 		goto err_ctrl_buf;
2330 
2331 	s_priv->device_details = d_details;
2332 	usb_set_serial_data(serial, s_priv);
2333 
2334 	keyspan_setup_urbs(serial);
2335 
2336 	if (s_priv->instat_urb != NULL) {
2337 		err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2338 		if (err != 0)
2339 			dev_dbg(&serial->dev->dev, "%s - submit instat urb failed %d\n", __func__, err);
2340 	}
2341 	if (s_priv->indat_urb != NULL) {
2342 		err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2343 		if (err != 0)
2344 			dev_dbg(&serial->dev->dev, "%s - submit indat urb failed %d\n", __func__, err);
2345 	}
2346 
2347 	return 0;
2348 
2349 err_ctrl_buf:
2350 	kfree(s_priv->glocont_buf);
2351 err_glocont_buf:
2352 	kfree(s_priv->indat_buf);
2353 err_indat_buf:
2354 	kfree(s_priv->instat_buf);
2355 err_instat_buf:
2356 	kfree(s_priv);
2357 
2358 	return -ENOMEM;
2359 }
2360 
2361 static void keyspan_disconnect(struct usb_serial *serial)
2362 {
2363 	struct keyspan_serial_private *s_priv;
2364 
2365 	s_priv = usb_get_serial_data(serial);
2366 
2367 	stop_urb(s_priv->instat_urb);
2368 	stop_urb(s_priv->glocont_urb);
2369 	stop_urb(s_priv->indat_urb);
2370 }
2371 
2372 static void keyspan_release(struct usb_serial *serial)
2373 {
2374 	struct keyspan_serial_private *s_priv;
2375 
2376 	s_priv = usb_get_serial_data(serial);
2377 
2378 	usb_free_urb(s_priv->instat_urb);
2379 	usb_free_urb(s_priv->indat_urb);
2380 	usb_free_urb(s_priv->glocont_urb);
2381 
2382 	kfree(s_priv->ctrl_buf);
2383 	kfree(s_priv->glocont_buf);
2384 	kfree(s_priv->indat_buf);
2385 	kfree(s_priv->instat_buf);
2386 
2387 	kfree(s_priv);
2388 }
2389 
2390 static int keyspan_port_probe(struct usb_serial_port *port)
2391 {
2392 	struct usb_serial *serial = port->serial;
2393 	struct keyspan_serial_private *s_priv;
2394 	struct keyspan_port_private *p_priv;
2395 	const struct keyspan_device_details *d_details;
2396 	struct callbacks *cback;
2397 	int endp;
2398 	int port_num;
2399 	int i;
2400 
2401 	s_priv = usb_get_serial_data(serial);
2402 	d_details = s_priv->device_details;
2403 
2404 	p_priv = kzalloc(sizeof(*p_priv), GFP_KERNEL);
2405 	if (!p_priv)
2406 		return -ENOMEM;
2407 
2408 	for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) {
2409 		p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL);
2410 		if (!p_priv->in_buffer[i])
2411 			goto err_in_buffer;
2412 	}
2413 
2414 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) {
2415 		p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL);
2416 		if (!p_priv->out_buffer[i])
2417 			goto err_out_buffer;
2418 	}
2419 
2420 	p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL);
2421 	if (!p_priv->inack_buffer)
2422 		goto err_inack_buffer;
2423 
2424 	p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL);
2425 	if (!p_priv->outcont_buffer)
2426 		goto err_outcont_buffer;
2427 
2428 	p_priv->device_details = d_details;
2429 
2430 	/* Setup values for the various callback routines */
2431 	cback = &keyspan_callbacks[d_details->msg_format];
2432 
2433 	port_num = port->port_number;
2434 
2435 	/* Do indat endpoints first, once for each flip */
2436 	endp = d_details->indat_endpoints[port_num];
2437 	for (i = 0; i <= d_details->indat_endp_flip; ++i, ++endp) {
2438 		p_priv->in_urbs[i] = keyspan_setup_urb(serial, endp,
2439 						USB_DIR_IN, port,
2440 						p_priv->in_buffer[i],
2441 						IN_BUFLEN,
2442 						cback->indat_callback);
2443 	}
2444 	/* outdat endpoints also have flip */
2445 	endp = d_details->outdat_endpoints[port_num];
2446 	for (i = 0; i <= d_details->outdat_endp_flip; ++i, ++endp) {
2447 		p_priv->out_urbs[i] = keyspan_setup_urb(serial, endp,
2448 						USB_DIR_OUT, port,
2449 						p_priv->out_buffer[i],
2450 						OUT_BUFLEN,
2451 						cback->outdat_callback);
2452 	}
2453 	/* inack endpoint */
2454 	p_priv->inack_urb = keyspan_setup_urb(serial,
2455 					d_details->inack_endpoints[port_num],
2456 					USB_DIR_IN, port,
2457 					p_priv->inack_buffer,
2458 					INACK_BUFLEN,
2459 					cback->inack_callback);
2460 	/* outcont endpoint */
2461 	p_priv->outcont_urb = keyspan_setup_urb(serial,
2462 					d_details->outcont_endpoints[port_num],
2463 					USB_DIR_OUT, port,
2464 					p_priv->outcont_buffer,
2465 					OUTCONT_BUFLEN,
2466 					 cback->outcont_callback);
2467 
2468 	usb_set_serial_port_data(port, p_priv);
2469 
2470 	return 0;
2471 
2472 err_outcont_buffer:
2473 	kfree(p_priv->inack_buffer);
2474 err_inack_buffer:
2475 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2476 		kfree(p_priv->out_buffer[i]);
2477 err_out_buffer:
2478 	for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2479 		kfree(p_priv->in_buffer[i]);
2480 err_in_buffer:
2481 	kfree(p_priv);
2482 
2483 	return -ENOMEM;
2484 }
2485 
2486 static int keyspan_port_remove(struct usb_serial_port *port)
2487 {
2488 	struct keyspan_port_private *p_priv;
2489 	int i;
2490 
2491 	p_priv = usb_get_serial_port_data(port);
2492 
2493 	stop_urb(p_priv->inack_urb);
2494 	stop_urb(p_priv->outcont_urb);
2495 	for (i = 0; i < 2; i++) {
2496 		stop_urb(p_priv->in_urbs[i]);
2497 		stop_urb(p_priv->out_urbs[i]);
2498 	}
2499 
2500 	usb_free_urb(p_priv->inack_urb);
2501 	usb_free_urb(p_priv->outcont_urb);
2502 	for (i = 0; i < 2; i++) {
2503 		usb_free_urb(p_priv->in_urbs[i]);
2504 		usb_free_urb(p_priv->out_urbs[i]);
2505 	}
2506 
2507 	kfree(p_priv->outcont_buffer);
2508 	kfree(p_priv->inack_buffer);
2509 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2510 		kfree(p_priv->out_buffer[i]);
2511 	for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2512 		kfree(p_priv->in_buffer[i]);
2513 
2514 	kfree(p_priv);
2515 
2516 	return 0;
2517 }
2518 
2519 MODULE_AUTHOR(DRIVER_AUTHOR);
2520 MODULE_DESCRIPTION(DRIVER_DESC);
2521 MODULE_LICENSE("GPL");
2522 
2523 MODULE_FIRMWARE("keyspan/usa28.fw");
2524 MODULE_FIRMWARE("keyspan/usa28x.fw");
2525 MODULE_FIRMWARE("keyspan/usa28xa.fw");
2526 MODULE_FIRMWARE("keyspan/usa28xb.fw");
2527 MODULE_FIRMWARE("keyspan/usa19.fw");
2528 MODULE_FIRMWARE("keyspan/usa19qi.fw");
2529 MODULE_FIRMWARE("keyspan/mpr.fw");
2530 MODULE_FIRMWARE("keyspan/usa19qw.fw");
2531 MODULE_FIRMWARE("keyspan/usa18x.fw");
2532 MODULE_FIRMWARE("keyspan/usa19w.fw");
2533 MODULE_FIRMWARE("keyspan/usa49w.fw");
2534 MODULE_FIRMWARE("keyspan/usa49wlc.fw");
2535