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