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