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