2 Keyspan USB to Serial Converter driver
4 (C) Copyright (C) 2000-2001 Hugh Blemings <hugh@blemings.org>
5 (C) Copyright (C) 2002 Greg Kroah-Hartman <greg@kroah.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 See http://blemings.org/hugh/keyspan.html for more information.
14 Code in this driver inspired by and in a number of places taken
15 from Brian Warner's original Keyspan-PDA driver.
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.
21 Thanks to Paulus for miscellaneous tidy ups, some largish chunks
22 of much nicer and/or completely new code and (perhaps most uniquely)
23 having the patience to sit down and explain why and where he'd changed
26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
27 staff in their work on open source projects.
31 #include <linux/kernel.h>
32 #include <linux/jiffies.h>
33 #include <linux/errno.h>
34 #include <linux/init.h>
35 #include <linux/slab.h>
36 #include <linux/tty.h>
37 #include <linux/tty_driver.h>
38 #include <linux/tty_flip.h>
39 #include <linux/module.h>
40 #include <linux/spinlock.h>
41 #include <linux/uaccess.h>
42 #include <linux/usb.h>
43 #include <linux/usb/serial.h>
44 #include <linux/usb/ezusb.h>
47 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu"
48 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
50 #define INSTAT_BUFLEN 32
51 #define GLOCONT_BUFLEN 64
52 #define INDAT49W_BUFLEN 512
55 #define INACK_BUFLEN 1
56 #define OUTCONT_BUFLEN 64
58 /* Per device and per port private data */
59 struct keyspan_serial_private {
60 const struct keyspan_device_details *device_details;
62 struct urb *instat_urb;
65 /* added to support 49wg, where data from all 4 ports comes in
66 on 1 EP and high-speed supported */
67 struct urb *indat_urb;
70 /* XXX this one probably will need a lock */
71 struct urb *glocont_urb;
73 char *ctrl_buf; /* for EP0 control message */
76 struct keyspan_port_private {
77 /* Keep track of which input & output endpoints to use */
81 /* Keep duplicate of device details in each port
82 structure as well - simplifies some of the
83 callback functions etc. */
84 const struct keyspan_device_details *device_details;
86 /* Input endpoints and buffer for this port */
87 struct urb *in_urbs[2];
89 /* Output endpoints and buffer for this port */
90 struct urb *out_urbs[2];
93 /* Input ack endpoint */
94 struct urb *inack_urb;
97 /* Output control endpoint */
98 struct urb *outcont_urb;
101 /* Settings for the port */
105 unsigned int old_cflag;
106 enum {flow_none, flow_cts, flow_xon} flow_control;
107 int rts_state; /* Handshaking pins (outputs) */
109 int cts_state; /* Handshaking pins (inputs) */
115 unsigned long tx_start_time[2];
116 int resend_cont; /* need to resend control packet */
119 /* Include Keyspan message headers. All current Keyspan Adapters
120 make use of one of five message formats which are referred
121 to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and
122 within this driver. */
123 #include "keyspan_usa26msg.h"
124 #include "keyspan_usa28msg.h"
125 #include "keyspan_usa49msg.h"
126 #include "keyspan_usa90msg.h"
127 #include "keyspan_usa67msg.h"
130 module_usb_serial_driver(serial_drivers, keyspan_ids_combined);
132 static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
134 struct usb_serial_port *port = tty->driver_data;
135 struct keyspan_port_private *p_priv;
137 p_priv = usb_get_serial_port_data(port);
139 if (break_state == -1)
140 p_priv->break_on = 1;
142 p_priv->break_on = 0;
144 keyspan_send_setup(port, 0);
148 static void keyspan_set_termios(struct tty_struct *tty,
149 struct usb_serial_port *port, struct ktermios *old_termios)
151 int baud_rate, device_port;
152 struct keyspan_port_private *p_priv;
153 const struct keyspan_device_details *d_details;
156 p_priv = usb_get_serial_port_data(port);
157 d_details = p_priv->device_details;
158 cflag = tty->termios.c_cflag;
159 device_port = port->port_number;
161 /* Baud rate calculation takes baud rate as an integer
162 so other rates can be generated if desired. */
163 baud_rate = tty_get_baud_rate(tty);
164 /* If no match or invalid, don't change */
165 if (d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
166 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
167 /* FIXME - more to do here to ensure rate changes cleanly */
168 /* FIXME - calculate exact rate from divisor ? */
169 p_priv->baud = baud_rate;
171 baud_rate = tty_termios_baud_rate(old_termios);
173 tty_encode_baud_rate(tty, baud_rate, baud_rate);
174 /* set CTS/RTS handshake etc. */
175 p_priv->cflag = cflag;
176 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
178 /* Mark/Space not supported */
179 tty->termios.c_cflag &= ~CMSPAR;
181 keyspan_send_setup(port, 0);
184 static int keyspan_tiocmget(struct tty_struct *tty)
186 struct usb_serial_port *port = tty->driver_data;
187 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
190 value = ((p_priv->rts_state) ? TIOCM_RTS : 0) |
191 ((p_priv->dtr_state) ? TIOCM_DTR : 0) |
192 ((p_priv->cts_state) ? TIOCM_CTS : 0) |
193 ((p_priv->dsr_state) ? TIOCM_DSR : 0) |
194 ((p_priv->dcd_state) ? TIOCM_CAR : 0) |
195 ((p_priv->ri_state) ? TIOCM_RNG : 0);
200 static int keyspan_tiocmset(struct tty_struct *tty,
201 unsigned int set, unsigned int clear)
203 struct usb_serial_port *port = tty->driver_data;
204 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
207 p_priv->rts_state = 1;
209 p_priv->dtr_state = 1;
210 if (clear & TIOCM_RTS)
211 p_priv->rts_state = 0;
212 if (clear & TIOCM_DTR)
213 p_priv->dtr_state = 0;
214 keyspan_send_setup(port, 0);
218 /* Write function is similar for the four protocols used
219 with only a minor change for usa90 (usa19hs) required */
220 static int keyspan_write(struct tty_struct *tty,
221 struct usb_serial_port *port, const unsigned char *buf, int count)
223 struct keyspan_port_private *p_priv;
224 const struct keyspan_device_details *d_details;
227 struct urb *this_urb;
228 int err, maxDataLen, dataOffset;
230 p_priv = usb_get_serial_port_data(port);
231 d_details = p_priv->device_details;
233 if (d_details->msg_format == msg_usa90) {
241 dev_dbg(&port->dev, "%s - %d chars, flip=%d\n", __func__, count,
244 for (left = count; left > 0; left -= todo) {
246 if (todo > maxDataLen)
249 flip = p_priv->out_flip;
251 /* Check we have a valid urb/endpoint before we use it... */
252 this_urb = p_priv->out_urbs[flip];
253 if (this_urb == NULL) {
254 /* no bulk out, so return 0 bytes written */
255 dev_dbg(&port->dev, "%s - no output urb :(\n", __func__);
259 dev_dbg(&port->dev, "%s - endpoint %d flip %d\n",
260 __func__, usb_pipeendpoint(this_urb->pipe), flip);
262 if (this_urb->status == -EINPROGRESS) {
263 if (time_before(jiffies,
264 p_priv->tx_start_time[flip] + 10 * HZ))
266 usb_unlink_urb(this_urb);
270 /* First byte in buffer is "last flag" (except for usa19hx)
271 - unused so for now so set to zero */
272 ((char *)this_urb->transfer_buffer)[0] = 0;
274 memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
277 /* send the data out the bulk port */
278 this_urb->transfer_buffer_length = todo + dataOffset;
280 err = usb_submit_urb(this_urb, GFP_ATOMIC);
282 dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed (%d)\n", err);
283 p_priv->tx_start_time[flip] = jiffies;
285 /* Flip for next time if usa26 or usa28 interface
286 (not used on usa49) */
287 p_priv->out_flip = (flip + 1) & d_details->outdat_endp_flip;
293 static void usa26_indat_callback(struct urb *urb)
297 struct usb_serial_port *port;
298 unsigned char *data = urb->transfer_buffer;
299 int status = urb->status;
301 endpoint = usb_pipeendpoint(urb->pipe);
304 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
305 __func__, status, endpoint);
310 if (urb->actual_length) {
311 /* 0x80 bit is error flag */
312 if ((data[0] & 0x80) == 0) {
313 /* no errors on individual bytes, only
314 possible overrun err */
315 if (data[0] & RXERROR_OVERRUN)
319 for (i = 1; i < urb->actual_length ; ++i)
320 tty_insert_flip_char(&port->port, data[i], err);
322 /* some bytes had errors, every byte has status */
323 dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
324 for (i = 0; i + 1 < urb->actual_length; i += 2) {
325 int stat = data[i], flag = 0;
326 if (stat & RXERROR_OVERRUN)
328 if (stat & RXERROR_FRAMING)
330 if (stat & RXERROR_PARITY)
332 /* XXX should handle break (0x10) */
333 tty_insert_flip_char(&port->port, data[i+1],
337 tty_flip_buffer_push(&port->port);
340 /* Resubmit urb so we continue receiving */
341 err = usb_submit_urb(urb, GFP_ATOMIC);
343 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
346 /* Outdat handling is common for all devices */
347 static void usa2x_outdat_callback(struct urb *urb)
349 struct usb_serial_port *port;
350 struct keyspan_port_private *p_priv;
353 p_priv = usb_get_serial_port_data(port);
354 dev_dbg(&port->dev, "%s - urb %d\n", __func__, urb == p_priv->out_urbs[1]);
356 usb_serial_port_softint(port);
359 static void usa26_inack_callback(struct urb *urb)
363 static void usa26_outcont_callback(struct urb *urb)
365 struct usb_serial_port *port;
366 struct keyspan_port_private *p_priv;
369 p_priv = usb_get_serial_port_data(port);
371 if (p_priv->resend_cont) {
372 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
373 keyspan_usa26_send_setup(port->serial, port,
374 p_priv->resend_cont - 1);
378 static void usa26_instat_callback(struct urb *urb)
380 unsigned char *data = urb->transfer_buffer;
381 struct keyspan_usa26_portStatusMessage *msg;
382 struct usb_serial *serial;
383 struct usb_serial_port *port;
384 struct keyspan_port_private *p_priv;
385 int old_dcd_state, err;
386 int status = urb->status;
388 serial = urb->context;
391 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
394 if (urb->actual_length != 9) {
395 dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
399 msg = (struct keyspan_usa26_portStatusMessage *)data;
402 dev_dbg(&urb->dev->dev,
403 "%s - port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d",
404 __func__, msg->port, msg->hskia_cts, msg->gpia_dcd, msg->dsr,
405 msg->ri, msg->_txOff, msg->_txXoff, msg->rxEnabled,
406 msg->controlResponse);
409 /* Now do something useful with the data */
412 /* Check port number from message and retrieve private data */
413 if (msg->port >= serial->num_ports) {
414 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
417 port = serial->port[msg->port];
418 p_priv = usb_get_serial_port_data(port);
420 /* Update handshaking pin state information */
421 old_dcd_state = p_priv->dcd_state;
422 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
423 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
424 p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
425 p_priv->ri_state = ((msg->ri) ? 1 : 0);
427 if (old_dcd_state != p_priv->dcd_state)
428 tty_port_tty_hangup(&port->port, true);
430 /* Resubmit urb so we continue receiving */
431 err = usb_submit_urb(urb, GFP_ATOMIC);
433 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
437 static void usa26_glocont_callback(struct urb *urb)
442 static void usa28_indat_callback(struct urb *urb)
445 struct usb_serial_port *port;
447 struct keyspan_port_private *p_priv;
448 int status = urb->status;
451 p_priv = usb_get_serial_port_data(port);
452 data = urb->transfer_buffer;
454 if (urb != p_priv->in_urbs[p_priv->in_flip])
459 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
460 __func__, status, usb_pipeendpoint(urb->pipe));
465 p_priv = usb_get_serial_port_data(port);
466 data = urb->transfer_buffer;
468 if (urb->actual_length) {
469 tty_insert_flip_string(&port->port, data,
471 tty_flip_buffer_push(&port->port);
474 /* Resubmit urb so we continue receiving */
475 err = usb_submit_urb(urb, GFP_ATOMIC);
477 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n",
479 p_priv->in_flip ^= 1;
481 urb = p_priv->in_urbs[p_priv->in_flip];
482 } while (urb->status != -EINPROGRESS);
485 static void usa28_inack_callback(struct urb *urb)
489 static void usa28_outcont_callback(struct urb *urb)
491 struct usb_serial_port *port;
492 struct keyspan_port_private *p_priv;
495 p_priv = usb_get_serial_port_data(port);
497 if (p_priv->resend_cont) {
498 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
499 keyspan_usa28_send_setup(port->serial, port,
500 p_priv->resend_cont - 1);
504 static void usa28_instat_callback(struct urb *urb)
507 unsigned char *data = urb->transfer_buffer;
508 struct keyspan_usa28_portStatusMessage *msg;
509 struct usb_serial *serial;
510 struct usb_serial_port *port;
511 struct keyspan_port_private *p_priv;
513 int status = urb->status;
515 serial = urb->context;
518 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
522 if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) {
523 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
527 /*dev_dbg(&urb->dev->dev, "%s %12ph", __func__, data);*/
529 /* Now do something useful with the data */
530 msg = (struct keyspan_usa28_portStatusMessage *)data;
532 /* Check port number from message and retrieve private data */
533 if (msg->port >= serial->num_ports) {
534 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
537 port = serial->port[msg->port];
538 p_priv = usb_get_serial_port_data(port);
540 /* Update handshaking pin state information */
541 old_dcd_state = p_priv->dcd_state;
542 p_priv->cts_state = ((msg->cts) ? 1 : 0);
543 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
544 p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
545 p_priv->ri_state = ((msg->ri) ? 1 : 0);
547 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
548 tty_port_tty_hangup(&port->port, true);
550 /* Resubmit urb so we continue receiving */
551 err = usb_submit_urb(urb, GFP_ATOMIC);
553 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
557 static void usa28_glocont_callback(struct urb *urb)
562 static void usa49_glocont_callback(struct urb *urb)
564 struct usb_serial *serial;
565 struct usb_serial_port *port;
566 struct keyspan_port_private *p_priv;
569 serial = urb->context;
570 for (i = 0; i < serial->num_ports; ++i) {
571 port = serial->port[i];
572 p_priv = usb_get_serial_port_data(port);
574 if (p_priv->resend_cont) {
575 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
576 keyspan_usa49_send_setup(serial, port,
577 p_priv->resend_cont - 1);
583 /* This is actually called glostat in the Keyspan
585 static void usa49_instat_callback(struct urb *urb)
588 unsigned char *data = urb->transfer_buffer;
589 struct keyspan_usa49_portStatusMessage *msg;
590 struct usb_serial *serial;
591 struct usb_serial_port *port;
592 struct keyspan_port_private *p_priv;
594 int status = urb->status;
596 serial = urb->context;
599 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
603 if (urb->actual_length !=
604 sizeof(struct keyspan_usa49_portStatusMessage)) {
605 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
609 /*dev_dbg(&urb->dev->dev, "%s: %11ph", __func__, data);*/
611 /* Now do something useful with the data */
612 msg = (struct keyspan_usa49_portStatusMessage *)data;
614 /* Check port number from message and retrieve private data */
615 if (msg->portNumber >= serial->num_ports) {
616 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
617 __func__, msg->portNumber);
620 port = serial->port[msg->portNumber];
621 p_priv = usb_get_serial_port_data(port);
623 /* Update handshaking pin state information */
624 old_dcd_state = p_priv->dcd_state;
625 p_priv->cts_state = ((msg->cts) ? 1 : 0);
626 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
627 p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
628 p_priv->ri_state = ((msg->ri) ? 1 : 0);
630 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
631 tty_port_tty_hangup(&port->port, true);
633 /* Resubmit urb so we continue receiving */
634 err = usb_submit_urb(urb, GFP_ATOMIC);
636 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
640 static void usa49_inack_callback(struct urb *urb)
644 static void usa49_indat_callback(struct urb *urb)
648 struct usb_serial_port *port;
649 unsigned char *data = urb->transfer_buffer;
650 int status = urb->status;
652 endpoint = usb_pipeendpoint(urb->pipe);
655 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
656 __func__, status, endpoint);
661 if (urb->actual_length) {
662 /* 0x80 bit is error flag */
663 if ((data[0] & 0x80) == 0) {
664 /* no error on any byte */
665 tty_insert_flip_string(&port->port, data + 1,
666 urb->actual_length - 1);
668 /* some bytes had errors, every byte has status */
669 for (i = 0; i + 1 < urb->actual_length; i += 2) {
670 int stat = data[i], flag = 0;
671 if (stat & RXERROR_OVERRUN)
673 if (stat & RXERROR_FRAMING)
675 if (stat & RXERROR_PARITY)
677 /* XXX should handle break (0x10) */
678 tty_insert_flip_char(&port->port, data[i+1],
682 tty_flip_buffer_push(&port->port);
685 /* Resubmit urb so we continue receiving */
686 err = usb_submit_urb(urb, GFP_ATOMIC);
688 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
691 static void usa49wg_indat_callback(struct urb *urb)
694 struct usb_serial *serial;
695 struct usb_serial_port *port;
696 unsigned char *data = urb->transfer_buffer;
697 int status = urb->status;
699 serial = urb->context;
702 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
706 /* inbound data is in the form P#, len, status, data */
710 while (i < urb->actual_length) {
712 /* Check port number from message */
713 if (data[i] >= serial->num_ports) {
714 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
718 port = serial->port[data[i++]];
721 /* 0x80 bit is error flag */
722 if ((data[i] & 0x80) == 0) {
723 /* no error on any byte */
725 for (x = 1; x < len && i < urb->actual_length; ++x)
726 tty_insert_flip_char(&port->port,
730 * some bytes had errors, every byte has status
732 for (x = 0; x + 1 < len &&
733 i + 1 < urb->actual_length; x += 2) {
734 int stat = data[i], flag = 0;
736 if (stat & RXERROR_OVERRUN)
738 if (stat & RXERROR_FRAMING)
740 if (stat & RXERROR_PARITY)
742 /* XXX should handle break (0x10) */
743 tty_insert_flip_char(&port->port, data[i+1],
748 tty_flip_buffer_push(&port->port);
751 /* Resubmit urb so we continue receiving */
752 err = usb_submit_urb(urb, GFP_ATOMIC);
754 dev_dbg(&urb->dev->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
757 /* not used, usa-49 doesn't have per-port control endpoints */
758 static void usa49_outcont_callback(struct urb *urb)
762 static void usa90_indat_callback(struct urb *urb)
766 struct usb_serial_port *port;
767 struct keyspan_port_private *p_priv;
768 unsigned char *data = urb->transfer_buffer;
769 int status = urb->status;
771 endpoint = usb_pipeendpoint(urb->pipe);
774 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
775 __func__, status, endpoint);
780 p_priv = usb_get_serial_port_data(port);
782 if (urb->actual_length) {
783 /* if current mode is DMA, looks like usa28 format
784 otherwise looks like usa26 data format */
786 if (p_priv->baud > 57600)
787 tty_insert_flip_string(&port->port, data,
790 /* 0x80 bit is error flag */
791 if ((data[0] & 0x80) == 0) {
792 /* no errors on individual bytes, only
793 possible overrun err*/
794 if (data[0] & RXERROR_OVERRUN)
798 for (i = 1; i < urb->actual_length ; ++i)
799 tty_insert_flip_char(&port->port,
802 /* some bytes had errors, every byte has status */
803 dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
804 for (i = 0; i + 1 < urb->actual_length; i += 2) {
805 int stat = data[i], flag = 0;
806 if (stat & RXERROR_OVERRUN)
808 if (stat & RXERROR_FRAMING)
810 if (stat & RXERROR_PARITY)
812 /* XXX should handle break (0x10) */
813 tty_insert_flip_char(&port->port,
818 tty_flip_buffer_push(&port->port);
821 /* Resubmit urb so we continue receiving */
822 err = usb_submit_urb(urb, GFP_ATOMIC);
824 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
828 static void usa90_instat_callback(struct urb *urb)
830 unsigned char *data = urb->transfer_buffer;
831 struct keyspan_usa90_portStatusMessage *msg;
832 struct usb_serial *serial;
833 struct usb_serial_port *port;
834 struct keyspan_port_private *p_priv;
835 int old_dcd_state, err;
836 int status = urb->status;
838 serial = urb->context;
841 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
844 if (urb->actual_length < 14) {
845 dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
849 msg = (struct keyspan_usa90_portStatusMessage *)data;
851 /* Now do something useful with the data */
853 port = serial->port[0];
854 p_priv = usb_get_serial_port_data(port);
856 /* Update handshaking pin state information */
857 old_dcd_state = p_priv->dcd_state;
858 p_priv->cts_state = ((msg->cts) ? 1 : 0);
859 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
860 p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
861 p_priv->ri_state = ((msg->ri) ? 1 : 0);
863 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
864 tty_port_tty_hangup(&port->port, true);
866 /* Resubmit urb so we continue receiving */
867 err = usb_submit_urb(urb, GFP_ATOMIC);
869 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
874 static void usa90_outcont_callback(struct urb *urb)
876 struct usb_serial_port *port;
877 struct keyspan_port_private *p_priv;
880 p_priv = usb_get_serial_port_data(port);
882 if (p_priv->resend_cont) {
883 dev_dbg(&urb->dev->dev, "%s - sending setup\n", __func__);
884 keyspan_usa90_send_setup(port->serial, port,
885 p_priv->resend_cont - 1);
889 /* Status messages from the 28xg */
890 static void usa67_instat_callback(struct urb *urb)
893 unsigned char *data = urb->transfer_buffer;
894 struct keyspan_usa67_portStatusMessage *msg;
895 struct usb_serial *serial;
896 struct usb_serial_port *port;
897 struct keyspan_port_private *p_priv;
899 int status = urb->status;
901 serial = urb->context;
904 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
908 if (urb->actual_length !=
909 sizeof(struct keyspan_usa67_portStatusMessage)) {
910 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
915 /* Now do something useful with the data */
916 msg = (struct keyspan_usa67_portStatusMessage *)data;
918 /* Check port number from message and retrieve private data */
919 if (msg->port >= serial->num_ports) {
920 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
924 port = serial->port[msg->port];
925 p_priv = usb_get_serial_port_data(port);
927 /* Update handshaking pin state information */
928 old_dcd_state = p_priv->dcd_state;
929 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
930 p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
932 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
933 tty_port_tty_hangup(&port->port, true);
935 /* Resubmit urb so we continue receiving */
936 err = usb_submit_urb(urb, GFP_ATOMIC);
938 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
941 static void usa67_glocont_callback(struct urb *urb)
943 struct usb_serial *serial;
944 struct usb_serial_port *port;
945 struct keyspan_port_private *p_priv;
948 serial = urb->context;
949 for (i = 0; i < serial->num_ports; ++i) {
950 port = serial->port[i];
951 p_priv = usb_get_serial_port_data(port);
953 if (p_priv->resend_cont) {
954 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
955 keyspan_usa67_send_setup(serial, port,
956 p_priv->resend_cont - 1);
962 static int keyspan_write_room(struct tty_struct *tty)
964 struct usb_serial_port *port = tty->driver_data;
965 struct keyspan_port_private *p_priv;
966 const struct keyspan_device_details *d_details;
969 struct urb *this_urb;
971 p_priv = usb_get_serial_port_data(port);
972 d_details = p_priv->device_details;
975 if (d_details->msg_format == msg_usa90)
980 flip = p_priv->out_flip;
982 /* Check both endpoints to see if any are available. */
983 this_urb = p_priv->out_urbs[flip];
984 if (this_urb != NULL) {
985 if (this_urb->status != -EINPROGRESS)
987 flip = (flip + 1) & d_details->outdat_endp_flip;
988 this_urb = p_priv->out_urbs[flip];
989 if (this_urb != NULL) {
990 if (this_urb->status != -EINPROGRESS)
998 static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
1000 struct keyspan_port_private *p_priv;
1001 const struct keyspan_device_details *d_details;
1003 int baud_rate, device_port;
1005 unsigned int cflag = 0;
1007 p_priv = usb_get_serial_port_data(port);
1008 d_details = p_priv->device_details;
1010 /* Set some sane defaults */
1011 p_priv->rts_state = 1;
1012 p_priv->dtr_state = 1;
1013 p_priv->baud = 9600;
1015 /* force baud and lcr to be set on open */
1016 p_priv->old_baud = 0;
1017 p_priv->old_cflag = 0;
1019 p_priv->out_flip = 0;
1020 p_priv->in_flip = 0;
1022 /* Reset low level data toggle and start reading from endpoints */
1023 for (i = 0; i < 2; i++) {
1024 urb = p_priv->in_urbs[i];
1028 /* make sure endpoint data toggle is synchronized
1030 usb_clear_halt(urb->dev, urb->pipe);
1031 err = usb_submit_urb(urb, GFP_KERNEL);
1033 dev_dbg(&port->dev, "%s - submit urb %d failed (%d)\n", __func__, i, err);
1036 /* Reset low level data toggle on out endpoints */
1037 for (i = 0; i < 2; i++) {
1038 urb = p_priv->out_urbs[i];
1041 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1042 usb_pipeout(urb->pipe), 0); */
1045 /* get the terminal config for the setup message now so we don't
1046 * need to send 2 of them */
1048 device_port = port->port_number;
1050 cflag = tty->termios.c_cflag;
1051 /* Baud rate calculation takes baud rate as an integer
1052 so other rates can be generated if desired. */
1053 baud_rate = tty_get_baud_rate(tty);
1054 /* If no match or invalid, leave as default */
1056 && d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
1057 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
1058 p_priv->baud = baud_rate;
1061 /* set CTS/RTS handshake etc. */
1062 p_priv->cflag = cflag;
1063 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
1065 keyspan_send_setup(port, 1);
1067 /* keyspan_set_termios(port, NULL); */
1072 static inline void stop_urb(struct urb *urb)
1074 if (urb && urb->status == -EINPROGRESS)
1078 static void keyspan_dtr_rts(struct usb_serial_port *port, int on)
1080 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
1082 p_priv->rts_state = on;
1083 p_priv->dtr_state = on;
1084 keyspan_send_setup(port, 0);
1087 static void keyspan_close(struct usb_serial_port *port)
1090 struct keyspan_port_private *p_priv;
1092 p_priv = usb_get_serial_port_data(port);
1094 p_priv->rts_state = 0;
1095 p_priv->dtr_state = 0;
1097 keyspan_send_setup(port, 2);
1098 /* pilot-xfer seems to work best with this delay */
1101 p_priv->out_flip = 0;
1102 p_priv->in_flip = 0;
1104 stop_urb(p_priv->inack_urb);
1105 for (i = 0; i < 2; i++) {
1106 stop_urb(p_priv->in_urbs[i]);
1107 stop_urb(p_priv->out_urbs[i]);
1111 /* download the firmware to a pre-renumeration device */
1112 static int keyspan_fake_startup(struct usb_serial *serial)
1116 dev_dbg(&serial->dev->dev, "Keyspan startup version %04x product %04x\n",
1117 le16_to_cpu(serial->dev->descriptor.bcdDevice),
1118 le16_to_cpu(serial->dev->descriptor.idProduct));
1120 if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000)
1122 dev_dbg(&serial->dev->dev, "Firmware already loaded. Quitting.\n");
1126 /* Select firmware image on the basis of idProduct */
1127 switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
1128 case keyspan_usa28_pre_product_id:
1129 fw_name = "keyspan/usa28.fw";
1132 case keyspan_usa28x_pre_product_id:
1133 fw_name = "keyspan/usa28x.fw";
1136 case keyspan_usa28xa_pre_product_id:
1137 fw_name = "keyspan/usa28xa.fw";
1140 case keyspan_usa28xb_pre_product_id:
1141 fw_name = "keyspan/usa28xb.fw";
1144 case keyspan_usa19_pre_product_id:
1145 fw_name = "keyspan/usa19.fw";
1148 case keyspan_usa19qi_pre_product_id:
1149 fw_name = "keyspan/usa19qi.fw";
1152 case keyspan_mpr_pre_product_id:
1153 fw_name = "keyspan/mpr.fw";
1156 case keyspan_usa19qw_pre_product_id:
1157 fw_name = "keyspan/usa19qw.fw";
1160 case keyspan_usa18x_pre_product_id:
1161 fw_name = "keyspan/usa18x.fw";
1164 case keyspan_usa19w_pre_product_id:
1165 fw_name = "keyspan/usa19w.fw";
1168 case keyspan_usa49w_pre_product_id:
1169 fw_name = "keyspan/usa49w.fw";
1172 case keyspan_usa49wlc_pre_product_id:
1173 fw_name = "keyspan/usa49wlc.fw";
1177 dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n",
1178 le16_to_cpu(serial->dev->descriptor.idProduct));
1182 dev_dbg(&serial->dev->dev, "Uploading Keyspan %s firmware.\n", fw_name);
1184 if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) {
1185 dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
1190 /* after downloading firmware Renumeration will occur in a
1191 moment and the new device will bind to the real driver */
1193 /* we don't want this device to have a driver assigned to it. */
1197 /* Helper functions used by keyspan_setup_urbs */
1198 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial,
1201 struct usb_host_interface *iface_desc;
1202 struct usb_endpoint_descriptor *ep;
1205 iface_desc = serial->interface->cur_altsetting;
1206 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1207 ep = &iface_desc->endpoint[i].desc;
1208 if (ep->bEndpointAddress == endpoint)
1211 dev_warn(&serial->interface->dev, "found no endpoint descriptor for "
1212 "endpoint %x\n", endpoint);
1216 static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
1217 int dir, void *ctx, char *buf, int len,
1218 void (*callback)(struct urb *))
1221 struct usb_endpoint_descriptor const *ep_desc;
1222 char const *ep_type_name;
1225 return NULL; /* endpoint not needed */
1227 dev_dbg(&serial->interface->dev, "%s - alloc for endpoint %d.\n", __func__, endpoint);
1228 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
1232 if (endpoint == 0) {
1233 /* control EP filled in when used */
1237 ep_desc = find_ep(serial, endpoint);
1239 /* leak the urb, something's wrong and the callers don't care */
1242 if (usb_endpoint_xfer_int(ep_desc)) {
1243 ep_type_name = "INT";
1244 usb_fill_int_urb(urb, serial->dev,
1245 usb_sndintpipe(serial->dev, endpoint) | dir,
1246 buf, len, callback, ctx,
1247 ep_desc->bInterval);
1248 } else if (usb_endpoint_xfer_bulk(ep_desc)) {
1249 ep_type_name = "BULK";
1250 usb_fill_bulk_urb(urb, serial->dev,
1251 usb_sndbulkpipe(serial->dev, endpoint) | dir,
1252 buf, len, callback, ctx);
1254 dev_warn(&serial->interface->dev,
1255 "unsupported endpoint type %x\n",
1256 usb_endpoint_type(ep_desc));
1261 dev_dbg(&serial->interface->dev, "%s - using urb %p for %s endpoint %x\n",
1262 __func__, urb, ep_type_name, endpoint);
1266 static struct callbacks {
1267 void (*instat_callback)(struct urb *);
1268 void (*glocont_callback)(struct urb *);
1269 void (*indat_callback)(struct urb *);
1270 void (*outdat_callback)(struct urb *);
1271 void (*inack_callback)(struct urb *);
1272 void (*outcont_callback)(struct urb *);
1273 } keyspan_callbacks[] = {
1275 /* msg_usa26 callbacks */
1276 .instat_callback = usa26_instat_callback,
1277 .glocont_callback = usa26_glocont_callback,
1278 .indat_callback = usa26_indat_callback,
1279 .outdat_callback = usa2x_outdat_callback,
1280 .inack_callback = usa26_inack_callback,
1281 .outcont_callback = usa26_outcont_callback,
1283 /* msg_usa28 callbacks */
1284 .instat_callback = usa28_instat_callback,
1285 .glocont_callback = usa28_glocont_callback,
1286 .indat_callback = usa28_indat_callback,
1287 .outdat_callback = usa2x_outdat_callback,
1288 .inack_callback = usa28_inack_callback,
1289 .outcont_callback = usa28_outcont_callback,
1291 /* msg_usa49 callbacks */
1292 .instat_callback = usa49_instat_callback,
1293 .glocont_callback = usa49_glocont_callback,
1294 .indat_callback = usa49_indat_callback,
1295 .outdat_callback = usa2x_outdat_callback,
1296 .inack_callback = usa49_inack_callback,
1297 .outcont_callback = usa49_outcont_callback,
1299 /* msg_usa90 callbacks */
1300 .instat_callback = usa90_instat_callback,
1301 .glocont_callback = usa28_glocont_callback,
1302 .indat_callback = usa90_indat_callback,
1303 .outdat_callback = usa2x_outdat_callback,
1304 .inack_callback = usa28_inack_callback,
1305 .outcont_callback = usa90_outcont_callback,
1307 /* msg_usa67 callbacks */
1308 .instat_callback = usa67_instat_callback,
1309 .glocont_callback = usa67_glocont_callback,
1310 .indat_callback = usa26_indat_callback,
1311 .outdat_callback = usa2x_outdat_callback,
1312 .inack_callback = usa26_inack_callback,
1313 .outcont_callback = usa26_outcont_callback,
1317 /* Generic setup urbs function that uses
1318 data in device_details */
1319 static void keyspan_setup_urbs(struct usb_serial *serial)
1321 struct keyspan_serial_private *s_priv;
1322 const struct keyspan_device_details *d_details;
1323 struct callbacks *cback;
1325 s_priv = usb_get_serial_data(serial);
1326 d_details = s_priv->device_details;
1328 /* Setup values for the various callback routines */
1329 cback = &keyspan_callbacks[d_details->msg_format];
1331 /* Allocate and set up urbs for each one that is in use,
1332 starting with instat endpoints */
1333 s_priv->instat_urb = keyspan_setup_urb
1334 (serial, d_details->instat_endpoint, USB_DIR_IN,
1335 serial, s_priv->instat_buf, INSTAT_BUFLEN,
1336 cback->instat_callback);
1338 s_priv->indat_urb = keyspan_setup_urb
1339 (serial, d_details->indat_endpoint, USB_DIR_IN,
1340 serial, s_priv->indat_buf, INDAT49W_BUFLEN,
1341 usa49wg_indat_callback);
1343 s_priv->glocont_urb = keyspan_setup_urb
1344 (serial, d_details->glocont_endpoint, USB_DIR_OUT,
1345 serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1346 cback->glocont_callback);
1349 /* usa19 function doesn't require prescaler */
1350 static int keyspan_usa19_calc_baud(struct usb_serial_port *port,
1351 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1352 u8 *rate_low, u8 *prescaler, int portnum)
1354 u32 b16, /* baud rate times 16 (actual rate used internally) */
1356 cnt; /* inverse of divisor (programmed into 8051) */
1358 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1360 /* prevent divide by zero... */
1361 b16 = baud_rate * 16L;
1363 return KEYSPAN_INVALID_BAUD_RATE;
1364 /* Any "standard" rate over 57k6 is marginal on the USA-19
1365 as we run out of divisor resolution. */
1366 if (baud_rate > 57600)
1367 return KEYSPAN_INVALID_BAUD_RATE;
1369 /* calculate the divisor and the counter (its inverse) */
1370 div = baudclk / b16;
1372 return KEYSPAN_INVALID_BAUD_RATE;
1377 return KEYSPAN_INVALID_BAUD_RATE;
1379 /* return the counter values if non-null */
1381 *rate_low = (u8) (cnt & 0xff);
1383 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1384 if (rate_low && rate_hi)
1385 dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1386 __func__, baud_rate, *rate_hi, *rate_low);
1387 return KEYSPAN_BAUD_RATE_OK;
1390 /* usa19hs function doesn't require prescaler */
1391 static int keyspan_usa19hs_calc_baud(struct usb_serial_port *port,
1392 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1393 u8 *rate_low, u8 *prescaler, int portnum)
1395 u32 b16, /* baud rate times 16 (actual rate used internally) */
1398 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1400 /* prevent divide by zero... */
1401 b16 = baud_rate * 16L;
1403 return KEYSPAN_INVALID_BAUD_RATE;
1405 /* calculate the divisor */
1406 div = baudclk / b16;
1408 return KEYSPAN_INVALID_BAUD_RATE;
1411 return KEYSPAN_INVALID_BAUD_RATE;
1413 /* return the counter values if non-null */
1415 *rate_low = (u8) (div & 0xff);
1418 *rate_hi = (u8) ((div >> 8) & 0xff);
1420 if (rate_low && rate_hi)
1421 dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1422 __func__, baud_rate, *rate_hi, *rate_low);
1424 return KEYSPAN_BAUD_RATE_OK;
1427 static int keyspan_usa19w_calc_baud(struct usb_serial_port *port,
1428 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1429 u8 *rate_low, u8 *prescaler, int portnum)
1431 u32 b16, /* baud rate times 16 (actual rate used internally) */
1432 clk, /* clock with 13/8 prescaler */
1433 div, /* divisor using 13/8 prescaler */
1434 res, /* resulting baud rate using 13/8 prescaler */
1435 diff, /* error using 13/8 prescaler */
1440 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1442 /* prevent divide by zero */
1443 b16 = baud_rate * 16L;
1445 return KEYSPAN_INVALID_BAUD_RATE;
1447 /* Calculate prescaler by trying them all and looking
1450 /* start with largest possible difference */
1451 smallest_diff = 0xffffffff;
1453 /* 0 is an invalid prescaler, used as a flag */
1456 for (i = 8; i <= 0xff; ++i) {
1457 clk = (baudclk * 8) / (u32) i;
1464 diff = (res > b16) ? (res-b16) : (b16-res);
1466 if (diff < smallest_diff) {
1468 smallest_diff = diff;
1472 if (best_prescaler == 0)
1473 return KEYSPAN_INVALID_BAUD_RATE;
1475 clk = (baudclk * 8) / (u32) best_prescaler;
1478 /* return the divisor and prescaler if non-null */
1480 *rate_low = (u8) (div & 0xff);
1482 *rate_hi = (u8) ((div >> 8) & 0xff);
1484 *prescaler = best_prescaler;
1485 /* dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */
1487 return KEYSPAN_BAUD_RATE_OK;
1490 /* USA-28 supports different maximum baud rates on each port */
1491 static int keyspan_usa28_calc_baud(struct usb_serial_port *port,
1492 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1493 u8 *rate_low, u8 *prescaler, int portnum)
1495 u32 b16, /* baud rate times 16 (actual rate used internally) */
1497 cnt; /* inverse of divisor (programmed into 8051) */
1499 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1501 /* prevent divide by zero */
1502 b16 = baud_rate * 16L;
1504 return KEYSPAN_INVALID_BAUD_RATE;
1506 /* calculate the divisor and the counter (its inverse) */
1507 div = KEYSPAN_USA28_BAUDCLK / b16;
1509 return KEYSPAN_INVALID_BAUD_RATE;
1513 /* check for out of range, based on portnum,
1514 and return result */
1517 return KEYSPAN_INVALID_BAUD_RATE;
1521 return KEYSPAN_INVALID_BAUD_RATE;
1523 return KEYSPAN_INVALID_BAUD_RATE;
1526 /* return the counter values if not NULL
1527 (port 1 will ignore retHi) */
1529 *rate_low = (u8) (cnt & 0xff);
1531 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1532 dev_dbg(&port->dev, "%s - %d OK.\n", __func__, baud_rate);
1533 return KEYSPAN_BAUD_RATE_OK;
1536 static int keyspan_usa26_send_setup(struct usb_serial *serial,
1537 struct usb_serial_port *port,
1540 struct keyspan_usa26_portControlMessage msg;
1541 struct keyspan_serial_private *s_priv;
1542 struct keyspan_port_private *p_priv;
1543 const struct keyspan_device_details *d_details;
1544 struct urb *this_urb;
1545 int device_port, err;
1547 dev_dbg(&port->dev, "%s reset=%d\n", __func__, reset_port);
1549 s_priv = usb_get_serial_data(serial);
1550 p_priv = usb_get_serial_port_data(port);
1551 d_details = s_priv->device_details;
1552 device_port = port->port_number;
1554 this_urb = p_priv->outcont_urb;
1556 dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe));
1558 /* Make sure we have an urb then send the message */
1559 if (this_urb == NULL) {
1560 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1564 /* Save reset port val for resend.
1565 Don't overwrite resend for open/close condition. */
1566 if ((reset_port + 1) > p_priv->resend_cont)
1567 p_priv->resend_cont = reset_port + 1;
1568 if (this_urb->status == -EINPROGRESS) {
1569 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1574 memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage));
1576 /* Only set baud rate if it's changed */
1577 if (p_priv->old_baud != p_priv->baud) {
1578 p_priv->old_baud = p_priv->baud;
1579 msg.setClocking = 0xff;
1580 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1581 &msg.baudHi, &msg.baudLo, &msg.prescaler,
1582 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1583 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
1584 __func__, p_priv->baud);
1586 msg.baudHi = 125; /* Values for 9600 baud */
1589 msg.setPrescaler = 0xff;
1592 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
1593 switch (p_priv->cflag & CSIZE) {
1595 msg.lcr |= USA_DATABITS_5;
1598 msg.lcr |= USA_DATABITS_6;
1601 msg.lcr |= USA_DATABITS_7;
1604 msg.lcr |= USA_DATABITS_8;
1607 if (p_priv->cflag & PARENB) {
1608 /* note USA_PARITY_NONE == 0 */
1609 msg.lcr |= (p_priv->cflag & PARODD) ?
1610 USA_PARITY_ODD : USA_PARITY_EVEN;
1614 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1615 msg.xonFlowControl = 0;
1616 msg.setFlowControl = 0xff;
1617 msg.forwardingLength = 16;
1622 if (reset_port == 1) {
1631 msg.returnStatus = 0;
1632 msg.resetDataToggle = 0xff;
1636 else if (reset_port == 2) {
1645 msg.returnStatus = 0;
1646 msg.resetDataToggle = 0;
1649 /* Sending intermediate configs */
1651 msg._txOn = (!p_priv->break_on);
1654 msg.txBreak = (p_priv->break_on);
1659 msg.returnStatus = 0;
1660 msg.resetDataToggle = 0x0;
1663 /* Do handshaking outputs */
1664 msg.setTxTriState_setRts = 0xff;
1665 msg.txTriState_rts = p_priv->rts_state;
1667 msg.setHskoa_setDtr = 0xff;
1668 msg.hskoa_dtr = p_priv->dtr_state;
1670 p_priv->resend_cont = 0;
1671 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1673 /* send the data out the device on control endpoint */
1674 this_urb->transfer_buffer_length = sizeof(msg);
1676 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1678 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1682 static int keyspan_usa28_send_setup(struct usb_serial *serial,
1683 struct usb_serial_port *port,
1686 struct keyspan_usa28_portControlMessage msg;
1687 struct keyspan_serial_private *s_priv;
1688 struct keyspan_port_private *p_priv;
1689 const struct keyspan_device_details *d_details;
1690 struct urb *this_urb;
1691 int device_port, err;
1693 s_priv = usb_get_serial_data(serial);
1694 p_priv = usb_get_serial_port_data(port);
1695 d_details = s_priv->device_details;
1696 device_port = port->port_number;
1698 /* only do something if we have a bulk out endpoint */
1699 this_urb = p_priv->outcont_urb;
1700 if (this_urb == NULL) {
1701 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1705 /* Save reset port val for resend.
1706 Don't overwrite resend for open/close condition. */
1707 if ((reset_port + 1) > p_priv->resend_cont)
1708 p_priv->resend_cont = reset_port + 1;
1709 if (this_urb->status == -EINPROGRESS) {
1710 dev_dbg(&port->dev, "%s already writing\n", __func__);
1715 memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage));
1717 msg.setBaudRate = 1;
1718 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1719 &msg.baudHi, &msg.baudLo, NULL,
1720 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1721 dev_dbg(&port->dev, "%s - Invalid baud rate requested %d.\n",
1722 __func__, p_priv->baud);
1724 msg.baudHi = 0xb2; /* Values for 9600 baud */
1727 /* If parity is enabled, we must calculate it ourselves. */
1728 msg.parity = 0; /* XXX for now */
1730 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1731 msg.xonFlowControl = 0;
1733 /* Do handshaking outputs, DTR is inverted relative to RTS */
1734 msg.rts = p_priv->rts_state;
1735 msg.dtr = p_priv->dtr_state;
1737 msg.forwardingLength = 16;
1739 msg.breakThreshold = 45;
1743 /*msg.returnStatus = 1;
1744 msg.resetDataToggle = 0xff;*/
1746 if (reset_port == 1) {
1750 msg.txForceXoff = 0;
1756 msg.returnStatus = 0;
1757 msg.resetDataToggle = 0xff;
1760 else if (reset_port == 2) {
1764 msg.txForceXoff = 0;
1770 msg.returnStatus = 0;
1771 msg.resetDataToggle = 0;
1773 /* Sending intermediate configs */
1775 msg._txOn = (!p_priv->break_on);
1778 msg.txForceXoff = 0;
1779 msg.txBreak = (p_priv->break_on);
1784 msg.returnStatus = 0;
1785 msg.resetDataToggle = 0x0;
1788 p_priv->resend_cont = 0;
1789 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1791 /* send the data out the device on control endpoint */
1792 this_urb->transfer_buffer_length = sizeof(msg);
1794 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1796 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed\n", __func__);
1799 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) OK %d bytes\n", __func__,
1800 this_urb->transfer_buffer_length);
1807 static int keyspan_usa49_send_setup(struct usb_serial *serial,
1808 struct usb_serial_port *port,
1811 struct keyspan_usa49_portControlMessage msg;
1812 struct usb_ctrlrequest *dr = NULL;
1813 struct keyspan_serial_private *s_priv;
1814 struct keyspan_port_private *p_priv;
1815 const struct keyspan_device_details *d_details;
1816 struct urb *this_urb;
1817 int err, device_port;
1819 s_priv = usb_get_serial_data(serial);
1820 p_priv = usb_get_serial_port_data(port);
1821 d_details = s_priv->device_details;
1823 this_urb = s_priv->glocont_urb;
1825 /* Work out which port within the device is being setup */
1826 device_port = port->port_number;
1828 /* Make sure we have an urb then send the message */
1829 if (this_urb == NULL) {
1830 dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
1834 dev_dbg(&port->dev, "%s - endpoint %d (%d)\n",
1835 __func__, usb_pipeendpoint(this_urb->pipe), device_port);
1837 /* Save reset port val for resend.
1838 Don't overwrite resend for open/close condition. */
1839 if ((reset_port + 1) > p_priv->resend_cont)
1840 p_priv->resend_cont = reset_port + 1;
1842 if (this_urb->status == -EINPROGRESS) {
1843 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1848 memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
1850 msg.portNumber = device_port;
1852 /* Only set baud rate if it's changed */
1853 if (p_priv->old_baud != p_priv->baud) {
1854 p_priv->old_baud = p_priv->baud;
1855 msg.setClocking = 0xff;
1856 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1857 &msg.baudHi, &msg.baudLo, &msg.prescaler,
1858 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1859 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
1860 __func__, p_priv->baud);
1862 msg.baudHi = 125; /* Values for 9600 baud */
1865 /* msg.setPrescaler = 0xff; */
1868 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
1869 switch (p_priv->cflag & CSIZE) {
1871 msg.lcr |= USA_DATABITS_5;
1874 msg.lcr |= USA_DATABITS_6;
1877 msg.lcr |= USA_DATABITS_7;
1880 msg.lcr |= USA_DATABITS_8;
1883 if (p_priv->cflag & PARENB) {
1884 /* note USA_PARITY_NONE == 0 */
1885 msg.lcr |= (p_priv->cflag & PARODD) ?
1886 USA_PARITY_ODD : USA_PARITY_EVEN;
1890 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1891 msg.xonFlowControl = 0;
1892 msg.setFlowControl = 0xff;
1894 msg.forwardingLength = 16;
1899 if (reset_port == 1) {
1908 msg.returnStatus = 0;
1909 msg.resetDataToggle = 0xff;
1911 msg.disablePort = 0;
1914 else if (reset_port == 2) {
1923 msg.returnStatus = 0;
1924 msg.resetDataToggle = 0;
1926 msg.disablePort = 1;
1928 /* Sending intermediate configs */
1930 msg._txOn = (!p_priv->break_on);
1933 msg.txBreak = (p_priv->break_on);
1938 msg.returnStatus = 0;
1939 msg.resetDataToggle = 0x0;
1941 msg.disablePort = 0;
1944 /* Do handshaking outputs */
1946 msg.rts = p_priv->rts_state;
1949 msg.dtr = p_priv->dtr_state;
1951 p_priv->resend_cont = 0;
1953 /* if the device is a 49wg, we send control message on usb
1956 if (d_details->product_id == keyspan_usa49wg_product_id) {
1957 dr = (void *)(s_priv->ctrl_buf);
1958 dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT;
1959 dr->bRequest = 0xB0; /* 49wg control message */;
1962 dr->wLength = cpu_to_le16(sizeof(msg));
1964 memcpy(s_priv->glocont_buf, &msg, sizeof(msg));
1966 usb_fill_control_urb(this_urb, serial->dev,
1967 usb_sndctrlpipe(serial->dev, 0),
1968 (unsigned char *)dr, s_priv->glocont_buf,
1969 sizeof(msg), usa49_glocont_callback, serial);
1972 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1974 /* send the data out the device on control endpoint */
1975 this_urb->transfer_buffer_length = sizeof(msg);
1977 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1979 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1982 dev_dbg(&port->dev, "%s - usb_submit_urb(%d) OK %d bytes (end %d)\n", __func__,
1983 outcont_urb, this_urb->transfer_buffer_length,
1984 usb_pipeendpoint(this_urb->pipe));
1991 static int keyspan_usa90_send_setup(struct usb_serial *serial,
1992 struct usb_serial_port *port,
1995 struct keyspan_usa90_portControlMessage msg;
1996 struct keyspan_serial_private *s_priv;
1997 struct keyspan_port_private *p_priv;
1998 const struct keyspan_device_details *d_details;
1999 struct urb *this_urb;
2003 s_priv = usb_get_serial_data(serial);
2004 p_priv = usb_get_serial_port_data(port);
2005 d_details = s_priv->device_details;
2007 /* only do something if we have a bulk out endpoint */
2008 this_urb = p_priv->outcont_urb;
2009 if (this_urb == NULL) {
2010 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
2014 /* Save reset port val for resend.
2015 Don't overwrite resend for open/close condition. */
2016 if ((reset_port + 1) > p_priv->resend_cont)
2017 p_priv->resend_cont = reset_port + 1;
2018 if (this_urb->status == -EINPROGRESS) {
2019 dev_dbg(&port->dev, "%s already writing\n", __func__);
2024 memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage));
2026 /* Only set baud rate if it's changed */
2027 if (p_priv->old_baud != p_priv->baud) {
2028 p_priv->old_baud = p_priv->baud;
2029 msg.setClocking = 0x01;
2030 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2031 &msg.baudHi, &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) {
2032 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2033 __func__, p_priv->baud);
2034 p_priv->baud = 9600;
2035 d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2036 &msg.baudHi, &msg.baudLo, &prescaler, 0);
2042 /* modes must always be correctly specified */
2043 if (p_priv->baud > 57600) {
2044 msg.rxMode = RXMODE_DMA;
2045 msg.txMode = TXMODE_DMA;
2047 msg.rxMode = RXMODE_BYHAND;
2048 msg.txMode = TXMODE_BYHAND;
2051 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2052 switch (p_priv->cflag & CSIZE) {
2054 msg.lcr |= USA_DATABITS_5;
2057 msg.lcr |= USA_DATABITS_6;
2060 msg.lcr |= USA_DATABITS_7;
2063 msg.lcr |= USA_DATABITS_8;
2066 if (p_priv->cflag & PARENB) {
2067 /* note USA_PARITY_NONE == 0 */
2068 msg.lcr |= (p_priv->cflag & PARODD) ?
2069 USA_PARITY_ODD : USA_PARITY_EVEN;
2071 if (p_priv->old_cflag != p_priv->cflag) {
2072 p_priv->old_cflag = p_priv->cflag;
2076 if (p_priv->flow_control == flow_cts)
2077 msg.txFlowControl = TXFLOW_CTS;
2078 msg.setTxFlowControl = 0x01;
2079 msg.setRxFlowControl = 0x01;
2081 msg.rxForwardingLength = 16;
2082 msg.rxForwardingTimeout = 16;
2083 msg.txAckSetting = 0;
2088 if (reset_port == 1) {
2089 msg.portEnabled = 1;
2091 msg.txBreak = (p_priv->break_on);
2094 else if (reset_port == 2)
2095 msg.portEnabled = 0;
2096 /* Sending intermediate configs */
2098 msg.portEnabled = 1;
2099 msg.txBreak = (p_priv->break_on);
2102 /* Do handshaking outputs */
2104 msg.rts = p_priv->rts_state;
2107 msg.dtr = p_priv->dtr_state;
2109 p_priv->resend_cont = 0;
2110 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2112 /* send the data out the device on control endpoint */
2113 this_urb->transfer_buffer_length = sizeof(msg);
2115 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2117 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2121 static int keyspan_usa67_send_setup(struct usb_serial *serial,
2122 struct usb_serial_port *port,
2125 struct keyspan_usa67_portControlMessage msg;
2126 struct keyspan_serial_private *s_priv;
2127 struct keyspan_port_private *p_priv;
2128 const struct keyspan_device_details *d_details;
2129 struct urb *this_urb;
2130 int err, device_port;
2132 s_priv = usb_get_serial_data(serial);
2133 p_priv = usb_get_serial_port_data(port);
2134 d_details = s_priv->device_details;
2136 this_urb = s_priv->glocont_urb;
2138 /* Work out which port within the device is being setup */
2139 device_port = port->port_number;
2141 /* Make sure we have an urb then send the message */
2142 if (this_urb == NULL) {
2143 dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
2147 /* Save reset port val for resend.
2148 Don't overwrite resend for open/close condition. */
2149 if ((reset_port + 1) > p_priv->resend_cont)
2150 p_priv->resend_cont = reset_port + 1;
2151 if (this_urb->status == -EINPROGRESS) {
2152 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2157 memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
2159 msg.port = device_port;
2161 /* Only set baud rate if it's changed */
2162 if (p_priv->old_baud != p_priv->baud) {
2163 p_priv->old_baud = p_priv->baud;
2164 msg.setClocking = 0xff;
2165 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2166 &msg.baudHi, &msg.baudLo, &msg.prescaler,
2167 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2168 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2169 __func__, p_priv->baud);
2171 msg.baudHi = 125; /* Values for 9600 baud */
2174 msg.setPrescaler = 0xff;
2177 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2178 switch (p_priv->cflag & CSIZE) {
2180 msg.lcr |= USA_DATABITS_5;
2183 msg.lcr |= USA_DATABITS_6;
2186 msg.lcr |= USA_DATABITS_7;
2189 msg.lcr |= USA_DATABITS_8;
2192 if (p_priv->cflag & PARENB) {
2193 /* note USA_PARITY_NONE == 0 */
2194 msg.lcr |= (p_priv->cflag & PARODD) ?
2195 USA_PARITY_ODD : USA_PARITY_EVEN;
2199 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2200 msg.xonFlowControl = 0;
2201 msg.setFlowControl = 0xff;
2202 msg.forwardingLength = 16;
2206 if (reset_port == 1) {
2216 msg.returnStatus = 0;
2217 msg.resetDataToggle = 0xff;
2218 } else if (reset_port == 2) {
2228 msg.returnStatus = 0;
2229 msg.resetDataToggle = 0;
2231 /* Sending intermediate configs */
2232 msg._txOn = (!p_priv->break_on);
2235 msg.txBreak = (p_priv->break_on);
2240 msg.returnStatus = 0;
2241 msg.resetDataToggle = 0x0;
2244 /* Do handshaking outputs */
2245 msg.setTxTriState_setRts = 0xff;
2246 msg.txTriState_rts = p_priv->rts_state;
2248 msg.setHskoa_setDtr = 0xff;
2249 msg.hskoa_dtr = p_priv->dtr_state;
2251 p_priv->resend_cont = 0;
2253 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2255 /* send the data out the device on control endpoint */
2256 this_urb->transfer_buffer_length = sizeof(msg);
2258 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2260 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2264 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2266 struct usb_serial *serial = port->serial;
2267 struct keyspan_serial_private *s_priv;
2268 const struct keyspan_device_details *d_details;
2270 s_priv = usb_get_serial_data(serial);
2271 d_details = s_priv->device_details;
2273 switch (d_details->msg_format) {
2275 keyspan_usa26_send_setup(serial, port, reset_port);
2278 keyspan_usa28_send_setup(serial, port, reset_port);
2281 keyspan_usa49_send_setup(serial, port, reset_port);
2284 keyspan_usa90_send_setup(serial, port, reset_port);
2287 keyspan_usa67_send_setup(serial, port, reset_port);
2293 /* Gets called by the "real" driver (ie once firmware is loaded
2294 and renumeration has taken place. */
2295 static int keyspan_startup(struct usb_serial *serial)
2298 struct keyspan_serial_private *s_priv;
2299 const struct keyspan_device_details *d_details;
2301 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2302 if (d_details->product_id ==
2303 le16_to_cpu(serial->dev->descriptor.idProduct))
2305 if (d_details == NULL) {
2306 dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2307 __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2311 /* Setup private data for serial driver */
2312 s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
2316 s_priv->instat_buf = kzalloc(INSTAT_BUFLEN, GFP_KERNEL);
2317 if (!s_priv->instat_buf)
2318 goto err_instat_buf;
2320 s_priv->indat_buf = kzalloc(INDAT49W_BUFLEN, GFP_KERNEL);
2321 if (!s_priv->indat_buf)
2324 s_priv->glocont_buf = kzalloc(GLOCONT_BUFLEN, GFP_KERNEL);
2325 if (!s_priv->glocont_buf)
2326 goto err_glocont_buf;
2328 s_priv->ctrl_buf = kzalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
2329 if (!s_priv->ctrl_buf)
2332 s_priv->device_details = d_details;
2333 usb_set_serial_data(serial, s_priv);
2335 keyspan_setup_urbs(serial);
2337 if (s_priv->instat_urb != NULL) {
2338 err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2340 dev_dbg(&serial->dev->dev, "%s - submit instat urb failed %d\n", __func__, err);
2342 if (s_priv->indat_urb != NULL) {
2343 err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2345 dev_dbg(&serial->dev->dev, "%s - submit indat urb failed %d\n", __func__, err);
2351 kfree(s_priv->glocont_buf);
2353 kfree(s_priv->indat_buf);
2355 kfree(s_priv->instat_buf);
2362 static void keyspan_disconnect(struct usb_serial *serial)
2364 struct keyspan_serial_private *s_priv;
2366 s_priv = usb_get_serial_data(serial);
2368 stop_urb(s_priv->instat_urb);
2369 stop_urb(s_priv->glocont_urb);
2370 stop_urb(s_priv->indat_urb);
2373 static void keyspan_release(struct usb_serial *serial)
2375 struct keyspan_serial_private *s_priv;
2377 s_priv = usb_get_serial_data(serial);
2379 usb_free_urb(s_priv->instat_urb);
2380 usb_free_urb(s_priv->indat_urb);
2381 usb_free_urb(s_priv->glocont_urb);
2383 kfree(s_priv->ctrl_buf);
2384 kfree(s_priv->glocont_buf);
2385 kfree(s_priv->indat_buf);
2386 kfree(s_priv->instat_buf);
2391 static int keyspan_port_probe(struct usb_serial_port *port)
2393 struct usb_serial *serial = port->serial;
2394 struct keyspan_serial_private *s_priv;
2395 struct keyspan_port_private *p_priv;
2396 const struct keyspan_device_details *d_details;
2397 struct callbacks *cback;
2402 s_priv = usb_get_serial_data(serial);
2403 d_details = s_priv->device_details;
2405 p_priv = kzalloc(sizeof(*p_priv), GFP_KERNEL);
2409 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) {
2410 p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL);
2411 if (!p_priv->in_buffer[i])
2415 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) {
2416 p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL);
2417 if (!p_priv->out_buffer[i])
2418 goto err_out_buffer;
2421 p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL);
2422 if (!p_priv->inack_buffer)
2423 goto err_inack_buffer;
2425 p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL);
2426 if (!p_priv->outcont_buffer)
2427 goto err_outcont_buffer;
2429 p_priv->device_details = d_details;
2431 /* Setup values for the various callback routines */
2432 cback = &keyspan_callbacks[d_details->msg_format];
2434 port_num = port->port_number;
2436 /* Do indat endpoints first, once for each flip */
2437 endp = d_details->indat_endpoints[port_num];
2438 for (i = 0; i <= d_details->indat_endp_flip; ++i, ++endp) {
2439 p_priv->in_urbs[i] = keyspan_setup_urb(serial, endp,
2441 p_priv->in_buffer[i],
2443 cback->indat_callback);
2445 /* outdat endpoints also have flip */
2446 endp = d_details->outdat_endpoints[port_num];
2447 for (i = 0; i <= d_details->outdat_endp_flip; ++i, ++endp) {
2448 p_priv->out_urbs[i] = keyspan_setup_urb(serial, endp,
2450 p_priv->out_buffer[i],
2452 cback->outdat_callback);
2454 /* inack endpoint */
2455 p_priv->inack_urb = keyspan_setup_urb(serial,
2456 d_details->inack_endpoints[port_num],
2458 p_priv->inack_buffer,
2460 cback->inack_callback);
2461 /* outcont endpoint */
2462 p_priv->outcont_urb = keyspan_setup_urb(serial,
2463 d_details->outcont_endpoints[port_num],
2465 p_priv->outcont_buffer,
2467 cback->outcont_callback);
2469 usb_set_serial_port_data(port, p_priv);
2474 kfree(p_priv->inack_buffer);
2476 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2477 kfree(p_priv->out_buffer[i]);
2479 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2480 kfree(p_priv->in_buffer[i]);
2487 static int keyspan_port_remove(struct usb_serial_port *port)
2489 struct keyspan_port_private *p_priv;
2492 p_priv = usb_get_serial_port_data(port);
2494 stop_urb(p_priv->inack_urb);
2495 stop_urb(p_priv->outcont_urb);
2496 for (i = 0; i < 2; i++) {
2497 stop_urb(p_priv->in_urbs[i]);
2498 stop_urb(p_priv->out_urbs[i]);
2501 usb_free_urb(p_priv->inack_urb);
2502 usb_free_urb(p_priv->outcont_urb);
2503 for (i = 0; i < 2; i++) {
2504 usb_free_urb(p_priv->in_urbs[i]);
2505 usb_free_urb(p_priv->out_urbs[i]);
2508 kfree(p_priv->outcont_buffer);
2509 kfree(p_priv->inack_buffer);
2510 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2511 kfree(p_priv->out_buffer[i]);
2512 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2513 kfree(p_priv->in_buffer[i]);
2520 MODULE_AUTHOR(DRIVER_AUTHOR);
2521 MODULE_DESCRIPTION(DRIVER_DESC);
2522 MODULE_LICENSE("GPL");
2524 MODULE_FIRMWARE("keyspan/usa28.fw");
2525 MODULE_FIRMWARE("keyspan/usa28x.fw");
2526 MODULE_FIRMWARE("keyspan/usa28xa.fw");
2527 MODULE_FIRMWARE("keyspan/usa28xb.fw");
2528 MODULE_FIRMWARE("keyspan/usa19.fw");
2529 MODULE_FIRMWARE("keyspan/usa19qi.fw");
2530 MODULE_FIRMWARE("keyspan/mpr.fw");
2531 MODULE_FIRMWARE("keyspan/usa19qw.fw");
2532 MODULE_FIRMWARE("keyspan/usa18x.fw");
2533 MODULE_FIRMWARE("keyspan/usa19w.fw");
2534 MODULE_FIRMWARE("keyspan/usa49w.fw");
2535 MODULE_FIRMWARE("keyspan/usa49wlc.fw");