2 Keyspan USB to Serial Converter driver
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/slab.h>
35 #include <linux/tty.h>
36 #include <linux/tty_driver.h>
37 #include <linux/tty_flip.h>
38 #include <linux/module.h>
39 #include <linux/spinlock.h>
40 #include <linux/uaccess.h>
41 #include <linux/usb.h>
42 #include <linux/usb/serial.h>
43 #include <linux/usb/ezusb.h>
47 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
49 #define INSTAT_BUFLEN 32
50 #define GLOCONT_BUFLEN 64
51 #define INDAT49W_BUFLEN 512
54 #define INACK_BUFLEN 1
55 #define OUTCONT_BUFLEN 64
57 /* Per device and per port private data */
58 struct keyspan_serial_private {
59 const struct keyspan_device_details *device_details;
61 struct urb *instat_urb;
64 /* added to support 49wg, where data from all 4 ports comes in
65 on 1 EP and high-speed supported */
66 struct urb *indat_urb;
69 /* XXX this one probably will need a lock */
70 struct urb *glocont_urb;
72 char *ctrl_buf; /* for EP0 control message */
75 struct keyspan_port_private {
76 /* Keep track of which input & output endpoints to use */
80 /* Keep duplicate of device details in each port
81 structure as well - simplifies some of the
82 callback functions etc. */
83 const struct keyspan_device_details *device_details;
85 /* Input endpoints and buffer for this port */
86 struct urb *in_urbs[2];
88 /* Output endpoints and buffer for this port */
89 struct urb *out_urbs[2];
92 /* Input ack endpoint */
93 struct urb *inack_urb;
96 /* Output control endpoint */
97 struct urb *outcont_urb;
100 /* Settings for the port */
104 unsigned int old_cflag;
105 enum {flow_none, flow_cts, flow_xon} flow_control;
106 int rts_state; /* Handshaking pins (outputs) */
108 int cts_state; /* Handshaking pins (inputs) */
114 unsigned long tx_start_time[2];
115 int resend_cont; /* need to resend control packet */
118 /* Include Keyspan message headers. All current Keyspan Adapters
119 make use of one of five message formats which are referred
120 to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and
121 within this driver. */
122 #include "keyspan_usa26msg.h"
123 #include "keyspan_usa28msg.h"
124 #include "keyspan_usa49msg.h"
125 #include "keyspan_usa90msg.h"
126 #include "keyspan_usa67msg.h"
129 module_usb_serial_driver(serial_drivers, keyspan_ids_combined);
131 static void keyspan_break_ctl(struct tty_struct *tty, int break_state)
133 struct usb_serial_port *port = tty->driver_data;
134 struct keyspan_port_private *p_priv;
136 p_priv = usb_get_serial_port_data(port);
138 if (break_state == -1)
139 p_priv->break_on = 1;
141 p_priv->break_on = 0;
143 keyspan_send_setup(port, 0);
147 static void keyspan_set_termios(struct tty_struct *tty,
148 struct usb_serial_port *port, struct ktermios *old_termios)
150 int baud_rate, device_port;
151 struct keyspan_port_private *p_priv;
152 const struct keyspan_device_details *d_details;
155 p_priv = usb_get_serial_port_data(port);
156 d_details = p_priv->device_details;
157 cflag = tty->termios.c_cflag;
158 device_port = port->port_number;
160 /* Baud rate calculation takes baud rate as an integer
161 so other rates can be generated if desired. */
162 baud_rate = tty_get_baud_rate(tty);
163 /* If no match or invalid, don't change */
164 if (d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
165 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
166 /* FIXME - more to do here to ensure rate changes cleanly */
167 /* FIXME - calculate exact rate from divisor ? */
168 p_priv->baud = baud_rate;
170 baud_rate = tty_termios_baud_rate(old_termios);
172 tty_encode_baud_rate(tty, baud_rate, baud_rate);
173 /* set CTS/RTS handshake etc. */
174 p_priv->cflag = cflag;
175 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
177 /* Mark/Space not supported */
178 tty->termios.c_cflag &= ~CMSPAR;
180 keyspan_send_setup(port, 0);
183 static int keyspan_tiocmget(struct tty_struct *tty)
185 struct usb_serial_port *port = tty->driver_data;
186 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
189 value = ((p_priv->rts_state) ? TIOCM_RTS : 0) |
190 ((p_priv->dtr_state) ? TIOCM_DTR : 0) |
191 ((p_priv->cts_state) ? TIOCM_CTS : 0) |
192 ((p_priv->dsr_state) ? TIOCM_DSR : 0) |
193 ((p_priv->dcd_state) ? TIOCM_CAR : 0) |
194 ((p_priv->ri_state) ? TIOCM_RNG : 0);
199 static int keyspan_tiocmset(struct tty_struct *tty,
200 unsigned int set, unsigned int clear)
202 struct usb_serial_port *port = tty->driver_data;
203 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
206 p_priv->rts_state = 1;
208 p_priv->dtr_state = 1;
209 if (clear & TIOCM_RTS)
210 p_priv->rts_state = 0;
211 if (clear & TIOCM_DTR)
212 p_priv->dtr_state = 0;
213 keyspan_send_setup(port, 0);
217 /* Write function is similar for the four protocols used
218 with only a minor change for usa90 (usa19hs) required */
219 static int keyspan_write(struct tty_struct *tty,
220 struct usb_serial_port *port, const unsigned char *buf, int count)
222 struct keyspan_port_private *p_priv;
223 const struct keyspan_device_details *d_details;
226 struct urb *this_urb;
227 int err, maxDataLen, dataOffset;
229 p_priv = usb_get_serial_port_data(port);
230 d_details = p_priv->device_details;
232 if (d_details->msg_format == msg_usa90) {
240 dev_dbg(&port->dev, "%s - %d chars, flip=%d\n", __func__, count,
243 for (left = count; left > 0; left -= todo) {
245 if (todo > maxDataLen)
248 flip = p_priv->out_flip;
250 /* Check we have a valid urb/endpoint before we use it... */
251 this_urb = p_priv->out_urbs[flip];
252 if (this_urb == NULL) {
253 /* no bulk out, so return 0 bytes written */
254 dev_dbg(&port->dev, "%s - no output urb :(\n", __func__);
258 dev_dbg(&port->dev, "%s - endpoint %d flip %d\n",
259 __func__, usb_pipeendpoint(this_urb->pipe), flip);
261 if (this_urb->status == -EINPROGRESS) {
262 if (time_before(jiffies,
263 p_priv->tx_start_time[flip] + 10 * HZ))
265 usb_unlink_urb(this_urb);
269 /* First byte in buffer is "last flag" (except for usa19hx)
270 - unused so for now so set to zero */
271 ((char *)this_urb->transfer_buffer)[0] = 0;
273 memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
276 /* send the data out the bulk port */
277 this_urb->transfer_buffer_length = todo + dataOffset;
279 err = usb_submit_urb(this_urb, GFP_ATOMIC);
281 dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed (%d)\n", err);
282 p_priv->tx_start_time[flip] = jiffies;
284 /* Flip for next time if usa26 or usa28 interface
285 (not used on usa49) */
286 p_priv->out_flip = (flip + 1) & d_details->outdat_endp_flip;
292 static void usa26_indat_callback(struct urb *urb)
296 struct usb_serial_port *port;
297 unsigned char *data = urb->transfer_buffer;
298 int status = urb->status;
300 endpoint = usb_pipeendpoint(urb->pipe);
303 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
304 __func__, status, endpoint);
309 if (urb->actual_length) {
310 /* 0x80 bit is error flag */
311 if ((data[0] & 0x80) == 0) {
312 /* no errors on individual bytes, only
313 possible overrun err */
314 if (data[0] & RXERROR_OVERRUN)
318 for (i = 1; i < urb->actual_length ; ++i)
319 tty_insert_flip_char(&port->port, data[i], err);
321 /* some bytes had errors, every byte has status */
322 dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
323 for (i = 0; i + 1 < urb->actual_length; i += 2) {
324 int stat = data[i], flag = 0;
325 if (stat & RXERROR_OVERRUN)
327 if (stat & RXERROR_FRAMING)
329 if (stat & RXERROR_PARITY)
331 /* XXX should handle break (0x10) */
332 tty_insert_flip_char(&port->port, data[i+1],
336 tty_flip_buffer_push(&port->port);
339 /* Resubmit urb so we continue receiving */
340 err = usb_submit_urb(urb, GFP_ATOMIC);
342 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
345 /* Outdat handling is common for all devices */
346 static void usa2x_outdat_callback(struct urb *urb)
348 struct usb_serial_port *port;
349 struct keyspan_port_private *p_priv;
352 p_priv = usb_get_serial_port_data(port);
353 dev_dbg(&port->dev, "%s - urb %d\n", __func__, urb == p_priv->out_urbs[1]);
355 usb_serial_port_softint(port);
358 static void usa26_inack_callback(struct urb *urb)
362 static void usa26_outcont_callback(struct urb *urb)
364 struct usb_serial_port *port;
365 struct keyspan_port_private *p_priv;
368 p_priv = usb_get_serial_port_data(port);
370 if (p_priv->resend_cont) {
371 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
372 keyspan_usa26_send_setup(port->serial, port,
373 p_priv->resend_cont - 1);
377 static void usa26_instat_callback(struct urb *urb)
379 unsigned char *data = urb->transfer_buffer;
380 struct keyspan_usa26_portStatusMessage *msg;
381 struct usb_serial *serial;
382 struct usb_serial_port *port;
383 struct keyspan_port_private *p_priv;
384 int old_dcd_state, err;
385 int status = urb->status;
387 serial = urb->context;
390 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
393 if (urb->actual_length != 9) {
394 dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
398 msg = (struct keyspan_usa26_portStatusMessage *)data;
400 /* Check port number from message and retrieve private data */
401 if (msg->port >= serial->num_ports) {
402 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
405 port = serial->port[msg->port];
406 p_priv = usb_get_serial_port_data(port);
408 /* Update handshaking pin state information */
409 old_dcd_state = p_priv->dcd_state;
410 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
411 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
412 p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
413 p_priv->ri_state = ((msg->ri) ? 1 : 0);
415 if (old_dcd_state != p_priv->dcd_state)
416 tty_port_tty_hangup(&port->port, true);
418 /* Resubmit urb so we continue receiving */
419 err = usb_submit_urb(urb, GFP_ATOMIC);
421 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
425 static void usa26_glocont_callback(struct urb *urb)
430 static void usa28_indat_callback(struct urb *urb)
433 struct usb_serial_port *port;
435 struct keyspan_port_private *p_priv;
436 int status = urb->status;
439 p_priv = usb_get_serial_port_data(port);
440 data = urb->transfer_buffer;
442 if (urb != p_priv->in_urbs[p_priv->in_flip])
447 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
448 __func__, status, usb_pipeendpoint(urb->pipe));
453 p_priv = usb_get_serial_port_data(port);
454 data = urb->transfer_buffer;
456 if (urb->actual_length) {
457 tty_insert_flip_string(&port->port, data,
459 tty_flip_buffer_push(&port->port);
462 /* Resubmit urb so we continue receiving */
463 err = usb_submit_urb(urb, GFP_ATOMIC);
465 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n",
467 p_priv->in_flip ^= 1;
469 urb = p_priv->in_urbs[p_priv->in_flip];
470 } while (urb->status != -EINPROGRESS);
473 static void usa28_inack_callback(struct urb *urb)
477 static void usa28_outcont_callback(struct urb *urb)
479 struct usb_serial_port *port;
480 struct keyspan_port_private *p_priv;
483 p_priv = usb_get_serial_port_data(port);
485 if (p_priv->resend_cont) {
486 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
487 keyspan_usa28_send_setup(port->serial, port,
488 p_priv->resend_cont - 1);
492 static void usa28_instat_callback(struct urb *urb)
495 unsigned char *data = urb->transfer_buffer;
496 struct keyspan_usa28_portStatusMessage *msg;
497 struct usb_serial *serial;
498 struct usb_serial_port *port;
499 struct keyspan_port_private *p_priv;
501 int status = urb->status;
503 serial = urb->context;
506 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
510 if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) {
511 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
515 msg = (struct keyspan_usa28_portStatusMessage *)data;
517 /* Check port number from message and retrieve private data */
518 if (msg->port >= serial->num_ports) {
519 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
522 port = serial->port[msg->port];
523 p_priv = usb_get_serial_port_data(port);
525 /* Update handshaking pin state information */
526 old_dcd_state = p_priv->dcd_state;
527 p_priv->cts_state = ((msg->cts) ? 1 : 0);
528 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
529 p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
530 p_priv->ri_state = ((msg->ri) ? 1 : 0);
532 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
533 tty_port_tty_hangup(&port->port, true);
535 /* Resubmit urb so we continue receiving */
536 err = usb_submit_urb(urb, GFP_ATOMIC);
538 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
542 static void usa28_glocont_callback(struct urb *urb)
547 static void usa49_glocont_callback(struct urb *urb)
549 struct usb_serial *serial;
550 struct usb_serial_port *port;
551 struct keyspan_port_private *p_priv;
554 serial = urb->context;
555 for (i = 0; i < serial->num_ports; ++i) {
556 port = serial->port[i];
557 p_priv = usb_get_serial_port_data(port);
559 if (p_priv->resend_cont) {
560 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
561 keyspan_usa49_send_setup(serial, port,
562 p_priv->resend_cont - 1);
568 /* This is actually called glostat in the Keyspan
570 static void usa49_instat_callback(struct urb *urb)
573 unsigned char *data = urb->transfer_buffer;
574 struct keyspan_usa49_portStatusMessage *msg;
575 struct usb_serial *serial;
576 struct usb_serial_port *port;
577 struct keyspan_port_private *p_priv;
579 int status = urb->status;
581 serial = urb->context;
584 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
588 if (urb->actual_length !=
589 sizeof(struct keyspan_usa49_portStatusMessage)) {
590 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
594 msg = (struct keyspan_usa49_portStatusMessage *)data;
596 /* Check port number from message and retrieve private data */
597 if (msg->portNumber >= serial->num_ports) {
598 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
599 __func__, msg->portNumber);
602 port = serial->port[msg->portNumber];
603 p_priv = usb_get_serial_port_data(port);
605 /* Update handshaking pin state information */
606 old_dcd_state = p_priv->dcd_state;
607 p_priv->cts_state = ((msg->cts) ? 1 : 0);
608 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
609 p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
610 p_priv->ri_state = ((msg->ri) ? 1 : 0);
612 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
613 tty_port_tty_hangup(&port->port, true);
615 /* Resubmit urb so we continue receiving */
616 err = usb_submit_urb(urb, GFP_ATOMIC);
618 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
622 static void usa49_inack_callback(struct urb *urb)
626 static void usa49_indat_callback(struct urb *urb)
630 struct usb_serial_port *port;
631 unsigned char *data = urb->transfer_buffer;
632 int status = urb->status;
634 endpoint = usb_pipeendpoint(urb->pipe);
637 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
638 __func__, status, endpoint);
643 if (urb->actual_length) {
644 /* 0x80 bit is error flag */
645 if ((data[0] & 0x80) == 0) {
646 /* no error on any byte */
647 tty_insert_flip_string(&port->port, data + 1,
648 urb->actual_length - 1);
650 /* some bytes had errors, every byte has status */
651 for (i = 0; i + 1 < urb->actual_length; i += 2) {
652 int stat = data[i], flag = 0;
653 if (stat & RXERROR_OVERRUN)
655 if (stat & RXERROR_FRAMING)
657 if (stat & RXERROR_PARITY)
659 /* XXX should handle break (0x10) */
660 tty_insert_flip_char(&port->port, data[i+1],
664 tty_flip_buffer_push(&port->port);
667 /* Resubmit urb so we continue receiving */
668 err = usb_submit_urb(urb, GFP_ATOMIC);
670 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
673 static void usa49wg_indat_callback(struct urb *urb)
676 struct usb_serial *serial;
677 struct usb_serial_port *port;
678 unsigned char *data = urb->transfer_buffer;
679 int status = urb->status;
681 serial = urb->context;
684 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
688 /* inbound data is in the form P#, len, status, data */
692 while (i < urb->actual_length) {
694 /* Check port number from message */
695 if (data[i] >= serial->num_ports) {
696 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n",
700 port = serial->port[data[i++]];
703 /* 0x80 bit is error flag */
704 if ((data[i] & 0x80) == 0) {
705 /* no error on any byte */
707 for (x = 1; x < len && i < urb->actual_length; ++x)
708 tty_insert_flip_char(&port->port,
712 * some bytes had errors, every byte has status
714 for (x = 0; x + 1 < len &&
715 i + 1 < urb->actual_length; x += 2) {
716 int stat = data[i], flag = 0;
718 if (stat & RXERROR_OVERRUN)
720 if (stat & RXERROR_FRAMING)
722 if (stat & RXERROR_PARITY)
724 /* XXX should handle break (0x10) */
725 tty_insert_flip_char(&port->port, data[i+1],
730 tty_flip_buffer_push(&port->port);
733 /* Resubmit urb so we continue receiving */
734 err = usb_submit_urb(urb, GFP_ATOMIC);
736 dev_dbg(&urb->dev->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
739 /* not used, usa-49 doesn't have per-port control endpoints */
740 static void usa49_outcont_callback(struct urb *urb)
744 static void usa90_indat_callback(struct urb *urb)
748 struct usb_serial_port *port;
749 struct keyspan_port_private *p_priv;
750 unsigned char *data = urb->transfer_buffer;
751 int status = urb->status;
753 endpoint = usb_pipeendpoint(urb->pipe);
756 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n",
757 __func__, status, endpoint);
762 p_priv = usb_get_serial_port_data(port);
764 if (urb->actual_length) {
765 /* if current mode is DMA, looks like usa28 format
766 otherwise looks like usa26 data format */
768 if (p_priv->baud > 57600)
769 tty_insert_flip_string(&port->port, data,
772 /* 0x80 bit is error flag */
773 if ((data[0] & 0x80) == 0) {
774 /* no errors on individual bytes, only
775 possible overrun err*/
776 if (data[0] & RXERROR_OVERRUN)
780 for (i = 1; i < urb->actual_length ; ++i)
781 tty_insert_flip_char(&port->port,
784 /* some bytes had errors, every byte has status */
785 dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
786 for (i = 0; i + 1 < urb->actual_length; i += 2) {
787 int stat = data[i], flag = 0;
788 if (stat & RXERROR_OVERRUN)
790 if (stat & RXERROR_FRAMING)
792 if (stat & RXERROR_PARITY)
794 /* XXX should handle break (0x10) */
795 tty_insert_flip_char(&port->port,
800 tty_flip_buffer_push(&port->port);
803 /* Resubmit urb so we continue receiving */
804 err = usb_submit_urb(urb, GFP_ATOMIC);
806 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
810 static void usa90_instat_callback(struct urb *urb)
812 unsigned char *data = urb->transfer_buffer;
813 struct keyspan_usa90_portStatusMessage *msg;
814 struct usb_serial *serial;
815 struct usb_serial_port *port;
816 struct keyspan_port_private *p_priv;
817 int old_dcd_state, err;
818 int status = urb->status;
820 serial = urb->context;
823 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
826 if (urb->actual_length < 14) {
827 dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length);
831 msg = (struct keyspan_usa90_portStatusMessage *)data;
833 /* Now do something useful with the data */
835 port = serial->port[0];
836 p_priv = usb_get_serial_port_data(port);
838 /* Update handshaking pin state information */
839 old_dcd_state = p_priv->dcd_state;
840 p_priv->cts_state = ((msg->cts) ? 1 : 0);
841 p_priv->dsr_state = ((msg->dsr) ? 1 : 0);
842 p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
843 p_priv->ri_state = ((msg->ri) ? 1 : 0);
845 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
846 tty_port_tty_hangup(&port->port, true);
848 /* Resubmit urb so we continue receiving */
849 err = usb_submit_urb(urb, GFP_ATOMIC);
851 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
856 static void usa90_outcont_callback(struct urb *urb)
858 struct usb_serial_port *port;
859 struct keyspan_port_private *p_priv;
862 p_priv = usb_get_serial_port_data(port);
864 if (p_priv->resend_cont) {
865 dev_dbg(&urb->dev->dev, "%s - sending setup\n", __func__);
866 keyspan_usa90_send_setup(port->serial, port,
867 p_priv->resend_cont - 1);
871 /* Status messages from the 28xg */
872 static void usa67_instat_callback(struct urb *urb)
875 unsigned char *data = urb->transfer_buffer;
876 struct keyspan_usa67_portStatusMessage *msg;
877 struct usb_serial *serial;
878 struct usb_serial_port *port;
879 struct keyspan_port_private *p_priv;
881 int status = urb->status;
883 serial = urb->context;
886 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status);
890 if (urb->actual_length !=
891 sizeof(struct keyspan_usa67_portStatusMessage)) {
892 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length);
897 /* Now do something useful with the data */
898 msg = (struct keyspan_usa67_portStatusMessage *)data;
900 /* Check port number from message and retrieve private data */
901 if (msg->port >= serial->num_ports) {
902 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port);
906 port = serial->port[msg->port];
907 p_priv = usb_get_serial_port_data(port);
909 /* Update handshaking pin state information */
910 old_dcd_state = p_priv->dcd_state;
911 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
912 p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
914 if (old_dcd_state != p_priv->dcd_state && old_dcd_state)
915 tty_port_tty_hangup(&port->port, true);
917 /* Resubmit urb so we continue receiving */
918 err = usb_submit_urb(urb, GFP_ATOMIC);
920 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err);
923 static void usa67_glocont_callback(struct urb *urb)
925 struct usb_serial *serial;
926 struct usb_serial_port *port;
927 struct keyspan_port_private *p_priv;
930 serial = urb->context;
931 for (i = 0; i < serial->num_ports; ++i) {
932 port = serial->port[i];
933 p_priv = usb_get_serial_port_data(port);
935 if (p_priv->resend_cont) {
936 dev_dbg(&port->dev, "%s - sending setup\n", __func__);
937 keyspan_usa67_send_setup(serial, port,
938 p_priv->resend_cont - 1);
944 static int keyspan_write_room(struct tty_struct *tty)
946 struct usb_serial_port *port = tty->driver_data;
947 struct keyspan_port_private *p_priv;
948 const struct keyspan_device_details *d_details;
951 struct urb *this_urb;
953 p_priv = usb_get_serial_port_data(port);
954 d_details = p_priv->device_details;
957 if (d_details->msg_format == msg_usa90)
962 flip = p_priv->out_flip;
964 /* Check both endpoints to see if any are available. */
965 this_urb = p_priv->out_urbs[flip];
966 if (this_urb != NULL) {
967 if (this_urb->status != -EINPROGRESS)
969 flip = (flip + 1) & d_details->outdat_endp_flip;
970 this_urb = p_priv->out_urbs[flip];
971 if (this_urb != NULL) {
972 if (this_urb->status != -EINPROGRESS)
980 static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
982 struct keyspan_port_private *p_priv;
983 const struct keyspan_device_details *d_details;
985 int baud_rate, device_port;
987 unsigned int cflag = 0;
989 p_priv = usb_get_serial_port_data(port);
990 d_details = p_priv->device_details;
992 /* Set some sane defaults */
993 p_priv->rts_state = 1;
994 p_priv->dtr_state = 1;
997 /* force baud and lcr to be set on open */
998 p_priv->old_baud = 0;
999 p_priv->old_cflag = 0;
1001 p_priv->out_flip = 0;
1002 p_priv->in_flip = 0;
1004 /* Reset low level data toggle and start reading from endpoints */
1005 for (i = 0; i < 2; i++) {
1006 urb = p_priv->in_urbs[i];
1010 /* make sure endpoint data toggle is synchronized
1012 usb_clear_halt(urb->dev, urb->pipe);
1013 err = usb_submit_urb(urb, GFP_KERNEL);
1015 dev_dbg(&port->dev, "%s - submit urb %d failed (%d)\n", __func__, i, err);
1018 /* Reset low level data toggle on out endpoints */
1019 for (i = 0; i < 2; i++) {
1020 urb = p_priv->out_urbs[i];
1023 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1024 usb_pipeout(urb->pipe), 0); */
1027 /* get the terminal config for the setup message now so we don't
1028 * need to send 2 of them */
1030 device_port = port->port_number;
1032 cflag = tty->termios.c_cflag;
1033 /* Baud rate calculation takes baud rate as an integer
1034 so other rates can be generated if desired. */
1035 baud_rate = tty_get_baud_rate(tty);
1036 /* If no match or invalid, leave as default */
1038 && d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk,
1039 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
1040 p_priv->baud = baud_rate;
1043 /* set CTS/RTS handshake etc. */
1044 p_priv->cflag = cflag;
1045 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
1047 keyspan_send_setup(port, 1);
1049 /* keyspan_set_termios(port, NULL); */
1054 static inline void stop_urb(struct urb *urb)
1056 if (urb && urb->status == -EINPROGRESS)
1060 static void keyspan_dtr_rts(struct usb_serial_port *port, int on)
1062 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port);
1064 p_priv->rts_state = on;
1065 p_priv->dtr_state = on;
1066 keyspan_send_setup(port, 0);
1069 static void keyspan_close(struct usb_serial_port *port)
1072 struct keyspan_port_private *p_priv;
1074 p_priv = usb_get_serial_port_data(port);
1076 p_priv->rts_state = 0;
1077 p_priv->dtr_state = 0;
1079 keyspan_send_setup(port, 2);
1080 /* pilot-xfer seems to work best with this delay */
1083 p_priv->out_flip = 0;
1084 p_priv->in_flip = 0;
1086 stop_urb(p_priv->inack_urb);
1087 for (i = 0; i < 2; i++) {
1088 stop_urb(p_priv->in_urbs[i]);
1089 stop_urb(p_priv->out_urbs[i]);
1093 /* download the firmware to a pre-renumeration device */
1094 static int keyspan_fake_startup(struct usb_serial *serial)
1098 dev_dbg(&serial->dev->dev, "Keyspan startup version %04x product %04x\n",
1099 le16_to_cpu(serial->dev->descriptor.bcdDevice),
1100 le16_to_cpu(serial->dev->descriptor.idProduct));
1102 if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000)
1104 dev_dbg(&serial->dev->dev, "Firmware already loaded. Quitting.\n");
1108 /* Select firmware image on the basis of idProduct */
1109 switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
1110 case keyspan_usa28_pre_product_id:
1111 fw_name = "keyspan/usa28.fw";
1114 case keyspan_usa28x_pre_product_id:
1115 fw_name = "keyspan/usa28x.fw";
1118 case keyspan_usa28xa_pre_product_id:
1119 fw_name = "keyspan/usa28xa.fw";
1122 case keyspan_usa28xb_pre_product_id:
1123 fw_name = "keyspan/usa28xb.fw";
1126 case keyspan_usa19_pre_product_id:
1127 fw_name = "keyspan/usa19.fw";
1130 case keyspan_usa19qi_pre_product_id:
1131 fw_name = "keyspan/usa19qi.fw";
1134 case keyspan_mpr_pre_product_id:
1135 fw_name = "keyspan/mpr.fw";
1138 case keyspan_usa19qw_pre_product_id:
1139 fw_name = "keyspan/usa19qw.fw";
1142 case keyspan_usa18x_pre_product_id:
1143 fw_name = "keyspan/usa18x.fw";
1146 case keyspan_usa19w_pre_product_id:
1147 fw_name = "keyspan/usa19w.fw";
1150 case keyspan_usa49w_pre_product_id:
1151 fw_name = "keyspan/usa49w.fw";
1154 case keyspan_usa49wlc_pre_product_id:
1155 fw_name = "keyspan/usa49wlc.fw";
1159 dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n",
1160 le16_to_cpu(serial->dev->descriptor.idProduct));
1164 dev_dbg(&serial->dev->dev, "Uploading Keyspan %s firmware.\n", fw_name);
1166 if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) {
1167 dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
1172 /* after downloading firmware Renumeration will occur in a
1173 moment and the new device will bind to the real driver */
1175 /* we don't want this device to have a driver assigned to it. */
1179 /* Helper functions used by keyspan_setup_urbs */
1180 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial,
1183 struct usb_host_interface *iface_desc;
1184 struct usb_endpoint_descriptor *ep;
1187 iface_desc = serial->interface->cur_altsetting;
1188 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1189 ep = &iface_desc->endpoint[i].desc;
1190 if (ep->bEndpointAddress == endpoint)
1193 dev_warn(&serial->interface->dev, "found no endpoint descriptor for "
1194 "endpoint %x\n", endpoint);
1198 static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint,
1199 int dir, void *ctx, char *buf, int len,
1200 void (*callback)(struct urb *))
1203 struct usb_endpoint_descriptor const *ep_desc;
1204 char const *ep_type_name;
1207 return NULL; /* endpoint not needed */
1209 dev_dbg(&serial->interface->dev, "%s - alloc for endpoint %d.\n", __func__, endpoint);
1210 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
1214 if (endpoint == 0) {
1215 /* control EP filled in when used */
1219 ep_desc = find_ep(serial, endpoint);
1221 /* leak the urb, something's wrong and the callers don't care */
1224 if (usb_endpoint_xfer_int(ep_desc)) {
1225 ep_type_name = "INT";
1226 usb_fill_int_urb(urb, serial->dev,
1227 usb_sndintpipe(serial->dev, endpoint) | dir,
1228 buf, len, callback, ctx,
1229 ep_desc->bInterval);
1230 } else if (usb_endpoint_xfer_bulk(ep_desc)) {
1231 ep_type_name = "BULK";
1232 usb_fill_bulk_urb(urb, serial->dev,
1233 usb_sndbulkpipe(serial->dev, endpoint) | dir,
1234 buf, len, callback, ctx);
1236 dev_warn(&serial->interface->dev,
1237 "unsupported endpoint type %x\n",
1238 usb_endpoint_type(ep_desc));
1243 dev_dbg(&serial->interface->dev, "%s - using urb %p for %s endpoint %x\n",
1244 __func__, urb, ep_type_name, endpoint);
1248 static struct callbacks {
1249 void (*instat_callback)(struct urb *);
1250 void (*glocont_callback)(struct urb *);
1251 void (*indat_callback)(struct urb *);
1252 void (*outdat_callback)(struct urb *);
1253 void (*inack_callback)(struct urb *);
1254 void (*outcont_callback)(struct urb *);
1255 } keyspan_callbacks[] = {
1257 /* msg_usa26 callbacks */
1258 .instat_callback = usa26_instat_callback,
1259 .glocont_callback = usa26_glocont_callback,
1260 .indat_callback = usa26_indat_callback,
1261 .outdat_callback = usa2x_outdat_callback,
1262 .inack_callback = usa26_inack_callback,
1263 .outcont_callback = usa26_outcont_callback,
1265 /* msg_usa28 callbacks */
1266 .instat_callback = usa28_instat_callback,
1267 .glocont_callback = usa28_glocont_callback,
1268 .indat_callback = usa28_indat_callback,
1269 .outdat_callback = usa2x_outdat_callback,
1270 .inack_callback = usa28_inack_callback,
1271 .outcont_callback = usa28_outcont_callback,
1273 /* msg_usa49 callbacks */
1274 .instat_callback = usa49_instat_callback,
1275 .glocont_callback = usa49_glocont_callback,
1276 .indat_callback = usa49_indat_callback,
1277 .outdat_callback = usa2x_outdat_callback,
1278 .inack_callback = usa49_inack_callback,
1279 .outcont_callback = usa49_outcont_callback,
1281 /* msg_usa90 callbacks */
1282 .instat_callback = usa90_instat_callback,
1283 .glocont_callback = usa28_glocont_callback,
1284 .indat_callback = usa90_indat_callback,
1285 .outdat_callback = usa2x_outdat_callback,
1286 .inack_callback = usa28_inack_callback,
1287 .outcont_callback = usa90_outcont_callback,
1289 /* msg_usa67 callbacks */
1290 .instat_callback = usa67_instat_callback,
1291 .glocont_callback = usa67_glocont_callback,
1292 .indat_callback = usa26_indat_callback,
1293 .outdat_callback = usa2x_outdat_callback,
1294 .inack_callback = usa26_inack_callback,
1295 .outcont_callback = usa26_outcont_callback,
1299 /* Generic setup urbs function that uses
1300 data in device_details */
1301 static void keyspan_setup_urbs(struct usb_serial *serial)
1303 struct keyspan_serial_private *s_priv;
1304 const struct keyspan_device_details *d_details;
1305 struct callbacks *cback;
1307 s_priv = usb_get_serial_data(serial);
1308 d_details = s_priv->device_details;
1310 /* Setup values for the various callback routines */
1311 cback = &keyspan_callbacks[d_details->msg_format];
1313 /* Allocate and set up urbs for each one that is in use,
1314 starting with instat endpoints */
1315 s_priv->instat_urb = keyspan_setup_urb
1316 (serial, d_details->instat_endpoint, USB_DIR_IN,
1317 serial, s_priv->instat_buf, INSTAT_BUFLEN,
1318 cback->instat_callback);
1320 s_priv->indat_urb = keyspan_setup_urb
1321 (serial, d_details->indat_endpoint, USB_DIR_IN,
1322 serial, s_priv->indat_buf, INDAT49W_BUFLEN,
1323 usa49wg_indat_callback);
1325 s_priv->glocont_urb = keyspan_setup_urb
1326 (serial, d_details->glocont_endpoint, USB_DIR_OUT,
1327 serial, s_priv->glocont_buf, GLOCONT_BUFLEN,
1328 cback->glocont_callback);
1331 /* usa19 function doesn't require prescaler */
1332 static int keyspan_usa19_calc_baud(struct usb_serial_port *port,
1333 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1334 u8 *rate_low, u8 *prescaler, int portnum)
1336 u32 b16, /* baud rate times 16 (actual rate used internally) */
1338 cnt; /* inverse of divisor (programmed into 8051) */
1340 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1342 /* prevent divide by zero... */
1343 b16 = baud_rate * 16L;
1345 return KEYSPAN_INVALID_BAUD_RATE;
1346 /* Any "standard" rate over 57k6 is marginal on the USA-19
1347 as we run out of divisor resolution. */
1348 if (baud_rate > 57600)
1349 return KEYSPAN_INVALID_BAUD_RATE;
1351 /* calculate the divisor and the counter (its inverse) */
1352 div = baudclk / b16;
1354 return KEYSPAN_INVALID_BAUD_RATE;
1359 return KEYSPAN_INVALID_BAUD_RATE;
1361 /* return the counter values if non-null */
1363 *rate_low = (u8) (cnt & 0xff);
1365 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1366 if (rate_low && rate_hi)
1367 dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1368 __func__, baud_rate, *rate_hi, *rate_low);
1369 return KEYSPAN_BAUD_RATE_OK;
1372 /* usa19hs function doesn't require prescaler */
1373 static int keyspan_usa19hs_calc_baud(struct usb_serial_port *port,
1374 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1375 u8 *rate_low, u8 *prescaler, int portnum)
1377 u32 b16, /* baud rate times 16 (actual rate used internally) */
1380 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1382 /* prevent divide by zero... */
1383 b16 = baud_rate * 16L;
1385 return KEYSPAN_INVALID_BAUD_RATE;
1387 /* calculate the divisor */
1388 div = baudclk / b16;
1390 return KEYSPAN_INVALID_BAUD_RATE;
1393 return KEYSPAN_INVALID_BAUD_RATE;
1395 /* return the counter values if non-null */
1397 *rate_low = (u8) (div & 0xff);
1400 *rate_hi = (u8) ((div >> 8) & 0xff);
1402 if (rate_low && rate_hi)
1403 dev_dbg(&port->dev, "%s - %d %02x %02x.\n",
1404 __func__, baud_rate, *rate_hi, *rate_low);
1406 return KEYSPAN_BAUD_RATE_OK;
1409 static int keyspan_usa19w_calc_baud(struct usb_serial_port *port,
1410 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1411 u8 *rate_low, u8 *prescaler, int portnum)
1413 u32 b16, /* baud rate times 16 (actual rate used internally) */
1414 clk, /* clock with 13/8 prescaler */
1415 div, /* divisor using 13/8 prescaler */
1416 res, /* resulting baud rate using 13/8 prescaler */
1417 diff, /* error using 13/8 prescaler */
1422 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1424 /* prevent divide by zero */
1425 b16 = baud_rate * 16L;
1427 return KEYSPAN_INVALID_BAUD_RATE;
1429 /* Calculate prescaler by trying them all and looking
1432 /* start with largest possible difference */
1433 smallest_diff = 0xffffffff;
1435 /* 0 is an invalid prescaler, used as a flag */
1438 for (i = 8; i <= 0xff; ++i) {
1439 clk = (baudclk * 8) / (u32) i;
1446 diff = (res > b16) ? (res-b16) : (b16-res);
1448 if (diff < smallest_diff) {
1450 smallest_diff = diff;
1454 if (best_prescaler == 0)
1455 return KEYSPAN_INVALID_BAUD_RATE;
1457 clk = (baudclk * 8) / (u32) best_prescaler;
1460 /* return the divisor and prescaler if non-null */
1462 *rate_low = (u8) (div & 0xff);
1464 *rate_hi = (u8) ((div >> 8) & 0xff);
1466 *prescaler = best_prescaler;
1467 /* dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */
1469 return KEYSPAN_BAUD_RATE_OK;
1472 /* USA-28 supports different maximum baud rates on each port */
1473 static int keyspan_usa28_calc_baud(struct usb_serial_port *port,
1474 u32 baud_rate, u32 baudclk, u8 *rate_hi,
1475 u8 *rate_low, u8 *prescaler, int portnum)
1477 u32 b16, /* baud rate times 16 (actual rate used internally) */
1479 cnt; /* inverse of divisor (programmed into 8051) */
1481 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate);
1483 /* prevent divide by zero */
1484 b16 = baud_rate * 16L;
1486 return KEYSPAN_INVALID_BAUD_RATE;
1488 /* calculate the divisor and the counter (its inverse) */
1489 div = KEYSPAN_USA28_BAUDCLK / b16;
1491 return KEYSPAN_INVALID_BAUD_RATE;
1495 /* check for out of range, based on portnum,
1496 and return result */
1499 return KEYSPAN_INVALID_BAUD_RATE;
1503 return KEYSPAN_INVALID_BAUD_RATE;
1505 return KEYSPAN_INVALID_BAUD_RATE;
1508 /* return the counter values if not NULL
1509 (port 1 will ignore retHi) */
1511 *rate_low = (u8) (cnt & 0xff);
1513 *rate_hi = (u8) ((cnt >> 8) & 0xff);
1514 dev_dbg(&port->dev, "%s - %d OK.\n", __func__, baud_rate);
1515 return KEYSPAN_BAUD_RATE_OK;
1518 static int keyspan_usa26_send_setup(struct usb_serial *serial,
1519 struct usb_serial_port *port,
1522 struct keyspan_usa26_portControlMessage msg;
1523 struct keyspan_serial_private *s_priv;
1524 struct keyspan_port_private *p_priv;
1525 const struct keyspan_device_details *d_details;
1526 struct urb *this_urb;
1527 int device_port, err;
1529 dev_dbg(&port->dev, "%s reset=%d\n", __func__, reset_port);
1531 s_priv = usb_get_serial_data(serial);
1532 p_priv = usb_get_serial_port_data(port);
1533 d_details = s_priv->device_details;
1534 device_port = port->port_number;
1536 this_urb = p_priv->outcont_urb;
1538 /* Make sure we have an urb then send the message */
1539 if (this_urb == NULL) {
1540 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1544 dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe));
1546 /* Save reset port val for resend.
1547 Don't overwrite resend for open/close condition. */
1548 if ((reset_port + 1) > p_priv->resend_cont)
1549 p_priv->resend_cont = reset_port + 1;
1550 if (this_urb->status == -EINPROGRESS) {
1551 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1556 memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage));
1558 /* Only set baud rate if it's changed */
1559 if (p_priv->old_baud != p_priv->baud) {
1560 p_priv->old_baud = p_priv->baud;
1561 msg.setClocking = 0xff;
1562 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1563 &msg.baudHi, &msg.baudLo, &msg.prescaler,
1564 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1565 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
1566 __func__, p_priv->baud);
1568 msg.baudHi = 125; /* Values for 9600 baud */
1571 msg.setPrescaler = 0xff;
1574 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
1575 switch (p_priv->cflag & CSIZE) {
1577 msg.lcr |= USA_DATABITS_5;
1580 msg.lcr |= USA_DATABITS_6;
1583 msg.lcr |= USA_DATABITS_7;
1586 msg.lcr |= USA_DATABITS_8;
1589 if (p_priv->cflag & PARENB) {
1590 /* note USA_PARITY_NONE == 0 */
1591 msg.lcr |= (p_priv->cflag & PARODD) ?
1592 USA_PARITY_ODD : USA_PARITY_EVEN;
1596 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1597 msg.xonFlowControl = 0;
1598 msg.setFlowControl = 0xff;
1599 msg.forwardingLength = 16;
1604 if (reset_port == 1) {
1613 msg.returnStatus = 0;
1614 msg.resetDataToggle = 0xff;
1618 else if (reset_port == 2) {
1627 msg.returnStatus = 0;
1628 msg.resetDataToggle = 0;
1631 /* Sending intermediate configs */
1633 msg._txOn = (!p_priv->break_on);
1636 msg.txBreak = (p_priv->break_on);
1641 msg.returnStatus = 0;
1642 msg.resetDataToggle = 0x0;
1645 /* Do handshaking outputs */
1646 msg.setTxTriState_setRts = 0xff;
1647 msg.txTriState_rts = p_priv->rts_state;
1649 msg.setHskoa_setDtr = 0xff;
1650 msg.hskoa_dtr = p_priv->dtr_state;
1652 p_priv->resend_cont = 0;
1653 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1655 /* send the data out the device on control endpoint */
1656 this_urb->transfer_buffer_length = sizeof(msg);
1658 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1660 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1664 static int keyspan_usa28_send_setup(struct usb_serial *serial,
1665 struct usb_serial_port *port,
1668 struct keyspan_usa28_portControlMessage msg;
1669 struct keyspan_serial_private *s_priv;
1670 struct keyspan_port_private *p_priv;
1671 const struct keyspan_device_details *d_details;
1672 struct urb *this_urb;
1673 int device_port, err;
1675 s_priv = usb_get_serial_data(serial);
1676 p_priv = usb_get_serial_port_data(port);
1677 d_details = s_priv->device_details;
1678 device_port = port->port_number;
1680 /* only do something if we have a bulk out endpoint */
1681 this_urb = p_priv->outcont_urb;
1682 if (this_urb == NULL) {
1683 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1687 /* Save reset port val for resend.
1688 Don't overwrite resend for open/close condition. */
1689 if ((reset_port + 1) > p_priv->resend_cont)
1690 p_priv->resend_cont = reset_port + 1;
1691 if (this_urb->status == -EINPROGRESS) {
1692 dev_dbg(&port->dev, "%s already writing\n", __func__);
1697 memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage));
1699 msg.setBaudRate = 1;
1700 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1701 &msg.baudHi, &msg.baudLo, NULL,
1702 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1703 dev_dbg(&port->dev, "%s - Invalid baud rate requested %d.\n",
1704 __func__, p_priv->baud);
1706 msg.baudHi = 0xb2; /* Values for 9600 baud */
1709 /* If parity is enabled, we must calculate it ourselves. */
1710 msg.parity = 0; /* XXX for now */
1712 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1713 msg.xonFlowControl = 0;
1715 /* Do handshaking outputs, DTR is inverted relative to RTS */
1716 msg.rts = p_priv->rts_state;
1717 msg.dtr = p_priv->dtr_state;
1719 msg.forwardingLength = 16;
1721 msg.breakThreshold = 45;
1725 /*msg.returnStatus = 1;
1726 msg.resetDataToggle = 0xff;*/
1728 if (reset_port == 1) {
1732 msg.txForceXoff = 0;
1738 msg.returnStatus = 0;
1739 msg.resetDataToggle = 0xff;
1742 else if (reset_port == 2) {
1746 msg.txForceXoff = 0;
1752 msg.returnStatus = 0;
1753 msg.resetDataToggle = 0;
1755 /* Sending intermediate configs */
1757 msg._txOn = (!p_priv->break_on);
1760 msg.txForceXoff = 0;
1761 msg.txBreak = (p_priv->break_on);
1766 msg.returnStatus = 0;
1767 msg.resetDataToggle = 0x0;
1770 p_priv->resend_cont = 0;
1771 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1773 /* send the data out the device on control endpoint */
1774 this_urb->transfer_buffer_length = sizeof(msg);
1776 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1778 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed\n", __func__);
1783 static int keyspan_usa49_send_setup(struct usb_serial *serial,
1784 struct usb_serial_port *port,
1787 struct keyspan_usa49_portControlMessage msg;
1788 struct usb_ctrlrequest *dr = NULL;
1789 struct keyspan_serial_private *s_priv;
1790 struct keyspan_port_private *p_priv;
1791 const struct keyspan_device_details *d_details;
1792 struct urb *this_urb;
1793 int err, device_port;
1795 s_priv = usb_get_serial_data(serial);
1796 p_priv = usb_get_serial_port_data(port);
1797 d_details = s_priv->device_details;
1799 this_urb = s_priv->glocont_urb;
1801 /* Work out which port within the device is being setup */
1802 device_port = port->port_number;
1804 /* Make sure we have an urb then send the message */
1805 if (this_urb == NULL) {
1806 dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
1810 dev_dbg(&port->dev, "%s - endpoint %d (%d)\n",
1811 __func__, usb_pipeendpoint(this_urb->pipe), device_port);
1813 /* Save reset port val for resend.
1814 Don't overwrite resend for open/close condition. */
1815 if ((reset_port + 1) > p_priv->resend_cont)
1816 p_priv->resend_cont = reset_port + 1;
1818 if (this_urb->status == -EINPROGRESS) {
1819 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1824 memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
1826 msg.portNumber = device_port;
1828 /* Only set baud rate if it's changed */
1829 if (p_priv->old_baud != p_priv->baud) {
1830 p_priv->old_baud = p_priv->baud;
1831 msg.setClocking = 0xff;
1832 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
1833 &msg.baudHi, &msg.baudLo, &msg.prescaler,
1834 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
1835 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
1836 __func__, p_priv->baud);
1838 msg.baudHi = 125; /* Values for 9600 baud */
1841 /* msg.setPrescaler = 0xff; */
1844 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
1845 switch (p_priv->cflag & CSIZE) {
1847 msg.lcr |= USA_DATABITS_5;
1850 msg.lcr |= USA_DATABITS_6;
1853 msg.lcr |= USA_DATABITS_7;
1856 msg.lcr |= USA_DATABITS_8;
1859 if (p_priv->cflag & PARENB) {
1860 /* note USA_PARITY_NONE == 0 */
1861 msg.lcr |= (p_priv->cflag & PARODD) ?
1862 USA_PARITY_ODD : USA_PARITY_EVEN;
1866 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
1867 msg.xonFlowControl = 0;
1868 msg.setFlowControl = 0xff;
1870 msg.forwardingLength = 16;
1875 if (reset_port == 1) {
1884 msg.returnStatus = 0;
1885 msg.resetDataToggle = 0xff;
1887 msg.disablePort = 0;
1890 else if (reset_port == 2) {
1899 msg.returnStatus = 0;
1900 msg.resetDataToggle = 0;
1902 msg.disablePort = 1;
1904 /* Sending intermediate configs */
1906 msg._txOn = (!p_priv->break_on);
1909 msg.txBreak = (p_priv->break_on);
1914 msg.returnStatus = 0;
1915 msg.resetDataToggle = 0x0;
1917 msg.disablePort = 0;
1920 /* Do handshaking outputs */
1922 msg.rts = p_priv->rts_state;
1925 msg.dtr = p_priv->dtr_state;
1927 p_priv->resend_cont = 0;
1929 /* if the device is a 49wg, we send control message on usb
1932 if (d_details->product_id == keyspan_usa49wg_product_id) {
1933 dr = (void *)(s_priv->ctrl_buf);
1934 dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT;
1935 dr->bRequest = 0xB0; /* 49wg control message */;
1938 dr->wLength = cpu_to_le16(sizeof(msg));
1940 memcpy(s_priv->glocont_buf, &msg, sizeof(msg));
1942 usb_fill_control_urb(this_urb, serial->dev,
1943 usb_sndctrlpipe(serial->dev, 0),
1944 (unsigned char *)dr, s_priv->glocont_buf,
1945 sizeof(msg), usa49_glocont_callback, serial);
1948 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
1950 /* send the data out the device on control endpoint */
1951 this_urb->transfer_buffer_length = sizeof(msg);
1953 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1955 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1960 static int keyspan_usa90_send_setup(struct usb_serial *serial,
1961 struct usb_serial_port *port,
1964 struct keyspan_usa90_portControlMessage msg;
1965 struct keyspan_serial_private *s_priv;
1966 struct keyspan_port_private *p_priv;
1967 const struct keyspan_device_details *d_details;
1968 struct urb *this_urb;
1972 s_priv = usb_get_serial_data(serial);
1973 p_priv = usb_get_serial_port_data(port);
1974 d_details = s_priv->device_details;
1976 /* only do something if we have a bulk out endpoint */
1977 this_urb = p_priv->outcont_urb;
1978 if (this_urb == NULL) {
1979 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__);
1983 /* Save reset port val for resend.
1984 Don't overwrite resend for open/close condition. */
1985 if ((reset_port + 1) > p_priv->resend_cont)
1986 p_priv->resend_cont = reset_port + 1;
1987 if (this_urb->status == -EINPROGRESS) {
1988 dev_dbg(&port->dev, "%s already writing\n", __func__);
1993 memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage));
1995 /* Only set baud rate if it's changed */
1996 if (p_priv->old_baud != p_priv->baud) {
1997 p_priv->old_baud = p_priv->baud;
1998 msg.setClocking = 0x01;
1999 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2000 &msg.baudHi, &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) {
2001 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2002 __func__, p_priv->baud);
2003 p_priv->baud = 9600;
2004 d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2005 &msg.baudHi, &msg.baudLo, &prescaler, 0);
2011 /* modes must always be correctly specified */
2012 if (p_priv->baud > 57600) {
2013 msg.rxMode = RXMODE_DMA;
2014 msg.txMode = TXMODE_DMA;
2016 msg.rxMode = RXMODE_BYHAND;
2017 msg.txMode = TXMODE_BYHAND;
2020 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2021 switch (p_priv->cflag & CSIZE) {
2023 msg.lcr |= USA_DATABITS_5;
2026 msg.lcr |= USA_DATABITS_6;
2029 msg.lcr |= USA_DATABITS_7;
2032 msg.lcr |= USA_DATABITS_8;
2035 if (p_priv->cflag & PARENB) {
2036 /* note USA_PARITY_NONE == 0 */
2037 msg.lcr |= (p_priv->cflag & PARODD) ?
2038 USA_PARITY_ODD : USA_PARITY_EVEN;
2040 if (p_priv->old_cflag != p_priv->cflag) {
2041 p_priv->old_cflag = p_priv->cflag;
2045 if (p_priv->flow_control == flow_cts)
2046 msg.txFlowControl = TXFLOW_CTS;
2047 msg.setTxFlowControl = 0x01;
2048 msg.setRxFlowControl = 0x01;
2050 msg.rxForwardingLength = 16;
2051 msg.rxForwardingTimeout = 16;
2052 msg.txAckSetting = 0;
2057 if (reset_port == 1) {
2058 msg.portEnabled = 1;
2060 msg.txBreak = (p_priv->break_on);
2063 else if (reset_port == 2)
2064 msg.portEnabled = 0;
2065 /* Sending intermediate configs */
2067 msg.portEnabled = 1;
2068 msg.txBreak = (p_priv->break_on);
2071 /* Do handshaking outputs */
2073 msg.rts = p_priv->rts_state;
2076 msg.dtr = p_priv->dtr_state;
2078 p_priv->resend_cont = 0;
2079 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2081 /* send the data out the device on control endpoint */
2082 this_urb->transfer_buffer_length = sizeof(msg);
2084 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2086 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2090 static int keyspan_usa67_send_setup(struct usb_serial *serial,
2091 struct usb_serial_port *port,
2094 struct keyspan_usa67_portControlMessage msg;
2095 struct keyspan_serial_private *s_priv;
2096 struct keyspan_port_private *p_priv;
2097 const struct keyspan_device_details *d_details;
2098 struct urb *this_urb;
2099 int err, device_port;
2101 s_priv = usb_get_serial_data(serial);
2102 p_priv = usb_get_serial_port_data(port);
2103 d_details = s_priv->device_details;
2105 this_urb = s_priv->glocont_urb;
2107 /* Work out which port within the device is being setup */
2108 device_port = port->port_number;
2110 /* Make sure we have an urb then send the message */
2111 if (this_urb == NULL) {
2112 dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
2116 /* Save reset port val for resend.
2117 Don't overwrite resend for open/close condition. */
2118 if ((reset_port + 1) > p_priv->resend_cont)
2119 p_priv->resend_cont = reset_port + 1;
2120 if (this_urb->status == -EINPROGRESS) {
2121 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2126 memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage));
2128 msg.port = device_port;
2130 /* Only set baud rate if it's changed */
2131 if (p_priv->old_baud != p_priv->baud) {
2132 p_priv->old_baud = p_priv->baud;
2133 msg.setClocking = 0xff;
2134 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk,
2135 &msg.baudHi, &msg.baudLo, &msg.prescaler,
2136 device_port) == KEYSPAN_INVALID_BAUD_RATE) {
2137 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n",
2138 __func__, p_priv->baud);
2140 msg.baudHi = 125; /* Values for 9600 baud */
2143 msg.setPrescaler = 0xff;
2146 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1;
2147 switch (p_priv->cflag & CSIZE) {
2149 msg.lcr |= USA_DATABITS_5;
2152 msg.lcr |= USA_DATABITS_6;
2155 msg.lcr |= USA_DATABITS_7;
2158 msg.lcr |= USA_DATABITS_8;
2161 if (p_priv->cflag & PARENB) {
2162 /* note USA_PARITY_NONE == 0 */
2163 msg.lcr |= (p_priv->cflag & PARODD) ?
2164 USA_PARITY_ODD : USA_PARITY_EVEN;
2168 msg.ctsFlowControl = (p_priv->flow_control == flow_cts);
2169 msg.xonFlowControl = 0;
2170 msg.setFlowControl = 0xff;
2171 msg.forwardingLength = 16;
2175 if (reset_port == 1) {
2185 msg.returnStatus = 0;
2186 msg.resetDataToggle = 0xff;
2187 } else if (reset_port == 2) {
2197 msg.returnStatus = 0;
2198 msg.resetDataToggle = 0;
2200 /* Sending intermediate configs */
2201 msg._txOn = (!p_priv->break_on);
2204 msg.txBreak = (p_priv->break_on);
2209 msg.returnStatus = 0;
2210 msg.resetDataToggle = 0x0;
2213 /* Do handshaking outputs */
2214 msg.setTxTriState_setRts = 0xff;
2215 msg.txTriState_rts = p_priv->rts_state;
2217 msg.setHskoa_setDtr = 0xff;
2218 msg.hskoa_dtr = p_priv->dtr_state;
2220 p_priv->resend_cont = 0;
2222 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg));
2224 /* send the data out the device on control endpoint */
2225 this_urb->transfer_buffer_length = sizeof(msg);
2227 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2229 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2233 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port)
2235 struct usb_serial *serial = port->serial;
2236 struct keyspan_serial_private *s_priv;
2237 const struct keyspan_device_details *d_details;
2239 s_priv = usb_get_serial_data(serial);
2240 d_details = s_priv->device_details;
2242 switch (d_details->msg_format) {
2244 keyspan_usa26_send_setup(serial, port, reset_port);
2247 keyspan_usa28_send_setup(serial, port, reset_port);
2250 keyspan_usa49_send_setup(serial, port, reset_port);
2253 keyspan_usa90_send_setup(serial, port, reset_port);
2256 keyspan_usa67_send_setup(serial, port, reset_port);
2262 /* Gets called by the "real" driver (ie once firmware is loaded
2263 and renumeration has taken place. */
2264 static int keyspan_startup(struct usb_serial *serial)
2267 struct keyspan_serial_private *s_priv;
2268 const struct keyspan_device_details *d_details;
2270 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i)
2271 if (d_details->product_id ==
2272 le16_to_cpu(serial->dev->descriptor.idProduct))
2274 if (d_details == NULL) {
2275 dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2276 __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2280 /* Setup private data for serial driver */
2281 s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
2285 s_priv->instat_buf = kzalloc(INSTAT_BUFLEN, GFP_KERNEL);
2286 if (!s_priv->instat_buf)
2287 goto err_instat_buf;
2289 s_priv->indat_buf = kzalloc(INDAT49W_BUFLEN, GFP_KERNEL);
2290 if (!s_priv->indat_buf)
2293 s_priv->glocont_buf = kzalloc(GLOCONT_BUFLEN, GFP_KERNEL);
2294 if (!s_priv->glocont_buf)
2295 goto err_glocont_buf;
2297 s_priv->ctrl_buf = kzalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
2298 if (!s_priv->ctrl_buf)
2301 s_priv->device_details = d_details;
2302 usb_set_serial_data(serial, s_priv);
2304 keyspan_setup_urbs(serial);
2306 if (s_priv->instat_urb != NULL) {
2307 err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2309 dev_dbg(&serial->dev->dev, "%s - submit instat urb failed %d\n", __func__, err);
2311 if (s_priv->indat_urb != NULL) {
2312 err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2314 dev_dbg(&serial->dev->dev, "%s - submit indat urb failed %d\n", __func__, err);
2320 kfree(s_priv->glocont_buf);
2322 kfree(s_priv->indat_buf);
2324 kfree(s_priv->instat_buf);
2331 static void keyspan_disconnect(struct usb_serial *serial)
2333 struct keyspan_serial_private *s_priv;
2335 s_priv = usb_get_serial_data(serial);
2337 stop_urb(s_priv->instat_urb);
2338 stop_urb(s_priv->glocont_urb);
2339 stop_urb(s_priv->indat_urb);
2342 static void keyspan_release(struct usb_serial *serial)
2344 struct keyspan_serial_private *s_priv;
2346 s_priv = usb_get_serial_data(serial);
2348 usb_free_urb(s_priv->instat_urb);
2349 usb_free_urb(s_priv->indat_urb);
2350 usb_free_urb(s_priv->glocont_urb);
2352 kfree(s_priv->ctrl_buf);
2353 kfree(s_priv->glocont_buf);
2354 kfree(s_priv->indat_buf);
2355 kfree(s_priv->instat_buf);
2360 static int keyspan_port_probe(struct usb_serial_port *port)
2362 struct usb_serial *serial = port->serial;
2363 struct keyspan_serial_private *s_priv;
2364 struct keyspan_port_private *p_priv;
2365 const struct keyspan_device_details *d_details;
2366 struct callbacks *cback;
2371 s_priv = usb_get_serial_data(serial);
2372 d_details = s_priv->device_details;
2374 p_priv = kzalloc(sizeof(*p_priv), GFP_KERNEL);
2378 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) {
2379 p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL);
2380 if (!p_priv->in_buffer[i])
2384 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) {
2385 p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL);
2386 if (!p_priv->out_buffer[i])
2387 goto err_out_buffer;
2390 p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL);
2391 if (!p_priv->inack_buffer)
2392 goto err_inack_buffer;
2394 p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL);
2395 if (!p_priv->outcont_buffer)
2396 goto err_outcont_buffer;
2398 p_priv->device_details = d_details;
2400 /* Setup values for the various callback routines */
2401 cback = &keyspan_callbacks[d_details->msg_format];
2403 port_num = port->port_number;
2405 /* Do indat endpoints first, once for each flip */
2406 endp = d_details->indat_endpoints[port_num];
2407 for (i = 0; i <= d_details->indat_endp_flip; ++i, ++endp) {
2408 p_priv->in_urbs[i] = keyspan_setup_urb(serial, endp,
2410 p_priv->in_buffer[i],
2412 cback->indat_callback);
2414 /* outdat endpoints also have flip */
2415 endp = d_details->outdat_endpoints[port_num];
2416 for (i = 0; i <= d_details->outdat_endp_flip; ++i, ++endp) {
2417 p_priv->out_urbs[i] = keyspan_setup_urb(serial, endp,
2419 p_priv->out_buffer[i],
2421 cback->outdat_callback);
2423 /* inack endpoint */
2424 p_priv->inack_urb = keyspan_setup_urb(serial,
2425 d_details->inack_endpoints[port_num],
2427 p_priv->inack_buffer,
2429 cback->inack_callback);
2430 /* outcont endpoint */
2431 p_priv->outcont_urb = keyspan_setup_urb(serial,
2432 d_details->outcont_endpoints[port_num],
2434 p_priv->outcont_buffer,
2436 cback->outcont_callback);
2438 usb_set_serial_port_data(port, p_priv);
2443 kfree(p_priv->inack_buffer);
2445 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2446 kfree(p_priv->out_buffer[i]);
2448 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2449 kfree(p_priv->in_buffer[i]);
2456 static int keyspan_port_remove(struct usb_serial_port *port)
2458 struct keyspan_port_private *p_priv;
2461 p_priv = usb_get_serial_port_data(port);
2463 stop_urb(p_priv->inack_urb);
2464 stop_urb(p_priv->outcont_urb);
2465 for (i = 0; i < 2; i++) {
2466 stop_urb(p_priv->in_urbs[i]);
2467 stop_urb(p_priv->out_urbs[i]);
2470 usb_free_urb(p_priv->inack_urb);
2471 usb_free_urb(p_priv->outcont_urb);
2472 for (i = 0; i < 2; i++) {
2473 usb_free_urb(p_priv->in_urbs[i]);
2474 usb_free_urb(p_priv->out_urbs[i]);
2477 kfree(p_priv->outcont_buffer);
2478 kfree(p_priv->inack_buffer);
2479 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
2480 kfree(p_priv->out_buffer[i]);
2481 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
2482 kfree(p_priv->in_buffer[i]);
2489 MODULE_AUTHOR(DRIVER_AUTHOR);
2490 MODULE_DESCRIPTION(DRIVER_DESC);
2491 MODULE_LICENSE("GPL");
2493 MODULE_FIRMWARE("keyspan/usa28.fw");
2494 MODULE_FIRMWARE("keyspan/usa28x.fw");
2495 MODULE_FIRMWARE("keyspan/usa28xa.fw");
2496 MODULE_FIRMWARE("keyspan/usa28xb.fw");
2497 MODULE_FIRMWARE("keyspan/usa19.fw");
2498 MODULE_FIRMWARE("keyspan/usa19qi.fw");
2499 MODULE_FIRMWARE("keyspan/mpr.fw");
2500 MODULE_FIRMWARE("keyspan/usa19qw.fw");
2501 MODULE_FIRMWARE("keyspan/usa18x.fw");
2502 MODULE_FIRMWARE("keyspan/usa19w.fw");
2503 MODULE_FIRMWARE("keyspan/usa49w.fw");
2504 MODULE_FIRMWARE("keyspan/usa49wlc.fw");