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