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