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