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