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