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