linux/drivers/usb/serial/keyspan.c
<<
>>
Prefs
   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
  48static 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 */
  62struct 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
  79struct 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
 133module_usb_serial_driver(keyspan_driver, serial_drivers);
 134
 135static 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
 153static 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
 191static 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
 207static 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 */
 227static 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
 300static 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 */
 358static 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
 370static void     usa26_inack_callback(struct urb *urb)
 371{
 372        dbg("%s", __func__);
 373
 374}
 375
 376static 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
 391static 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);
 450exit: ;
 451}
 452
 453static void     usa26_glocont_callback(struct urb *urb)
 454{
 455        dbg("%s", __func__);
 456}
 457
 458
 459static 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
 506static void     usa28_inack_callback(struct urb *urb)
 507{
 508        dbg("%s", __func__);
 509}
 510
 511static 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
 526static 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);
 583exit: ;
 584}
 585
 586static void     usa28_glocont_callback(struct urb *urb)
 587{
 588        dbg("%s", __func__);
 589}
 590
 591
 592static 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 */
 617static 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);
 677exit:   ;
 678}
 679
 680static void     usa49_inack_callback(struct urb *urb)
 681{
 682        dbg("%s", __func__);
 683}
 684
 685static 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
 736static 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 */
 807static void usa49_outcont_callback(struct urb *urb)
 808{
 809        dbg("%s", __func__);
 810}
 811
 812static 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
 882static 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);
 929exit:
 930        ;
 931}
 932
 933static 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 */
 949static 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
1006static 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
1029static 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
1066static 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
1146static inline void stop_urb(struct urb *urb)
1147{
1148        if (urb && urb->status == -EINPROGRESS)
1149                usb_kill_urb(urb);
1150}
1151
1152static 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
1161static 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 */
1201static 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 */
1308static 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
1326static 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
1378static 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 */
1431static 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 */
1507static 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 */
1547static 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
1582static 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 */
1645static 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
1689static 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
1845static 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
1971static 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
2159static 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
2292static 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
2439static 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. */
2472static 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
2534static 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
2576static 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
2597MODULE_AUTHOR(DRIVER_AUTHOR);
2598MODULE_DESCRIPTION(DRIVER_DESC);
2599MODULE_LICENSE("GPL");
2600
2601MODULE_FIRMWARE("keyspan/usa28.fw");
2602MODULE_FIRMWARE("keyspan/usa28x.fw");
2603MODULE_FIRMWARE("keyspan/usa28xa.fw");
2604MODULE_FIRMWARE("keyspan/usa28xb.fw");
2605MODULE_FIRMWARE("keyspan/usa19.fw");
2606MODULE_FIRMWARE("keyspan/usa19qi.fw");
2607MODULE_FIRMWARE("keyspan/mpr.fw");
2608MODULE_FIRMWARE("keyspan/usa19qw.fw");
2609MODULE_FIRMWARE("keyspan/usa18x.fw");
2610MODULE_FIRMWARE("keyspan/usa19w.fw");
2611MODULE_FIRMWARE("keyspan/usa49w.fw");
2612MODULE_FIRMWARE("keyspan/usa49wlc.fw");
2613
2614module_param(debug, bool, S_IRUGO | S_IWUSR);
2615MODULE_PARM_DESC(debug, "Debug enabled or not");
2616
2617