aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/keyspan.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/serial/keyspan.c')
-rw-r--r--drivers/usb/serial/keyspan.c825
1 files changed, 418 insertions, 407 deletions
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index a371c41bb3ab..2b1cfcbf8f9b 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -1,29 +1,29 @@
1/* 1/*
2 Keyspan USB to Serial Converter driver 2 Keyspan USB to Serial Converter driver
3 3
4 (C) Copyright (C) 2000-2001 Hugh Blemings <hugh@blemings.org> 4 (C) Copyright (C) 2000-2001 Hugh Blemings <hugh@blemings.org>
5 (C) Copyright (C) 2002 Greg Kroah-Hartman <greg@kroah.com> 5 (C) Copyright (C) 2002 Greg Kroah-Hartman <greg@kroah.com>
6 6
7 This program is free software; you can redistribute it and/or modify 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 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 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 See http://misc.nu/hugh/keyspan.html for more information. 12 See http://misc.nu/hugh/keyspan.html for more information.
13 13
14 Code in this driver inspired by and in a number of places taken 14 Code in this driver inspired by and in a number of places taken
15 from Brian Warner's original Keyspan-PDA driver. 15 from Brian Warner's original Keyspan-PDA driver.
16 16
17 This driver has been put together with the support of Innosys, Inc. 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. 18 and Keyspan, Inc the manufacturers of the Keyspan USB-serial products.
19 Thanks Guys :) 19 Thanks Guys :)
20 20
21 Thanks to Paulus for miscellaneous tidy ups, some largish chunks 21 Thanks to Paulus for miscellaneous tidy ups, some largish chunks
22 of much nicer and/or completely new code and (perhaps most uniquely) 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 23 having the patience to sit down and explain why and where he'd changed
24 stuff. 24 stuff.
25 25
26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting 26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
27 staff in their work on open source projects. 27 staff in their work on open source projects.
28 28
29 Change History 29 Change History
@@ -70,21 +70,21 @@
70 70
71 Thu May 31 11:56:42 PDT 2001 gkh 71 Thu May 31 11:56:42 PDT 2001 gkh
72 switched from using spinlock to a semaphore 72 switched from using spinlock to a semaphore
73 73
74 (04/08/2001) gb 74 (04/08/2001) gb
75 Identify version on module load. 75 Identify version on module load.
76 76
77 (11/01/2000) Adam J. Richter 77 (11/01/2000) Adam J. Richter
78 usb_device_id table support. 78 usb_device_id table support.
79 79
80 Tue Oct 10 23:15:33 EST 2000 Hugh 80 Tue Oct 10 23:15:33 EST 2000 Hugh
81 Merged Paul's changes with my USA-49W mods. Work in progress 81 Merged Paul's changes with my USA-49W mods. Work in progress
82 still... 82 still...
83 83
84 Wed Jul 19 14:00:42 EST 2000 gkh 84 Wed Jul 19 14:00:42 EST 2000 gkh
85 Added module_init and module_exit functions to handle the fact that 85 Added module_init and module_exit functions to handle the fact that
86 this driver is a loadable module now. 86 this driver is a loadable module now.
87 87
88 Tue Jul 18 16:14:52 EST 2000 Hugh 88 Tue Jul 18 16:14:52 EST 2000 Hugh
89 Basic character input/output for USA-19 now mostly works, 89 Basic character input/output for USA-19 now mostly works,
90 fixed at 9600 baud for the moment. 90 fixed at 9600 baud for the moment.
@@ -107,7 +107,7 @@
107#include <linux/spinlock.h> 107#include <linux/spinlock.h>
108#include <linux/firmware.h> 108#include <linux/firmware.h>
109#include <linux/ihex.h> 109#include <linux/ihex.h>
110#include <asm/uaccess.h> 110#include <linux/uaccess.h>
111#include <linux/usb.h> 111#include <linux/usb.h>
112#include <linux/usb/serial.h> 112#include <linux/usb/serial.h>
113#include "keyspan.h" 113#include "keyspan.h"
@@ -132,15 +132,15 @@ struct keyspan_serial_private {
132 struct urb *instat_urb; 132 struct urb *instat_urb;
133 char instat_buf[INSTAT_BUFLEN]; 133 char instat_buf[INSTAT_BUFLEN];
134 134
135 /* added to support 49wg, where data from all 4 ports comes in on 1 EP */ 135 /* added to support 49wg, where data from all 4 ports comes in
136 /* and high-speed supported */ 136 on 1 EP and high-speed supported */
137 struct urb *indat_urb; 137 struct urb *indat_urb;
138 char indat_buf[INDAT49W_BUFLEN]; 138 char indat_buf[INDAT49W_BUFLEN];
139 139
140 /* XXX this one probably will need a lock */ 140 /* XXX this one probably will need a lock */
141 struct urb *glocont_urb; 141 struct urb *glocont_urb;
142 char glocont_buf[GLOCONT_BUFLEN]; 142 char glocont_buf[GLOCONT_BUFLEN];
143 char ctrl_buf[8]; // for EP0 control message 143 char ctrl_buf[8]; /* for EP0 control message */
144}; 144};
145 145
146struct keyspan_port_private { 146struct keyspan_port_private {
@@ -186,19 +186,19 @@ struct keyspan_port_private {
186 int resend_cont; /* need to resend control packet */ 186 int resend_cont; /* need to resend control packet */
187}; 187};
188 188
189
190/* Include Keyspan message headers. All current Keyspan Adapters 189/* Include Keyspan message headers. All current Keyspan Adapters
191 make use of one of five message formats which are referred 190 make use of one of five message formats which are referred
192 to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and within this driver. */ 191 to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and
192 within this driver. */
193#include "keyspan_usa26msg.h" 193#include "keyspan_usa26msg.h"
194#include "keyspan_usa28msg.h" 194#include "keyspan_usa28msg.h"
195#include "keyspan_usa49msg.h" 195#include "keyspan_usa49msg.h"
196#include "keyspan_usa90msg.h" 196#include "keyspan_usa90msg.h"
197#include "keyspan_usa67msg.h" 197#include "keyspan_usa67msg.h"
198 198
199 199
200/* Functions used by new usb-serial code. */ 200/* Functions used by new usb-serial code. */
201static int __init keyspan_init (void) 201static int __init keyspan_init(void)
202{ 202{
203 int retval; 203 int retval;
204 retval = usb_serial_register(&keyspan_pre_device); 204 retval = usb_serial_register(&keyspan_pre_device);
@@ -214,7 +214,7 @@ static int __init keyspan_init (void)
214 if (retval) 214 if (retval)
215 goto failed_4port_device_register; 215 goto failed_4port_device_register;
216 retval = usb_register(&keyspan_driver); 216 retval = usb_register(&keyspan_driver);
217 if (retval) 217 if (retval)
218 goto failed_usb_register; 218 goto failed_usb_register;
219 219
220 info(DRIVER_VERSION ":" DRIVER_DESC); 220 info(DRIVER_VERSION ":" DRIVER_DESC);
@@ -232,13 +232,13 @@ failed_pre_device_register:
232 return retval; 232 return retval;
233} 233}
234 234
235static void __exit keyspan_exit (void) 235static void __exit keyspan_exit(void)
236{ 236{
237 usb_deregister (&keyspan_driver); 237 usb_deregister(&keyspan_driver);
238 usb_serial_deregister (&keyspan_pre_device); 238 usb_serial_deregister(&keyspan_pre_device);
239 usb_serial_deregister (&keyspan_1port_device); 239 usb_serial_deregister(&keyspan_1port_device);
240 usb_serial_deregister (&keyspan_2port_device); 240 usb_serial_deregister(&keyspan_2port_device);
241 usb_serial_deregister (&keyspan_4port_device); 241 usb_serial_deregister(&keyspan_4port_device);
242} 242}
243 243
244module_init(keyspan_init); 244module_init(keyspan_init);
@@ -249,7 +249,7 @@ static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
249 struct usb_serial_port *port = tty->driver_data; 249 struct usb_serial_port *port = tty->driver_data;
250 struct keyspan_port_private *p_priv; 250 struct keyspan_port_private *p_priv;
251 251
252 dbg("%s", __func__); 252 dbg("%s", __func__);
253 253
254 p_priv = usb_get_serial_port_data(port); 254 p_priv = usb_get_serial_port_data(port);
255 255
@@ -262,7 +262,7 @@ static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
262} 262}
263 263
264 264
265static void keyspan_set_termios (struct tty_struct *tty, 265static void keyspan_set_termios(struct tty_struct *tty,
266 struct usb_serial_port *port, struct ktermios *old_termios) 266 struct usb_serial_port *port, struct ktermios *old_termios)
267{ 267{
268 int baud_rate, device_port; 268 int baud_rate, device_port;
@@ -280,7 +280,7 @@ static void keyspan_set_termios (struct tty_struct *tty,
280 /* Baud rate calculation takes baud rate as an integer 280 /* Baud rate calculation takes baud rate as an integer
281 so other rates can be generated if desired. */ 281 so other rates can be generated if desired. */
282 baud_rate = tty_get_baud_rate(tty); 282 baud_rate = tty_get_baud_rate(tty);
283 /* If no match or invalid, don't change */ 283 /* If no match or invalid, don't change */
284 if (d_details->calculate_baud_rate(baud_rate, d_details->baudclk, 284 if (d_details->calculate_baud_rate(baud_rate, d_details->baudclk,
285 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) { 285 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
286 /* FIXME - more to do here to ensure rate changes cleanly */ 286 /* FIXME - more to do here to ensure rate changes cleanly */
@@ -305,13 +305,13 @@ static int keyspan_tiocmget(struct tty_struct *tty, struct file *file)
305 struct usb_serial_port *port = tty->driver_data; 305 struct usb_serial_port *port = tty->driver_data;
306 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port); 306 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
307 unsigned int value; 307 unsigned int value;
308 308
309 value = ((p_priv->rts_state) ? TIOCM_RTS : 0) | 309 value = ((p_priv->rts_state) ? TIOCM_RTS : 0) |
310 ((p_priv->dtr_state) ? TIOCM_DTR : 0) | 310 ((p_priv->dtr_state) ? TIOCM_DTR : 0) |
311 ((p_priv->cts_state) ? TIOCM_CTS : 0) | 311 ((p_priv->cts_state) ? TIOCM_CTS : 0) |
312 ((p_priv->dsr_state) ? TIOCM_DSR : 0) | 312 ((p_priv->dsr_state) ? TIOCM_DSR : 0) |
313 ((p_priv->dcd_state) ? TIOCM_CAR : 0) | 313 ((p_priv->dcd_state) ? TIOCM_CAR : 0) |
314 ((p_priv->ri_state) ? TIOCM_RNG : 0); 314 ((p_priv->ri_state) ? TIOCM_RNG : 0);
315 315
316 return value; 316 return value;
317} 317}
@@ -321,7 +321,7 @@ static int keyspan_tiocmset(struct tty_struct *tty, struct file *file,
321{ 321{
322 struct usb_serial_port *port = tty->driver_data; 322 struct usb_serial_port *port = tty->driver_data;
323 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port); 323 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
324 324
325 if (set & TIOCM_RTS) 325 if (set & TIOCM_RTS)
326 p_priv->rts_state = 1; 326 p_priv->rts_state = 1;
327 if (set & TIOCM_DTR) 327 if (set & TIOCM_DTR)
@@ -344,19 +344,19 @@ static int keyspan_write(struct tty_struct *tty,
344 int flip; 344 int flip;
345 int left, todo; 345 int left, todo;
346 struct urb *this_urb; 346 struct urb *this_urb;
347 int err, maxDataLen, dataOffset; 347 int err, maxDataLen, dataOffset;
348 348
349 p_priv = usb_get_serial_port_data(port); 349 p_priv = usb_get_serial_port_data(port);
350 d_details = p_priv->device_details; 350 d_details = p_priv->device_details;
351 351
352 if (d_details->msg_format == msg_usa90) { 352 if (d_details->msg_format == msg_usa90) {
353 maxDataLen = 64; 353 maxDataLen = 64;
354 dataOffset = 0; 354 dataOffset = 0;
355 } else { 355 } else {
356 maxDataLen = 63; 356 maxDataLen = 63;
357 dataOffset = 1; 357 dataOffset = 1;
358 } 358 }
359 359
360 dbg("%s - for port %d (%d chars), flip=%d", 360 dbg("%s - for port %d (%d chars), flip=%d",
361 __func__, port->number, count, p_priv->out_flip); 361 __func__, port->number, count, p_priv->out_flip);
362 362
@@ -366,37 +366,40 @@ static int keyspan_write(struct tty_struct *tty,
366 todo = maxDataLen; 366 todo = maxDataLen;
367 367
368 flip = p_priv->out_flip; 368 flip = p_priv->out_flip;
369 369
370 /* Check we have a valid urb/endpoint before we use it... */ 370 /* Check we have a valid urb/endpoint before we use it... */
371 if ((this_urb = p_priv->out_urbs[flip]) == NULL) { 371 this_urb = p_priv->out_urbs[flip];
372 if (this_urb == NULL) {
372 /* no bulk out, so return 0 bytes written */ 373 /* no bulk out, so return 0 bytes written */
373 dbg("%s - no output urb :(", __func__); 374 dbg("%s - no output urb :(", __func__);
374 return count; 375 return count;
375 } 376 }
376 377
377 dbg("%s - endpoint %d flip %d", __func__, usb_pipeendpoint(this_urb->pipe), flip); 378 dbg("%s - endpoint %d flip %d",
379 __func__, usb_pipeendpoint(this_urb->pipe), flip);
378 380
379 if (this_urb->status == -EINPROGRESS) { 381 if (this_urb->status == -EINPROGRESS) {
380 if (time_before(jiffies, p_priv->tx_start_time[flip] + 10 * HZ)) 382 if (time_before(jiffies,
383 p_priv->tx_start_time[flip] + 10 * HZ))
381 break; 384 break;
382 usb_unlink_urb(this_urb); 385 usb_unlink_urb(this_urb);
383 break; 386 break;
384 } 387 }
385 388
386 /* First byte in buffer is "last flag" (except for usa19hx) - unused so 389 /* First byte in buffer is "last flag" (except for usa19hx)
387 for now so set to zero */ 390 - unused so for now so set to zero */
388 ((char *)this_urb->transfer_buffer)[0] = 0; 391 ((char *)this_urb->transfer_buffer)[0] = 0;
389 392
390 memcpy (this_urb->transfer_buffer + dataOffset, buf, todo); 393 memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
391 buf += todo; 394 buf += todo;
392 395
393 /* send the data out the bulk port */ 396 /* send the data out the bulk port */
394 this_urb->transfer_buffer_length = todo + dataOffset; 397 this_urb->transfer_buffer_length = todo + dataOffset;
395 398
396 this_urb->dev = port->serial->dev; 399 this_urb->dev = port->serial->dev;
397 if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) { 400 err = usb_submit_urb(this_urb, GFP_ATOMIC);
401 if (err != 0)
398 dbg("usb_submit_urb(write bulk) failed (%d)", err); 402 dbg("usb_submit_urb(write bulk) failed (%d)", err);
399 }
400 p_priv->tx_start_time[flip] = jiffies; 403 p_priv->tx_start_time[flip] = jiffies;
401 404
402 /* Flip for next time if usa26 or usa28 interface 405 /* Flip for next time if usa26 or usa28 interface
@@ -416,7 +419,7 @@ static void usa26_indat_callback(struct urb *urb)
416 unsigned char *data = urb->transfer_buffer; 419 unsigned char *data = urb->transfer_buffer;
417 int status = urb->status; 420 int status = urb->status;
418 421
419 dbg ("%s", __func__); 422 dbg("%s", __func__);
420 423
421 endpoint = usb_pipeendpoint(urb->pipe); 424 endpoint = usb_pipeendpoint(urb->pipe);
422 425
@@ -431,13 +434,14 @@ static void usa26_indat_callback(struct urb *urb)
431 if (tty && urb->actual_length) { 434 if (tty && urb->actual_length) {
432 /* 0x80 bit is error flag */ 435 /* 0x80 bit is error flag */
433 if ((data[0] & 0x80) == 0) { 436 if ((data[0] & 0x80) == 0) {
434 /* no errors on individual bytes, only possible overrun err*/ 437 /* no errors on individual bytes, only
438 possible overrun err */
435 if (data[0] & RXERROR_OVERRUN) 439 if (data[0] & RXERROR_OVERRUN)
436 err = TTY_OVERRUN; 440 err = TTY_OVERRUN;
437 else err = 0; 441 else
438 for (i = 1; i < urb->actual_length ; ++i) { 442 err = 0;
443 for (i = 1; i < urb->actual_length ; ++i)
439 tty_insert_flip_char(tty, data[i], err); 444 tty_insert_flip_char(tty, data[i], err);
440 }
441 } else { 445 } else {
442 /* some bytes had errors, every byte has status */ 446 /* some bytes had errors, every byte has status */
443 dbg("%s - RX error!!!!", __func__); 447 dbg("%s - RX error!!!!", __func__);
@@ -455,17 +459,19 @@ static void usa26_indat_callback(struct urb *urb)
455 } 459 }
456 tty_flip_buffer_push(tty); 460 tty_flip_buffer_push(tty);
457 } 461 }
458 462
459 /* Resubmit urb so we continue receiving */ 463 /* Resubmit urb so we continue receiving */
460 urb->dev = port->serial->dev; 464 urb->dev = port->serial->dev;
461 if (port->port.count) 465 if (port->port.count) {
462 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 466 err = usb_submit_urb(urb, GFP_ATOMIC);
463 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 467 if (err != 0)
464 } 468 dbg("%s - resubmit read urb failed. (%d)",
469 __func__, err);
470 }
465 return; 471 return;
466} 472}
467 473
468 /* Outdat handling is common for all devices */ 474/* Outdat handling is common for all devices */
469static void usa2x_outdat_callback(struct urb *urb) 475static void usa2x_outdat_callback(struct urb *urb)
470{ 476{
471 struct usb_serial_port *port; 477 struct usb_serial_port *port;
@@ -473,7 +479,7 @@ static void usa2x_outdat_callback(struct urb *urb)
473 479
474 port = urb->context; 480 port = urb->context;
475 p_priv = usb_get_serial_port_data(port); 481 p_priv = usb_get_serial_port_data(port);
476 dbg ("%s - urb %d", __func__, urb == p_priv->out_urbs[1]); 482 dbg("%s - urb %d", __func__, urb == p_priv->out_urbs[1]);
477 483
478 if (port->port.count) 484 if (port->port.count)
479 usb_serial_port_softint(port); 485 usb_serial_port_softint(port);
@@ -481,8 +487,8 @@ static void usa2x_outdat_callback(struct urb *urb)
481 487
482static void usa26_inack_callback(struct urb *urb) 488static void usa26_inack_callback(struct urb *urb)
483{ 489{
484 dbg ("%s", __func__); 490 dbg("%s", __func__);
485 491
486} 492}
487 493
488static void usa26_outcont_callback(struct urb *urb) 494static void usa26_outcont_callback(struct urb *urb)
@@ -494,8 +500,9 @@ static void usa26_outcont_callback(struct urb *urb)
494 p_priv = usb_get_serial_port_data(port); 500 p_priv = usb_get_serial_port_data(port);
495 501
496 if (p_priv->resend_cont) { 502 if (p_priv->resend_cont) {
497 dbg ("%s - sending setup", __func__); 503 dbg("%s - sending setup", __func__);
498 keyspan_usa26_send_setup(port->serial, port, p_priv->resend_cont - 1); 504 keyspan_usa26_send_setup(port->serial, port,
505 p_priv->resend_cont - 1);
499 } 506 }
500} 507}
501 508
@@ -531,14 +538,14 @@ static void usa26_instat_callback(struct urb *urb)
531 /* Now do something useful with the data */ 538 /* Now do something useful with the data */
532 539
533 540
534 /* Check port number from message and retrieve private data */ 541 /* Check port number from message and retrieve private data */
535 if (msg->port >= serial->num_ports) { 542 if (msg->port >= serial->num_ports) {
536 dbg ("%s - Unexpected port number %d", __func__, msg->port); 543 dbg("%s - Unexpected port number %d", __func__, msg->port);
537 goto exit; 544 goto exit;
538 } 545 }
539 port = serial->port[msg->port]; 546 port = serial->port[msg->port];
540 p_priv = usb_get_serial_port_data(port); 547 p_priv = usb_get_serial_port_data(port);
541 548
542 /* Update handshaking pin state information */ 549 /* Update handshaking pin state information */
543 old_dcd_state = p_priv->dcd_state; 550 old_dcd_state = p_priv->dcd_state;
544 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0); 551 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
@@ -553,19 +560,18 @@ static void usa26_instat_callback(struct urb *urb)
553 /* else */ 560 /* else */
554 /* wake_up_interruptible(&p_priv->open_wait); */ 561 /* wake_up_interruptible(&p_priv->open_wait); */
555 } 562 }
556 563
557 /* Resubmit urb so we continue receiving */ 564 /* Resubmit urb so we continue receiving */
558 urb->dev = serial->dev; 565 urb->dev = serial->dev;
559 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 566 err = usb_submit_urb(urb, GFP_ATOMIC);
567 if (err != 0)
560 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 568 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
561 }
562exit: ; 569exit: ;
563} 570}
564 571
565static void usa26_glocont_callback(struct urb *urb) 572static void usa26_glocont_callback(struct urb *urb)
566{ 573{
567 dbg ("%s", __func__); 574 dbg("%s", __func__);
568
569} 575}
570 576
571 577
@@ -578,7 +584,7 @@ static void usa28_indat_callback(struct urb *urb)
578 struct keyspan_port_private *p_priv; 584 struct keyspan_port_private *p_priv;
579 int status = urb->status; 585 int status = urb->status;
580 586
581 dbg ("%s", __func__); 587 dbg("%s", __func__);
582 588
583 port = urb->context; 589 port = urb->context;
584 p_priv = usb_get_serial_port_data(port); 590 p_priv = usb_get_serial_port_data(port);
@@ -600,18 +606,19 @@ static void usa28_indat_callback(struct urb *urb)
600 606
601 tty = port->port.tty; 607 tty = port->port.tty;
602 if (urb->actual_length) { 608 if (urb->actual_length) {
603 for (i = 0; i < urb->actual_length ; ++i) { 609 for (i = 0; i < urb->actual_length ; ++i)
604 tty_insert_flip_char(tty, data[i], 0); 610 tty_insert_flip_char(tty, data[i], 0);
605 }
606 tty_flip_buffer_push(tty); 611 tty_flip_buffer_push(tty);
607 } 612 }
608 613
609 /* Resubmit urb so we continue receiving */ 614 /* Resubmit urb so we continue receiving */
610 urb->dev = port->serial->dev; 615 urb->dev = port->serial->dev;
611 if (port->port.count) 616 if (port->port.count) {
612 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 617 err = usb_submit_urb(urb, GFP_ATOMIC);
613 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 618 if (err != 0)
614 } 619 dbg("%s - resubmit read urb failed. (%d)",
620 __func__, err);
621 }
615 p_priv->in_flip ^= 1; 622 p_priv->in_flip ^= 1;
616 623
617 urb = p_priv->in_urbs[p_priv->in_flip]; 624 urb = p_priv->in_urbs[p_priv->in_flip];
@@ -620,7 +627,7 @@ static void usa28_indat_callback(struct urb *urb)
620 627
621static void usa28_inack_callback(struct urb *urb) 628static void usa28_inack_callback(struct urb *urb)
622{ 629{
623 dbg ("%s", __func__); 630 dbg("%s", __func__);
624} 631}
625 632
626static void usa28_outcont_callback(struct urb *urb) 633static void usa28_outcont_callback(struct urb *urb)
@@ -632,8 +639,9 @@ static void usa28_outcont_callback(struct urb *urb)
632 p_priv = usb_get_serial_port_data(port); 639 p_priv = usb_get_serial_port_data(port);
633 640
634 if (p_priv->resend_cont) { 641 if (p_priv->resend_cont) {
635 dbg ("%s - sending setup", __func__); 642 dbg("%s - sending setup", __func__);
636 keyspan_usa28_send_setup(port->serial, port, p_priv->resend_cont - 1); 643 keyspan_usa28_send_setup(port->serial, port,
644 p_priv->resend_cont - 1);
637 } 645 }
638} 646}
639 647
@@ -663,19 +671,18 @@ static void usa28_instat_callback(struct urb *urb)
663 /*dbg("%s %x %x %x %x %x %x %x %x %x %x %x %x", __func__ 671 /*dbg("%s %x %x %x %x %x %x %x %x %x %x %x %x", __func__
664 data[0], data[1], data[2], data[3], data[4], data[5], 672 data[0], data[1], data[2], data[3], data[4], data[5],
665 data[6], data[7], data[8], data[9], data[10], data[11]);*/ 673 data[6], data[7], data[8], data[9], data[10], data[11]);*/
666
667 /* Now do something useful with the data */
668 msg = (struct keyspan_usa28_portStatusMessage *)data;
669 674
675 /* Now do something useful with the data */
676 msg = (struct keyspan_usa28_portStatusMessage *)data;
670 677
671 /* Check port number from message and retrieve private data */ 678 /* Check port number from message and retrieve private data */
672 if (msg->port >= serial->num_ports) { 679 if (msg->port >= serial->num_ports) {
673 dbg ("%s - Unexpected port number %d", __func__, msg->port); 680 dbg("%s - Unexpected port number %d", __func__, msg->port);
674 goto exit; 681 goto exit;
675 } 682 }
676 port = serial->port[msg->port]; 683 port = serial->port[msg->port];
677 p_priv = usb_get_serial_port_data(port); 684 p_priv = usb_get_serial_port_data(port);
678 685
679 /* Update handshaking pin state information */ 686 /* Update handshaking pin state information */
680 old_dcd_state = p_priv->dcd_state; 687 old_dcd_state = p_priv->dcd_state;
681 p_priv->cts_state = ((msg->cts) ? 1 : 0); 688 p_priv->cts_state = ((msg->cts) ? 1 : 0);
@@ -693,15 +700,15 @@ static void usa28_instat_callback(struct urb *urb)
693 700
694 /* Resubmit urb so we continue receiving */ 701 /* Resubmit urb so we continue receiving */
695 urb->dev = serial->dev; 702 urb->dev = serial->dev;
696 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 703 err = usb_submit_urb(urb, GFP_ATOMIC);
704 if (err != 0)
697 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 705 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
698 }
699exit: ; 706exit: ;
700} 707}
701 708
702static void usa28_glocont_callback(struct urb *urb) 709static void usa28_glocont_callback(struct urb *urb)
703{ 710{
704 dbg ("%s", __func__); 711 dbg("%s", __func__);
705} 712}
706 713
707 714
@@ -712,7 +719,7 @@ static void usa49_glocont_callback(struct urb *urb)
712 struct keyspan_port_private *p_priv; 719 struct keyspan_port_private *p_priv;
713 int i; 720 int i;
714 721
715 dbg ("%s", __func__); 722 dbg("%s", __func__);
716 723
717 serial = urb->context; 724 serial = urb->context;
718 for (i = 0; i < serial->num_ports; ++i) { 725 for (i = 0; i < serial->num_ports; ++i) {
@@ -720,8 +727,9 @@ static void usa49_glocont_callback(struct urb *urb)
720 p_priv = usb_get_serial_port_data(port); 727 p_priv = usb_get_serial_port_data(port);
721 728
722 if (p_priv->resend_cont) { 729 if (p_priv->resend_cont) {
723 dbg ("%s - sending setup", __func__); 730 dbg("%s - sending setup", __func__);
724 keyspan_usa49_send_setup(serial, port, p_priv->resend_cont - 1); 731 keyspan_usa49_send_setup(serial, port,
732 p_priv->resend_cont - 1);
725 break; 733 break;
726 } 734 }
727 } 735 }
@@ -740,7 +748,7 @@ static void usa49_instat_callback(struct urb *urb)
740 int old_dcd_state; 748 int old_dcd_state;
741 int status = urb->status; 749 int status = urb->status;
742 750
743 dbg ("%s", __func__); 751 dbg("%s", __func__);
744 752
745 serial = urb->context; 753 serial = urb->context;
746 754
@@ -749,7 +757,8 @@ static void usa49_instat_callback(struct urb *urb)
749 return; 757 return;
750 } 758 }
751 759
752 if (urb->actual_length != sizeof(struct keyspan_usa49_portStatusMessage)) { 760 if (urb->actual_length !=
761 sizeof(struct keyspan_usa49_portStatusMessage)) {
753 dbg("%s - bad length %d", __func__, urb->actual_length); 762 dbg("%s - bad length %d", __func__, urb->actual_length);
754 goto exit; 763 goto exit;
755 } 764 }
@@ -757,18 +766,19 @@ static void usa49_instat_callback(struct urb *urb)
757 /*dbg(" %x %x %x %x %x %x %x %x %x %x %x", __func__, 766 /*dbg(" %x %x %x %x %x %x %x %x %x %x %x", __func__,
758 data[0], data[1], data[2], data[3], data[4], data[5], 767 data[0], data[1], data[2], data[3], data[4], data[5],
759 data[6], data[7], data[8], data[9], data[10]);*/ 768 data[6], data[7], data[8], data[9], data[10]);*/
760 769
761 /* Now do something useful with the data */ 770 /* Now do something useful with the data */
762 msg = (struct keyspan_usa49_portStatusMessage *)data; 771 msg = (struct keyspan_usa49_portStatusMessage *)data;
763 772
764 /* Check port number from message and retrieve private data */ 773 /* Check port number from message and retrieve private data */
765 if (msg->portNumber >= serial->num_ports) { 774 if (msg->portNumber >= serial->num_ports) {
766 dbg ("%s - Unexpected port number %d", __func__, msg->portNumber); 775 dbg("%s - Unexpected port number %d",
776 __func__, msg->portNumber);
767 goto exit; 777 goto exit;
768 } 778 }
769 port = serial->port[msg->portNumber]; 779 port = serial->port[msg->portNumber];
770 p_priv = usb_get_serial_port_data(port); 780 p_priv = usb_get_serial_port_data(port);
771 781
772 /* Update handshaking pin state information */ 782 /* Update handshaking pin state information */
773 old_dcd_state = p_priv->dcd_state; 783 old_dcd_state = p_priv->dcd_state;
774 p_priv->cts_state = ((msg->cts) ? 1 : 0); 784 p_priv->cts_state = ((msg->cts) ? 1 : 0);
@@ -784,18 +794,18 @@ static void usa49_instat_callback(struct urb *urb)
784 /* wake_up_interruptible(&p_priv->open_wait); */ 794 /* wake_up_interruptible(&p_priv->open_wait); */
785 } 795 }
786 796
787 /* Resubmit urb so we continue receiving */ 797 /* Resubmit urb so we continue receiving */
788 urb->dev = serial->dev; 798 urb->dev = serial->dev;
789 799
790 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 800 err = usb_submit_urb(urb, GFP_ATOMIC);
801 if (err != 0)
791 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 802 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
792 }
793exit: ; 803exit: ;
794} 804}
795 805
796static void usa49_inack_callback(struct urb *urb) 806static void usa49_inack_callback(struct urb *urb)
797{ 807{
798 dbg ("%s", __func__); 808 dbg("%s", __func__);
799} 809}
800 810
801static void usa49_indat_callback(struct urb *urb) 811static void usa49_indat_callback(struct urb *urb)
@@ -807,7 +817,7 @@ static void usa49_indat_callback(struct urb *urb)
807 unsigned char *data = urb->transfer_buffer; 817 unsigned char *data = urb->transfer_buffer;
808 int status = urb->status; 818 int status = urb->status;
809 819
810 dbg ("%s", __func__); 820 dbg("%s", __func__);
811 821
812 endpoint = usb_pipeendpoint(urb->pipe); 822 endpoint = usb_pipeendpoint(urb->pipe);
813 823
@@ -823,9 +833,8 @@ static void usa49_indat_callback(struct urb *urb)
823 /* 0x80 bit is error flag */ 833 /* 0x80 bit is error flag */
824 if ((data[0] & 0x80) == 0) { 834 if ((data[0] & 0x80) == 0) {
825 /* no error on any byte */ 835 /* no error on any byte */
826 for (i = 1; i < urb->actual_length ; ++i) { 836 for (i = 1; i < urb->actual_length ; ++i)
827 tty_insert_flip_char(tty, data[i], 0); 837 tty_insert_flip_char(tty, data[i], 0);
828 }
829 } else { 838 } else {
830 /* some bytes had errors, every byte has status */ 839 /* some bytes had errors, every byte has status */
831 for (i = 0; i + 1 < urb->actual_length; i += 2) { 840 for (i = 0; i + 1 < urb->actual_length; i += 2) {
@@ -842,13 +851,15 @@ static void usa49_indat_callback(struct urb *urb)
842 } 851 }
843 tty_flip_buffer_push(tty); 852 tty_flip_buffer_push(tty);
844 } 853 }
845 854
846 /* Resubmit urb so we continue receiving */ 855 /* Resubmit urb so we continue receiving */
847 urb->dev = port->serial->dev; 856 urb->dev = port->serial->dev;
848 if (port->port.count) 857 if (port->port.count) {
849 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 858 err = usb_submit_urb(urb, GFP_ATOMIC);
850 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 859 if (err != 0)
851 } 860 dbg("%s - resubmit read urb failed. (%d)",
861 __func__, err);
862 }
852} 863}
853 864
854static void usa49wg_indat_callback(struct urb *urb) 865static void usa49wg_indat_callback(struct urb *urb)
@@ -860,7 +871,7 @@ static void usa49wg_indat_callback(struct urb *urb)
860 unsigned char *data = urb->transfer_buffer; 871 unsigned char *data = urb->transfer_buffer;
861 int status = urb->status; 872 int status = urb->status;
862 873
863 dbg ("%s", __func__); 874 dbg("%s", __func__);
864 875
865 serial = urb->context; 876 serial = urb->context;
866 877
@@ -878,7 +889,7 @@ static void usa49wg_indat_callback(struct urb *urb)
878 889
879 /* Check port number from message*/ 890 /* Check port number from message*/
880 if (data[i] >= serial->num_ports) { 891 if (data[i] >= serial->num_ports) {
881 dbg ("%s - Unexpected port number %d", 892 dbg("%s - Unexpected port number %d",
882 __func__, data[i]); 893 __func__, data[i]);
883 return; 894 return;
884 } 895 }
@@ -931,7 +942,7 @@ static void usa49wg_indat_callback(struct urb *urb)
931/* not used, usa-49 doesn't have per-port control endpoints */ 942/* not used, usa-49 doesn't have per-port control endpoints */
932static void usa49_outcont_callback(struct urb *urb) 943static void usa49_outcont_callback(struct urb *urb)
933{ 944{
934 dbg ("%s", __func__); 945 dbg("%s", __func__);
935} 946}
936 947
937static void usa90_indat_callback(struct urb *urb) 948static void usa90_indat_callback(struct urb *urb)
@@ -944,7 +955,7 @@ static void usa90_indat_callback(struct urb *urb)
944 unsigned char *data = urb->transfer_buffer; 955 unsigned char *data = urb->transfer_buffer;
945 int status = urb->status; 956 int status = urb->status;
946 957
947 dbg ("%s", __func__); 958 dbg("%s", __func__);
948 959
949 endpoint = usb_pipeendpoint(urb->pipe); 960 endpoint = usb_pipeendpoint(urb->pipe);
950 961
@@ -959,27 +970,25 @@ static void usa90_indat_callback(struct urb *urb)
959 970
960 tty = port->port.tty; 971 tty = port->port.tty;
961 if (urb->actual_length) { 972 if (urb->actual_length) {
962
963 /* if current mode is DMA, looks like usa28 format 973 /* if current mode is DMA, looks like usa28 format
964 otherwise looks like usa26 data format */ 974 otherwise looks like usa26 data format */
965 975
966 if (p_priv->baud > 57600) { 976 if (p_priv->baud > 57600) {
967 for (i = 0; i < urb->actual_length ; ++i) 977 for (i = 0; i < urb->actual_length ; ++i)
968 tty_insert_flip_char(tty, data[i], 0); 978 tty_insert_flip_char(tty, data[i], 0);
969 } 979 } else {
970 else {
971
972 /* 0x80 bit is error flag */ 980 /* 0x80 bit is error flag */
973 if ((data[0] & 0x80) == 0) { 981 if ((data[0] & 0x80) == 0) {
974 /* no errors on individual bytes, only possible overrun err*/ 982 /* no errors on individual bytes, only
983 possible overrun err*/
975 if (data[0] & RXERROR_OVERRUN) 984 if (data[0] & RXERROR_OVERRUN)
976 err = TTY_OVERRUN; 985 err = TTY_OVERRUN;
977 else err = 0; 986 else
978 for (i = 1; i < urb->actual_length ; ++i) 987 err = 0;
979 tty_insert_flip_char(tty, data[i], err); 988 for (i = 1; i < urb->actual_length ; ++i)
980 989 tty_insert_flip_char(tty, data[i],
981 } 990 err);
982 else { 991 } else {
983 /* some bytes had errors, every byte has status */ 992 /* some bytes had errors, every byte has status */
984 dbg("%s - RX error!!!!", __func__); 993 dbg("%s - RX error!!!!", __func__);
985 for (i = 0; i + 1 < urb->actual_length; i += 2) { 994 for (i = 0; i + 1 < urb->actual_length; i += 2) {
@@ -991,19 +1000,22 @@ static void usa90_indat_callback(struct urb *urb)
991 if (stat & RXERROR_PARITY) 1000 if (stat & RXERROR_PARITY)
992 flag |= TTY_PARITY; 1001 flag |= TTY_PARITY;
993 /* XXX should handle break (0x10) */ 1002 /* XXX should handle break (0x10) */
994 tty_insert_flip_char(tty, data[i+1], flag); 1003 tty_insert_flip_char(tty, data[i+1],
1004 flag);
995 } 1005 }
996 } 1006 }
997 } 1007 }
998 tty_flip_buffer_push(tty); 1008 tty_flip_buffer_push(tty);
999 } 1009 }
1000 1010
1001 /* Resubmit urb so we continue receiving */ 1011 /* Resubmit urb so we continue receiving */
1002 urb->dev = port->serial->dev; 1012 urb->dev = port->serial->dev;
1003 if (port->port.count) 1013 if (port->port.count) {
1004 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 1014 err = usb_submit_urb(urb, GFP_ATOMIC);
1005 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 1015 if (err != 0)
1006 } 1016 dbg("%s - resubmit read urb failed. (%d)",
1017 __func__, err);
1018 }
1007 return; 1019 return;
1008} 1020}
1009 1021
@@ -1035,7 +1047,7 @@ static void usa90_instat_callback(struct urb *urb)
1035 1047
1036 port = serial->port[0]; 1048 port = serial->port[0];
1037 p_priv = usb_get_serial_port_data(port); 1049 p_priv = usb_get_serial_port_data(port);
1038 1050
1039 /* Update handshaking pin state information */ 1051 /* Update handshaking pin state information */
1040 old_dcd_state = p_priv->dcd_state; 1052 old_dcd_state = p_priv->dcd_state;
1041 p_priv->cts_state = ((msg->cts) ? 1 : 0); 1053 p_priv->cts_state = ((msg->cts) ? 1 : 0);
@@ -1050,12 +1062,12 @@ static void usa90_instat_callback(struct urb *urb)
1050 /* else */ 1062 /* else */
1051 /* wake_up_interruptible(&p_priv->open_wait); */ 1063 /* wake_up_interruptible(&p_priv->open_wait); */
1052 } 1064 }
1053 1065
1054 /* Resubmit urb so we continue receiving */ 1066 /* Resubmit urb so we continue receiving */
1055 urb->dev = serial->dev; 1067 urb->dev = serial->dev;
1056 if ((err = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { 1068 err = usb_submit_urb(urb, GFP_ATOMIC);
1069 if (err != 0)
1057 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 1070 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
1058 }
1059exit: 1071exit:
1060 ; 1072 ;
1061} 1073}
@@ -1069,8 +1081,9 @@ static void usa90_outcont_callback(struct urb *urb)
1069 p_priv = usb_get_serial_port_data(port); 1081 p_priv = usb_get_serial_port_data(port);
1070 1082
1071 if (p_priv->resend_cont) { 1083 if (p_priv->resend_cont) {
1072 dbg ("%s - sending setup", __func__); 1084 dbg("%s - sending setup", __func__);
1073 keyspan_usa90_send_setup(port->serial, port, p_priv->resend_cont - 1); 1085 keyspan_usa90_send_setup(port->serial, port,
1086 p_priv->resend_cont - 1);
1074 } 1087 }
1075} 1088}
1076 1089
@@ -1086,7 +1099,7 @@ static void usa67_instat_callback(struct urb *urb)
1086 int old_dcd_state; 1099 int old_dcd_state;
1087 int status = urb->status; 1100 int status = urb->status;
1088 1101
1089 dbg ("%s", __func__); 1102 dbg("%s", __func__);
1090 1103
1091 serial = urb->context; 1104 serial = urb->context;
1092 1105
@@ -1095,7 +1108,8 @@ static void usa67_instat_callback(struct urb *urb)
1095 return; 1108 return;
1096 } 1109 }
1097 1110
1098 if (urb->actual_length != sizeof(struct keyspan_usa67_portStatusMessage)) { 1111 if (urb->actual_length !=
1112 sizeof(struct keyspan_usa67_portStatusMessage)) {
1099 dbg("%s - bad length %d", __func__, urb->actual_length); 1113 dbg("%s - bad length %d", __func__, urb->actual_length);
1100 return; 1114 return;
1101 } 1115 }
@@ -1106,7 +1120,7 @@ static void usa67_instat_callback(struct urb *urb)
1106 1120
1107 /* Check port number from message and retrieve private data */ 1121 /* Check port number from message and retrieve private data */
1108 if (msg->port >= serial->num_ports) { 1122 if (msg->port >= serial->num_ports) {
1109 dbg ("%s - Unexpected port number %d", __func__, msg->port); 1123 dbg("%s - Unexpected port number %d", __func__, msg->port);
1110 return; 1124 return;
1111 } 1125 }
1112 1126
@@ -1140,7 +1154,7 @@ static void usa67_glocont_callback(struct urb *urb)
1140 struct keyspan_port_private *p_priv; 1154 struct keyspan_port_private *p_priv;
1141 int i; 1155 int i;
1142 1156
1143 dbg ("%s", __func__); 1157 dbg("%s", __func__);
1144 1158
1145 serial = urb->context; 1159 serial = urb->context;
1146 for (i = 0; i < serial->num_ports; ++i) { 1160 for (i = 0; i < serial->num_ports; ++i) {
@@ -1148,7 +1162,7 @@ static void usa67_glocont_callback(struct urb *urb)
1148 p_priv = usb_get_serial_port_data(port); 1162 p_priv = usb_get_serial_port_data(port);
1149 1163
1150 if (p_priv->resend_cont) { 1164 if (p_priv->resend_cont) {
1151 dbg ("%s - sending setup", __func__); 1165 dbg("%s - sending setup", __func__);
1152 keyspan_usa67_send_setup(serial, port, 1166 keyspan_usa67_send_setup(serial, port,
1153 p_priv->resend_cont - 1); 1167 p_priv->resend_cont - 1);
1154 break; 1168 break;
@@ -1171,20 +1185,23 @@ static int keyspan_write_room(struct tty_struct *tty)
1171 1185
1172 /* FIXME: locking */ 1186 /* FIXME: locking */
1173 if (d_details->msg_format == msg_usa90) 1187 if (d_details->msg_format == msg_usa90)
1174 data_len = 64; 1188 data_len = 64;
1175 else 1189 else
1176 data_len = 63; 1190 data_len = 63;
1177 1191
1178 flip = p_priv->out_flip; 1192 flip = p_priv->out_flip;
1179 1193
1180 /* Check both endpoints to see if any are available. */ 1194 /* Check both endpoints to see if any are available. */
1181 if ((this_urb = p_priv->out_urbs[flip]) != NULL) { 1195 this_urb = p_priv->out_urbs[flip];
1196 if (this_urb != NULL) {
1182 if (this_urb->status != -EINPROGRESS) 1197 if (this_urb->status != -EINPROGRESS)
1183 return (data_len); 1198 return data_len;
1184 flip = (flip + 1) & d_details->outdat_endp_flip; 1199 flip = (flip + 1) & d_details->outdat_endp_flip;
1185 if ((this_urb = p_priv->out_urbs[flip]) != NULL) 1200 this_urb = p_priv->out_urbs[flip];
1201 if (this_urb != NULL) {
1186 if (this_urb->status != -EINPROGRESS) 1202 if (this_urb->status != -EINPROGRESS)
1187 return (data_len); 1203 return data_len;
1204 }
1188 } 1205 }
1189 return 0; 1206 return 0;
1190} 1207}
@@ -1222,25 +1239,28 @@ static int keyspan_open(struct tty_struct *tty,
1222 1239
1223 /* Reset low level data toggle and start reading from endpoints */ 1240 /* Reset low level data toggle and start reading from endpoints */
1224 for (i = 0; i < 2; i++) { 1241 for (i = 0; i < 2; i++) {
1225 if ((urb = p_priv->in_urbs[i]) == NULL) 1242 urb = p_priv->in_urbs[i];
1243 if (urb == NULL)
1226 continue; 1244 continue;
1227 urb->dev = serial->dev; 1245 urb->dev = serial->dev;
1228 1246
1229 /* make sure endpoint data toggle is synchronized with the device */ 1247 /* make sure endpoint data toggle is synchronized
1230 1248 with the device */
1231 usb_clear_halt(urb->dev, urb->pipe); 1249 usb_clear_halt(urb->dev, urb->pipe);
1232 1250 err = usb_submit_urb(urb, GFP_KERNEL);
1233 if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) { 1251 if (err != 0)
1234 dbg("%s - submit urb %d failed (%d)", __func__, i, err); 1252 dbg("%s - submit urb %d failed (%d)",
1235 } 1253 __func__, i, err);
1236 } 1254 }
1237 1255
1238 /* Reset low level data toggle on out endpoints */ 1256 /* Reset low level data toggle on out endpoints */
1239 for (i = 0; i < 2; i++) { 1257 for (i = 0; i < 2; i++) {
1240 if ((urb = p_priv->out_urbs[i]) == NULL) 1258 urb = p_priv->out_urbs[i];
1259 if (urb == NULL)
1241 continue; 1260 continue;
1242 urb->dev = serial->dev; 1261 urb->dev = serial->dev;
1243 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe), 0); */ 1262 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1263 usb_pipeout(urb->pipe), 0); */
1244 } 1264 }
1245 1265
1246 /* get the terminal config for the setup message now so we don't 1266 /* get the terminal config for the setup message now so we don't
@@ -1264,8 +1284,8 @@ static int keyspan_open(struct tty_struct *tty,
1264 p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none; 1284 p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none;
1265 1285
1266 keyspan_send_setup(port, 1); 1286 keyspan_send_setup(port, 1);
1267 //mdelay(100); 1287 /* mdelay(100); */
1268 //keyspan_set_termios(port, NULL); 1288 /* keyspan_set_termios(port, NULL); */
1269 1289
1270 return 0; 1290 return 0;
1271} 1291}
@@ -1287,15 +1307,15 @@ static void keyspan_close(struct tty_struct *tty,
1287 dbg("%s", __func__); 1307 dbg("%s", __func__);
1288 s_priv = usb_get_serial_data(serial); 1308 s_priv = usb_get_serial_data(serial);
1289 p_priv = usb_get_serial_port_data(port); 1309 p_priv = usb_get_serial_port_data(port);
1290 1310
1291 p_priv->rts_state = 0; 1311 p_priv->rts_state = 0;
1292 p_priv->dtr_state = 0; 1312 p_priv->dtr_state = 0;
1293 1313
1294 if (serial->dev) { 1314 if (serial->dev) {
1295 keyspan_send_setup(port, 2); 1315 keyspan_send_setup(port, 2);
1296 /* pilot-xfer seems to work best with this delay */ 1316 /* pilot-xfer seems to work best with this delay */
1297 mdelay(100); 1317 mdelay(100);
1298 // keyspan_set_termios(port, NULL); 1318 /* keyspan_set_termios(port, NULL); */
1299 } 1319 }
1300 1320
1301 /*while (p_priv->outcont_urb->status == -EINPROGRESS) { 1321 /*while (p_priv->outcont_urb->status == -EINPROGRESS) {
@@ -1317,8 +1337,8 @@ static void keyspan_close(struct tty_struct *tty,
1317 port->port.tty = NULL; 1337 port->port.tty = NULL;
1318} 1338}
1319 1339
1320 /* download the firmware to a pre-renumeration device */ 1340/* download the firmware to a pre-renumeration device */
1321static int keyspan_fake_startup (struct usb_serial *serial) 1341static int keyspan_fake_startup(struct usb_serial *serial)
1322{ 1342{
1323 int response; 1343 int response;
1324 const struct ihex_binrec *record; 1344 const struct ihex_binrec *record;
@@ -1328,10 +1348,11 @@ static int keyspan_fake_startup (struct usb_serial *serial)
1328 dbg("Keyspan startup version %04x product %04x", 1348 dbg("Keyspan startup version %04x product %04x",
1329 le16_to_cpu(serial->dev->descriptor.bcdDevice), 1349 le16_to_cpu(serial->dev->descriptor.bcdDevice),
1330 le16_to_cpu(serial->dev->descriptor.idProduct)); 1350 le16_to_cpu(serial->dev->descriptor.idProduct));
1331 1351
1332 if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000) != 0x8000) { 1352 if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000)
1353 != 0x8000) {
1333 dbg("Firmware already loaded. Quitting."); 1354 dbg("Firmware already loaded. Quitting.");
1334 return(1); 1355 return 1;
1335 } 1356 }
1336 1357
1337 /* Select firmware image on the basis of idProduct */ 1358 /* Select firmware image on the basis of idProduct */
@@ -1355,11 +1376,11 @@ static int keyspan_fake_startup (struct usb_serial *serial)
1355 case keyspan_usa19_pre_product_id: 1376 case keyspan_usa19_pre_product_id:
1356 fw_name = "keyspan/usa19.fw"; 1377 fw_name = "keyspan/usa19.fw";
1357 break; 1378 break;
1358 1379
1359 case keyspan_usa19qi_pre_product_id: 1380 case keyspan_usa19qi_pre_product_id:
1360 fw_name = "keyspan/usa19qi.fw"; 1381 fw_name = "keyspan/usa19qi.fw";
1361 break; 1382 break;
1362 1383
1363 case keyspan_mpr_pre_product_id: 1384 case keyspan_mpr_pre_product_id:
1364 fw_name = "keyspan/mpr.fw"; 1385 fw_name = "keyspan/mpr.fw";
1365 break; 1386 break;
@@ -1367,15 +1388,15 @@ static int keyspan_fake_startup (struct usb_serial *serial)
1367 case keyspan_usa19qw_pre_product_id: 1388 case keyspan_usa19qw_pre_product_id:
1368 fw_name = "keyspan/usa19qw.fw"; 1389 fw_name = "keyspan/usa19qw.fw";
1369 break; 1390 break;
1370 1391
1371 case keyspan_usa18x_pre_product_id: 1392 case keyspan_usa18x_pre_product_id:
1372 fw_name = "keyspan/usa18x.fw"; 1393 fw_name = "keyspan/usa18x.fw";
1373 break; 1394 break;
1374 1395
1375 case keyspan_usa19w_pre_product_id: 1396 case keyspan_usa19w_pre_product_id:
1376 fw_name = "keyspan/usa19w.fw"; 1397 fw_name = "keyspan/usa19w.fw";
1377 break; 1398 break;
1378 1399
1379 case keyspan_usa49w_pre_product_id: 1400 case keyspan_usa49w_pre_product_id:
1380 fw_name = "keyspan/usa49w.fw"; 1401 fw_name = "keyspan/usa49w.fw";
1381 break; 1402 break;
@@ -1407,8 +1428,7 @@ static int keyspan_fake_startup (struct usb_serial *serial)
1407 (unsigned char *)record->data, 1428 (unsigned char *)record->data,
1408 be16_to_cpu(record->len), 0xa0); 1429 be16_to_cpu(record->len), 0xa0);
1409 if (response < 0) { 1430 if (response < 0) {
1410 dev_err(&serial->dev->dev, "ezusb_writememory failed for Keyspan" 1431 dev_err(&serial->dev->dev, "ezusb_writememory failed for Keyspan firmware (%d %04X %p %d)\n",
1411 "firmware (%d %04X %p %d)\n",
1412 response, be32_to_cpu(record->addr), 1432 response, be32_to_cpu(record->addr),
1413 record->data, be16_to_cpu(record->len)); 1433 record->data, be16_to_cpu(record->len));
1414 break; 1434 break;
@@ -1421,7 +1441,7 @@ static int keyspan_fake_startup (struct usb_serial *serial)
1421 response = ezusb_set_reset(serial, 0); 1441 response = ezusb_set_reset(serial, 0);
1422 1442
1423 /* we don't want this device to have a driver assigned to it. */ 1443 /* we don't want this device to have a driver assigned to it. */
1424 return (1); 1444 return 1;
1425} 1445}
1426 1446
1427/* Helper functions used by keyspan_setup_urbs */ 1447/* Helper functions used by keyspan_setup_urbs */
@@ -1443,7 +1463,7 @@ static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *se
1443 return NULL; 1463 return NULL;
1444} 1464}
1445 1465
1446static struct urb *keyspan_setup_urb (struct usb_serial *serial, int endpoint, 1466static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
1447 int dir, void *ctx, char *buf, int len, 1467 int dir, void *ctx, char *buf, int len,
1448 void (*callback)(struct urb *)) 1468 void (*callback)(struct urb *))
1449{ 1469{
@@ -1454,10 +1474,10 @@ static struct urb *keyspan_setup_urb (struct usb_serial *serial, int endpoint,
1454 if (endpoint == -1) 1474 if (endpoint == -1)
1455 return NULL; /* endpoint not needed */ 1475 return NULL; /* endpoint not needed */
1456 1476
1457 dbg ("%s - alloc for endpoint %d.", __func__, endpoint); 1477 dbg("%s - alloc for endpoint %d.", __func__, endpoint);
1458 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */ 1478 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
1459 if (urb == NULL) { 1479 if (urb == NULL) {
1460 dbg ("%s - alloc for endpoint %d failed.", __func__, endpoint); 1480 dbg("%s - alloc for endpoint %d failed.", __func__, endpoint);
1461 return NULL; 1481 return NULL;
1462 } 1482 }
1463 1483
@@ -1530,7 +1550,7 @@ static struct callbacks {
1530 }, { 1550 }, {
1531 /* msg_usa90 callbacks */ 1551 /* msg_usa90 callbacks */
1532 .instat_callback = usa90_instat_callback, 1552 .instat_callback = usa90_instat_callback,
1533 .glocont_callback = usa28_glocont_callback, 1553 .glocont_callback = usa28_glocont_callback,
1534 .indat_callback = usa90_indat_callback, 1554 .indat_callback = usa90_indat_callback,
1535 .outdat_callback = usa2x_outdat_callback, 1555 .outdat_callback = usa2x_outdat_callback,
1536 .inack_callback = usa28_inack_callback, 1556 .inack_callback = usa28_inack_callback,
@@ -1558,16 +1578,16 @@ static void keyspan_setup_urbs(struct usb_serial *serial)
1558 struct callbacks *cback; 1578 struct callbacks *cback;
1559 int endp; 1579 int endp;
1560 1580
1561 dbg ("%s", __func__); 1581 dbg("%s", __func__);
1562 1582
1563 s_priv = usb_get_serial_data(serial); 1583 s_priv = usb_get_serial_data(serial);
1564 d_details = s_priv->device_details; 1584 d_details = s_priv->device_details;
1565 1585
1566 /* Setup values for the various callback routines */ 1586 /* Setup values for the various callback routines */
1567 cback = &keyspan_callbacks[d_details->msg_format]; 1587 cback = &keyspan_callbacks[d_details->msg_format];
1568 1588
1569 /* Allocate and set up urbs for each one that is in use, 1589 /* Allocate and set up urbs for each one that is in use,
1570 starting with instat endpoints */ 1590 starting with instat endpoints */
1571 s_priv->instat_urb = keyspan_setup_urb 1591 s_priv->instat_urb = keyspan_setup_urb
1572 (serial, d_details->instat_endpoint, USB_DIR_IN, 1592 (serial, d_details->instat_endpoint, USB_DIR_IN,
1573 serial, s_priv->instat_buf, INSTAT_BUFLEN, 1593 serial, s_priv->instat_buf, INSTAT_BUFLEN,
@@ -1583,8 +1603,8 @@ static void keyspan_setup_urbs(struct usb_serial *serial)
1583 serial, s_priv->glocont_buf, GLOCONT_BUFLEN, 1603 serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1584 cback->glocont_callback); 1604 cback->glocont_callback);
1585 1605
1586 /* Setup endpoints for each port specific thing */ 1606 /* Setup endpoints for each port specific thing */
1587 for (i = 0; i < d_details->num_ports; i ++) { 1607 for (i = 0; i < d_details->num_ports; i++) {
1588 port = serial->port[i]; 1608 port = serial->port[i];
1589 p_priv = usb_get_serial_port_data(port); 1609 p_priv = usb_get_serial_port_data(port);
1590 1610
@@ -1620,8 +1640,7 @@ static void keyspan_setup_urbs(struct usb_serial *serial)
1620 (serial, d_details->outcont_endpoints[i], USB_DIR_OUT, 1640 (serial, d_details->outcont_endpoints[i], USB_DIR_OUT,
1621 port, p_priv->outcont_buffer, 64, 1641 port, p_priv->outcont_buffer, 64,
1622 cback->outcont_callback); 1642 cback->outcont_callback);
1623 } 1643 }
1624
1625} 1644}
1626 1645
1627/* usa19 function doesn't require prescaler */ 1646/* usa19 function doesn't require prescaler */
@@ -1629,46 +1648,39 @@ static int keyspan_usa19_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1629 u8 *rate_low, u8 *prescaler, int portnum) 1648 u8 *rate_low, u8 *prescaler, int portnum)
1630{ 1649{
1631 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1650 u32 b16, /* baud rate times 16 (actual rate used internally) */
1632 div, /* divisor */ 1651 div, /* divisor */
1633 cnt; /* inverse of divisor (programmed into 8051) */ 1652 cnt; /* inverse of divisor (programmed into 8051) */
1634
1635 dbg ("%s - %d.", __func__, baud_rate);
1636 1653
1637 /* prevent divide by zero... */ 1654 dbg("%s - %d.", __func__, baud_rate);
1638 if( (b16 = (baud_rate * 16L)) == 0) { 1655
1639 return (KEYSPAN_INVALID_BAUD_RATE); 1656 /* prevent divide by zero... */
1640 } 1657 b16 = baud_rate * 16L;
1641 1658 if (b16 == 0)
1642 /* Any "standard" rate over 57k6 is marginal on the USA-19 1659 return KEYSPAN_INVALID_BAUD_RATE;
1643 as we run out of divisor resolution. */ 1660 /* Any "standard" rate over 57k6 is marginal on the USA-19
1644 if (baud_rate > 57600) { 1661 as we run out of divisor resolution. */
1645 return (KEYSPAN_INVALID_BAUD_RATE); 1662 if (baud_rate > 57600)
1646 } 1663 return KEYSPAN_INVALID_BAUD_RATE;
1647 1664
1648 /* calculate the divisor and the counter (its inverse) */ 1665 /* calculate the divisor and the counter (its inverse) */
1649 if( (div = (baudclk / b16)) == 0) { 1666 div = baudclk / b16;
1650 return (KEYSPAN_INVALID_BAUD_RATE); 1667 if (div == 0)
1651 } 1668 return KEYSPAN_INVALID_BAUD_RATE;
1652 else { 1669 else
1653 cnt = 0 - div; 1670 cnt = 0 - div;
1654 }
1655 1671
1656 if(div > 0xffff) { 1672 if (div > 0xffff)
1657 return (KEYSPAN_INVALID_BAUD_RATE); 1673 return KEYSPAN_INVALID_BAUD_RATE;
1658 }
1659 1674
1660 /* return the counter values if non-null */ 1675 /* return the counter values if non-null */
1661 if (rate_low) { 1676 if (rate_low)
1662 *rate_low = (u8) (cnt & 0xff); 1677 *rate_low = (u8) (cnt & 0xff);
1663 } 1678 if (rate_hi)
1664 if (rate_hi) {
1665 *rate_hi = (u8) ((cnt >> 8) & 0xff); 1679 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1666 } 1680 if (rate_low && rate_hi)
1667 if (rate_low && rate_hi) { 1681 dbg("%s - %d %02x %02x.",
1668 dbg ("%s - %d %02x %02x.", __func__, baud_rate, *rate_hi, *rate_low); 1682 __func__, baud_rate, *rate_hi, *rate_low);
1669 } 1683 return KEYSPAN_BAUD_RATE_OK;
1670
1671 return (KEYSPAN_BAUD_RATE_OK);
1672} 1684}
1673 1685
1674/* usa19hs function doesn't require prescaler */ 1686/* usa19hs function doesn't require prescaler */
@@ -1676,34 +1688,35 @@ static int keyspan_usa19hs_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1676 u8 *rate_low, u8 *prescaler, int portnum) 1688 u8 *rate_low, u8 *prescaler, int portnum)
1677{ 1689{
1678 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1690 u32 b16, /* baud rate times 16 (actual rate used internally) */
1679 div; /* divisor */ 1691 div; /* divisor */
1680
1681 dbg ("%s - %d.", __func__, baud_rate);
1682 1692
1683 /* prevent divide by zero... */ 1693 dbg("%s - %d.", __func__, baud_rate);
1684 if( (b16 = (baud_rate * 16L)) == 0)
1685 return (KEYSPAN_INVALID_BAUD_RATE);
1686
1687 1694
1695 /* prevent divide by zero... */
1696 b16 = baud_rate * 16L;
1697 if (b16 == 0)
1698 return KEYSPAN_INVALID_BAUD_RATE;
1688 1699
1689 /* calculate the divisor */ 1700 /* calculate the divisor */
1690 if( (div = (baudclk / b16)) == 0) 1701 div = baudclk / b16;
1691 return (KEYSPAN_INVALID_BAUD_RATE); 1702 if (div == 0)
1703 return KEYSPAN_INVALID_BAUD_RATE;
1692 1704
1693 if(div > 0xffff) 1705 if (div > 0xffff)
1694 return (KEYSPAN_INVALID_BAUD_RATE); 1706 return KEYSPAN_INVALID_BAUD_RATE;
1695 1707
1696 /* return the counter values if non-null */ 1708 /* return the counter values if non-null */
1697 if (rate_low) 1709 if (rate_low)
1698 *rate_low = (u8) (div & 0xff); 1710 *rate_low = (u8) (div & 0xff);
1699 1711
1700 if (rate_hi) 1712 if (rate_hi)
1701 *rate_hi = (u8) ((div >> 8) & 0xff); 1713 *rate_hi = (u8) ((div >> 8) & 0xff);
1702 1714
1703 if (rate_low && rate_hi) 1715 if (rate_low && rate_hi)
1704 dbg ("%s - %d %02x %02x.", __func__, baud_rate, *rate_hi, *rate_low); 1716 dbg("%s - %d %02x %02x.",
1705 1717 __func__, baud_rate, *rate_hi, *rate_low);
1706 return (KEYSPAN_BAUD_RATE_OK); 1718
1719 return KEYSPAN_BAUD_RATE_OK;
1707} 1720}
1708 1721
1709static int keyspan_usa19w_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi, 1722static int keyspan_usa19w_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
@@ -1711,64 +1724,61 @@ static int keyspan_usa19w_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1711{ 1724{
1712 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1725 u32 b16, /* baud rate times 16 (actual rate used internally) */
1713 clk, /* clock with 13/8 prescaler */ 1726 clk, /* clock with 13/8 prescaler */
1714 div, /* divisor using 13/8 prescaler */ 1727 div, /* divisor using 13/8 prescaler */
1715 res, /* resulting baud rate using 13/8 prescaler */ 1728 res, /* resulting baud rate using 13/8 prescaler */
1716 diff, /* error using 13/8 prescaler */ 1729 diff, /* error using 13/8 prescaler */
1717 smallest_diff; 1730 smallest_diff;
1718 u8 best_prescaler; 1731 u8 best_prescaler;
1719 int i; 1732 int i;
1720 1733
1721 dbg ("%s - %d.", __func__, baud_rate); 1734 dbg("%s - %d.", __func__, baud_rate);
1722 1735
1723 /* prevent divide by zero */ 1736 /* prevent divide by zero */
1724 if( (b16 = baud_rate * 16L) == 0) { 1737 b16 = baud_rate * 16L;
1725 return (KEYSPAN_INVALID_BAUD_RATE); 1738 if (b16 == 0)
1726 } 1739 return KEYSPAN_INVALID_BAUD_RATE;
1727 1740
1728 /* Calculate prescaler by trying them all and looking 1741 /* Calculate prescaler by trying them all and looking
1729 for best fit */ 1742 for best fit */
1730 1743
1731 /* start with largest possible difference */ 1744 /* start with largest possible difference */
1732 smallest_diff = 0xffffffff; 1745 smallest_diff = 0xffffffff;
1733 1746
1734 /* 0 is an invalid prescaler, used as a flag */ 1747 /* 0 is an invalid prescaler, used as a flag */
1735 best_prescaler = 0; 1748 best_prescaler = 0;
1736 1749
1737 for(i = 8; i <= 0xff; ++i) { 1750 for (i = 8; i <= 0xff; ++i) {
1738 clk = (baudclk * 8) / (u32) i; 1751 clk = (baudclk * 8) / (u32) i;
1739 1752
1740 if( (div = clk / b16) == 0) { 1753 div = clk / b16;
1754 if (div == 0)
1741 continue; 1755 continue;
1742 }
1743 1756
1744 res = clk / div; 1757 res = clk / div;
1745 diff= (res > b16) ? (res-b16) : (b16-res); 1758 diff = (res > b16) ? (res-b16) : (b16-res);
1746 1759
1747 if(diff < smallest_diff) { 1760 if (diff < smallest_diff) {
1748 best_prescaler = i; 1761 best_prescaler = i;
1749 smallest_diff = diff; 1762 smallest_diff = diff;
1750 } 1763 }
1751 } 1764 }
1752 1765
1753 if(best_prescaler == 0) { 1766 if (best_prescaler == 0)
1754 return (KEYSPAN_INVALID_BAUD_RATE); 1767 return KEYSPAN_INVALID_BAUD_RATE;
1755 }
1756 1768
1757 clk = (baudclk * 8) / (u32) best_prescaler; 1769 clk = (baudclk * 8) / (u32) best_prescaler;
1758 div = clk / b16; 1770 div = clk / b16;
1759 1771
1760 /* return the divisor and prescaler if non-null */ 1772 /* return the divisor and prescaler if non-null */
1761 if (rate_low) { 1773 if (rate_low)
1762 *rate_low = (u8) (div & 0xff); 1774 *rate_low = (u8) (div & 0xff);
1763 } 1775 if (rate_hi)
1764 if (rate_hi) {
1765 *rate_hi = (u8) ((div >> 8) & 0xff); 1776 *rate_hi = (u8) ((div >> 8) & 0xff);
1766 }
1767 if (prescaler) { 1777 if (prescaler) {
1768 *prescaler = best_prescaler; 1778 *prescaler = best_prescaler;
1769 /* dbg("%s - %d %d", __func__, *prescaler, div); */ 1779 /* dbg("%s - %d %d", __func__, *prescaler, div); */
1770 } 1780 }
1771 return (KEYSPAN_BAUD_RATE_OK); 1781 return KEYSPAN_BAUD_RATE_OK;
1772} 1782}
1773 1783
1774 /* USA-28 supports different maximum baud rates on each port */ 1784 /* USA-28 supports different maximum baud rates on each port */
@@ -1776,57 +1786,51 @@ static int keyspan_usa28_calc_baud(u32 baud_rate, u32 baudclk, u8 *rate_hi,
1776 u8 *rate_low, u8 *prescaler, int portnum) 1786 u8 *rate_low, u8 *prescaler, int portnum)
1777{ 1787{
1778 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1788 u32 b16, /* baud rate times 16 (actual rate used internally) */
1779 div, /* divisor */ 1789 div, /* divisor */
1780 cnt; /* inverse of divisor (programmed into 8051) */ 1790 cnt; /* inverse of divisor (programmed into 8051) */
1781 1791
1782 dbg ("%s - %d.", __func__, baud_rate); 1792 dbg("%s - %d.", __func__, baud_rate);
1783 1793
1784 /* prevent divide by zero */ 1794 /* prevent divide by zero */
1785 if ((b16 = baud_rate * 16L) == 0) 1795 b16 = baud_rate * 16L;
1786 return (KEYSPAN_INVALID_BAUD_RATE); 1796 if (b16 == 0)
1787 1797 return KEYSPAN_INVALID_BAUD_RATE;
1788 /* calculate the divisor and the counter (its inverse) */ 1798
1789 if ((div = (KEYSPAN_USA28_BAUDCLK / b16)) == 0) { 1799 /* calculate the divisor and the counter (its inverse) */
1790 return (KEYSPAN_INVALID_BAUD_RATE); 1800 div = KEYSPAN_USA28_BAUDCLK / b16;
1791 } 1801 if (div == 0)
1792 else { 1802 return KEYSPAN_INVALID_BAUD_RATE;
1803 else
1793 cnt = 0 - div; 1804 cnt = 0 - div;
1794 }
1795 1805
1796 /* check for out of range, based on portnum, 1806 /* check for out of range, based on portnum,
1797 and return result */ 1807 and return result */
1798 if(portnum == 0) { 1808 if (portnum == 0) {
1799 if(div > 0xffff) 1809 if (div > 0xffff)
1800 return (KEYSPAN_INVALID_BAUD_RATE); 1810 return KEYSPAN_INVALID_BAUD_RATE;
1801 } 1811 } else {
1802 else { 1812 if (portnum == 1) {
1803 if(portnum == 1) { 1813 if (div > 0xff)
1804 if(div > 0xff) { 1814 return KEYSPAN_INVALID_BAUD_RATE;
1805 return (KEYSPAN_INVALID_BAUD_RATE); 1815 } else
1806 } 1816 return KEYSPAN_INVALID_BAUD_RATE;
1807 }
1808 else {
1809 return (KEYSPAN_INVALID_BAUD_RATE);
1810 }
1811 } 1817 }
1812 1818
1813 /* return the counter values if not NULL 1819 /* return the counter values if not NULL
1814 (port 1 will ignore retHi) */ 1820 (port 1 will ignore retHi) */
1815 if (rate_low) { 1821 if (rate_low)
1816 *rate_low = (u8) (cnt & 0xff); 1822 *rate_low = (u8) (cnt & 0xff);
1817 } 1823 if (rate_hi)
1818 if (rate_hi) {
1819 *rate_hi = (u8) ((cnt >> 8) & 0xff); 1824 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1820 } 1825 dbg("%s - %d OK.", __func__, baud_rate);
1821 dbg ("%s - %d OK.", __func__, baud_rate); 1826 return KEYSPAN_BAUD_RATE_OK;
1822 return (KEYSPAN_BAUD_RATE_OK);
1823} 1827}
1824 1828
1825static int keyspan_usa26_send_setup(struct usb_serial *serial, 1829static int keyspan_usa26_send_setup(struct usb_serial *serial,
1826 struct usb_serial_port *port, 1830 struct usb_serial_port *port,
1827 int reset_port) 1831 int reset_port)
1828{ 1832{
1829 struct keyspan_usa26_portControlMessage msg; 1833 struct keyspan_usa26_portControlMessage msg;
1830 struct keyspan_serial_private *s_priv; 1834 struct keyspan_serial_private *s_priv;
1831 struct keyspan_port_private *p_priv; 1835 struct keyspan_port_private *p_priv;
1832 const struct keyspan_device_details *d_details; 1836 const struct keyspan_device_details *d_details;
@@ -1834,7 +1838,7 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
1834 struct urb *this_urb; 1838 struct urb *this_urb;
1835 int device_port, err; 1839 int device_port, err;
1836 1840
1837 dbg ("%s reset=%d", __func__, reset_port); 1841 dbg("%s reset=%d", __func__, reset_port);
1838 1842
1839 s_priv = usb_get_serial_data(serial); 1843 s_priv = usb_get_serial_data(serial);
1840 p_priv = usb_get_serial_port_data(port); 1844 p_priv = usb_get_serial_port_data(port);
@@ -1857,22 +1861,22 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
1857 if ((reset_port + 1) > p_priv->resend_cont) 1861 if ((reset_port + 1) > p_priv->resend_cont)
1858 p_priv->resend_cont = reset_port + 1; 1862 p_priv->resend_cont = reset_port + 1;
1859 if (this_urb->status == -EINPROGRESS) { 1863 if (this_urb->status == -EINPROGRESS) {
1860 /* dbg ("%s - already writing", __func__); */ 1864 /* dbg("%s - already writing", __func__); */
1861 mdelay(5); 1865 mdelay(5);
1862 return(-1); 1866 return -1;
1863 } 1867 }
1864 1868
1865 memset(&msg, 0, sizeof (struct keyspan_usa26_portControlMessage)); 1869 memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage));
1866 1870
1867 /* Only set baud rate if it's changed */ 1871 /* Only set baud rate if it's changed */
1868 if (p_priv->old_baud != p_priv->baud) { 1872 if (p_priv->old_baud != p_priv->baud) {
1869 p_priv->old_baud = p_priv->baud; 1873 p_priv->old_baud = p_priv->baud;
1870 msg.setClocking = 0xff; 1874 msg.setClocking = 0xff;
1871 if (d_details->calculate_baud_rate 1875 if (d_details->calculate_baud_rate
1872 (p_priv->baud, d_details->baudclk, &msg.baudHi, 1876 (p_priv->baud, d_details->baudclk, &msg.baudHi,
1873 &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE ) { 1877 &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1874 dbg("%s - Invalid baud rate %d requested, using 9600.", __func__, 1878 dbg("%s - Invalid baud rate %d requested, using 9600.",
1875 p_priv->baud); 1879 __func__, p_priv->baud);
1876 msg.baudLo = 0; 1880 msg.baudLo = 0;
1877 msg.baudHi = 125; /* Values for 9600 baud */ 1881 msg.baudHi = 125; /* Values for 9600 baud */
1878 msg.prescaler = 10; 1882 msg.prescaler = 10;
@@ -1898,7 +1902,7 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
1898 if (p_priv->cflag & PARENB) { 1902 if (p_priv->cflag & PARENB) {
1899 /* note USA_PARITY_NONE == 0 */ 1903 /* note USA_PARITY_NONE == 0 */
1900 msg.lcr |= (p_priv->cflag & PARODD)? 1904 msg.lcr |= (p_priv->cflag & PARODD)?
1901 USA_PARITY_ODD: USA_PARITY_EVEN; 1905 USA_PARITY_ODD : USA_PARITY_EVEN;
1902 } 1906 }
1903 msg.setLcr = 0xff; 1907 msg.setLcr = 0xff;
1904 1908
@@ -1939,7 +1943,7 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
1939 1943
1940 /* Sending intermediate configs */ 1944 /* Sending intermediate configs */
1941 else { 1945 else {
1942 msg._txOn = (! p_priv->break_on); 1946 msg._txOn = (!p_priv->break_on);
1943 msg._txOff = 0; 1947 msg._txOff = 0;
1944 msg.txFlush = 0; 1948 msg.txFlush = 0;
1945 msg.txBreak = (p_priv->break_on); 1949 msg.txBreak = (p_priv->break_on);
@@ -1951,23 +1955,23 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
1951 msg.resetDataToggle = 0x0; 1955 msg.resetDataToggle = 0x0;
1952 } 1956 }
1953 1957
1954 /* Do handshaking outputs */ 1958 /* Do handshaking outputs */
1955 msg.setTxTriState_setRts = 0xff; 1959 msg.setTxTriState_setRts = 0xff;
1956 msg.txTriState_rts = p_priv->rts_state; 1960 msg.txTriState_rts = p_priv->rts_state;
1957 1961
1958 msg.setHskoa_setDtr = 0xff; 1962 msg.setHskoa_setDtr = 0xff;
1959 msg.hskoa_dtr = p_priv->dtr_state; 1963 msg.hskoa_dtr = p_priv->dtr_state;
1960 1964
1961 p_priv->resend_cont = 0; 1965 p_priv->resend_cont = 0;
1962 memcpy (this_urb->transfer_buffer, &msg, sizeof(msg)); 1966 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1963 1967
1964 /* send the data out the device on control endpoint */ 1968 /* send the data out the device on control endpoint */
1965 this_urb->transfer_buffer_length = sizeof(msg); 1969 this_urb->transfer_buffer_length = sizeof(msg);
1966 1970
1967 this_urb->dev = serial->dev; 1971 this_urb->dev = serial->dev;
1968 if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) { 1972 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1973 if (err != 0)
1969 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err); 1974 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
1970 }
1971#if 0 1975#if 0
1972 else { 1976 else {
1973 dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__ 1977 dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__
@@ -1983,14 +1987,14 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
1983 struct usb_serial_port *port, 1987 struct usb_serial_port *port,
1984 int reset_port) 1988 int reset_port)
1985{ 1989{
1986 struct keyspan_usa28_portControlMessage msg; 1990 struct keyspan_usa28_portControlMessage msg;
1987 struct keyspan_serial_private *s_priv; 1991 struct keyspan_serial_private *s_priv;
1988 struct keyspan_port_private *p_priv; 1992 struct keyspan_port_private *p_priv;
1989 const struct keyspan_device_details *d_details; 1993 const struct keyspan_device_details *d_details;
1990 struct urb *this_urb; 1994 struct urb *this_urb;
1991 int device_port, err; 1995 int device_port, err;
1992 1996
1993 dbg ("%s", __func__); 1997 dbg("%s", __func__);
1994 1998
1995 s_priv = usb_get_serial_data(serial); 1999 s_priv = usb_get_serial_data(serial);
1996 p_priv = usb_get_serial_port_data(port); 2000 p_priv = usb_get_serial_port_data(port);
@@ -1998,7 +2002,8 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
1998 device_port = port->number - port->serial->minor; 2002 device_port = port->number - port->serial->minor;
1999 2003
2000 /* only do something if we have a bulk out endpoint */ 2004 /* only do something if we have a bulk out endpoint */
2001 if ((this_urb = p_priv->outcont_urb) == NULL) { 2005 this_urb = p_priv->outcont_urb;
2006 if (this_urb == NULL) {
2002 dbg("%s - oops no urb.", __func__); 2007 dbg("%s - oops no urb.", __func__);
2003 return -1; 2008 return -1;
2004 } 2009 }
@@ -2008,17 +2013,18 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
2008 if ((reset_port + 1) > p_priv->resend_cont) 2013 if ((reset_port + 1) > p_priv->resend_cont)
2009 p_priv->resend_cont = reset_port + 1; 2014 p_priv->resend_cont = reset_port + 1;
2010 if (this_urb->status == -EINPROGRESS) { 2015 if (this_urb->status == -EINPROGRESS) {
2011 dbg ("%s already writing", __func__); 2016 dbg("%s already writing", __func__);
2012 mdelay(5); 2017 mdelay(5);
2013 return(-1); 2018 return -1;
2014 } 2019 }
2015 2020
2016 memset(&msg, 0, sizeof (struct keyspan_usa28_portControlMessage)); 2021 memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage));
2017 2022
2018 msg.setBaudRate = 1; 2023 msg.setBaudRate = 1;
2019 if (d_details->calculate_baud_rate(p_priv->baud, d_details->baudclk, 2024 if (d_details->calculate_baud_rate(p_priv->baud, d_details->baudclk,
2020 &msg.baudHi, &msg.baudLo, NULL, device_port) == KEYSPAN_INVALID_BAUD_RATE ) { 2025 &msg.baudHi, &msg.baudLo, NULL, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2021 dbg("%s - Invalid baud rate requested %d.", __func__, p_priv->baud); 2026 dbg("%s - Invalid baud rate requested %d.",
2027 __func__, p_priv->baud);
2022 msg.baudLo = 0xff; 2028 msg.baudLo = 0xff;
2023 msg.baudHi = 0xb2; /* Values for 9600 baud */ 2029 msg.baudHi = 0xb2; /* Values for 9600 baud */
2024 } 2030 }
@@ -2029,7 +2035,7 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
2029 msg.ctsFlowControl = (p_priv->flow_control == flow_cts); 2035 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2030 msg.xonFlowControl = 0; 2036 msg.xonFlowControl = 0;
2031 2037
2032 /* Do handshaking outputs, DTR is inverted relative to RTS */ 2038 /* Do handshaking outputs, DTR is inverted relative to RTS */
2033 msg.rts = p_priv->rts_state; 2039 msg.rts = p_priv->rts_state;
2034 msg.dtr = p_priv->dtr_state; 2040 msg.dtr = p_priv->dtr_state;
2035 2041
@@ -2071,7 +2077,7 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
2071 } 2077 }
2072 /* Sending intermediate configs */ 2078 /* Sending intermediate configs */
2073 else { 2079 else {
2074 msg._txOn = (! p_priv->break_on); 2080 msg._txOn = (!p_priv->break_on);
2075 msg._txOff = 0; 2081 msg._txOff = 0;
2076 msg.txFlush = 0; 2082 msg.txFlush = 0;
2077 msg.txForceXoff = 0; 2083 msg.txForceXoff = 0;
@@ -2085,15 +2091,15 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
2085 } 2091 }
2086 2092
2087 p_priv->resend_cont = 0; 2093 p_priv->resend_cont = 0;
2088 memcpy (this_urb->transfer_buffer, &msg, sizeof(msg)); 2094 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2089 2095
2090 /* send the data out the device on control endpoint */ 2096 /* send the data out the device on control endpoint */
2091 this_urb->transfer_buffer_length = sizeof(msg); 2097 this_urb->transfer_buffer_length = sizeof(msg);
2092 2098
2093 this_urb->dev = serial->dev; 2099 this_urb->dev = serial->dev;
2094 if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) { 2100 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2101 if (err != 0)
2095 dbg("%s - usb_submit_urb(setup) failed", __func__); 2102 dbg("%s - usb_submit_urb(setup) failed", __func__);
2096 }
2097#if 0 2103#if 0
2098 else { 2104 else {
2099 dbg("%s - usb_submit_urb(setup) OK %d bytes", __func__, 2105 dbg("%s - usb_submit_urb(setup) OK %d bytes", __func__,
@@ -2116,7 +2122,7 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2116 struct urb *this_urb; 2122 struct urb *this_urb;
2117 int err, device_port; 2123 int err, device_port;
2118 2124
2119 dbg ("%s", __func__); 2125 dbg("%s", __func__);
2120 2126
2121 s_priv = usb_get_serial_data(serial); 2127 s_priv = usb_get_serial_data(serial);
2122 p_priv = usb_get_serial_port_data(port); 2128 p_priv = usb_get_serial_port_data(port);
@@ -2127,7 +2133,9 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2127 /* Work out which port within the device is being setup */ 2133 /* Work out which port within the device is being setup */
2128 device_port = port->number - port->serial->minor; 2134 device_port = port->number - port->serial->minor;
2129 2135
2130 dbg("%s - endpoint %d port %d (%d)",__func__, usb_pipeendpoint(this_urb->pipe), port->number, device_port); 2136 dbg("%s - endpoint %d port %d (%d)",
2137 __func__, usb_pipeendpoint(this_urb->pipe),
2138 port->number, device_port);
2131 2139
2132 /* Make sure we have an urb then send the message */ 2140 /* Make sure we have an urb then send the message */
2133 if (this_urb == NULL) { 2141 if (this_urb == NULL) {
@@ -2141,30 +2149,30 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2141 p_priv->resend_cont = reset_port + 1; 2149 p_priv->resend_cont = reset_port + 1;
2142 2150
2143 if (this_urb->status == -EINPROGRESS) { 2151 if (this_urb->status == -EINPROGRESS) {
2144 /* dbg ("%s - already writing", __func__); */ 2152 /* dbg("%s - already writing", __func__); */
2145 mdelay(5); 2153 mdelay(5);
2146 return(-1); 2154 return -1;
2147 } 2155 }
2148 2156
2149 memset(&msg, 0, sizeof (struct keyspan_usa49_portControlMessage)); 2157 memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
2150 2158
2151 /*msg.portNumber = port->number;*/ 2159 /*msg.portNumber = port->number;*/
2152 msg.portNumber = device_port; 2160 msg.portNumber = device_port;
2153 2161
2154 /* Only set baud rate if it's changed */ 2162 /* Only set baud rate if it's changed */
2155 if (p_priv->old_baud != p_priv->baud) { 2163 if (p_priv->old_baud != p_priv->baud) {
2156 p_priv->old_baud = p_priv->baud; 2164 p_priv->old_baud = p_priv->baud;
2157 msg.setClocking = 0xff; 2165 msg.setClocking = 0xff;
2158 if (d_details->calculate_baud_rate 2166 if (d_details->calculate_baud_rate
2159 (p_priv->baud, d_details->baudclk, &msg.baudHi, 2167 (p_priv->baud, d_details->baudclk, &msg.baudHi,
2160 &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE ) { 2168 &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2161 dbg("%s - Invalid baud rate %d requested, using 9600.", __func__, 2169 dbg("%s - Invalid baud rate %d requested, using 9600.",
2162 p_priv->baud); 2170 __func__, p_priv->baud);
2163 msg.baudLo = 0; 2171 msg.baudLo = 0;
2164 msg.baudHi = 125; /* Values for 9600 baud */ 2172 msg.baudHi = 125; /* Values for 9600 baud */
2165 msg.prescaler = 10; 2173 msg.prescaler = 10;
2166 } 2174 }
2167 //msg.setPrescaler = 0xff; 2175 /* msg.setPrescaler = 0xff; */
2168 } 2176 }
2169 2177
2170 msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1; 2178 msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
@@ -2185,19 +2193,19 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2185 if (p_priv->cflag & PARENB) { 2193 if (p_priv->cflag & PARENB) {
2186 /* note USA_PARITY_NONE == 0 */ 2194 /* note USA_PARITY_NONE == 0 */
2187 msg.lcr |= (p_priv->cflag & PARODD)? 2195 msg.lcr |= (p_priv->cflag & PARODD)?
2188 USA_PARITY_ODD: USA_PARITY_EVEN; 2196 USA_PARITY_ODD : USA_PARITY_EVEN;
2189 } 2197 }
2190 msg.setLcr = 0xff; 2198 msg.setLcr = 0xff;
2191 2199
2192 msg.ctsFlowControl = (p_priv->flow_control == flow_cts); 2200 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2193 msg.xonFlowControl = 0; 2201 msg.xonFlowControl = 0;
2194 msg.setFlowControl = 0xff; 2202 msg.setFlowControl = 0xff;
2195 2203
2196 msg.forwardingLength = 16; 2204 msg.forwardingLength = 16;
2197 msg.xonChar = 17; 2205 msg.xonChar = 17;
2198 msg.xoffChar = 19; 2206 msg.xoffChar = 19;
2199 2207
2200 /* Opening port */ 2208 /* Opening port */
2201 if (reset_port == 1) { 2209 if (reset_port == 1) {
2202 msg._txOn = 1; 2210 msg._txOn = 1;
2203 msg._txOff = 0; 2211 msg._txOff = 0;
@@ -2229,7 +2237,7 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2229 } 2237 }
2230 /* Sending intermediate configs */ 2238 /* Sending intermediate configs */
2231 else { 2239 else {
2232 msg._txOn = (! p_priv->break_on); 2240 msg._txOn = (!p_priv->break_on);
2233 msg._txOff = 0; 2241 msg._txOff = 0;
2234 msg.txFlush = 0; 2242 msg.txFlush = 0;
2235 msg.txBreak = (p_priv->break_on); 2243 msg.txBreak = (p_priv->break_on);
@@ -2243,16 +2251,17 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2243 msg.disablePort = 0; 2251 msg.disablePort = 0;
2244 } 2252 }
2245 2253
2246 /* Do handshaking outputs */ 2254 /* Do handshaking outputs */
2247 msg.setRts = 0xff; 2255 msg.setRts = 0xff;
2248 msg.rts = p_priv->rts_state; 2256 msg.rts = p_priv->rts_state;
2249 2257
2250 msg.setDtr = 0xff; 2258 msg.setDtr = 0xff;
2251 msg.dtr = p_priv->dtr_state; 2259 msg.dtr = p_priv->dtr_state;
2252 2260
2253 p_priv->resend_cont = 0; 2261 p_priv->resend_cont = 0;
2254 2262
2255 /* if the device is a 49wg, we send control message on usb control EP 0 */ 2263 /* if the device is a 49wg, we send control message on usb
2264 control EP 0 */
2256 2265
2257 if (d_details->product_id == keyspan_usa49wg_product_id) { 2266 if (d_details->product_id == keyspan_usa49wg_product_id) {
2258 dr = (void *)(s_priv->ctrl_buf); 2267 dr = (void *)(s_priv->ctrl_buf);
@@ -2262,23 +2271,24 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2262 dr->wIndex = 0; 2271 dr->wIndex = 0;
2263 dr->wLength = cpu_to_le16(sizeof(msg)); 2272 dr->wLength = cpu_to_le16(sizeof(msg));
2264 2273
2265 memcpy (s_priv->glocont_buf, &msg, sizeof(msg)); 2274 memcpy(s_priv->glocont_buf, &msg, sizeof(msg));
2266 2275
2267 usb_fill_control_urb(this_urb, serial->dev, usb_sndctrlpipe(serial->dev, 0), 2276 usb_fill_control_urb(this_urb, serial->dev,
2268 (unsigned char *)dr, s_priv->glocont_buf, sizeof(msg), 2277 usb_sndctrlpipe(serial->dev, 0),
2269 usa49_glocont_callback, serial); 2278 (unsigned char *)dr, s_priv->glocont_buf,
2279 sizeof(msg), usa49_glocont_callback, serial);
2270 2280
2271 } else { 2281 } else {
2272 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg)); 2282 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2273 2283
2274 /* send the data out the device on control endpoint */ 2284 /* send the data out the device on control endpoint */
2275 this_urb->transfer_buffer_length = sizeof(msg); 2285 this_urb->transfer_buffer_length = sizeof(msg);
2276 2286
2277 this_urb->dev = serial->dev; 2287 this_urb->dev = serial->dev;
2278 } 2288 }
2279 if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) { 2289 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2290 if (err != 0)
2280 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err); 2291 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2281 }
2282#if 0 2292#if 0
2283 else { 2293 else {
2284 dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__, 2294 dbg("%s - usb_submit_urb(%d) OK %d bytes (end %d)", __func__,
@@ -2294,7 +2304,7 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2294 struct usb_serial_port *port, 2304 struct usb_serial_port *port,
2295 int reset_port) 2305 int reset_port)
2296{ 2306{
2297 struct keyspan_usa90_portControlMessage msg; 2307 struct keyspan_usa90_portControlMessage msg;
2298 struct keyspan_serial_private *s_priv; 2308 struct keyspan_serial_private *s_priv;
2299 struct keyspan_port_private *p_priv; 2309 struct keyspan_port_private *p_priv;
2300 const struct keyspan_device_details *d_details; 2310 const struct keyspan_device_details *d_details;
@@ -2302,14 +2312,15 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2302 int err; 2312 int err;
2303 u8 prescaler; 2313 u8 prescaler;
2304 2314
2305 dbg ("%s", __func__); 2315 dbg("%s", __func__);
2306 2316
2307 s_priv = usb_get_serial_data(serial); 2317 s_priv = usb_get_serial_data(serial);
2308 p_priv = usb_get_serial_port_data(port); 2318 p_priv = usb_get_serial_port_data(port);
2309 d_details = s_priv->device_details; 2319 d_details = s_priv->device_details;
2310 2320
2311 /* only do something if we have a bulk out endpoint */ 2321 /* only do something if we have a bulk out endpoint */
2312 if ((this_urb = p_priv->outcont_urb) == NULL) { 2322 this_urb = p_priv->outcont_urb;
2323 if (this_urb == NULL) {
2313 dbg("%s - oops no urb.", __func__); 2324 dbg("%s - oops no urb.", __func__);
2314 return -1; 2325 return -1;
2315 } 2326 }
@@ -2319,24 +2330,24 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2319 if ((reset_port + 1) > p_priv->resend_cont) 2330 if ((reset_port + 1) > p_priv->resend_cont)
2320 p_priv->resend_cont = reset_port + 1; 2331 p_priv->resend_cont = reset_port + 1;
2321 if (this_urb->status == -EINPROGRESS) { 2332 if (this_urb->status == -EINPROGRESS) {
2322 dbg ("%s already writing", __func__); 2333 dbg("%s already writing", __func__);
2323 mdelay(5); 2334 mdelay(5);
2324 return(-1); 2335 return -1;
2325 } 2336 }
2326 2337
2327 memset(&msg, 0, sizeof (struct keyspan_usa90_portControlMessage)); 2338 memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage));
2328 2339
2329 /* Only set baud rate if it's changed */ 2340 /* Only set baud rate if it's changed */
2330 if (p_priv->old_baud != p_priv->baud) { 2341 if (p_priv->old_baud != p_priv->baud) {
2331 p_priv->old_baud = p_priv->baud; 2342 p_priv->old_baud = p_priv->baud;
2332 msg.setClocking = 0x01; 2343 msg.setClocking = 0x01;
2333 if (d_details->calculate_baud_rate 2344 if (d_details->calculate_baud_rate
2334 (p_priv->baud, d_details->baudclk, &msg.baudHi, 2345 (p_priv->baud, d_details->baudclk, &msg.baudHi,
2335 &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE ) { 2346 &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) {
2336 dbg("%s - Invalid baud rate %d requested, using 9600.", __func__, 2347 dbg("%s - Invalid baud rate %d requested, using 9600.",
2337 p_priv->baud); 2348 __func__, p_priv->baud);
2338 p_priv->baud = 9600; 2349 p_priv->baud = 9600;
2339 d_details->calculate_baud_rate (p_priv->baud, d_details->baudclk, 2350 d_details->calculate_baud_rate(p_priv->baud, d_details->baudclk,
2340 &msg.baudHi, &msg.baudLo, &prescaler, 0); 2351 &msg.baudHi, &msg.baudLo, &prescaler, 0);
2341 } 2352 }
2342 msg.setRxMode = 1; 2353 msg.setRxMode = 1;
@@ -2344,13 +2355,10 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2344 } 2355 }
2345 2356
2346 /* modes must always be correctly specified */ 2357 /* modes must always be correctly specified */
2347 if (p_priv->baud > 57600) 2358 if (p_priv->baud > 57600) {
2348 {
2349 msg.rxMode = RXMODE_DMA; 2359 msg.rxMode = RXMODE_DMA;
2350 msg.txMode = TXMODE_DMA; 2360 msg.txMode = TXMODE_DMA;
2351 } 2361 } else {
2352 else
2353 {
2354 msg.rxMode = RXMODE_BYHAND; 2362 msg.rxMode = RXMODE_BYHAND;
2355 msg.txMode = TXMODE_BYHAND; 2363 msg.txMode = TXMODE_BYHAND;
2356 } 2364 }
@@ -2373,7 +2381,7 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2373 if (p_priv->cflag & PARENB) { 2381 if (p_priv->cflag & PARENB) {
2374 /* note USA_PARITY_NONE == 0 */ 2382 /* note USA_PARITY_NONE == 0 */
2375 msg.lcr |= (p_priv->cflag & PARODD)? 2383 msg.lcr |= (p_priv->cflag & PARODD)?
2376 USA_PARITY_ODD: USA_PARITY_EVEN; 2384 USA_PARITY_ODD : USA_PARITY_EVEN;
2377 } 2385 }
2378 if (p_priv->old_cflag != p_priv->cflag) { 2386 if (p_priv->old_cflag != p_priv->cflag) {
2379 p_priv->old_cflag = p_priv->cflag; 2387 p_priv->old_cflag = p_priv->cflag;
@@ -2384,23 +2392,22 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2384 msg.txFlowControl = TXFLOW_CTS; 2392 msg.txFlowControl = TXFLOW_CTS;
2385 msg.setTxFlowControl = 0x01; 2393 msg.setTxFlowControl = 0x01;
2386 msg.setRxFlowControl = 0x01; 2394 msg.setRxFlowControl = 0x01;
2387 2395
2388 msg.rxForwardingLength = 16; 2396 msg.rxForwardingLength = 16;
2389 msg.rxForwardingTimeout = 16; 2397 msg.rxForwardingTimeout = 16;
2390 msg.txAckSetting = 0; 2398 msg.txAckSetting = 0;
2391 msg.xonChar = 17; 2399 msg.xonChar = 17;
2392 msg.xoffChar = 19; 2400 msg.xoffChar = 19;
2393 2401
2394 /* Opening port */ 2402 /* Opening port */
2395 if (reset_port == 1) { 2403 if (reset_port == 1) {
2396 msg.portEnabled = 1; 2404 msg.portEnabled = 1;
2397 msg.rxFlush = 1; 2405 msg.rxFlush = 1;
2398 msg.txBreak = (p_priv->break_on); 2406 msg.txBreak = (p_priv->break_on);
2399 } 2407 }
2400 /* Closing port */ 2408 /* Closing port */
2401 else if (reset_port == 2) { 2409 else if (reset_port == 2)
2402 msg.portEnabled = 0; 2410 msg.portEnabled = 0;
2403 }
2404 /* Sending intermediate configs */ 2411 /* Sending intermediate configs */
2405 else { 2412 else {
2406 if (port->port.count) 2413 if (port->port.count)
@@ -2408,23 +2415,23 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2408 msg.txBreak = (p_priv->break_on); 2415 msg.txBreak = (p_priv->break_on);
2409 } 2416 }
2410 2417
2411 /* Do handshaking outputs */ 2418 /* Do handshaking outputs */
2412 msg.setRts = 0x01; 2419 msg.setRts = 0x01;
2413 msg.rts = p_priv->rts_state; 2420 msg.rts = p_priv->rts_state;
2414 2421
2415 msg.setDtr = 0x01; 2422 msg.setDtr = 0x01;
2416 msg.dtr = p_priv->dtr_state; 2423 msg.dtr = p_priv->dtr_state;
2417 2424
2418 p_priv->resend_cont = 0; 2425 p_priv->resend_cont = 0;
2419 memcpy (this_urb->transfer_buffer, &msg, sizeof(msg)); 2426 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2420 2427
2421 /* send the data out the device on control endpoint */ 2428 /* send the data out the device on control endpoint */
2422 this_urb->transfer_buffer_length = sizeof(msg); 2429 this_urb->transfer_buffer_length = sizeof(msg);
2423 2430
2424 this_urb->dev = serial->dev; 2431 this_urb->dev = serial->dev;
2425 if ((err = usb_submit_urb(this_urb, GFP_ATOMIC)) != 0) { 2432 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2433 if (err != 0)
2426 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err); 2434 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
2427 }
2428 return 0; 2435 return 0;
2429} 2436}
2430 2437
@@ -2439,7 +2446,7 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2439 struct urb *this_urb; 2446 struct urb *this_urb;
2440 int err, device_port; 2447 int err, device_port;
2441 2448
2442 dbg ("%s", __func__); 2449 dbg("%s", __func__);
2443 2450
2444 s_priv = usb_get_serial_data(serial); 2451 s_priv = usb_get_serial_data(serial);
2445 p_priv = usb_get_serial_port_data(port); 2452 p_priv = usb_get_serial_port_data(port);
@@ -2462,9 +2469,9 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2462 if ((reset_port + 1) > p_priv->resend_cont) 2469 if ((reset_port + 1) > p_priv->resend_cont)
2463 p_priv->resend_cont = reset_port + 1; 2470 p_priv->resend_cont = reset_port + 1;
2464 if (this_urb->status == -EINPROGRESS) { 2471 if (this_urb->status == -EINPROGRESS) {
2465 /* dbg ("%s - already writing", __func__); */ 2472 /* dbg("%s - already writing", __func__); */
2466 mdelay(5); 2473 mdelay(5);
2467 return(-1); 2474 return -1;
2468 } 2475 }
2469 2476
2470 memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage)); 2477 memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
@@ -2477,9 +2484,9 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2477 msg.setClocking = 0xff; 2484 msg.setClocking = 0xff;
2478 if (d_details->calculate_baud_rate 2485 if (d_details->calculate_baud_rate
2479 (p_priv->baud, d_details->baudclk, &msg.baudHi, 2486 (p_priv->baud, d_details->baudclk, &msg.baudHi,
2480 &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE ) { 2487 &msg.baudLo, &msg.prescaler, device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2481 dbg("%s - Invalid baud rate %d requested, using 9600.", __func__, 2488 dbg("%s - Invalid baud rate %d requested, using 9600.",
2482 p_priv->baud); 2489 __func__, p_priv->baud);
2483 msg.baudLo = 0; 2490 msg.baudLo = 0;
2484 msg.baudHi = 125; /* Values for 9600 baud */ 2491 msg.baudHi = 125; /* Values for 9600 baud */
2485 msg.prescaler = 10; 2492 msg.prescaler = 10;
@@ -2505,7 +2512,7 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2505 if (p_priv->cflag & PARENB) { 2512 if (p_priv->cflag & PARENB) {
2506 /* note USA_PARITY_NONE == 0 */ 2513 /* note USA_PARITY_NONE == 0 */
2507 msg.lcr |= (p_priv->cflag & PARODD)? 2514 msg.lcr |= (p_priv->cflag & PARODD)?
2508 USA_PARITY_ODD: USA_PARITY_EVEN; 2515 USA_PARITY_ODD : USA_PARITY_EVEN;
2509 } 2516 }
2510 msg.setLcr = 0xff; 2517 msg.setLcr = 0xff;
2511 2518
@@ -2542,7 +2549,7 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2542 msg.resetDataToggle = 0; 2549 msg.resetDataToggle = 0;
2543 } else { 2550 } else {
2544 /* Sending intermediate configs */ 2551 /* Sending intermediate configs */
2545 msg._txOn = (! p_priv->break_on); 2552 msg._txOn = (!p_priv->break_on);
2546 msg._txOff = 0; 2553 msg._txOff = 0;
2547 msg.txFlush = 0; 2554 msg.txFlush = 0;
2548 msg.txBreak = (p_priv->break_on); 2555 msg.txBreak = (p_priv->break_on);
@@ -2582,7 +2589,7 @@ static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2582 struct keyspan_serial_private *s_priv; 2589 struct keyspan_serial_private *s_priv;
2583 const struct keyspan_device_details *d_details; 2590 const struct keyspan_device_details *d_details;
2584 2591
2585 dbg ("%s", __func__); 2592 dbg("%s", __func__);
2586 2593
2587 s_priv = usb_get_serial_data(serial); 2594 s_priv = usb_get_serial_data(serial);
2588 d_details = s_priv->device_details; 2595 d_details = s_priv->device_details;
@@ -2609,7 +2616,7 @@ static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2609 2616
2610/* Gets called by the "real" driver (ie once firmware is loaded 2617/* Gets called by the "real" driver (ie once firmware is loaded
2611 and renumeration has taken place. */ 2618 and renumeration has taken place. */
2612static int keyspan_startup (struct usb_serial *serial) 2619static int keyspan_startup(struct usb_serial *serial)
2613{ 2620{
2614 int i, err; 2621 int i, err;
2615 struct usb_serial_port *port; 2622 struct usb_serial_port *port;
@@ -2620,17 +2627,20 @@ static int keyspan_startup (struct usb_serial *serial)
2620 dbg("%s", __func__); 2627 dbg("%s", __func__);
2621 2628
2622 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i) 2629 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2623 if (d_details->product_id == le16_to_cpu(serial->dev->descriptor.idProduct)) 2630 if (d_details->product_id ==
2631 le16_to_cpu(serial->dev->descriptor.idProduct))
2624 break; 2632 break;
2625 if (d_details == NULL) { 2633 if (d_details == NULL) {
2626 dev_err(&serial->dev->dev, "%s - unknown product id %x\n", __func__, le16_to_cpu(serial->dev->descriptor.idProduct)); 2634 dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2635 __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2627 return 1; 2636 return 1;
2628 } 2637 }
2629 2638
2630 /* Setup private data for serial driver */ 2639 /* Setup private data for serial driver */
2631 s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL); 2640 s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
2632 if (!s_priv) { 2641 if (!s_priv) {
2633 dbg("%s - kmalloc for keyspan_serial_private failed.", __func__); 2642 dbg("%s - kmalloc for keyspan_serial_private failed.",
2643 __func__);
2634 return -ENOMEM; 2644 return -ENOMEM;
2635 } 2645 }
2636 2646
@@ -2640,10 +2650,11 @@ static int keyspan_startup (struct usb_serial *serial)
2640 /* Now setup per port private data */ 2650 /* Now setup per port private data */
2641 for (i = 0; i < serial->num_ports; i++) { 2651 for (i = 0; i < serial->num_ports; i++) {
2642 port = serial->port[i]; 2652 port = serial->port[i];
2643 p_priv = kzalloc(sizeof(struct keyspan_port_private), GFP_KERNEL); 2653 p_priv = kzalloc(sizeof(struct keyspan_port_private),
2654 GFP_KERNEL);
2644 if (!p_priv) { 2655 if (!p_priv) {
2645 dbg("%s - kmalloc for keyspan_port_private (%d) failed!.", __func__, i); 2656 dbg("%s - kmalloc for keyspan_port_private (%d) failed!.", __func__, i);
2646 return (1); 2657 return 1;
2647 } 2658 }
2648 p_priv->device_details = d_details; 2659 p_priv->device_details = d_details;
2649 usb_set_serial_port_data(port, p_priv); 2660 usb_set_serial_port_data(port, p_priv);
@@ -2665,11 +2676,11 @@ static int keyspan_startup (struct usb_serial *serial)
2665 dbg("%s - submit indat urb failed %d", __func__, 2676 dbg("%s - submit indat urb failed %d", __func__,
2666 err); 2677 err);
2667 } 2678 }
2668 2679
2669 return 0; 2680 return 0;
2670} 2681}
2671 2682
2672static void keyspan_shutdown (struct usb_serial *serial) 2683static void keyspan_shutdown(struct usb_serial *serial)
2673{ 2684{
2674 int i, j; 2685 int i, j;
2675 struct usb_serial_port *port; 2686 struct usb_serial_port *port;
@@ -2721,8 +2732,8 @@ static void keyspan_shutdown (struct usb_serial *serial)
2721 } 2732 }
2722} 2733}
2723 2734
2724MODULE_AUTHOR( DRIVER_AUTHOR ); 2735MODULE_AUTHOR(DRIVER_AUTHOR);
2725MODULE_DESCRIPTION( DRIVER_DESC ); 2736MODULE_DESCRIPTION(DRIVER_DESC);
2726MODULE_LICENSE("GPL"); 2737MODULE_LICENSE("GPL");
2727 2738
2728MODULE_FIRMWARE("keyspan/usa28.fw"); 2739MODULE_FIRMWARE("keyspan/usa28.fw");