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/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>
46 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu"
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
) {
315 tty_insert_flip_char(&port
->port
, 0,
318 for (i
= 1; i
< urb
->actual_length
; ++i
)
319 tty_insert_flip_char(&port
->port
, data
[i
],
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) {
326 int flag
= TTY_NORMAL
;
328 if (stat
& RXERROR_OVERRUN
) {
329 tty_insert_flip_char(&port
->port
, 0,
332 /* XXX should handle break (0x10) */
333 if (stat
& RXERROR_PARITY
)
335 else if (stat
& RXERROR_FRAMING
)
338 tty_insert_flip_char(&port
->port
, data
[i
+1],
342 tty_flip_buffer_push(&port
->port
);
345 /* Resubmit urb so we continue receiving */
346 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
348 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
351 /* Outdat handling is common for all devices */
352 static void usa2x_outdat_callback(struct urb
*urb
)
354 struct usb_serial_port
*port
;
355 struct keyspan_port_private
*p_priv
;
358 p_priv
= usb_get_serial_port_data(port
);
359 dev_dbg(&port
->dev
, "%s - urb %d\n", __func__
, urb
== p_priv
->out_urbs
[1]);
361 usb_serial_port_softint(port
);
364 static void usa26_inack_callback(struct urb
*urb
)
368 static void usa26_outcont_callback(struct urb
*urb
)
370 struct usb_serial_port
*port
;
371 struct keyspan_port_private
*p_priv
;
374 p_priv
= usb_get_serial_port_data(port
);
376 if (p_priv
->resend_cont
) {
377 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
378 keyspan_usa26_send_setup(port
->serial
, port
,
379 p_priv
->resend_cont
- 1);
383 static void usa26_instat_callback(struct urb
*urb
)
385 unsigned char *data
= urb
->transfer_buffer
;
386 struct keyspan_usa26_portStatusMessage
*msg
;
387 struct usb_serial
*serial
;
388 struct usb_serial_port
*port
;
389 struct keyspan_port_private
*p_priv
;
390 int old_dcd_state
, err
;
391 int status
= urb
->status
;
393 serial
= urb
->context
;
396 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
399 if (urb
->actual_length
!= 9) {
400 dev_dbg(&urb
->dev
->dev
, "%s - %d byte report??\n", __func__
, urb
->actual_length
);
404 msg
= (struct keyspan_usa26_portStatusMessage
*)data
;
406 /* Check port number from message and retrieve private data */
407 if (msg
->port
>= serial
->num_ports
) {
408 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n", __func__
, msg
->port
);
411 port
= serial
->port
[msg
->port
];
412 p_priv
= usb_get_serial_port_data(port
);
416 /* Update handshaking pin state information */
417 old_dcd_state
= p_priv
->dcd_state
;
418 p_priv
->cts_state
= ((msg
->hskia_cts
) ? 1 : 0);
419 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
420 p_priv
->dcd_state
= ((msg
->gpia_dcd
) ? 1 : 0);
421 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
423 if (old_dcd_state
!= p_priv
->dcd_state
)
424 tty_port_tty_hangup(&port
->port
, true);
426 /* Resubmit urb so we continue receiving */
427 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
429 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
433 static void usa26_glocont_callback(struct urb
*urb
)
438 static void usa28_indat_callback(struct urb
*urb
)
441 struct usb_serial_port
*port
;
443 struct keyspan_port_private
*p_priv
;
444 int status
= urb
->status
;
447 p_priv
= usb_get_serial_port_data(port
);
448 data
= urb
->transfer_buffer
;
450 if (urb
!= p_priv
->in_urbs
[p_priv
->in_flip
])
455 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
456 __func__
, status
, usb_pipeendpoint(urb
->pipe
));
461 p_priv
= usb_get_serial_port_data(port
);
462 data
= urb
->transfer_buffer
;
464 if (urb
->actual_length
) {
465 tty_insert_flip_string(&port
->port
, data
,
467 tty_flip_buffer_push(&port
->port
);
470 /* Resubmit urb so we continue receiving */
471 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
473 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n",
475 p_priv
->in_flip
^= 1;
477 urb
= p_priv
->in_urbs
[p_priv
->in_flip
];
478 } while (urb
->status
!= -EINPROGRESS
);
481 static void usa28_inack_callback(struct urb
*urb
)
485 static void usa28_outcont_callback(struct urb
*urb
)
487 struct usb_serial_port
*port
;
488 struct keyspan_port_private
*p_priv
;
491 p_priv
= usb_get_serial_port_data(port
);
493 if (p_priv
->resend_cont
) {
494 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
495 keyspan_usa28_send_setup(port
->serial
, port
,
496 p_priv
->resend_cont
- 1);
500 static void usa28_instat_callback(struct urb
*urb
)
503 unsigned char *data
= urb
->transfer_buffer
;
504 struct keyspan_usa28_portStatusMessage
*msg
;
505 struct usb_serial
*serial
;
506 struct usb_serial_port
*port
;
507 struct keyspan_port_private
*p_priv
;
509 int status
= urb
->status
;
511 serial
= urb
->context
;
514 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
518 if (urb
->actual_length
!= sizeof(struct keyspan_usa28_portStatusMessage
)) {
519 dev_dbg(&urb
->dev
->dev
, "%s - bad length %d\n", __func__
, urb
->actual_length
);
523 msg
= (struct keyspan_usa28_portStatusMessage
*)data
;
525 /* Check port number from message and retrieve private data */
526 if (msg
->port
>= serial
->num_ports
) {
527 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n", __func__
, msg
->port
);
530 port
= serial
->port
[msg
->port
];
531 p_priv
= usb_get_serial_port_data(port
);
535 /* Update handshaking pin state information */
536 old_dcd_state
= p_priv
->dcd_state
;
537 p_priv
->cts_state
= ((msg
->cts
) ? 1 : 0);
538 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
539 p_priv
->dcd_state
= ((msg
->dcd
) ? 1 : 0);
540 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
542 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
543 tty_port_tty_hangup(&port
->port
, true);
545 /* Resubmit urb so we continue receiving */
546 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
548 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
552 static void usa28_glocont_callback(struct urb
*urb
)
557 static void usa49_glocont_callback(struct urb
*urb
)
559 struct usb_serial
*serial
;
560 struct usb_serial_port
*port
;
561 struct keyspan_port_private
*p_priv
;
564 serial
= urb
->context
;
565 for (i
= 0; i
< serial
->num_ports
; ++i
) {
566 port
= serial
->port
[i
];
567 p_priv
= usb_get_serial_port_data(port
);
569 if (p_priv
->resend_cont
) {
570 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
571 keyspan_usa49_send_setup(serial
, port
,
572 p_priv
->resend_cont
- 1);
578 /* This is actually called glostat in the Keyspan
580 static void usa49_instat_callback(struct urb
*urb
)
583 unsigned char *data
= urb
->transfer_buffer
;
584 struct keyspan_usa49_portStatusMessage
*msg
;
585 struct usb_serial
*serial
;
586 struct usb_serial_port
*port
;
587 struct keyspan_port_private
*p_priv
;
589 int status
= urb
->status
;
591 serial
= urb
->context
;
594 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
598 if (urb
->actual_length
!=
599 sizeof(struct keyspan_usa49_portStatusMessage
)) {
600 dev_dbg(&urb
->dev
->dev
, "%s - bad length %d\n", __func__
, urb
->actual_length
);
604 msg
= (struct keyspan_usa49_portStatusMessage
*)data
;
606 /* Check port number from message and retrieve private data */
607 if (msg
->portNumber
>= serial
->num_ports
) {
608 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n",
609 __func__
, msg
->portNumber
);
612 port
= serial
->port
[msg
->portNumber
];
613 p_priv
= usb_get_serial_port_data(port
);
617 /* Update handshaking pin state information */
618 old_dcd_state
= p_priv
->dcd_state
;
619 p_priv
->cts_state
= ((msg
->cts
) ? 1 : 0);
620 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
621 p_priv
->dcd_state
= ((msg
->dcd
) ? 1 : 0);
622 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
624 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
625 tty_port_tty_hangup(&port
->port
, true);
627 /* Resubmit urb so we continue receiving */
628 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
630 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
634 static void usa49_inack_callback(struct urb
*urb
)
638 static void usa49_indat_callback(struct urb
*urb
)
642 struct usb_serial_port
*port
;
643 unsigned char *data
= urb
->transfer_buffer
;
644 int status
= urb
->status
;
646 endpoint
= usb_pipeendpoint(urb
->pipe
);
649 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
650 __func__
, status
, endpoint
);
655 if (urb
->actual_length
) {
656 /* 0x80 bit is error flag */
657 if ((data
[0] & 0x80) == 0) {
658 /* no error on any byte */
659 tty_insert_flip_string(&port
->port
, data
+ 1,
660 urb
->actual_length
- 1);
662 /* some bytes had errors, every byte has status */
663 for (i
= 0; i
+ 1 < urb
->actual_length
; i
+= 2) {
665 int flag
= TTY_NORMAL
;
667 if (stat
& RXERROR_OVERRUN
) {
668 tty_insert_flip_char(&port
->port
, 0,
671 /* XXX should handle break (0x10) */
672 if (stat
& RXERROR_PARITY
)
674 else if (stat
& RXERROR_FRAMING
)
677 tty_insert_flip_char(&port
->port
, data
[i
+1],
681 tty_flip_buffer_push(&port
->port
);
684 /* Resubmit urb so we continue receiving */
685 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
687 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
690 static void usa49wg_indat_callback(struct urb
*urb
)
693 struct usb_serial
*serial
;
694 struct usb_serial_port
*port
;
695 unsigned char *data
= urb
->transfer_buffer
;
696 int status
= urb
->status
;
698 serial
= urb
->context
;
701 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
705 /* inbound data is in the form P#, len, status, data */
709 while (i
< urb
->actual_length
) {
711 /* Check port number from message */
712 if (data
[i
] >= serial
->num_ports
) {
713 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n",
717 port
= serial
->port
[data
[i
++]];
720 /* 0x80 bit is error flag */
721 if ((data
[i
] & 0x80) == 0) {
722 /* no error on any byte */
724 for (x
= 1; x
< len
&& i
< urb
->actual_length
; ++x
)
725 tty_insert_flip_char(&port
->port
,
729 * some bytes had errors, every byte has status
731 for (x
= 0; x
+ 1 < len
&&
732 i
+ 1 < urb
->actual_length
; x
+= 2) {
734 int flag
= TTY_NORMAL
;
736 if (stat
& RXERROR_OVERRUN
) {
737 tty_insert_flip_char(&port
->port
, 0,
740 /* XXX should handle break (0x10) */
741 if (stat
& RXERROR_PARITY
)
743 else if (stat
& RXERROR_FRAMING
)
746 tty_insert_flip_char(&port
->port
, data
[i
+1],
751 tty_flip_buffer_push(&port
->port
);
754 /* Resubmit urb so we continue receiving */
755 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
757 dev_dbg(&urb
->dev
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
760 /* not used, usa-49 doesn't have per-port control endpoints */
761 static void usa49_outcont_callback(struct urb
*urb
)
765 static void usa90_indat_callback(struct urb
*urb
)
769 struct usb_serial_port
*port
;
770 struct keyspan_port_private
*p_priv
;
771 unsigned char *data
= urb
->transfer_buffer
;
772 int status
= urb
->status
;
774 endpoint
= usb_pipeendpoint(urb
->pipe
);
777 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
778 __func__
, status
, endpoint
);
783 p_priv
= usb_get_serial_port_data(port
);
785 if (urb
->actual_length
) {
786 /* if current mode is DMA, looks like usa28 format
787 otherwise looks like usa26 data format */
789 if (p_priv
->baud
> 57600)
790 tty_insert_flip_string(&port
->port
, data
,
793 /* 0x80 bit is error flag */
794 if ((data
[0] & 0x80) == 0) {
795 /* no errors on individual bytes, only
796 possible overrun err*/
797 if (data
[0] & RXERROR_OVERRUN
) {
798 tty_insert_flip_char(&port
->port
, 0,
801 for (i
= 1; i
< urb
->actual_length
; ++i
)
802 tty_insert_flip_char(&port
->port
,
803 data
[i
], TTY_NORMAL
);
805 /* some bytes had errors, every byte has status */
806 dev_dbg(&port
->dev
, "%s - RX error!!!!\n", __func__
);
807 for (i
= 0; i
+ 1 < urb
->actual_length
; i
+= 2) {
809 int flag
= TTY_NORMAL
;
811 if (stat
& RXERROR_OVERRUN
) {
812 tty_insert_flip_char(
816 /* XXX should handle break (0x10) */
817 if (stat
& RXERROR_PARITY
)
819 else if (stat
& RXERROR_FRAMING
)
822 tty_insert_flip_char(&port
->port
,
827 tty_flip_buffer_push(&port
->port
);
830 /* Resubmit urb so we continue receiving */
831 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
833 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
837 static void usa90_instat_callback(struct urb
*urb
)
839 unsigned char *data
= urb
->transfer_buffer
;
840 struct keyspan_usa90_portStatusMessage
*msg
;
841 struct usb_serial
*serial
;
842 struct usb_serial_port
*port
;
843 struct keyspan_port_private
*p_priv
;
844 int old_dcd_state
, err
;
845 int status
= urb
->status
;
847 serial
= urb
->context
;
850 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
853 if (urb
->actual_length
< 14) {
854 dev_dbg(&urb
->dev
->dev
, "%s - %d byte report??\n", __func__
, urb
->actual_length
);
858 msg
= (struct keyspan_usa90_portStatusMessage
*)data
;
860 /* Now do something useful with the data */
862 port
= serial
->port
[0];
863 p_priv
= usb_get_serial_port_data(port
);
867 /* Update handshaking pin state information */
868 old_dcd_state
= p_priv
->dcd_state
;
869 p_priv
->cts_state
= ((msg
->cts
) ? 1 : 0);
870 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
871 p_priv
->dcd_state
= ((msg
->dcd
) ? 1 : 0);
872 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
874 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
875 tty_port_tty_hangup(&port
->port
, true);
877 /* Resubmit urb so we continue receiving */
878 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
880 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
885 static void usa90_outcont_callback(struct urb
*urb
)
887 struct usb_serial_port
*port
;
888 struct keyspan_port_private
*p_priv
;
891 p_priv
= usb_get_serial_port_data(port
);
893 if (p_priv
->resend_cont
) {
894 dev_dbg(&urb
->dev
->dev
, "%s - sending setup\n", __func__
);
895 keyspan_usa90_send_setup(port
->serial
, port
,
896 p_priv
->resend_cont
- 1);
900 /* Status messages from the 28xg */
901 static void usa67_instat_callback(struct urb
*urb
)
904 unsigned char *data
= urb
->transfer_buffer
;
905 struct keyspan_usa67_portStatusMessage
*msg
;
906 struct usb_serial
*serial
;
907 struct usb_serial_port
*port
;
908 struct keyspan_port_private
*p_priv
;
910 int status
= urb
->status
;
912 serial
= urb
->context
;
915 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
919 if (urb
->actual_length
!=
920 sizeof(struct keyspan_usa67_portStatusMessage
)) {
921 dev_dbg(&urb
->dev
->dev
, "%s - bad length %d\n", __func__
, urb
->actual_length
);
926 /* Now do something useful with the data */
927 msg
= (struct keyspan_usa67_portStatusMessage
*)data
;
929 /* Check port number from message and retrieve private data */
930 if (msg
->port
>= serial
->num_ports
) {
931 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n", __func__
, msg
->port
);
935 port
= serial
->port
[msg
->port
];
936 p_priv
= usb_get_serial_port_data(port
);
940 /* Update handshaking pin state information */
941 old_dcd_state
= p_priv
->dcd_state
;
942 p_priv
->cts_state
= ((msg
->hskia_cts
) ? 1 : 0);
943 p_priv
->dcd_state
= ((msg
->gpia_dcd
) ? 1 : 0);
945 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
946 tty_port_tty_hangup(&port
->port
, true);
948 /* Resubmit urb so we continue receiving */
949 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
951 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
954 static void usa67_glocont_callback(struct urb
*urb
)
956 struct usb_serial
*serial
;
957 struct usb_serial_port
*port
;
958 struct keyspan_port_private
*p_priv
;
961 serial
= urb
->context
;
962 for (i
= 0; i
< serial
->num_ports
; ++i
) {
963 port
= serial
->port
[i
];
964 p_priv
= usb_get_serial_port_data(port
);
966 if (p_priv
->resend_cont
) {
967 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
968 keyspan_usa67_send_setup(serial
, port
,
969 p_priv
->resend_cont
- 1);
975 static int keyspan_write_room(struct tty_struct
*tty
)
977 struct usb_serial_port
*port
= tty
->driver_data
;
978 struct keyspan_port_private
*p_priv
;
979 const struct keyspan_device_details
*d_details
;
982 struct urb
*this_urb
;
984 p_priv
= usb_get_serial_port_data(port
);
985 d_details
= p_priv
->device_details
;
988 if (d_details
->msg_format
== msg_usa90
)
993 flip
= p_priv
->out_flip
;
995 /* Check both endpoints to see if any are available. */
996 this_urb
= p_priv
->out_urbs
[flip
];
997 if (this_urb
!= NULL
) {
998 if (this_urb
->status
!= -EINPROGRESS
)
1000 flip
= (flip
+ 1) & d_details
->outdat_endp_flip
;
1001 this_urb
= p_priv
->out_urbs
[flip
];
1002 if (this_urb
!= NULL
) {
1003 if (this_urb
->status
!= -EINPROGRESS
)
1011 static int keyspan_open(struct tty_struct
*tty
, struct usb_serial_port
*port
)
1013 struct keyspan_port_private
*p_priv
;
1014 const struct keyspan_device_details
*d_details
;
1016 int baud_rate
, device_port
;
1018 unsigned int cflag
= 0;
1020 p_priv
= usb_get_serial_port_data(port
);
1021 d_details
= p_priv
->device_details
;
1023 /* Set some sane defaults */
1024 p_priv
->rts_state
= 1;
1025 p_priv
->dtr_state
= 1;
1026 p_priv
->baud
= 9600;
1028 /* force baud and lcr to be set on open */
1029 p_priv
->old_baud
= 0;
1030 p_priv
->old_cflag
= 0;
1032 p_priv
->out_flip
= 0;
1033 p_priv
->in_flip
= 0;
1035 /* Reset low level data toggle and start reading from endpoints */
1036 for (i
= 0; i
< 2; i
++) {
1037 urb
= p_priv
->in_urbs
[i
];
1041 /* make sure endpoint data toggle is synchronized
1043 usb_clear_halt(urb
->dev
, urb
->pipe
);
1044 err
= usb_submit_urb(urb
, GFP_KERNEL
);
1046 dev_dbg(&port
->dev
, "%s - submit urb %d failed (%d)\n", __func__
, i
, err
);
1049 /* Reset low level data toggle on out endpoints */
1050 for (i
= 0; i
< 2; i
++) {
1051 urb
= p_priv
->out_urbs
[i
];
1054 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1055 usb_pipeout(urb->pipe), 0); */
1058 /* get the terminal config for the setup message now so we don't
1059 * need to send 2 of them */
1061 device_port
= port
->port_number
;
1063 cflag
= tty
->termios
.c_cflag
;
1064 /* Baud rate calculation takes baud rate as an integer
1065 so other rates can be generated if desired. */
1066 baud_rate
= tty_get_baud_rate(tty
);
1067 /* If no match or invalid, leave as default */
1069 && d_details
->calculate_baud_rate(port
, baud_rate
, d_details
->baudclk
,
1070 NULL
, NULL
, NULL
, device_port
) == KEYSPAN_BAUD_RATE_OK
) {
1071 p_priv
->baud
= baud_rate
;
1074 /* set CTS/RTS handshake etc. */
1075 p_priv
->cflag
= cflag
;
1076 p_priv
->flow_control
= (cflag
& CRTSCTS
) ? flow_cts
: flow_none
;
1078 keyspan_send_setup(port
, 1);
1080 /* keyspan_set_termios(port, NULL); */
1085 static inline void stop_urb(struct urb
*urb
)
1087 if (urb
&& urb
->status
== -EINPROGRESS
)
1091 static void keyspan_dtr_rts(struct usb_serial_port
*port
, int on
)
1093 struct keyspan_port_private
*p_priv
= usb_get_serial_port_data(port
);
1095 p_priv
->rts_state
= on
;
1096 p_priv
->dtr_state
= on
;
1097 keyspan_send_setup(port
, 0);
1100 static void keyspan_close(struct usb_serial_port
*port
)
1103 struct keyspan_port_private
*p_priv
;
1105 p_priv
= usb_get_serial_port_data(port
);
1107 p_priv
->rts_state
= 0;
1108 p_priv
->dtr_state
= 0;
1110 keyspan_send_setup(port
, 2);
1111 /* pilot-xfer seems to work best with this delay */
1114 p_priv
->out_flip
= 0;
1115 p_priv
->in_flip
= 0;
1117 stop_urb(p_priv
->inack_urb
);
1118 for (i
= 0; i
< 2; i
++) {
1119 stop_urb(p_priv
->in_urbs
[i
]);
1120 stop_urb(p_priv
->out_urbs
[i
]);
1124 /* download the firmware to a pre-renumeration device */
1125 static int keyspan_fake_startup(struct usb_serial
*serial
)
1129 dev_dbg(&serial
->dev
->dev
, "Keyspan startup version %04x product %04x\n",
1130 le16_to_cpu(serial
->dev
->descriptor
.bcdDevice
),
1131 le16_to_cpu(serial
->dev
->descriptor
.idProduct
));
1133 if ((le16_to_cpu(serial
->dev
->descriptor
.bcdDevice
) & 0x8000)
1135 dev_dbg(&serial
->dev
->dev
, "Firmware already loaded. Quitting.\n");
1139 /* Select firmware image on the basis of idProduct */
1140 switch (le16_to_cpu(serial
->dev
->descriptor
.idProduct
)) {
1141 case keyspan_usa28_pre_product_id
:
1142 fw_name
= "keyspan/usa28.fw";
1145 case keyspan_usa28x_pre_product_id
:
1146 fw_name
= "keyspan/usa28x.fw";
1149 case keyspan_usa28xa_pre_product_id
:
1150 fw_name
= "keyspan/usa28xa.fw";
1153 case keyspan_usa28xb_pre_product_id
:
1154 fw_name
= "keyspan/usa28xb.fw";
1157 case keyspan_usa19_pre_product_id
:
1158 fw_name
= "keyspan/usa19.fw";
1161 case keyspan_usa19qi_pre_product_id
:
1162 fw_name
= "keyspan/usa19qi.fw";
1165 case keyspan_mpr_pre_product_id
:
1166 fw_name
= "keyspan/mpr.fw";
1169 case keyspan_usa19qw_pre_product_id
:
1170 fw_name
= "keyspan/usa19qw.fw";
1173 case keyspan_usa18x_pre_product_id
:
1174 fw_name
= "keyspan/usa18x.fw";
1177 case keyspan_usa19w_pre_product_id
:
1178 fw_name
= "keyspan/usa19w.fw";
1181 case keyspan_usa49w_pre_product_id
:
1182 fw_name
= "keyspan/usa49w.fw";
1185 case keyspan_usa49wlc_pre_product_id
:
1186 fw_name
= "keyspan/usa49wlc.fw";
1190 dev_err(&serial
->dev
->dev
, "Unknown product ID (%04x)\n",
1191 le16_to_cpu(serial
->dev
->descriptor
.idProduct
));
1195 dev_dbg(&serial
->dev
->dev
, "Uploading Keyspan %s firmware.\n", fw_name
);
1197 if (ezusb_fx1_ihex_firmware_download(serial
->dev
, fw_name
) < 0) {
1198 dev_err(&serial
->dev
->dev
, "failed to load firmware \"%s\"\n",
1203 /* after downloading firmware Renumeration will occur in a
1204 moment and the new device will bind to the real driver */
1206 /* we don't want this device to have a driver assigned to it. */
1210 /* Helper functions used by keyspan_setup_urbs */
1211 static struct usb_endpoint_descriptor
const *find_ep(struct usb_serial
const *serial
,
1214 struct usb_host_interface
*iface_desc
;
1215 struct usb_endpoint_descriptor
*ep
;
1218 iface_desc
= serial
->interface
->cur_altsetting
;
1219 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
1220 ep
= &iface_desc
->endpoint
[i
].desc
;
1221 if (ep
->bEndpointAddress
== endpoint
)
1224 dev_warn(&serial
->interface
->dev
, "found no endpoint descriptor for "
1225 "endpoint %x\n", endpoint
);
1229 static struct urb
*keyspan_setup_urb(struct usb_serial
*serial
, int endpoint
,
1230 int dir
, void *ctx
, char *buf
, int len
,
1231 void (*callback
)(struct urb
*))
1234 struct usb_endpoint_descriptor
const *ep_desc
;
1235 char const *ep_type_name
;
1238 return NULL
; /* endpoint not needed */
1240 dev_dbg(&serial
->interface
->dev
, "%s - alloc for endpoint %d.\n", __func__
, endpoint
);
1241 urb
= usb_alloc_urb(0, GFP_KERNEL
); /* No ISO */
1245 if (endpoint
== 0) {
1246 /* control EP filled in when used */
1250 ep_desc
= find_ep(serial
, endpoint
);
1252 /* leak the urb, something's wrong and the callers don't care */
1255 if (usb_endpoint_xfer_int(ep_desc
)) {
1256 ep_type_name
= "INT";
1257 usb_fill_int_urb(urb
, serial
->dev
,
1258 usb_sndintpipe(serial
->dev
, endpoint
) | dir
,
1259 buf
, len
, callback
, ctx
,
1260 ep_desc
->bInterval
);
1261 } else if (usb_endpoint_xfer_bulk(ep_desc
)) {
1262 ep_type_name
= "BULK";
1263 usb_fill_bulk_urb(urb
, serial
->dev
,
1264 usb_sndbulkpipe(serial
->dev
, endpoint
) | dir
,
1265 buf
, len
, callback
, ctx
);
1267 dev_warn(&serial
->interface
->dev
,
1268 "unsupported endpoint type %x\n",
1269 usb_endpoint_type(ep_desc
));
1274 dev_dbg(&serial
->interface
->dev
, "%s - using urb %p for %s endpoint %x\n",
1275 __func__
, urb
, ep_type_name
, endpoint
);
1279 static struct callbacks
{
1280 void (*instat_callback
)(struct urb
*);
1281 void (*glocont_callback
)(struct urb
*);
1282 void (*indat_callback
)(struct urb
*);
1283 void (*outdat_callback
)(struct urb
*);
1284 void (*inack_callback
)(struct urb
*);
1285 void (*outcont_callback
)(struct urb
*);
1286 } keyspan_callbacks
[] = {
1288 /* msg_usa26 callbacks */
1289 .instat_callback
= usa26_instat_callback
,
1290 .glocont_callback
= usa26_glocont_callback
,
1291 .indat_callback
= usa26_indat_callback
,
1292 .outdat_callback
= usa2x_outdat_callback
,
1293 .inack_callback
= usa26_inack_callback
,
1294 .outcont_callback
= usa26_outcont_callback
,
1296 /* msg_usa28 callbacks */
1297 .instat_callback
= usa28_instat_callback
,
1298 .glocont_callback
= usa28_glocont_callback
,
1299 .indat_callback
= usa28_indat_callback
,
1300 .outdat_callback
= usa2x_outdat_callback
,
1301 .inack_callback
= usa28_inack_callback
,
1302 .outcont_callback
= usa28_outcont_callback
,
1304 /* msg_usa49 callbacks */
1305 .instat_callback
= usa49_instat_callback
,
1306 .glocont_callback
= usa49_glocont_callback
,
1307 .indat_callback
= usa49_indat_callback
,
1308 .outdat_callback
= usa2x_outdat_callback
,
1309 .inack_callback
= usa49_inack_callback
,
1310 .outcont_callback
= usa49_outcont_callback
,
1312 /* msg_usa90 callbacks */
1313 .instat_callback
= usa90_instat_callback
,
1314 .glocont_callback
= usa28_glocont_callback
,
1315 .indat_callback
= usa90_indat_callback
,
1316 .outdat_callback
= usa2x_outdat_callback
,
1317 .inack_callback
= usa28_inack_callback
,
1318 .outcont_callback
= usa90_outcont_callback
,
1320 /* msg_usa67 callbacks */
1321 .instat_callback
= usa67_instat_callback
,
1322 .glocont_callback
= usa67_glocont_callback
,
1323 .indat_callback
= usa26_indat_callback
,
1324 .outdat_callback
= usa2x_outdat_callback
,
1325 .inack_callback
= usa26_inack_callback
,
1326 .outcont_callback
= usa26_outcont_callback
,
1330 /* Generic setup urbs function that uses
1331 data in device_details */
1332 static void keyspan_setup_urbs(struct usb_serial
*serial
)
1334 struct keyspan_serial_private
*s_priv
;
1335 const struct keyspan_device_details
*d_details
;
1336 struct callbacks
*cback
;
1338 s_priv
= usb_get_serial_data(serial
);
1339 d_details
= s_priv
->device_details
;
1341 /* Setup values for the various callback routines */
1342 cback
= &keyspan_callbacks
[d_details
->msg_format
];
1344 /* Allocate and set up urbs for each one that is in use,
1345 starting with instat endpoints */
1346 s_priv
->instat_urb
= keyspan_setup_urb
1347 (serial
, d_details
->instat_endpoint
, USB_DIR_IN
,
1348 serial
, s_priv
->instat_buf
, INSTAT_BUFLEN
,
1349 cback
->instat_callback
);
1351 s_priv
->indat_urb
= keyspan_setup_urb
1352 (serial
, d_details
->indat_endpoint
, USB_DIR_IN
,
1353 serial
, s_priv
->indat_buf
, INDAT49W_BUFLEN
,
1354 usa49wg_indat_callback
);
1356 s_priv
->glocont_urb
= keyspan_setup_urb
1357 (serial
, d_details
->glocont_endpoint
, USB_DIR_OUT
,
1358 serial
, s_priv
->glocont_buf
, GLOCONT_BUFLEN
,
1359 cback
->glocont_callback
);
1362 /* usa19 function doesn't require prescaler */
1363 static int keyspan_usa19_calc_baud(struct usb_serial_port
*port
,
1364 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1365 u8
*rate_low
, u8
*prescaler
, int portnum
)
1367 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1369 cnt
; /* inverse of divisor (programmed into 8051) */
1371 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1373 /* prevent divide by zero... */
1374 b16
= baud_rate
* 16L;
1376 return KEYSPAN_INVALID_BAUD_RATE
;
1377 /* Any "standard" rate over 57k6 is marginal on the USA-19
1378 as we run out of divisor resolution. */
1379 if (baud_rate
> 57600)
1380 return KEYSPAN_INVALID_BAUD_RATE
;
1382 /* calculate the divisor and the counter (its inverse) */
1383 div
= baudclk
/ b16
;
1385 return KEYSPAN_INVALID_BAUD_RATE
;
1390 return KEYSPAN_INVALID_BAUD_RATE
;
1392 /* return the counter values if non-null */
1394 *rate_low
= (u8
) (cnt
& 0xff);
1396 *rate_hi
= (u8
) ((cnt
>> 8) & 0xff);
1397 if (rate_low
&& rate_hi
)
1398 dev_dbg(&port
->dev
, "%s - %d %02x %02x.\n",
1399 __func__
, baud_rate
, *rate_hi
, *rate_low
);
1400 return KEYSPAN_BAUD_RATE_OK
;
1403 /* usa19hs function doesn't require prescaler */
1404 static int keyspan_usa19hs_calc_baud(struct usb_serial_port
*port
,
1405 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1406 u8
*rate_low
, u8
*prescaler
, int portnum
)
1408 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1411 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1413 /* prevent divide by zero... */
1414 b16
= baud_rate
* 16L;
1416 return KEYSPAN_INVALID_BAUD_RATE
;
1418 /* calculate the divisor */
1419 div
= baudclk
/ b16
;
1421 return KEYSPAN_INVALID_BAUD_RATE
;
1424 return KEYSPAN_INVALID_BAUD_RATE
;
1426 /* return the counter values if non-null */
1428 *rate_low
= (u8
) (div
& 0xff);
1431 *rate_hi
= (u8
) ((div
>> 8) & 0xff);
1433 if (rate_low
&& rate_hi
)
1434 dev_dbg(&port
->dev
, "%s - %d %02x %02x.\n",
1435 __func__
, baud_rate
, *rate_hi
, *rate_low
);
1437 return KEYSPAN_BAUD_RATE_OK
;
1440 static int keyspan_usa19w_calc_baud(struct usb_serial_port
*port
,
1441 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1442 u8
*rate_low
, u8
*prescaler
, int portnum
)
1444 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1445 clk
, /* clock with 13/8 prescaler */
1446 div
, /* divisor using 13/8 prescaler */
1447 res
, /* resulting baud rate using 13/8 prescaler */
1448 diff
, /* error using 13/8 prescaler */
1453 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1455 /* prevent divide by zero */
1456 b16
= baud_rate
* 16L;
1458 return KEYSPAN_INVALID_BAUD_RATE
;
1460 /* Calculate prescaler by trying them all and looking
1463 /* start with largest possible difference */
1464 smallest_diff
= 0xffffffff;
1466 /* 0 is an invalid prescaler, used as a flag */
1469 for (i
= 8; i
<= 0xff; ++i
) {
1470 clk
= (baudclk
* 8) / (u32
) i
;
1477 diff
= (res
> b16
) ? (res
-b16
) : (b16
-res
);
1479 if (diff
< smallest_diff
) {
1481 smallest_diff
= diff
;
1485 if (best_prescaler
== 0)
1486 return KEYSPAN_INVALID_BAUD_RATE
;
1488 clk
= (baudclk
* 8) / (u32
) best_prescaler
;
1491 /* return the divisor and prescaler if non-null */
1493 *rate_low
= (u8
) (div
& 0xff);
1495 *rate_hi
= (u8
) ((div
>> 8) & 0xff);
1497 *prescaler
= best_prescaler
;
1498 /* dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */
1500 return KEYSPAN_BAUD_RATE_OK
;
1503 /* USA-28 supports different maximum baud rates on each port */
1504 static int keyspan_usa28_calc_baud(struct usb_serial_port
*port
,
1505 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1506 u8
*rate_low
, u8
*prescaler
, int portnum
)
1508 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1510 cnt
; /* inverse of divisor (programmed into 8051) */
1512 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1514 /* prevent divide by zero */
1515 b16
= baud_rate
* 16L;
1517 return KEYSPAN_INVALID_BAUD_RATE
;
1519 /* calculate the divisor and the counter (its inverse) */
1520 div
= KEYSPAN_USA28_BAUDCLK
/ b16
;
1522 return KEYSPAN_INVALID_BAUD_RATE
;
1526 /* check for out of range, based on portnum,
1527 and return result */
1530 return KEYSPAN_INVALID_BAUD_RATE
;
1534 return KEYSPAN_INVALID_BAUD_RATE
;
1536 return KEYSPAN_INVALID_BAUD_RATE
;
1539 /* return the counter values if not NULL
1540 (port 1 will ignore retHi) */
1542 *rate_low
= (u8
) (cnt
& 0xff);
1544 *rate_hi
= (u8
) ((cnt
>> 8) & 0xff);
1545 dev_dbg(&port
->dev
, "%s - %d OK.\n", __func__
, baud_rate
);
1546 return KEYSPAN_BAUD_RATE_OK
;
1549 static int keyspan_usa26_send_setup(struct usb_serial
*serial
,
1550 struct usb_serial_port
*port
,
1553 struct keyspan_usa26_portControlMessage msg
;
1554 struct keyspan_serial_private
*s_priv
;
1555 struct keyspan_port_private
*p_priv
;
1556 const struct keyspan_device_details
*d_details
;
1557 struct urb
*this_urb
;
1558 int device_port
, err
;
1560 dev_dbg(&port
->dev
, "%s reset=%d\n", __func__
, reset_port
);
1562 s_priv
= usb_get_serial_data(serial
);
1563 p_priv
= usb_get_serial_port_data(port
);
1564 d_details
= s_priv
->device_details
;
1565 device_port
= port
->port_number
;
1567 this_urb
= p_priv
->outcont_urb
;
1569 /* Make sure we have an urb then send the message */
1570 if (this_urb
== NULL
) {
1571 dev_dbg(&port
->dev
, "%s - oops no urb.\n", __func__
);
1575 dev_dbg(&port
->dev
, "%s - endpoint %d\n", __func__
, usb_pipeendpoint(this_urb
->pipe
));
1577 /* Save reset port val for resend.
1578 Don't overwrite resend for open/close condition. */
1579 if ((reset_port
+ 1) > p_priv
->resend_cont
)
1580 p_priv
->resend_cont
= reset_port
+ 1;
1581 if (this_urb
->status
== -EINPROGRESS
) {
1582 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1587 memset(&msg
, 0, sizeof(struct keyspan_usa26_portControlMessage
));
1589 /* Only set baud rate if it's changed */
1590 if (p_priv
->old_baud
!= p_priv
->baud
) {
1591 p_priv
->old_baud
= p_priv
->baud
;
1592 msg
.setClocking
= 0xff;
1593 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
1594 &msg
.baudHi
, &msg
.baudLo
, &msg
.prescaler
,
1595 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
1596 dev_dbg(&port
->dev
, "%s - Invalid baud rate %d requested, using 9600.\n",
1597 __func__
, p_priv
->baud
);
1599 msg
.baudHi
= 125; /* Values for 9600 baud */
1602 msg
.setPrescaler
= 0xff;
1605 msg
.lcr
= (p_priv
->cflag
& CSTOPB
) ? STOPBITS_678_2
: STOPBITS_5678_1
;
1606 switch (p_priv
->cflag
& CSIZE
) {
1608 msg
.lcr
|= USA_DATABITS_5
;
1611 msg
.lcr
|= USA_DATABITS_6
;
1614 msg
.lcr
|= USA_DATABITS_7
;
1617 msg
.lcr
|= USA_DATABITS_8
;
1620 if (p_priv
->cflag
& PARENB
) {
1621 /* note USA_PARITY_NONE == 0 */
1622 msg
.lcr
|= (p_priv
->cflag
& PARODD
) ?
1623 USA_PARITY_ODD
: USA_PARITY_EVEN
;
1627 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
1628 msg
.xonFlowControl
= 0;
1629 msg
.setFlowControl
= 0xff;
1630 msg
.forwardingLength
= 16;
1635 if (reset_port
== 1) {
1644 msg
.returnStatus
= 0;
1645 msg
.resetDataToggle
= 0xff;
1649 else if (reset_port
== 2) {
1658 msg
.returnStatus
= 0;
1659 msg
.resetDataToggle
= 0;
1662 /* Sending intermediate configs */
1664 msg
._txOn
= (!p_priv
->break_on
);
1667 msg
.txBreak
= (p_priv
->break_on
);
1672 msg
.returnStatus
= 0;
1673 msg
.resetDataToggle
= 0x0;
1676 /* Do handshaking outputs */
1677 msg
.setTxTriState_setRts
= 0xff;
1678 msg
.txTriState_rts
= p_priv
->rts_state
;
1680 msg
.setHskoa_setDtr
= 0xff;
1681 msg
.hskoa_dtr
= p_priv
->dtr_state
;
1683 p_priv
->resend_cont
= 0;
1684 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
1686 /* send the data out the device on control endpoint */
1687 this_urb
->transfer_buffer_length
= sizeof(msg
);
1689 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
1691 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed (%d)\n", __func__
, err
);
1695 static int keyspan_usa28_send_setup(struct usb_serial
*serial
,
1696 struct usb_serial_port
*port
,
1699 struct keyspan_usa28_portControlMessage msg
;
1700 struct keyspan_serial_private
*s_priv
;
1701 struct keyspan_port_private
*p_priv
;
1702 const struct keyspan_device_details
*d_details
;
1703 struct urb
*this_urb
;
1704 int device_port
, err
;
1706 s_priv
= usb_get_serial_data(serial
);
1707 p_priv
= usb_get_serial_port_data(port
);
1708 d_details
= s_priv
->device_details
;
1709 device_port
= port
->port_number
;
1711 /* only do something if we have a bulk out endpoint */
1712 this_urb
= p_priv
->outcont_urb
;
1713 if (this_urb
== NULL
) {
1714 dev_dbg(&port
->dev
, "%s - oops no urb.\n", __func__
);
1718 /* Save reset port val for resend.
1719 Don't overwrite resend for open/close condition. */
1720 if ((reset_port
+ 1) > p_priv
->resend_cont
)
1721 p_priv
->resend_cont
= reset_port
+ 1;
1722 if (this_urb
->status
== -EINPROGRESS
) {
1723 dev_dbg(&port
->dev
, "%s already writing\n", __func__
);
1728 memset(&msg
, 0, sizeof(struct keyspan_usa28_portControlMessage
));
1730 msg
.setBaudRate
= 1;
1731 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
1732 &msg
.baudHi
, &msg
.baudLo
, NULL
,
1733 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
1734 dev_dbg(&port
->dev
, "%s - Invalid baud rate requested %d.\n",
1735 __func__
, p_priv
->baud
);
1737 msg
.baudHi
= 0xb2; /* Values for 9600 baud */
1740 /* If parity is enabled, we must calculate it ourselves. */
1741 msg
.parity
= 0; /* XXX for now */
1743 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
1744 msg
.xonFlowControl
= 0;
1746 /* Do handshaking outputs, DTR is inverted relative to RTS */
1747 msg
.rts
= p_priv
->rts_state
;
1748 msg
.dtr
= p_priv
->dtr_state
;
1750 msg
.forwardingLength
= 16;
1752 msg
.breakThreshold
= 45;
1756 /*msg.returnStatus = 1;
1757 msg.resetDataToggle = 0xff;*/
1759 if (reset_port
== 1) {
1763 msg
.txForceXoff
= 0;
1769 msg
.returnStatus
= 0;
1770 msg
.resetDataToggle
= 0xff;
1773 else if (reset_port
== 2) {
1777 msg
.txForceXoff
= 0;
1783 msg
.returnStatus
= 0;
1784 msg
.resetDataToggle
= 0;
1786 /* Sending intermediate configs */
1788 msg
._txOn
= (!p_priv
->break_on
);
1791 msg
.txForceXoff
= 0;
1792 msg
.txBreak
= (p_priv
->break_on
);
1797 msg
.returnStatus
= 0;
1798 msg
.resetDataToggle
= 0x0;
1801 p_priv
->resend_cont
= 0;
1802 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
1804 /* send the data out the device on control endpoint */
1805 this_urb
->transfer_buffer_length
= sizeof(msg
);
1807 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
1809 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed\n", __func__
);
1814 static int keyspan_usa49_send_setup(struct usb_serial
*serial
,
1815 struct usb_serial_port
*port
,
1818 struct keyspan_usa49_portControlMessage msg
;
1819 struct usb_ctrlrequest
*dr
= NULL
;
1820 struct keyspan_serial_private
*s_priv
;
1821 struct keyspan_port_private
*p_priv
;
1822 const struct keyspan_device_details
*d_details
;
1823 struct urb
*this_urb
;
1824 int err
, device_port
;
1826 s_priv
= usb_get_serial_data(serial
);
1827 p_priv
= usb_get_serial_port_data(port
);
1828 d_details
= s_priv
->device_details
;
1830 this_urb
= s_priv
->glocont_urb
;
1832 /* Work out which port within the device is being setup */
1833 device_port
= port
->port_number
;
1835 /* Make sure we have an urb then send the message */
1836 if (this_urb
== NULL
) {
1837 dev_dbg(&port
->dev
, "%s - oops no urb for port.\n", __func__
);
1841 dev_dbg(&port
->dev
, "%s - endpoint %d (%d)\n",
1842 __func__
, usb_pipeendpoint(this_urb
->pipe
), device_port
);
1844 /* Save reset port val for resend.
1845 Don't overwrite resend for open/close condition. */
1846 if ((reset_port
+ 1) > p_priv
->resend_cont
)
1847 p_priv
->resend_cont
= reset_port
+ 1;
1849 if (this_urb
->status
== -EINPROGRESS
) {
1850 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1855 memset(&msg
, 0, sizeof(struct keyspan_usa49_portControlMessage
));
1857 msg
.portNumber
= device_port
;
1859 /* Only set baud rate if it's changed */
1860 if (p_priv
->old_baud
!= p_priv
->baud
) {
1861 p_priv
->old_baud
= p_priv
->baud
;
1862 msg
.setClocking
= 0xff;
1863 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
1864 &msg
.baudHi
, &msg
.baudLo
, &msg
.prescaler
,
1865 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
1866 dev_dbg(&port
->dev
, "%s - Invalid baud rate %d requested, using 9600.\n",
1867 __func__
, p_priv
->baud
);
1869 msg
.baudHi
= 125; /* Values for 9600 baud */
1872 /* msg.setPrescaler = 0xff; */
1875 msg
.lcr
= (p_priv
->cflag
& CSTOPB
) ? STOPBITS_678_2
: STOPBITS_5678_1
;
1876 switch (p_priv
->cflag
& CSIZE
) {
1878 msg
.lcr
|= USA_DATABITS_5
;
1881 msg
.lcr
|= USA_DATABITS_6
;
1884 msg
.lcr
|= USA_DATABITS_7
;
1887 msg
.lcr
|= USA_DATABITS_8
;
1890 if (p_priv
->cflag
& PARENB
) {
1891 /* note USA_PARITY_NONE == 0 */
1892 msg
.lcr
|= (p_priv
->cflag
& PARODD
) ?
1893 USA_PARITY_ODD
: USA_PARITY_EVEN
;
1897 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
1898 msg
.xonFlowControl
= 0;
1899 msg
.setFlowControl
= 0xff;
1901 msg
.forwardingLength
= 16;
1906 if (reset_port
== 1) {
1915 msg
.returnStatus
= 0;
1916 msg
.resetDataToggle
= 0xff;
1918 msg
.disablePort
= 0;
1921 else if (reset_port
== 2) {
1930 msg
.returnStatus
= 0;
1931 msg
.resetDataToggle
= 0;
1933 msg
.disablePort
= 1;
1935 /* Sending intermediate configs */
1937 msg
._txOn
= (!p_priv
->break_on
);
1940 msg
.txBreak
= (p_priv
->break_on
);
1945 msg
.returnStatus
= 0;
1946 msg
.resetDataToggle
= 0x0;
1948 msg
.disablePort
= 0;
1951 /* Do handshaking outputs */
1953 msg
.rts
= p_priv
->rts_state
;
1956 msg
.dtr
= p_priv
->dtr_state
;
1958 p_priv
->resend_cont
= 0;
1960 /* if the device is a 49wg, we send control message on usb
1963 if (d_details
->product_id
== keyspan_usa49wg_product_id
) {
1964 dr
= (void *)(s_priv
->ctrl_buf
);
1965 dr
->bRequestType
= USB_TYPE_VENDOR
| USB_DIR_OUT
;
1966 dr
->bRequest
= 0xB0; /* 49wg control message */;
1969 dr
->wLength
= cpu_to_le16(sizeof(msg
));
1971 memcpy(s_priv
->glocont_buf
, &msg
, sizeof(msg
));
1973 usb_fill_control_urb(this_urb
, serial
->dev
,
1974 usb_sndctrlpipe(serial
->dev
, 0),
1975 (unsigned char *)dr
, s_priv
->glocont_buf
,
1976 sizeof(msg
), usa49_glocont_callback
, serial
);
1979 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
1981 /* send the data out the device on control endpoint */
1982 this_urb
->transfer_buffer_length
= sizeof(msg
);
1984 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
1986 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed (%d)\n", __func__
, err
);
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");