xref: /linux/drivers/usb/serial/keyspan.c (revision ab8336a7e414f018430aa1af3a46944032f7ff96)
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 int 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 	/* FIXME: return errors */
615 	keyspan_send_setup(port, 0);
616 
617 	return 0;
618 }
619 
620 
621 static void keyspan_set_termios(struct tty_struct *tty,
622 				struct usb_serial_port *port,
623 				const struct ktermios *old_termios)
624 {
625 	int				baud_rate, device_port;
626 	struct keyspan_port_private 	*p_priv;
627 	const struct keyspan_device_details	*d_details;
628 	unsigned int 			cflag;
629 
630 	p_priv = usb_get_serial_port_data(port);
631 	d_details = p_priv->device_details;
632 	cflag = tty->termios.c_cflag;
633 	device_port = port->port_number;
634 
635 	/* Baud rate calculation takes baud rate as an integer
636 	   so other rates can be generated if desired. */
637 	baud_rate = tty_get_baud_rate(tty);
638 	/* If no match or invalid, don't change */
639 	if (d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
640 				NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
641 		/* FIXME - more to do here to ensure rate changes cleanly */
642 		/* FIXME - calculate exact rate from divisor ? */
643 		p_priv->baud = baud_rate;
644 	} else
645 		baud_rate = tty_termios_baud_rate(old_termios);
646 
647 	tty_encode_baud_rate(tty, baud_rate, baud_rate);
648 	/* set CTS/RTS handshake etc. */
649 	p_priv->cflag = cflag;
650 	p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
651 
652 	/* Mark/Space not supported */
653 	tty->termios.c_cflag &= ~CMSPAR;
654 
655 	keyspan_send_setup(port, 0);
656 }
657 
658 static int keyspan_tiocmget(struct tty_struct *tty)
659 {
660 	struct usb_serial_port *port = tty->driver_data;
661 	struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
662 	unsigned int			value;
663 
664 	value = ((p_priv->rts_state) ? TIOCM_RTS : 0) |
665 		((p_priv->dtr_state) ? TIOCM_DTR : 0) |
666 		((p_priv->cts_state) ? TIOCM_CTS : 0) |
667 		((p_priv->dsr_state) ? TIOCM_DSR : 0) |
668 		((p_priv->dcd_state) ? TIOCM_CAR : 0) |
669 		((p_priv->ri_state) ? TIOCM_RNG : 0);
670 
671 	return value;
672 }
673 
674 static int keyspan_tiocmset(struct tty_struct *tty,
675 			    unsigned int set, unsigned int clear)
676 {
677 	struct usb_serial_port *port = tty->driver_data;
678 	struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
679 
680 	if (set & TIOCM_RTS)
681 		p_priv->rts_state = 1;
682 	if (set & TIOCM_DTR)
683 		p_priv->dtr_state = 1;
684 	if (clear & TIOCM_RTS)
685 		p_priv->rts_state = 0;
686 	if (clear & TIOCM_DTR)
687 		p_priv->dtr_state = 0;
688 	keyspan_send_setup(port, 0);
689 	return 0;
690 }
691 
692 /* Write function is similar for the four protocols used
693    with only a minor change for usa90 (usa19hs) required */
694 static int keyspan_write(struct tty_struct *tty,
695 	struct usb_serial_port *port, const unsigned char *buf, int count)
696 {
697 	struct keyspan_port_private 	*p_priv;
698 	const struct keyspan_device_details	*d_details;
699 	int				flip;
700 	int 				left, todo;
701 	struct urb			*this_urb;
702 	int 				err, maxDataLen, dataOffset;
703 
704 	p_priv = usb_get_serial_port_data(port);
705 	d_details = p_priv->device_details;
706 
707 	if (d_details->msg_format == msg_usa90) {
708 		maxDataLen = 64;
709 		dataOffset = 0;
710 	} else {
711 		maxDataLen = 63;
712 		dataOffset = 1;
713 	}
714 
715 	dev_dbg(&port->dev, "%s - %d chars, flip=%d\n", __func__, count,
716 		p_priv->out_flip);
717 
718 	for (left = count; left > 0; left -= todo) {
719 		todo = left;
720 		if (todo > maxDataLen)
721 			todo = maxDataLen;
722 
723 		flip = p_priv->out_flip;
724 
725 		/* Check we have a valid urb/endpoint before we use it... */
726 		this_urb = p_priv->out_urbs[flip];
727 		if (this_urb == NULL) {
728 			/* no bulk out, so return 0 bytes written */
729 			dev_dbg(&port->dev, "%s - no output urb :(\n", __func__);
730 			return count;
731 		}
732 
733 		dev_dbg(&port->dev, "%s - endpoint %x flip %d\n",
734 			__func__, usb_pipeendpoint(this_urb->pipe), flip);
735 
736 		if (this_urb->status == -EINPROGRESS) {
737 			if (time_before(jiffies,
738 					p_priv->tx_start_time[flip] + 10 * HZ))
739 				break;
740 			usb_unlink_urb(this_urb);
741 			break;
742 		}
743 
744 		/* First byte in buffer is "last flag" (except for usa19hx)
745 		   - unused so for now so set to zero */
746 		((char *)this_urb->transfer_buffer)[0] = 0;
747 
748 		memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
749 		buf += todo;
750 
751 		/* send the data out the bulk port */
752 		this_urb->transfer_buffer_length = todo + dataOffset;
753 
754 		err = usb_submit_urb(this_urb, GFP_ATOMIC);
755 		if (err != 0)
756 			dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed (%d)\n", err);
757 		p_priv->tx_start_time[flip] = jiffies;
758 
759 		/* Flip for next time if usa26 or usa28 interface
760 		   (not used on usa49) */
761 		p_priv->out_flip = (flip + 1) & d_details->outdat_endp_flip;
762 	}
763 
764 	return count - left;
765 }
766 
767 static void	usa26_indat_callback(struct urb *urb)
768 {
769 	int			i, err;
770 	int			endpoint;
771 	struct usb_serial_port	*port;
772 	unsigned char 		*data = urb->transfer_buffer;
773 	int status = urb->status;
774 
775 	endpoint = usb_pipeendpoint(urb->pipe);
776 
777 	if (status) {
778 		dev_dbg(&urb->dev->dev, "%s - nonzero status %d on endpoint %x\n",
779 			__func__, status, endpoint);
780 		return;
781 	}
782 
783 	port =  urb->context;
784 	if (urb->actual_length) {
785 		/* 0x80 bit is error flag */
786 		if ((data[0] & 0x80) == 0) {
787 			/* no errors on individual bytes, only
788 			   possible overrun err */
789 			if (data[0] & RXERROR_OVERRUN) {
790 				tty_insert_flip_char(&port->port, 0,
791 								TTY_OVERRUN);
792 			}
793 			for (i = 1; i < urb->actual_length ; ++i)
794 				tty_insert_flip_char(&port->port, data[i],
795 								TTY_NORMAL);
796 		} else {
797 			/* some bytes had errors, every byte has status */
798 			dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
799 			for (i = 0; i + 1 < urb->actual_length; i += 2) {
800 				int stat = data[i];
801 				int flag = TTY_NORMAL;
802 
803 				if (stat & RXERROR_OVERRUN) {
804 					tty_insert_flip_char(&port->port, 0,
805 								TTY_OVERRUN);
806 				}
807 				/* XXX should handle break (0x10) */
808 				if (stat & RXERROR_PARITY)
809 					flag = TTY_PARITY;
810 				else if (stat & RXERROR_FRAMING)
811 					flag = TTY_FRAME;
812 
813 				tty_insert_flip_char(&port->port, data[i+1],
814 						flag);
815 			}
816 		}
817 		tty_flip_buffer_push(&port->port);
818 	}
819 
820 	/* Resubmit urb so we continue receiving */
821 	err = usb_submit_urb(urb, GFP_ATOMIC);
822 	if (err != 0)
823 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
824 }
825 
826 /* Outdat handling is common for all devices */
827 static void	usa2x_outdat_callback(struct urb *urb)
828 {
829 	struct usb_serial_port *port;
830 	struct keyspan_port_private *p_priv;
831 
832 	port =  urb->context;
833 	p_priv = usb_get_serial_port_data(port);
834 	dev_dbg(&port->dev, "%s - urb %d\n", __func__, urb == p_priv->out_urbs[1]);
835 
836 	usb_serial_port_softint(port);
837 }
838 
839 static void	usa26_inack_callback(struct urb *urb)
840 {
841 }
842 
843 static void	usa26_outcont_callback(struct urb *urb)
844 {
845 	struct usb_serial_port *port;
846 	struct keyspan_port_private *p_priv;
847 
848 	port =  urb->context;
849 	p_priv = usb_get_serial_port_data(port);
850 
851 	if (p_priv->resend_cont) {
852 		dev_dbg(&port->dev, "%s - sending setup\n", __func__);
853 		keyspan_usa26_send_setup(port->serial, port,
854 						p_priv->resend_cont - 1);
855 	}
856 }
857 
858 static void	usa26_instat_callback(struct urb *urb)
859 {
860 	unsigned char 				*data = urb->transfer_buffer;
861 	struct keyspan_usa26_portStatusMessage	*msg;
862 	struct usb_serial			*serial;
863 	struct usb_serial_port			*port;
864 	struct keyspan_port_private	 	*p_priv;
865 	int old_dcd_state, err;
866 	int status = urb->status;
867 
868 	serial =  urb->context;
869 
870 	if (status) {
871 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %d\n",
872 				__func__, status);
873 		return;
874 	}
875 	if (urb->actual_length != 9) {
876 		dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
877 		goto exit;
878 	}
879 
880 	msg = (struct keyspan_usa26_portStatusMessage *)data;
881 
882 	/* Check port number from message and retrieve private data */
883 	if (msg->port >= serial->num_ports) {
884 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
885 		goto exit;
886 	}
887 	port = serial->port[msg->port];
888 	p_priv = usb_get_serial_port_data(port);
889 	if (!p_priv)
890 		goto resubmit;
891 
892 	/* Update handshaking pin state information */
893 	old_dcd_state = p_priv->dcd_state;
894 	p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
895 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
896 	p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
897 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
898 
899 	if (old_dcd_state != p_priv->dcd_state)
900 		tty_port_tty_hangup(&port->port, true);
901 resubmit:
902 	/* Resubmit urb so we continue receiving */
903 	err = usb_submit_urb(urb, GFP_ATOMIC);
904 	if (err != 0)
905 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
906 exit: ;
907 }
908 
909 static void	usa26_glocont_callback(struct urb *urb)
910 {
911 }
912 
913 
914 static void usa28_indat_callback(struct urb *urb)
915 {
916 	int                     err;
917 	struct usb_serial_port  *port;
918 	unsigned char           *data;
919 	struct keyspan_port_private             *p_priv;
920 	int status = urb->status;
921 
922 	port =  urb->context;
923 	p_priv = usb_get_serial_port_data(port);
924 
925 	if (urb != p_priv->in_urbs[p_priv->in_flip])
926 		return;
927 
928 	do {
929 		if (status) {
930 			dev_dbg(&urb->dev->dev, "%s - nonzero status %d on endpoint %x\n",
931 				__func__, status, usb_pipeendpoint(urb->pipe));
932 			return;
933 		}
934 
935 		port =  urb->context;
936 		p_priv = usb_get_serial_port_data(port);
937 		data = urb->transfer_buffer;
938 
939 		if (urb->actual_length) {
940 			tty_insert_flip_string(&port->port, data,
941 					urb->actual_length);
942 			tty_flip_buffer_push(&port->port);
943 		}
944 
945 		/* Resubmit urb so we continue receiving */
946 		err = usb_submit_urb(urb, GFP_ATOMIC);
947 		if (err != 0)
948 			dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n",
949 							__func__, err);
950 		p_priv->in_flip ^= 1;
951 
952 		urb = p_priv->in_urbs[p_priv->in_flip];
953 	} while (urb->status != -EINPROGRESS);
954 }
955 
956 static void	usa28_inack_callback(struct urb *urb)
957 {
958 }
959 
960 static void	usa28_outcont_callback(struct urb *urb)
961 {
962 	struct usb_serial_port *port;
963 	struct keyspan_port_private *p_priv;
964 
965 	port =  urb->context;
966 	p_priv = usb_get_serial_port_data(port);
967 
968 	if (p_priv->resend_cont) {
969 		dev_dbg(&port->dev, "%s - sending setup\n", __func__);
970 		keyspan_usa28_send_setup(port->serial, port,
971 						p_priv->resend_cont - 1);
972 	}
973 }
974 
975 static void	usa28_instat_callback(struct urb *urb)
976 {
977 	int					err;
978 	unsigned char 				*data = urb->transfer_buffer;
979 	struct keyspan_usa28_portStatusMessage	*msg;
980 	struct usb_serial			*serial;
981 	struct usb_serial_port			*port;
982 	struct keyspan_port_private	 	*p_priv;
983 	int old_dcd_state;
984 	int status = urb->status;
985 
986 	serial =  urb->context;
987 
988 	if (status) {
989 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %d\n",
990 				__func__, status);
991 		return;
992 	}
993 
994 	if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) {
995 		dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
996 		goto exit;
997 	}
998 
999 	msg = (struct keyspan_usa28_portStatusMessage *)data;
1000 
1001 	/* Check port number from message and retrieve private data */
1002 	if (msg->port >= serial->num_ports) {
1003 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
1004 		goto exit;
1005 	}
1006 	port = serial->port[msg->port];
1007 	p_priv = usb_get_serial_port_data(port);
1008 	if (!p_priv)
1009 		goto resubmit;
1010 
1011 	/* Update handshaking pin state information */
1012 	old_dcd_state = p_priv->dcd_state;
1013 	p_priv->cts_state = ((msg->cts) ? 1 : 0);
1014 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
1015 	p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
1016 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
1017 
1018 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
1019 		tty_port_tty_hangup(&port->port, true);
1020 resubmit:
1021 		/* Resubmit urb so we continue receiving */
1022 	err = usb_submit_urb(urb, GFP_ATOMIC);
1023 	if (err != 0)
1024 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1025 exit: ;
1026 }
1027 
1028 static void	usa28_glocont_callback(struct urb *urb)
1029 {
1030 }
1031 
1032 
1033 static void	usa49_glocont_callback(struct urb *urb)
1034 {
1035 	struct usb_serial *serial;
1036 	struct usb_serial_port *port;
1037 	struct keyspan_port_private *p_priv;
1038 	int i;
1039 
1040 	serial =  urb->context;
1041 	for (i = 0; i < serial->num_ports; ++i) {
1042 		port = serial->port[i];
1043 		p_priv = usb_get_serial_port_data(port);
1044 		if (!p_priv)
1045 			continue;
1046 
1047 		if (p_priv->resend_cont) {
1048 			dev_dbg(&port->dev, "%s - sending setup\n", __func__);
1049 			keyspan_usa49_send_setup(serial, port,
1050 						p_priv->resend_cont - 1);
1051 			break;
1052 		}
1053 	}
1054 }
1055 
1056 	/* This is actually called glostat in the Keyspan
1057 	   doco */
1058 static void	usa49_instat_callback(struct urb *urb)
1059 {
1060 	int					err;
1061 	unsigned char 				*data = urb->transfer_buffer;
1062 	struct keyspan_usa49_portStatusMessage	*msg;
1063 	struct usb_serial			*serial;
1064 	struct usb_serial_port			*port;
1065 	struct keyspan_port_private	 	*p_priv;
1066 	int old_dcd_state;
1067 	int status = urb->status;
1068 
1069 	serial =  urb->context;
1070 
1071 	if (status) {
1072 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %d\n",
1073 				__func__, status);
1074 		return;
1075 	}
1076 
1077 	if (urb->actual_length !=
1078 			sizeof(struct keyspan_usa49_portStatusMessage)) {
1079 		dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
1080 		goto exit;
1081 	}
1082 
1083 	msg = (struct keyspan_usa49_portStatusMessage *)data;
1084 
1085 	/* Check port number from message and retrieve private data */
1086 	if (msg->portNumber >= serial->num_ports) {
1087 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
1088 			__func__, msg->portNumber);
1089 		goto exit;
1090 	}
1091 	port = serial->port[msg->portNumber];
1092 	p_priv = usb_get_serial_port_data(port);
1093 	if (!p_priv)
1094 		goto resubmit;
1095 
1096 	/* Update handshaking pin state information */
1097 	old_dcd_state = p_priv->dcd_state;
1098 	p_priv->cts_state = ((msg->cts) ? 1 : 0);
1099 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
1100 	p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
1101 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
1102 
1103 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
1104 		tty_port_tty_hangup(&port->port, true);
1105 resubmit:
1106 	/* Resubmit urb so we continue receiving */
1107 	err = usb_submit_urb(urb, GFP_ATOMIC);
1108 	if (err != 0)
1109 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1110 exit:	;
1111 }
1112 
1113 static void	usa49_inack_callback(struct urb *urb)
1114 {
1115 }
1116 
1117 static void	usa49_indat_callback(struct urb *urb)
1118 {
1119 	int			i, err;
1120 	int			endpoint;
1121 	struct usb_serial_port	*port;
1122 	unsigned char 		*data = urb->transfer_buffer;
1123 	int status = urb->status;
1124 
1125 	endpoint = usb_pipeendpoint(urb->pipe);
1126 
1127 	if (status) {
1128 		dev_dbg(&urb->dev->dev, "%s - nonzero status %d on endpoint %x\n",
1129 			__func__, status, endpoint);
1130 		return;
1131 	}
1132 
1133 	port =  urb->context;
1134 	if (urb->actual_length) {
1135 		/* 0x80 bit is error flag */
1136 		if ((data[0] & 0x80) == 0) {
1137 			/* no error on any byte */
1138 			tty_insert_flip_string(&port->port, data + 1,
1139 						urb->actual_length - 1);
1140 		} else {
1141 			/* some bytes had errors, every byte has status */
1142 			for (i = 0; i + 1 < urb->actual_length; i += 2) {
1143 				int stat = data[i];
1144 				int flag = TTY_NORMAL;
1145 
1146 				if (stat & RXERROR_OVERRUN) {
1147 					tty_insert_flip_char(&port->port, 0,
1148 								TTY_OVERRUN);
1149 				}
1150 				/* XXX should handle break (0x10) */
1151 				if (stat & RXERROR_PARITY)
1152 					flag = TTY_PARITY;
1153 				else if (stat & RXERROR_FRAMING)
1154 					flag = TTY_FRAME;
1155 
1156 				tty_insert_flip_char(&port->port, data[i+1],
1157 						flag);
1158 			}
1159 		}
1160 		tty_flip_buffer_push(&port->port);
1161 	}
1162 
1163 	/* Resubmit urb so we continue receiving */
1164 	err = usb_submit_urb(urb, GFP_ATOMIC);
1165 	if (err != 0)
1166 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1167 }
1168 
1169 static void usa49wg_indat_callback(struct urb *urb)
1170 {
1171 	int			i, len, x, err;
1172 	struct usb_serial	*serial;
1173 	struct usb_serial_port	*port;
1174 	unsigned char 		*data = urb->transfer_buffer;
1175 	int status = urb->status;
1176 
1177 	serial = urb->context;
1178 
1179 	if (status) {
1180 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %d\n",
1181 				__func__, status);
1182 		return;
1183 	}
1184 
1185 	/* inbound data is in the form P#, len, status, data */
1186 	i = 0;
1187 	len = 0;
1188 
1189 	while (i < urb->actual_length) {
1190 		if (urb->actual_length - i < 3) {
1191 			dev_warn_ratelimited(&urb->dev->dev, "malformed indat packet\n");
1192 			break;
1193 		}
1194 
1195 		/* Check port number from message */
1196 		if (data[i] >= serial->num_ports) {
1197 			dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
1198 				__func__, data[i]);
1199 			return;
1200 		}
1201 		port = serial->port[data[i++]];
1202 		len = data[i++];
1203 
1204 		/* 0x80 bit is error flag */
1205 		if ((data[i] & 0x80) == 0) {
1206 			/* no error on any byte */
1207 			i++;
1208 			for (x = 1; x < len && i < urb->actual_length; ++x)
1209 				tty_insert_flip_char(&port->port,
1210 						data[i++], 0);
1211 		} else {
1212 			/*
1213 			 * some bytes had errors, every byte has status
1214 			 */
1215 			for (x = 0; x + 1 < len &&
1216 				    i + 1 < urb->actual_length; x += 2) {
1217 				int stat = data[i];
1218 				int flag = TTY_NORMAL;
1219 
1220 				if (stat & RXERROR_OVERRUN) {
1221 					tty_insert_flip_char(&port->port, 0,
1222 								TTY_OVERRUN);
1223 				}
1224 				/* XXX should handle break (0x10) */
1225 				if (stat & RXERROR_PARITY)
1226 					flag = TTY_PARITY;
1227 				else if (stat & RXERROR_FRAMING)
1228 					flag = TTY_FRAME;
1229 
1230 				tty_insert_flip_char(&port->port, data[i+1],
1231 						     flag);
1232 				i += 2;
1233 			}
1234 		}
1235 		tty_flip_buffer_push(&port->port);
1236 	}
1237 
1238 	/* Resubmit urb so we continue receiving */
1239 	err = usb_submit_urb(urb, GFP_ATOMIC);
1240 	if (err != 0)
1241 		dev_dbg(&urb->dev->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1242 }
1243 
1244 /* not used, usa-49 doesn't have per-port control endpoints */
1245 static void usa49_outcont_callback(struct urb *urb)
1246 {
1247 }
1248 
1249 static void usa90_indat_callback(struct urb *urb)
1250 {
1251 	int			i, err;
1252 	int			endpoint;
1253 	struct usb_serial_port	*port;
1254 	struct keyspan_port_private	 	*p_priv;
1255 	unsigned char 		*data = urb->transfer_buffer;
1256 	int status = urb->status;
1257 
1258 	endpoint = usb_pipeendpoint(urb->pipe);
1259 
1260 	if (status) {
1261 		dev_dbg(&urb->dev->dev, "%s - nonzero status %d on endpoint %x\n",
1262 			__func__, status, endpoint);
1263 		return;
1264 	}
1265 
1266 	port =  urb->context;
1267 	p_priv = usb_get_serial_port_data(port);
1268 
1269 	if (urb->actual_length) {
1270 		/* if current mode is DMA, looks like usa28 format
1271 		   otherwise looks like usa26 data format */
1272 
1273 		if (p_priv->baud > 57600)
1274 			tty_insert_flip_string(&port->port, data,
1275 					urb->actual_length);
1276 		else {
1277 			/* 0x80 bit is error flag */
1278 			if ((data[0] & 0x80) == 0) {
1279 				/* no errors on individual bytes, only
1280 				   possible overrun err*/
1281 				if (data[0] & RXERROR_OVERRUN) {
1282 					tty_insert_flip_char(&port->port, 0,
1283 								TTY_OVERRUN);
1284 				}
1285 				for (i = 1; i < urb->actual_length ; ++i)
1286 					tty_insert_flip_char(&port->port,
1287 							data[i], TTY_NORMAL);
1288 			}  else {
1289 			/* some bytes had errors, every byte has status */
1290 				dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
1291 				for (i = 0; i + 1 < urb->actual_length; i += 2) {
1292 					int stat = data[i];
1293 					int flag = TTY_NORMAL;
1294 
1295 					if (stat & RXERROR_OVERRUN) {
1296 						tty_insert_flip_char(
1297 								&port->port, 0,
1298 								TTY_OVERRUN);
1299 					}
1300 					/* XXX should handle break (0x10) */
1301 					if (stat & RXERROR_PARITY)
1302 						flag = TTY_PARITY;
1303 					else if (stat & RXERROR_FRAMING)
1304 						flag = TTY_FRAME;
1305 
1306 					tty_insert_flip_char(&port->port,
1307 							data[i+1], flag);
1308 				}
1309 			}
1310 		}
1311 		tty_flip_buffer_push(&port->port);
1312 	}
1313 
1314 	/* Resubmit urb so we continue receiving */
1315 	err = usb_submit_urb(urb, GFP_ATOMIC);
1316 	if (err != 0)
1317 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1318 }
1319 
1320 
1321 static void	usa90_instat_callback(struct urb *urb)
1322 {
1323 	unsigned char 				*data = urb->transfer_buffer;
1324 	struct keyspan_usa90_portStatusMessage	*msg;
1325 	struct usb_serial			*serial;
1326 	struct usb_serial_port			*port;
1327 	struct keyspan_port_private	 	*p_priv;
1328 	int old_dcd_state, err;
1329 	int status = urb->status;
1330 
1331 	serial =  urb->context;
1332 
1333 	if (status) {
1334 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %d\n",
1335 				__func__, status);
1336 		return;
1337 	}
1338 	if (urb->actual_length < 14) {
1339 		dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
1340 		goto exit;
1341 	}
1342 
1343 	msg = (struct keyspan_usa90_portStatusMessage *)data;
1344 
1345 	/* Now do something useful with the data */
1346 
1347 	port = serial->port[0];
1348 	p_priv = usb_get_serial_port_data(port);
1349 	if (!p_priv)
1350 		goto resubmit;
1351 
1352 	/* Update handshaking pin state information */
1353 	old_dcd_state = p_priv->dcd_state;
1354 	p_priv->cts_state = ((msg->cts) ? 1 : 0);
1355 	p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
1356 	p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
1357 	p_priv->ri_state = ((msg->ri) ? 1 : 0);
1358 
1359 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
1360 		tty_port_tty_hangup(&port->port, true);
1361 resubmit:
1362 	/* Resubmit urb so we continue receiving */
1363 	err = usb_submit_urb(urb, GFP_ATOMIC);
1364 	if (err != 0)
1365 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1366 exit:
1367 	;
1368 }
1369 
1370 static void	usa90_outcont_callback(struct urb *urb)
1371 {
1372 	struct usb_serial_port *port;
1373 	struct keyspan_port_private *p_priv;
1374 
1375 	port =  urb->context;
1376 	p_priv = usb_get_serial_port_data(port);
1377 
1378 	if (p_priv->resend_cont) {
1379 		dev_dbg(&urb->dev->dev, "%s - sending setup\n", __func__);
1380 		keyspan_usa90_send_setup(port->serial, port,
1381 						p_priv->resend_cont - 1);
1382 	}
1383 }
1384 
1385 /* Status messages from the 28xg */
1386 static void	usa67_instat_callback(struct urb *urb)
1387 {
1388 	int					err;
1389 	unsigned char 				*data = urb->transfer_buffer;
1390 	struct keyspan_usa67_portStatusMessage	*msg;
1391 	struct usb_serial			*serial;
1392 	struct usb_serial_port			*port;
1393 	struct keyspan_port_private	 	*p_priv;
1394 	int old_dcd_state;
1395 	int status = urb->status;
1396 
1397 	serial = urb->context;
1398 
1399 	if (status) {
1400 		dev_dbg(&urb->dev->dev, "%s - nonzero status: %d\n",
1401 				__func__, status);
1402 		return;
1403 	}
1404 
1405 	if (urb->actual_length !=
1406 			sizeof(struct keyspan_usa67_portStatusMessage)) {
1407 		dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
1408 		return;
1409 	}
1410 
1411 
1412 	/* Now do something useful with the data */
1413 	msg = (struct keyspan_usa67_portStatusMessage *)data;
1414 
1415 	/* Check port number from message and retrieve private data */
1416 	if (msg->port >= serial->num_ports) {
1417 		dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
1418 		return;
1419 	}
1420 
1421 	port = serial->port[msg->port];
1422 	p_priv = usb_get_serial_port_data(port);
1423 	if (!p_priv)
1424 		goto resubmit;
1425 
1426 	/* Update handshaking pin state information */
1427 	old_dcd_state = p_priv->dcd_state;
1428 	p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
1429 	p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
1430 
1431 	if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
1432 		tty_port_tty_hangup(&port->port, true);
1433 resubmit:
1434 	/* Resubmit urb so we continue receiving */
1435 	err = usb_submit_urb(urb, GFP_ATOMIC);
1436 	if (err != 0)
1437 		dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
1438 }
1439 
1440 static void usa67_glocont_callback(struct urb *urb)
1441 {
1442 	struct usb_serial *serial;
1443 	struct usb_serial_port *port;
1444 	struct keyspan_port_private *p_priv;
1445 	int i;
1446 
1447 	serial = urb->context;
1448 	for (i = 0; i < serial->num_ports; ++i) {
1449 		port = serial->port[i];
1450 		p_priv = usb_get_serial_port_data(port);
1451 		if (!p_priv)
1452 			continue;
1453 
1454 		if (p_priv->resend_cont) {
1455 			dev_dbg(&port->dev, "%s - sending setup\n", __func__);
1456 			keyspan_usa67_send_setup(serial, port,
1457 						p_priv->resend_cont - 1);
1458 			break;
1459 		}
1460 	}
1461 }
1462 
1463 static unsigned int keyspan_write_room(struct tty_struct *tty)
1464 {
1465 	struct usb_serial_port *port = tty->driver_data;
1466 	struct keyspan_port_private	*p_priv;
1467 	const struct keyspan_device_details	*d_details;
1468 	int				flip;
1469 	unsigned int			data_len;
1470 	struct urb			*this_urb;
1471 
1472 	p_priv = usb_get_serial_port_data(port);
1473 	d_details = p_priv->device_details;
1474 
1475 	/* FIXME: locking */
1476 	if (d_details->msg_format == msg_usa90)
1477 		data_len = 64;
1478 	else
1479 		data_len = 63;
1480 
1481 	flip = p_priv->out_flip;
1482 
1483 	/* Check both endpoints to see if any are available. */
1484 	this_urb = p_priv->out_urbs[flip];
1485 	if (this_urb != NULL) {
1486 		if (this_urb->status != -EINPROGRESS)
1487 			return data_len;
1488 		flip = (flip + 1) & d_details->outdat_endp_flip;
1489 		this_urb = p_priv->out_urbs[flip];
1490 		if (this_urb != NULL) {
1491 			if (this_urb->status != -EINPROGRESS)
1492 				return data_len;
1493 		}
1494 	}
1495 	return 0;
1496 }
1497 
1498 
1499 static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
1500 {
1501 	struct keyspan_port_private 	*p_priv;
1502 	const struct keyspan_device_details	*d_details;
1503 	int				i, err;
1504 	int				baud_rate, device_port;
1505 	struct urb			*urb;
1506 	unsigned int			cflag = 0;
1507 
1508 	p_priv = usb_get_serial_port_data(port);
1509 	d_details = p_priv->device_details;
1510 
1511 	/* Set some sane defaults */
1512 	p_priv->rts_state = 1;
1513 	p_priv->dtr_state = 1;
1514 	p_priv->baud = 9600;
1515 
1516 	/* force baud and lcr to be set on open */
1517 	p_priv->old_baud = 0;
1518 	p_priv->old_cflag = 0;
1519 
1520 	p_priv->out_flip = 0;
1521 	p_priv->in_flip = 0;
1522 
1523 	/* Reset low level data toggle and start reading from endpoints */
1524 	for (i = 0; i < 2; i++) {
1525 		urb = p_priv->in_urbs[i];
1526 		if (urb == NULL)
1527 			continue;
1528 
1529 		/* make sure endpoint data toggle is synchronized
1530 		   with the device */
1531 		usb_clear_halt(urb->dev, urb->pipe);
1532 		err = usb_submit_urb(urb, GFP_KERNEL);
1533 		if (err != 0)
1534 			dev_dbg(&port->dev, "%s - submit urb %d failed (%d)\n", __func__, i, err);
1535 	}
1536 
1537 	/* Reset low level data toggle on out endpoints */
1538 	for (i = 0; i < 2; i++) {
1539 		urb = p_priv->out_urbs[i];
1540 		if (urb == NULL)
1541 			continue;
1542 		/* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1543 						usb_pipeout(urb->pipe), 0); */
1544 	}
1545 
1546 	/* get the terminal config for the setup message now so we don't
1547 	 * need to send 2 of them */
1548 
1549 	device_port = port->port_number;
1550 	if (tty) {
1551 		cflag = tty->termios.c_cflag;
1552 		/* Baud rate calculation takes baud rate as an integer
1553 		   so other rates can be generated if desired. */
1554 		baud_rate = tty_get_baud_rate(tty);
1555 		/* If no match or invalid, leave as default */
1556 		if (baud_rate >= 0
1557 		    && d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
1558 					NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
1559 			p_priv->baud = baud_rate;
1560 		}
1561 	}
1562 	/* set CTS/RTS handshake etc. */
1563 	p_priv->cflag = cflag;
1564 	p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
1565 
1566 	keyspan_send_setup(port, 1);
1567 	/* mdelay(100); */
1568 	/* keyspan_set_termios(port, NULL); */
1569 
1570 	return 0;
1571 }
1572 
1573 static void keyspan_dtr_rts(struct usb_serial_port *port, int on)
1574 {
1575 	struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
1576 
1577 	p_priv->rts_state = on;
1578 	p_priv->dtr_state = on;
1579 	keyspan_send_setup(port, 0);
1580 }
1581 
1582 static void keyspan_close(struct usb_serial_port *port)
1583 {
1584 	int			i;
1585 	struct keyspan_port_private 	*p_priv;
1586 
1587 	p_priv = usb_get_serial_port_data(port);
1588 
1589 	p_priv->rts_state = 0;
1590 	p_priv->dtr_state = 0;
1591 
1592 	keyspan_send_setup(port, 2);
1593 	/* pilot-xfer seems to work best with this delay */
1594 	mdelay(100);
1595 
1596 	p_priv->out_flip = 0;
1597 	p_priv->in_flip = 0;
1598 
1599 	usb_kill_urb(p_priv->inack_urb);
1600 	for (i = 0; i < 2; i++) {
1601 		usb_kill_urb(p_priv->in_urbs[i]);
1602 		usb_kill_urb(p_priv->out_urbs[i]);
1603 	}
1604 }
1605 
1606 /* download the firmware to a pre-renumeration device */
1607 static int keyspan_fake_startup(struct usb_serial *serial)
1608 {
1609 	char	*fw_name;
1610 
1611 	dev_dbg(&serial->dev->dev, "Keyspan startup version %04x product %04x\n",
1612 		le16_to_cpu(serial->dev->descriptor.bcdDevice),
1613 		le16_to_cpu(serial->dev->descriptor.idProduct));
1614 
1615 	if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000)
1616 								!= 0x8000) {
1617 		dev_dbg(&serial->dev->dev, "Firmware already loaded.  Quitting.\n");
1618 		return 1;
1619 	}
1620 
1621 		/* Select firmware image on the basis of idProduct */
1622 	switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
1623 	case keyspan_usa28_pre_product_id:
1624 		fw_name = "keyspan/usa28.fw";
1625 		break;
1626 
1627 	case keyspan_usa28x_pre_product_id:
1628 		fw_name = "keyspan/usa28x.fw";
1629 		break;
1630 
1631 	case keyspan_usa28xa_pre_product_id:
1632 		fw_name = "keyspan/usa28xa.fw";
1633 		break;
1634 
1635 	case keyspan_usa28xb_pre_product_id:
1636 		fw_name = "keyspan/usa28xb.fw";
1637 		break;
1638 
1639 	case keyspan_usa19_pre_product_id:
1640 		fw_name = "keyspan/usa19.fw";
1641 		break;
1642 
1643 	case keyspan_usa19qi_pre_product_id:
1644 		fw_name = "keyspan/usa19qi.fw";
1645 		break;
1646 
1647 	case keyspan_mpr_pre_product_id:
1648 		fw_name = "keyspan/mpr.fw";
1649 		break;
1650 
1651 	case keyspan_usa19qw_pre_product_id:
1652 		fw_name = "keyspan/usa19qw.fw";
1653 		break;
1654 
1655 	case keyspan_usa18x_pre_product_id:
1656 		fw_name = "keyspan/usa18x.fw";
1657 		break;
1658 
1659 	case keyspan_usa19w_pre_product_id:
1660 		fw_name = "keyspan/usa19w.fw";
1661 		break;
1662 
1663 	case keyspan_usa49w_pre_product_id:
1664 		fw_name = "keyspan/usa49w.fw";
1665 		break;
1666 
1667 	case keyspan_usa49wlc_pre_product_id:
1668 		fw_name = "keyspan/usa49wlc.fw";
1669 		break;
1670 
1671 	default:
1672 		dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n",
1673 			le16_to_cpu(serial->dev->descriptor.idProduct));
1674 		return 1;
1675 	}
1676 
1677 	dev_dbg(&serial->dev->dev, "Uploading Keyspan %s firmware.\n", fw_name);
1678 
1679 	if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) {
1680 		dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
1681 			fw_name);
1682 		return -ENOENT;
1683 	}
1684 
1685 	/* after downloading firmware Renumeration will occur in a
1686 	  moment and the new device will bind to the real driver */
1687 
1688 	/* we don't want this device to have a driver assigned to it. */
1689 	return 1;
1690 }
1691 
1692 /* Helper functions used by keyspan_setup_urbs */
1693 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial,
1694 						     int endpoint)
1695 {
1696 	struct usb_host_interface *iface_desc;
1697 	struct usb_endpoint_descriptor *ep;
1698 	int i;
1699 
1700 	iface_desc = serial->interface->cur_altsetting;
1701 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1702 		ep = &iface_desc->endpoint[i].desc;
1703 		if (ep->bEndpointAddress == endpoint)
1704 			return ep;
1705 	}
1706 	dev_warn(&serial->interface->dev, "found no endpoint descriptor for endpoint %x\n",
1707 			endpoint);
1708 	return NULL;
1709 }
1710 
1711 static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
1712 				      int dir, void *ctx, char *buf, int len,
1713 				      void (*callback)(struct urb *))
1714 {
1715 	struct urb *urb;
1716 	struct usb_endpoint_descriptor const *ep_desc;
1717 	char const *ep_type_name;
1718 
1719 	if (endpoint == -1)
1720 		return NULL;		/* endpoint not needed */
1721 
1722 	dev_dbg(&serial->interface->dev, "%s - alloc for endpoint %x\n",
1723 			__func__, endpoint);
1724 	urb = usb_alloc_urb(0, GFP_KERNEL);		/* No ISO */
1725 	if (!urb)
1726 		return NULL;
1727 
1728 	if (endpoint == 0) {
1729 		/* control EP filled in when used */
1730 		return urb;
1731 	}
1732 
1733 	ep_desc = find_ep(serial, endpoint);
1734 	if (!ep_desc) {
1735 		usb_free_urb(urb);
1736 		return NULL;
1737 	}
1738 	if (usb_endpoint_xfer_int(ep_desc)) {
1739 		ep_type_name = "INT";
1740 		usb_fill_int_urb(urb, serial->dev,
1741 				 usb_sndintpipe(serial->dev, endpoint) | dir,
1742 				 buf, len, callback, ctx,
1743 				 ep_desc->bInterval);
1744 	} else if (usb_endpoint_xfer_bulk(ep_desc)) {
1745 		ep_type_name = "BULK";
1746 		usb_fill_bulk_urb(urb, serial->dev,
1747 				  usb_sndbulkpipe(serial->dev, endpoint) | dir,
1748 				  buf, len, callback, ctx);
1749 	} else {
1750 		dev_warn(&serial->interface->dev,
1751 			 "unsupported endpoint type %x\n",
1752 			 usb_endpoint_type(ep_desc));
1753 		usb_free_urb(urb);
1754 		return NULL;
1755 	}
1756 
1757 	dev_dbg(&serial->interface->dev, "%s - using urb %p for %s endpoint %x\n",
1758 	    __func__, urb, ep_type_name, endpoint);
1759 	return urb;
1760 }
1761 
1762 static struct callbacks {
1763 	void	(*instat_callback)(struct urb *);
1764 	void	(*glocont_callback)(struct urb *);
1765 	void	(*indat_callback)(struct urb *);
1766 	void	(*outdat_callback)(struct urb *);
1767 	void	(*inack_callback)(struct urb *);
1768 	void	(*outcont_callback)(struct urb *);
1769 } keyspan_callbacks[] = {
1770 	{
1771 		/* msg_usa26 callbacks */
1772 		.instat_callback =	usa26_instat_callback,
1773 		.glocont_callback =	usa26_glocont_callback,
1774 		.indat_callback =	usa26_indat_callback,
1775 		.outdat_callback =	usa2x_outdat_callback,
1776 		.inack_callback =	usa26_inack_callback,
1777 		.outcont_callback =	usa26_outcont_callback,
1778 	}, {
1779 		/* msg_usa28 callbacks */
1780 		.instat_callback =	usa28_instat_callback,
1781 		.glocont_callback =	usa28_glocont_callback,
1782 		.indat_callback =	usa28_indat_callback,
1783 		.outdat_callback =	usa2x_outdat_callback,
1784 		.inack_callback =	usa28_inack_callback,
1785 		.outcont_callback =	usa28_outcont_callback,
1786 	}, {
1787 		/* msg_usa49 callbacks */
1788 		.instat_callback =	usa49_instat_callback,
1789 		.glocont_callback =	usa49_glocont_callback,
1790 		.indat_callback =	usa49_indat_callback,
1791 		.outdat_callback =	usa2x_outdat_callback,
1792 		.inack_callback =	usa49_inack_callback,
1793 		.outcont_callback =	usa49_outcont_callback,
1794 	}, {
1795 		/* msg_usa90 callbacks */
1796 		.instat_callback =	usa90_instat_callback,
1797 		.glocont_callback =	usa28_glocont_callback,
1798 		.indat_callback =	usa90_indat_callback,
1799 		.outdat_callback =	usa2x_outdat_callback,
1800 		.inack_callback =	usa28_inack_callback,
1801 		.outcont_callback =	usa90_outcont_callback,
1802 	}, {
1803 		/* msg_usa67 callbacks */
1804 		.instat_callback =	usa67_instat_callback,
1805 		.glocont_callback =	usa67_glocont_callback,
1806 		.indat_callback =	usa26_indat_callback,
1807 		.outdat_callback =	usa2x_outdat_callback,
1808 		.inack_callback =	usa26_inack_callback,
1809 		.outcont_callback =	usa26_outcont_callback,
1810 	}
1811 };
1812 
1813 	/* Generic setup urbs function that uses
1814 	   data in device_details */
1815 static void keyspan_setup_urbs(struct usb_serial *serial)
1816 {
1817 	struct keyspan_serial_private 	*s_priv;
1818 	const struct keyspan_device_details	*d_details;
1819 	struct callbacks		*cback;
1820 
1821 	s_priv = usb_get_serial_data(serial);
1822 	d_details = s_priv->device_details;
1823 
1824 	/* Setup values for the various callback routines */
1825 	cback = &keyspan_callbacks[d_details->msg_format];
1826 
1827 	/* Allocate and set up urbs for each one that is in use,
1828 	   starting with instat endpoints */
1829 	s_priv->instat_urb = keyspan_setup_urb
1830 		(serial, d_details->instat_endpoint, USB_DIR_IN,
1831 		 serial, s_priv->instat_buf, INSTAT_BUFLEN,
1832 		 cback->instat_callback);
1833 
1834 	s_priv->indat_urb = keyspan_setup_urb
1835 		(serial, d_details->indat_endpoint, USB_DIR_IN,
1836 		 serial, s_priv->indat_buf, INDAT49W_BUFLEN,
1837 		 usa49wg_indat_callback);
1838 
1839 	s_priv->glocont_urb = keyspan_setup_urb
1840 		(serial, d_details->glocont_endpoint, USB_DIR_OUT,
1841 		 serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1842 		 cback->glocont_callback);
1843 }
1844 
1845 /* usa19 function doesn't require prescaler */
1846 static int keyspan_usa19_calc_baud(struct usb_serial_port *port,
1847 				   u32 baud_rate, u32 baudclk, u8 *rate_hi,
1848 				   u8 *rate_low, u8 *prescaler, int portnum)
1849 {
1850 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1851 		div,	/* divisor */
1852 		cnt;	/* inverse of divisor (programmed into 8051) */
1853 
1854 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1855 
1856 	/* prevent divide by zero...  */
1857 	b16 = baud_rate * 16L;
1858 	if (b16 == 0)
1859 		return KEYSPAN_INVALID_BAUD_RATE;
1860 	/* Any "standard" rate over 57k6 is marginal on the USA-19
1861 	   as we run out of divisor resolution. */
1862 	if (baud_rate > 57600)
1863 		return KEYSPAN_INVALID_BAUD_RATE;
1864 
1865 	/* calculate the divisor and the counter (its inverse) */
1866 	div = baudclk / b16;
1867 	if (div == 0)
1868 		return KEYSPAN_INVALID_BAUD_RATE;
1869 	else
1870 		cnt = 0 - div;
1871 
1872 	if (div > 0xffff)
1873 		return KEYSPAN_INVALID_BAUD_RATE;
1874 
1875 	/* return the counter values if non-null */
1876 	if (rate_low)
1877 		*rate_low = (u8) (cnt & 0xff);
1878 	if (rate_hi)
1879 		*rate_hi = (u8) ((cnt >> 8) & 0xff);
1880 	if (rate_low && rate_hi)
1881 		dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1882 				__func__, baud_rate, *rate_hi, *rate_low);
1883 	return KEYSPAN_BAUD_RATE_OK;
1884 }
1885 
1886 /* usa19hs function doesn't require prescaler */
1887 static int keyspan_usa19hs_calc_baud(struct usb_serial_port *port,
1888 				     u32 baud_rate, u32 baudclk, u8 *rate_hi,
1889 				     u8 *rate_low, u8 *prescaler, int portnum)
1890 {
1891 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1892 			div;	/* divisor */
1893 
1894 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1895 
1896 	/* prevent divide by zero...  */
1897 	b16 = baud_rate * 16L;
1898 	if (b16 == 0)
1899 		return KEYSPAN_INVALID_BAUD_RATE;
1900 
1901 	/* calculate the divisor */
1902 	div = baudclk / b16;
1903 	if (div == 0)
1904 		return KEYSPAN_INVALID_BAUD_RATE;
1905 
1906 	if (div > 0xffff)
1907 		return KEYSPAN_INVALID_BAUD_RATE;
1908 
1909 	/* return the counter values if non-null */
1910 	if (rate_low)
1911 		*rate_low = (u8) (div & 0xff);
1912 
1913 	if (rate_hi)
1914 		*rate_hi = (u8) ((div >> 8) & 0xff);
1915 
1916 	if (rate_low && rate_hi)
1917 		dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1918 			__func__, baud_rate, *rate_hi, *rate_low);
1919 
1920 	return KEYSPAN_BAUD_RATE_OK;
1921 }
1922 
1923 static int keyspan_usa19w_calc_baud(struct usb_serial_port *port,
1924 				    u32 baud_rate, u32 baudclk, u8 *rate_hi,
1925 				    u8 *rate_low, u8 *prescaler, int portnum)
1926 {
1927 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1928 		clk,	/* clock with 13/8 prescaler */
1929 		div,	/* divisor using 13/8 prescaler */
1930 		res,	/* resulting baud rate using 13/8 prescaler */
1931 		diff,	/* error using 13/8 prescaler */
1932 		smallest_diff;
1933 	u8	best_prescaler;
1934 	int	i;
1935 
1936 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1937 
1938 	/* prevent divide by zero */
1939 	b16 = baud_rate * 16L;
1940 	if (b16 == 0)
1941 		return KEYSPAN_INVALID_BAUD_RATE;
1942 
1943 	/* Calculate prescaler by trying them all and looking
1944 	   for best fit */
1945 
1946 	/* start with largest possible difference */
1947 	smallest_diff = 0xffffffff;
1948 
1949 		/* 0 is an invalid prescaler, used as a flag */
1950 	best_prescaler = 0;
1951 
1952 	for (i = 8; i <= 0xff; ++i) {
1953 		clk = (baudclk * 8) / (u32) i;
1954 
1955 		div = clk / b16;
1956 		if (div == 0)
1957 			continue;
1958 
1959 		res = clk / div;
1960 		diff = (res > b16) ? (res-b16) : (b16-res);
1961 
1962 		if (diff < smallest_diff) {
1963 			best_prescaler = i;
1964 			smallest_diff = diff;
1965 		}
1966 	}
1967 
1968 	if (best_prescaler == 0)
1969 		return KEYSPAN_INVALID_BAUD_RATE;
1970 
1971 	clk = (baudclk * 8) / (u32) best_prescaler;
1972 	div = clk / b16;
1973 
1974 	/* return the divisor and prescaler if non-null */
1975 	if (rate_low)
1976 		*rate_low = (u8) (div & 0xff);
1977 	if (rate_hi)
1978 		*rate_hi = (u8) ((div >> 8) & 0xff);
1979 	if (prescaler) {
1980 		*prescaler = best_prescaler;
1981 		/*  dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */
1982 	}
1983 	return KEYSPAN_BAUD_RATE_OK;
1984 }
1985 
1986 	/* USA-28 supports different maximum baud rates on each port */
1987 static int keyspan_usa28_calc_baud(struct usb_serial_port *port,
1988 				   u32 baud_rate, u32 baudclk, u8 *rate_hi,
1989 				   u8 *rate_low, u8 *prescaler, int portnum)
1990 {
1991 	u32 	b16,	/* baud rate times 16 (actual rate used internally) */
1992 		div,	/* divisor */
1993 		cnt;	/* inverse of divisor (programmed into 8051) */
1994 
1995 	dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1996 
1997 		/* prevent divide by zero */
1998 	b16 = baud_rate * 16L;
1999 	if (b16 == 0)
2000 		return KEYSPAN_INVALID_BAUD_RATE;
2001 
2002 	/* calculate the divisor and the counter (its inverse) */
2003 	div = KEYSPAN_USA28_BAUDCLK / b16;
2004 	if (div == 0)
2005 		return KEYSPAN_INVALID_BAUD_RATE;
2006 	else
2007 		cnt = 0 - div;
2008 
2009 	/* check for out of range, based on portnum,
2010 	   and return result */
2011 	if (portnum == 0) {
2012 		if (div > 0xffff)
2013 			return KEYSPAN_INVALID_BAUD_RATE;
2014 	} else {
2015 		if (portnum == 1) {
2016 			if (div > 0xff)
2017 				return KEYSPAN_INVALID_BAUD_RATE;
2018 		} else
2019 			return KEYSPAN_INVALID_BAUD_RATE;
2020 	}
2021 
2022 		/* return the counter values if not NULL
2023 		   (port 1 will ignore retHi) */
2024 	if (rate_low)
2025 		*rate_low = (u8) (cnt & 0xff);
2026 	if (rate_hi)
2027 		*rate_hi = (u8) ((cnt >> 8) & 0xff);
2028 	dev_dbg(&port->dev, "%s - %d OK.\n", __func__, baud_rate);
2029 	return KEYSPAN_BAUD_RATE_OK;
2030 }
2031 
2032 static int keyspan_usa26_send_setup(struct usb_serial *serial,
2033 				    struct usb_serial_port *port,
2034 				    int reset_port)
2035 {
2036 	struct keyspan_usa26_portControlMessage	msg;
2037 	struct keyspan_serial_private 		*s_priv;
2038 	struct keyspan_port_private 		*p_priv;
2039 	const struct keyspan_device_details	*d_details;
2040 	struct urb				*this_urb;
2041 	int 					device_port, err;
2042 
2043 	dev_dbg(&port->dev, "%s reset=%d\n", __func__, reset_port);
2044 
2045 	s_priv = usb_get_serial_data(serial);
2046 	p_priv = usb_get_serial_port_data(port);
2047 	d_details = s_priv->device_details;
2048 	device_port = port->port_number;
2049 
2050 	this_urb = p_priv->outcont_urb;
2051 
2052 		/* Make sure we have an urb then send the message */
2053 	if (this_urb == NULL) {
2054 		dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
2055 		return -1;
2056 	}
2057 
2058 	dev_dbg(&port->dev, "%s - endpoint %x\n",
2059 			__func__, usb_pipeendpoint(this_urb->pipe));
2060 
2061 	/* Save reset port val for resend.
2062 	   Don't overwrite resend for open/close condition. */
2063 	if ((reset_port + 1) > p_priv->resend_cont)
2064 		p_priv->resend_cont = reset_port + 1;
2065 	if (this_urb->status == -EINPROGRESS) {
2066 		/*  dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2067 		mdelay(5);
2068 		return -1;
2069 	}
2070 
2071 	memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage));
2072 
2073 	/* Only set baud rate if it's changed */
2074 	if (p_priv->old_baud != p_priv->baud) {
2075 		p_priv->old_baud = p_priv->baud;
2076 		msg.setClocking = 0xff;
2077 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2078 						   &msg.baudHi, &msg.baudLo, &msg.prescaler,
2079 						   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2080 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2081 				__func__, p_priv->baud);
2082 			msg.baudLo = 0;
2083 			msg.baudHi = 125;	/* Values for 9600 baud */
2084 			msg.prescaler = 10;
2085 		}
2086 		msg.setPrescaler = 0xff;
2087 	}
2088 
2089 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2090 	switch (p_priv->cflag & CSIZE) {
2091 	case CS5:
2092 		msg.lcr |= USA_DATABITS_5;
2093 		break;
2094 	case CS6:
2095 		msg.lcr |= USA_DATABITS_6;
2096 		break;
2097 	case CS7:
2098 		msg.lcr |= USA_DATABITS_7;
2099 		break;
2100 	case CS8:
2101 		msg.lcr |= USA_DATABITS_8;
2102 		break;
2103 	}
2104 	if (p_priv->cflag & PARENB) {
2105 		/* note USA_PARITY_NONE == 0 */
2106 		msg.lcr |= (p_priv->cflag & PARODD) ?
2107 			USA_PARITY_ODD : USA_PARITY_EVEN;
2108 	}
2109 	msg.setLcr = 0xff;
2110 
2111 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2112 	msg.xonFlowControl = 0;
2113 	msg.setFlowControl = 0xff;
2114 	msg.forwardingLength = 16;
2115 	msg.xonChar = 17;
2116 	msg.xoffChar = 19;
2117 
2118 	/* Opening port */
2119 	if (reset_port == 1) {
2120 		msg._txOn = 1;
2121 		msg._txOff = 0;
2122 		msg.txFlush = 0;
2123 		msg.txBreak = 0;
2124 		msg.rxOn = 1;
2125 		msg.rxOff = 0;
2126 		msg.rxFlush = 1;
2127 		msg.rxForward = 0;
2128 		msg.returnStatus = 0;
2129 		msg.resetDataToggle = 0xff;
2130 	}
2131 
2132 	/* Closing port */
2133 	else if (reset_port == 2) {
2134 		msg._txOn = 0;
2135 		msg._txOff = 1;
2136 		msg.txFlush = 0;
2137 		msg.txBreak = 0;
2138 		msg.rxOn = 0;
2139 		msg.rxOff = 1;
2140 		msg.rxFlush = 1;
2141 		msg.rxForward = 0;
2142 		msg.returnStatus = 0;
2143 		msg.resetDataToggle = 0;
2144 	}
2145 
2146 	/* Sending intermediate configs */
2147 	else {
2148 		msg._txOn = (!p_priv->break_on);
2149 		msg._txOff = 0;
2150 		msg.txFlush = 0;
2151 		msg.txBreak = (p_priv->break_on);
2152 		msg.rxOn = 0;
2153 		msg.rxOff = 0;
2154 		msg.rxFlush = 0;
2155 		msg.rxForward = 0;
2156 		msg.returnStatus = 0;
2157 		msg.resetDataToggle = 0x0;
2158 	}
2159 
2160 	/* Do handshaking outputs */
2161 	msg.setTxTriState_setRts = 0xff;
2162 	msg.txTriState_rts = p_priv->rts_state;
2163 
2164 	msg.setHskoa_setDtr = 0xff;
2165 	msg.hskoa_dtr = p_priv->dtr_state;
2166 
2167 	p_priv->resend_cont = 0;
2168 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2169 
2170 	/* send the data out the device on control endpoint */
2171 	this_urb->transfer_buffer_length = sizeof(msg);
2172 
2173 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2174 	if (err != 0)
2175 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2176 	return 0;
2177 }
2178 
2179 static int keyspan_usa28_send_setup(struct usb_serial *serial,
2180 				    struct usb_serial_port *port,
2181 				    int reset_port)
2182 {
2183 	struct keyspan_usa28_portControlMessage	msg;
2184 	struct keyspan_serial_private	 	*s_priv;
2185 	struct keyspan_port_private 		*p_priv;
2186 	const struct keyspan_device_details	*d_details;
2187 	struct urb				*this_urb;
2188 	int 					device_port, err;
2189 
2190 	s_priv = usb_get_serial_data(serial);
2191 	p_priv = usb_get_serial_port_data(port);
2192 	d_details = s_priv->device_details;
2193 	device_port = port->port_number;
2194 
2195 	/* only do something if we have a bulk out endpoint */
2196 	this_urb = p_priv->outcont_urb;
2197 	if (this_urb == NULL) {
2198 		dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
2199 		return -1;
2200 	}
2201 
2202 	/* Save reset port val for resend.
2203 	   Don't overwrite resend for open/close condition. */
2204 	if ((reset_port + 1) > p_priv->resend_cont)
2205 		p_priv->resend_cont = reset_port + 1;
2206 	if (this_urb->status == -EINPROGRESS) {
2207 		dev_dbg(&port->dev, "%s already writing\n", __func__);
2208 		mdelay(5);
2209 		return -1;
2210 	}
2211 
2212 	memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage));
2213 
2214 	msg.setBaudRate = 1;
2215 	if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2216 					   &msg.baudHi, &msg.baudLo, NULL,
2217 					   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2218 		dev_dbg(&port->dev, "%s - Invalid baud rate requested %d.\n",
2219 						__func__, p_priv->baud);
2220 		msg.baudLo = 0xff;
2221 		msg.baudHi = 0xb2;	/* Values for 9600 baud */
2222 	}
2223 
2224 	/* If parity is enabled, we must calculate it ourselves. */
2225 	msg.parity = 0;		/* XXX for now */
2226 
2227 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2228 	msg.xonFlowControl = 0;
2229 
2230 	/* Do handshaking outputs, DTR is inverted relative to RTS */
2231 	msg.rts = p_priv->rts_state;
2232 	msg.dtr = p_priv->dtr_state;
2233 
2234 	msg.forwardingLength = 16;
2235 	msg.forwardMs = 10;
2236 	msg.breakThreshold = 45;
2237 	msg.xonChar = 17;
2238 	msg.xoffChar = 19;
2239 
2240 	/*msg.returnStatus = 1;
2241 	msg.resetDataToggle = 0xff;*/
2242 	/* Opening port */
2243 	if (reset_port == 1) {
2244 		msg._txOn = 1;
2245 		msg._txOff = 0;
2246 		msg.txFlush = 0;
2247 		msg.txForceXoff = 0;
2248 		msg.txBreak = 0;
2249 		msg.rxOn = 1;
2250 		msg.rxOff = 0;
2251 		msg.rxFlush = 1;
2252 		msg.rxForward = 0;
2253 		msg.returnStatus = 0;
2254 		msg.resetDataToggle = 0xff;
2255 	}
2256 	/* Closing port */
2257 	else if (reset_port == 2) {
2258 		msg._txOn = 0;
2259 		msg._txOff = 1;
2260 		msg.txFlush = 0;
2261 		msg.txForceXoff = 0;
2262 		msg.txBreak = 0;
2263 		msg.rxOn = 0;
2264 		msg.rxOff = 1;
2265 		msg.rxFlush = 1;
2266 		msg.rxForward = 0;
2267 		msg.returnStatus = 0;
2268 		msg.resetDataToggle = 0;
2269 	}
2270 	/* Sending intermediate configs */
2271 	else {
2272 		msg._txOn = (!p_priv->break_on);
2273 		msg._txOff = 0;
2274 		msg.txFlush = 0;
2275 		msg.txForceXoff = 0;
2276 		msg.txBreak = (p_priv->break_on);
2277 		msg.rxOn = 0;
2278 		msg.rxOff = 0;
2279 		msg.rxFlush = 0;
2280 		msg.rxForward = 0;
2281 		msg.returnStatus = 0;
2282 		msg.resetDataToggle = 0x0;
2283 	}
2284 
2285 	p_priv->resend_cont = 0;
2286 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2287 
2288 	/* send the data out the device on control endpoint */
2289 	this_urb->transfer_buffer_length = sizeof(msg);
2290 
2291 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2292 	if (err != 0)
2293 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed\n", __func__);
2294 
2295 	return 0;
2296 }
2297 
2298 static int keyspan_usa49_send_setup(struct usb_serial *serial,
2299 				    struct usb_serial_port *port,
2300 				    int reset_port)
2301 {
2302 	struct keyspan_usa49_portControlMessage	msg;
2303 	struct usb_ctrlrequest 			*dr = NULL;
2304 	struct keyspan_serial_private 		*s_priv;
2305 	struct keyspan_port_private 		*p_priv;
2306 	const struct keyspan_device_details	*d_details;
2307 	struct urb				*this_urb;
2308 	int 					err, device_port;
2309 
2310 	s_priv = usb_get_serial_data(serial);
2311 	p_priv = usb_get_serial_port_data(port);
2312 	d_details = s_priv->device_details;
2313 
2314 	this_urb = s_priv->glocont_urb;
2315 
2316 	/* Work out which port within the device is being setup */
2317 	device_port = port->port_number;
2318 
2319 	/* Make sure we have an urb then send the message */
2320 	if (this_urb == NULL) {
2321 		dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
2322 		return -1;
2323 	}
2324 
2325 	dev_dbg(&port->dev, "%s - endpoint %x (%d)\n",
2326 		__func__, usb_pipeendpoint(this_urb->pipe), device_port);
2327 
2328 	/* Save reset port val for resend.
2329 	   Don't overwrite resend for open/close condition. */
2330 	if ((reset_port + 1) > p_priv->resend_cont)
2331 		p_priv->resend_cont = reset_port + 1;
2332 
2333 	if (this_urb->status == -EINPROGRESS) {
2334 		/*  dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2335 		mdelay(5);
2336 		return -1;
2337 	}
2338 
2339 	memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
2340 
2341 	msg.portNumber = device_port;
2342 
2343 	/* Only set baud rate if it's changed */
2344 	if (p_priv->old_baud != p_priv->baud) {
2345 		p_priv->old_baud = p_priv->baud;
2346 		msg.setClocking = 0xff;
2347 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2348 						   &msg.baudHi, &msg.baudLo, &msg.prescaler,
2349 						   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2350 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2351 				__func__, p_priv->baud);
2352 			msg.baudLo = 0;
2353 			msg.baudHi = 125;	/* Values for 9600 baud */
2354 			msg.prescaler = 10;
2355 		}
2356 		/* msg.setPrescaler = 0xff; */
2357 	}
2358 
2359 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2360 	switch (p_priv->cflag & CSIZE) {
2361 	case CS5:
2362 		msg.lcr |= USA_DATABITS_5;
2363 		break;
2364 	case CS6:
2365 		msg.lcr |= USA_DATABITS_6;
2366 		break;
2367 	case CS7:
2368 		msg.lcr |= USA_DATABITS_7;
2369 		break;
2370 	case CS8:
2371 		msg.lcr |= USA_DATABITS_8;
2372 		break;
2373 	}
2374 	if (p_priv->cflag & PARENB) {
2375 		/* note USA_PARITY_NONE == 0 */
2376 		msg.lcr |= (p_priv->cflag & PARODD) ?
2377 			USA_PARITY_ODD : USA_PARITY_EVEN;
2378 	}
2379 	msg.setLcr = 0xff;
2380 
2381 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2382 	msg.xonFlowControl = 0;
2383 	msg.setFlowControl = 0xff;
2384 
2385 	msg.forwardingLength = 16;
2386 	msg.xonChar = 17;
2387 	msg.xoffChar = 19;
2388 
2389 	/* Opening port */
2390 	if (reset_port == 1) {
2391 		msg._txOn = 1;
2392 		msg._txOff = 0;
2393 		msg.txFlush = 0;
2394 		msg.txBreak = 0;
2395 		msg.rxOn = 1;
2396 		msg.rxOff = 0;
2397 		msg.rxFlush = 1;
2398 		msg.rxForward = 0;
2399 		msg.returnStatus = 0;
2400 		msg.resetDataToggle = 0xff;
2401 		msg.enablePort = 1;
2402 		msg.disablePort = 0;
2403 	}
2404 	/* Closing port */
2405 	else if (reset_port == 2) {
2406 		msg._txOn = 0;
2407 		msg._txOff = 1;
2408 		msg.txFlush = 0;
2409 		msg.txBreak = 0;
2410 		msg.rxOn = 0;
2411 		msg.rxOff = 1;
2412 		msg.rxFlush = 1;
2413 		msg.rxForward = 0;
2414 		msg.returnStatus = 0;
2415 		msg.resetDataToggle = 0;
2416 		msg.enablePort = 0;
2417 		msg.disablePort = 1;
2418 	}
2419 	/* Sending intermediate configs */
2420 	else {
2421 		msg._txOn = (!p_priv->break_on);
2422 		msg._txOff = 0;
2423 		msg.txFlush = 0;
2424 		msg.txBreak = (p_priv->break_on);
2425 		msg.rxOn = 0;
2426 		msg.rxOff = 0;
2427 		msg.rxFlush = 0;
2428 		msg.rxForward = 0;
2429 		msg.returnStatus = 0;
2430 		msg.resetDataToggle = 0x0;
2431 		msg.enablePort = 0;
2432 		msg.disablePort = 0;
2433 	}
2434 
2435 	/* Do handshaking outputs */
2436 	msg.setRts = 0xff;
2437 	msg.rts = p_priv->rts_state;
2438 
2439 	msg.setDtr = 0xff;
2440 	msg.dtr = p_priv->dtr_state;
2441 
2442 	p_priv->resend_cont = 0;
2443 
2444 	/* if the device is a 49wg, we send control message on usb
2445 	   control EP 0 */
2446 
2447 	if (d_details->product_id == keyspan_usa49wg_product_id) {
2448 		dr = (void *)(s_priv->ctrl_buf);
2449 		dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT;
2450 		dr->bRequest = 0xB0;	/* 49wg control message */
2451 		dr->wValue = 0;
2452 		dr->wIndex = 0;
2453 		dr->wLength = cpu_to_le16(sizeof(msg));
2454 
2455 		memcpy(s_priv->glocont_buf, &msg, sizeof(msg));
2456 
2457 		usb_fill_control_urb(this_urb, serial->dev,
2458 				usb_sndctrlpipe(serial->dev, 0),
2459 				(unsigned char *)dr, s_priv->glocont_buf,
2460 				sizeof(msg), usa49_glocont_callback, serial);
2461 
2462 	} else {
2463 		memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2464 
2465 		/* send the data out the device on control endpoint */
2466 		this_urb->transfer_buffer_length = sizeof(msg);
2467 	}
2468 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2469 	if (err != 0)
2470 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2471 
2472 	return 0;
2473 }
2474 
2475 static int keyspan_usa90_send_setup(struct usb_serial *serial,
2476 				    struct usb_serial_port *port,
2477 				    int reset_port)
2478 {
2479 	struct keyspan_usa90_portControlMessage	msg;
2480 	struct keyspan_serial_private 		*s_priv;
2481 	struct keyspan_port_private 		*p_priv;
2482 	const struct keyspan_device_details	*d_details;
2483 	struct urb				*this_urb;
2484 	int 					err;
2485 	u8						prescaler;
2486 
2487 	s_priv = usb_get_serial_data(serial);
2488 	p_priv = usb_get_serial_port_data(port);
2489 	d_details = s_priv->device_details;
2490 
2491 	/* only do something if we have a bulk out endpoint */
2492 	this_urb = p_priv->outcont_urb;
2493 	if (this_urb == NULL) {
2494 		dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
2495 		return -1;
2496 	}
2497 
2498 	/* Save reset port val for resend.
2499 	   Don't overwrite resend for open/close condition. */
2500 	if ((reset_port + 1) > p_priv->resend_cont)
2501 		p_priv->resend_cont = reset_port + 1;
2502 	if (this_urb->status == -EINPROGRESS) {
2503 		dev_dbg(&port->dev, "%s already writing\n", __func__);
2504 		mdelay(5);
2505 		return -1;
2506 	}
2507 
2508 	memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage));
2509 
2510 	/* Only set baud rate if it's changed */
2511 	if (p_priv->old_baud != p_priv->baud) {
2512 		p_priv->old_baud = p_priv->baud;
2513 		msg.setClocking = 0x01;
2514 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2515 						   &msg.baudHi, &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) {
2516 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2517 				__func__, p_priv->baud);
2518 			p_priv->baud = 9600;
2519 			d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2520 				&msg.baudHi, &msg.baudLo, &prescaler, 0);
2521 		}
2522 		msg.setRxMode = 1;
2523 		msg.setTxMode = 1;
2524 	}
2525 
2526 	/* modes must always be correctly specified */
2527 	if (p_priv->baud > 57600) {
2528 		msg.rxMode = RXMODE_DMA;
2529 		msg.txMode = TXMODE_DMA;
2530 	} else {
2531 		msg.rxMode = RXMODE_BYHAND;
2532 		msg.txMode = TXMODE_BYHAND;
2533 	}
2534 
2535 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2536 	switch (p_priv->cflag & CSIZE) {
2537 	case CS5:
2538 		msg.lcr |= USA_DATABITS_5;
2539 		break;
2540 	case CS6:
2541 		msg.lcr |= USA_DATABITS_6;
2542 		break;
2543 	case CS7:
2544 		msg.lcr |= USA_DATABITS_7;
2545 		break;
2546 	case CS8:
2547 		msg.lcr |= USA_DATABITS_8;
2548 		break;
2549 	}
2550 	if (p_priv->cflag & PARENB) {
2551 		/* note USA_PARITY_NONE == 0 */
2552 		msg.lcr |= (p_priv->cflag & PARODD) ?
2553 			USA_PARITY_ODD : USA_PARITY_EVEN;
2554 	}
2555 	if (p_priv->old_cflag != p_priv->cflag) {
2556 		p_priv->old_cflag = p_priv->cflag;
2557 		msg.setLcr = 0x01;
2558 	}
2559 
2560 	if (p_priv->flow_control == flow_cts)
2561 		msg.txFlowControl = TXFLOW_CTS;
2562 	msg.setTxFlowControl = 0x01;
2563 	msg.setRxFlowControl = 0x01;
2564 
2565 	msg.rxForwardingLength = 16;
2566 	msg.rxForwardingTimeout = 16;
2567 	msg.txAckSetting = 0;
2568 	msg.xonChar = 17;
2569 	msg.xoffChar = 19;
2570 
2571 	/* Opening port */
2572 	if (reset_port == 1) {
2573 		msg.portEnabled = 1;
2574 		msg.rxFlush = 1;
2575 		msg.txBreak = (p_priv->break_on);
2576 	}
2577 	/* Closing port */
2578 	else if (reset_port == 2)
2579 		msg.portEnabled = 0;
2580 	/* Sending intermediate configs */
2581 	else {
2582 		msg.portEnabled = 1;
2583 		msg.txBreak = (p_priv->break_on);
2584 	}
2585 
2586 	/* Do handshaking outputs */
2587 	msg.setRts = 0x01;
2588 	msg.rts = p_priv->rts_state;
2589 
2590 	msg.setDtr = 0x01;
2591 	msg.dtr = p_priv->dtr_state;
2592 
2593 	p_priv->resend_cont = 0;
2594 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2595 
2596 	/* send the data out the device on control endpoint */
2597 	this_urb->transfer_buffer_length = sizeof(msg);
2598 
2599 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2600 	if (err != 0)
2601 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2602 	return 0;
2603 }
2604 
2605 static int keyspan_usa67_send_setup(struct usb_serial *serial,
2606 				    struct usb_serial_port *port,
2607 				    int reset_port)
2608 {
2609 	struct keyspan_usa67_portControlMessage	msg;
2610 	struct keyspan_serial_private 		*s_priv;
2611 	struct keyspan_port_private 		*p_priv;
2612 	const struct keyspan_device_details	*d_details;
2613 	struct urb				*this_urb;
2614 	int 					err, device_port;
2615 
2616 	s_priv = usb_get_serial_data(serial);
2617 	p_priv = usb_get_serial_port_data(port);
2618 	d_details = s_priv->device_details;
2619 
2620 	this_urb = s_priv->glocont_urb;
2621 
2622 	/* Work out which port within the device is being setup */
2623 	device_port = port->port_number;
2624 
2625 	/* Make sure we have an urb then send the message */
2626 	if (this_urb == NULL) {
2627 		dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
2628 		return -1;
2629 	}
2630 
2631 	/* Save reset port val for resend.
2632 	   Don't overwrite resend for open/close condition. */
2633 	if ((reset_port + 1) > p_priv->resend_cont)
2634 		p_priv->resend_cont = reset_port + 1;
2635 	if (this_urb->status == -EINPROGRESS) {
2636 		/*  dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2637 		mdelay(5);
2638 		return -1;
2639 	}
2640 
2641 	memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
2642 
2643 	msg.port = device_port;
2644 
2645 	/* Only set baud rate if it's changed */
2646 	if (p_priv->old_baud != p_priv->baud) {
2647 		p_priv->old_baud = p_priv->baud;
2648 		msg.setClocking = 0xff;
2649 		if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2650 						   &msg.baudHi, &msg.baudLo, &msg.prescaler,
2651 						   device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2652 			dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2653 				__func__, p_priv->baud);
2654 			msg.baudLo = 0;
2655 			msg.baudHi = 125;	/* Values for 9600 baud */
2656 			msg.prescaler = 10;
2657 		}
2658 		msg.setPrescaler = 0xff;
2659 	}
2660 
2661 	msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2662 	switch (p_priv->cflag & CSIZE) {
2663 	case CS5:
2664 		msg.lcr |= USA_DATABITS_5;
2665 		break;
2666 	case CS6:
2667 		msg.lcr |= USA_DATABITS_6;
2668 		break;
2669 	case CS7:
2670 		msg.lcr |= USA_DATABITS_7;
2671 		break;
2672 	case CS8:
2673 		msg.lcr |= USA_DATABITS_8;
2674 		break;
2675 	}
2676 	if (p_priv->cflag & PARENB) {
2677 		/* note USA_PARITY_NONE == 0 */
2678 		msg.lcr |= (p_priv->cflag & PARODD) ?
2679 					USA_PARITY_ODD : USA_PARITY_EVEN;
2680 	}
2681 	msg.setLcr = 0xff;
2682 
2683 	msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2684 	msg.xonFlowControl = 0;
2685 	msg.setFlowControl = 0xff;
2686 	msg.forwardingLength = 16;
2687 	msg.xonChar = 17;
2688 	msg.xoffChar = 19;
2689 
2690 	if (reset_port == 1) {
2691 		/* Opening port */
2692 		msg._txOn = 1;
2693 		msg._txOff = 0;
2694 		msg.txFlush = 0;
2695 		msg.txBreak = 0;
2696 		msg.rxOn = 1;
2697 		msg.rxOff = 0;
2698 		msg.rxFlush = 1;
2699 		msg.rxForward = 0;
2700 		msg.returnStatus = 0;
2701 		msg.resetDataToggle = 0xff;
2702 	} else if (reset_port == 2) {
2703 		/* Closing port */
2704 		msg._txOn = 0;
2705 		msg._txOff = 1;
2706 		msg.txFlush = 0;
2707 		msg.txBreak = 0;
2708 		msg.rxOn = 0;
2709 		msg.rxOff = 1;
2710 		msg.rxFlush = 1;
2711 		msg.rxForward = 0;
2712 		msg.returnStatus = 0;
2713 		msg.resetDataToggle = 0;
2714 	} else {
2715 		/* Sending intermediate configs */
2716 		msg._txOn = (!p_priv->break_on);
2717 		msg._txOff = 0;
2718 		msg.txFlush = 0;
2719 		msg.txBreak = (p_priv->break_on);
2720 		msg.rxOn = 0;
2721 		msg.rxOff = 0;
2722 		msg.rxFlush = 0;
2723 		msg.rxForward = 0;
2724 		msg.returnStatus = 0;
2725 		msg.resetDataToggle = 0x0;
2726 	}
2727 
2728 	/* Do handshaking outputs */
2729 	msg.setTxTriState_setRts = 0xff;
2730 	msg.txTriState_rts = p_priv->rts_state;
2731 
2732 	msg.setHskoa_setDtr = 0xff;
2733 	msg.hskoa_dtr = p_priv->dtr_state;
2734 
2735 	p_priv->resend_cont = 0;
2736 
2737 	memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2738 
2739 	/* send the data out the device on control endpoint */
2740 	this_urb->transfer_buffer_length = sizeof(msg);
2741 
2742 	err = usb_submit_urb(this_urb, GFP_ATOMIC);
2743 	if (err != 0)
2744 		dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2745 	return 0;
2746 }
2747 
2748 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2749 {
2750 	struct usb_serial *serial = port->serial;
2751 	struct keyspan_serial_private *s_priv;
2752 	const struct keyspan_device_details *d_details;
2753 
2754 	s_priv = usb_get_serial_data(serial);
2755 	d_details = s_priv->device_details;
2756 
2757 	switch (d_details->msg_format) {
2758 	case msg_usa26:
2759 		keyspan_usa26_send_setup(serial, port, reset_port);
2760 		break;
2761 	case msg_usa28:
2762 		keyspan_usa28_send_setup(serial, port, reset_port);
2763 		break;
2764 	case msg_usa49:
2765 		keyspan_usa49_send_setup(serial, port, reset_port);
2766 		break;
2767 	case msg_usa90:
2768 		keyspan_usa90_send_setup(serial, port, reset_port);
2769 		break;
2770 	case msg_usa67:
2771 		keyspan_usa67_send_setup(serial, port, reset_port);
2772 		break;
2773 	}
2774 }
2775 
2776 
2777 /* Gets called by the "real" driver (ie once firmware is loaded
2778    and renumeration has taken place. */
2779 static int keyspan_startup(struct usb_serial *serial)
2780 {
2781 	int				i, err;
2782 	struct keyspan_serial_private 	*s_priv;
2783 	const struct keyspan_device_details	*d_details;
2784 
2785 	for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2786 		if (d_details->product_id ==
2787 				le16_to_cpu(serial->dev->descriptor.idProduct))
2788 			break;
2789 	if (d_details == NULL) {
2790 		dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2791 		    __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2792 		return -ENODEV;
2793 	}
2794 
2795 	/* Setup private data for serial driver */
2796 	s_priv = kzalloc_obj(struct keyspan_serial_private);
2797 	if (!s_priv)
2798 		return -ENOMEM;
2799 
2800 	s_priv->instat_buf = kzalloc(INSTAT_BUFLEN, GFP_KERNEL);
2801 	if (!s_priv->instat_buf)
2802 		goto err_instat_buf;
2803 
2804 	s_priv->indat_buf = kzalloc(INDAT49W_BUFLEN, GFP_KERNEL);
2805 	if (!s_priv->indat_buf)
2806 		goto err_indat_buf;
2807 
2808 	s_priv->glocont_buf = kzalloc(GLOCONT_BUFLEN, GFP_KERNEL);
2809 	if (!s_priv->glocont_buf)
2810 		goto err_glocont_buf;
2811 
2812 	s_priv->ctrl_buf = kzalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
2813 	if (!s_priv->ctrl_buf)
2814 		goto err_ctrl_buf;
2815 
2816 	s_priv->device_details = d_details;
2817 	usb_set_serial_data(serial, s_priv);
2818 
2819 	keyspan_setup_urbs(serial);
2820 
2821 	if (s_priv->instat_urb != NULL) {
2822 		err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2823 		if (err != 0)
2824 			dev_dbg(&serial->dev->dev, "%s - submit instat urb failed %d\n", __func__, err);
2825 	}
2826 	if (s_priv->indat_urb != NULL) {
2827 		err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2828 		if (err != 0)
2829 			dev_dbg(&serial->dev->dev, "%s - submit indat urb failed %d\n", __func__, err);
2830 	}
2831 
2832 	return 0;
2833 
2834 err_ctrl_buf:
2835 	kfree(s_priv->glocont_buf);
2836 err_glocont_buf:
2837 	kfree(s_priv->indat_buf);
2838 err_indat_buf:
2839 	kfree(s_priv->instat_buf);
2840 err_instat_buf:
2841 	kfree(s_priv);
2842 
2843 	return -ENOMEM;
2844 }
2845 
2846 static void keyspan_disconnect(struct usb_serial *serial)
2847 {
2848 	struct keyspan_serial_private *s_priv;
2849 
2850 	s_priv = usb_get_serial_data(serial);
2851 
2852 	usb_kill_urb(s_priv->instat_urb);
2853 	usb_kill_urb(s_priv->glocont_urb);
2854 	usb_kill_urb(s_priv->indat_urb);
2855 }
2856 
2857 static void keyspan_release(struct usb_serial *serial)
2858 {
2859 	struct keyspan_serial_private *s_priv;
2860 
2861 	s_priv = usb_get_serial_data(serial);
2862 
2863 	/* Make sure to unlink the URBs submitted in attach. */
2864 	usb_kill_urb(s_priv->instat_urb);
2865 	usb_kill_urb(s_priv->indat_urb);
2866 
2867 	usb_free_urb(s_priv->instat_urb);
2868 	usb_free_urb(s_priv->indat_urb);
2869 	usb_free_urb(s_priv->glocont_urb);
2870 
2871 	kfree(s_priv->ctrl_buf);
2872 	kfree(s_priv->glocont_buf);
2873 	kfree(s_priv->indat_buf);
2874 	kfree(s_priv->instat_buf);
2875 
2876 	kfree(s_priv);
2877 }
2878 
2879 static int keyspan_port_probe(struct usb_serial_port *port)
2880 {
2881 	struct usb_serial *serial = port->serial;
2882 	struct keyspan_serial_private *s_priv;
2883 	struct keyspan_port_private *p_priv;
2884 	const struct keyspan_device_details *d_details;
2885 	struct callbacks *cback;
2886 	int endp;
2887 	int port_num;
2888 	int i;
2889 
2890 	s_priv = usb_get_serial_data(serial);
2891 	d_details = s_priv->device_details;
2892 
2893 	p_priv = kzalloc_obj(*p_priv);
2894 	if (!p_priv)
2895 		return -ENOMEM;
2896 
2897 	for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) {
2898 		p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL);
2899 		if (!p_priv->in_buffer[i])
2900 			goto err_free_in_buffer;
2901 	}
2902 
2903 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) {
2904 		p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL);
2905 		if (!p_priv->out_buffer[i])
2906 			goto err_free_out_buffer;
2907 	}
2908 
2909 	p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL);
2910 	if (!p_priv->inack_buffer)
2911 		goto err_free_out_buffer;
2912 
2913 	p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL);
2914 	if (!p_priv->outcont_buffer)
2915 		goto err_free_inack_buffer;
2916 
2917 	p_priv->device_details = d_details;
2918 
2919 	/* Setup values for the various callback routines */
2920 	cback = &keyspan_callbacks[d_details->msg_format];
2921 
2922 	port_num = port->port_number;
2923 
2924 	/* Do indat endpoints first, once for each flip */
2925 	endp = d_details->indat_endpoints[port_num];
2926 	for (i = 0; i <= d_details->indat_endp_flip; ++i, ++endp) {
2927 		p_priv->in_urbs[i] = keyspan_setup_urb(serial, endp,
2928 						USB_DIR_IN, port,
2929 						p_priv->in_buffer[i],
2930 						IN_BUFLEN,
2931 						cback->indat_callback);
2932 	}
2933 	/* outdat endpoints also have flip */
2934 	endp = d_details->outdat_endpoints[port_num];
2935 	for (i = 0; i <= d_details->outdat_endp_flip; ++i, ++endp) {
2936 		p_priv->out_urbs[i] = keyspan_setup_urb(serial, endp,
2937 						USB_DIR_OUT, port,
2938 						p_priv->out_buffer[i],
2939 						OUT_BUFLEN,
2940 						cback->outdat_callback);
2941 	}
2942 	/* inack endpoint */
2943 	p_priv->inack_urb = keyspan_setup_urb(serial,
2944 					d_details->inack_endpoints[port_num],
2945 					USB_DIR_IN, port,
2946 					p_priv->inack_buffer,
2947 					INACK_BUFLEN,
2948 					cback->inack_callback);
2949 	/* outcont endpoint */
2950 	p_priv->outcont_urb = keyspan_setup_urb(serial,
2951 					d_details->outcont_endpoints[port_num],
2952 					USB_DIR_OUT, port,
2953 					p_priv->outcont_buffer,
2954 					OUTCONT_BUFLEN,
2955 					 cback->outcont_callback);
2956 
2957 	usb_set_serial_port_data(port, p_priv);
2958 
2959 	return 0;
2960 
2961 err_free_inack_buffer:
2962 	kfree(p_priv->inack_buffer);
2963 err_free_out_buffer:
2964 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2965 		kfree(p_priv->out_buffer[i]);
2966 err_free_in_buffer:
2967 	for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2968 		kfree(p_priv->in_buffer[i]);
2969 	kfree(p_priv);
2970 
2971 	return -ENOMEM;
2972 }
2973 
2974 static void keyspan_port_remove(struct usb_serial_port *port)
2975 {
2976 	struct keyspan_port_private *p_priv;
2977 	int i;
2978 
2979 	p_priv = usb_get_serial_port_data(port);
2980 
2981 	usb_kill_urb(p_priv->inack_urb);
2982 	usb_kill_urb(p_priv->outcont_urb);
2983 	for (i = 0; i < 2; i++) {
2984 		usb_kill_urb(p_priv->in_urbs[i]);
2985 		usb_kill_urb(p_priv->out_urbs[i]);
2986 	}
2987 
2988 	usb_free_urb(p_priv->inack_urb);
2989 	usb_free_urb(p_priv->outcont_urb);
2990 	for (i = 0; i < 2; i++) {
2991 		usb_free_urb(p_priv->in_urbs[i]);
2992 		usb_free_urb(p_priv->out_urbs[i]);
2993 	}
2994 
2995 	kfree(p_priv->outcont_buffer);
2996 	kfree(p_priv->inack_buffer);
2997 	for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2998 		kfree(p_priv->out_buffer[i]);
2999 	for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
3000 		kfree(p_priv->in_buffer[i]);
3001 
3002 	kfree(p_priv);
3003 }
3004 
3005 /* Structs for the devices, pre and post renumeration. */
3006 static struct usb_serial_driver keyspan_pre_device = {
3007 	.driver = {
3008 		.name		= "keyspan_no_firm",
3009 	},
3010 	.description		= "Keyspan - (without firmware)",
3011 	.id_table		= keyspan_pre_ids,
3012 	.num_ports		= 1,
3013 	.attach			= keyspan_fake_startup,
3014 };
3015 
3016 static struct usb_serial_driver keyspan_1port_device = {
3017 	.driver = {
3018 		.name		= "keyspan_1",
3019 	},
3020 	.description		= "Keyspan 1 port adapter",
3021 	.id_table		= keyspan_1port_ids,
3022 	.num_ports		= 1,
3023 	.open			= keyspan_open,
3024 	.close			= keyspan_close,
3025 	.dtr_rts		= keyspan_dtr_rts,
3026 	.write			= keyspan_write,
3027 	.write_room		= keyspan_write_room,
3028 	.set_termios		= keyspan_set_termios,
3029 	.break_ctl		= keyspan_break_ctl,
3030 	.tiocmget		= keyspan_tiocmget,
3031 	.tiocmset		= keyspan_tiocmset,
3032 	.attach			= keyspan_startup,
3033 	.disconnect		= keyspan_disconnect,
3034 	.release		= keyspan_release,
3035 	.port_probe		= keyspan_port_probe,
3036 	.port_remove		= keyspan_port_remove,
3037 };
3038 
3039 static struct usb_serial_driver keyspan_2port_device = {
3040 	.driver = {
3041 		.name		= "keyspan_2",
3042 	},
3043 	.description		= "Keyspan 2 port adapter",
3044 	.id_table		= keyspan_2port_ids,
3045 	.num_ports		= 2,
3046 	.open			= keyspan_open,
3047 	.close			= keyspan_close,
3048 	.dtr_rts		= keyspan_dtr_rts,
3049 	.write			= keyspan_write,
3050 	.write_room		= keyspan_write_room,
3051 	.set_termios		= keyspan_set_termios,
3052 	.break_ctl		= keyspan_break_ctl,
3053 	.tiocmget		= keyspan_tiocmget,
3054 	.tiocmset		= keyspan_tiocmset,
3055 	.attach			= keyspan_startup,
3056 	.disconnect		= keyspan_disconnect,
3057 	.release		= keyspan_release,
3058 	.port_probe		= keyspan_port_probe,
3059 	.port_remove		= keyspan_port_remove,
3060 };
3061 
3062 static struct usb_serial_driver keyspan_4port_device = {
3063 	.driver = {
3064 		.name		= "keyspan_4",
3065 	},
3066 	.description		= "Keyspan 4 port adapter",
3067 	.id_table		= keyspan_4port_ids,
3068 	.num_ports		= 4,
3069 	.open			= keyspan_open,
3070 	.close			= keyspan_close,
3071 	.dtr_rts		= keyspan_dtr_rts,
3072 	.write			= keyspan_write,
3073 	.write_room		= keyspan_write_room,
3074 	.set_termios		= keyspan_set_termios,
3075 	.break_ctl		= keyspan_break_ctl,
3076 	.tiocmget		= keyspan_tiocmget,
3077 	.tiocmset		= keyspan_tiocmset,
3078 	.attach			= keyspan_startup,
3079 	.disconnect		= keyspan_disconnect,
3080 	.release		= keyspan_release,
3081 	.port_probe		= keyspan_port_probe,
3082 	.port_remove		= keyspan_port_remove,
3083 };
3084 
3085 static struct usb_serial_driver * const serial_drivers[] = {
3086 	&keyspan_pre_device, &keyspan_1port_device,
3087 	&keyspan_2port_device, &keyspan_4port_device, NULL
3088 };
3089 
3090 module_usb_serial_driver(serial_drivers, keyspan_ids_combined);
3091 
3092 MODULE_AUTHOR(DRIVER_AUTHOR);
3093 MODULE_DESCRIPTION(DRIVER_DESC);
3094 MODULE_LICENSE("GPL");
3095 
3096 MODULE_FIRMWARE("keyspan/usa28.fw");
3097 MODULE_FIRMWARE("keyspan/usa28x.fw");
3098 MODULE_FIRMWARE("keyspan/usa28xa.fw");
3099 MODULE_FIRMWARE("keyspan/usa28xb.fw");
3100 MODULE_FIRMWARE("keyspan/usa19.fw");
3101 MODULE_FIRMWARE("keyspan/usa19qi.fw");
3102 MODULE_FIRMWARE("keyspan/mpr.fw");
3103 MODULE_FIRMWARE("keyspan/usa19qw.fw");
3104 MODULE_FIRMWARE("keyspan/usa18x.fw");
3105 MODULE_FIRMWARE("keyspan/usa19w.fw");
3106 MODULE_FIRMWARE("keyspan/usa49w.fw");
3107 MODULE_FIRMWARE("keyspan/usa49wlc.fw");
3108