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