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