2 Keyspan USB to Serial Converter driver
4 (C) Copyright (C) 2000-2001 Hugh Blemings <hugh@blemings.org>
5 (C) Copyright (C) 2002 Greg Kroah-Hartman <greg@kroah.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 See http://blemings.org/hugh/keyspan.html for more information.
14 Code in this driver inspired by and in a number of places taken
15 from Brian Warner's original Keyspan-PDA driver.
17 This driver has been put together with the support of Innosys, Inc.
18 and Keyspan, Inc the manufacturers of the Keyspan USB-serial products.
21 Thanks to Paulus for miscellaneous tidy ups, some largish chunks
22 of much nicer and/or completely new code and (perhaps most uniquely)
23 having the patience to sit down and explain why and where he'd changed
26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
27 staff in their work on open source projects.
31 #include <linux/kernel.h>
32 #include <linux/jiffies.h>
33 #include <linux/errno.h>
34 #include <linux/init.h>
35 #include <linux/slab.h>
36 #include <linux/tty.h>
37 #include <linux/tty_driver.h>
38 #include <linux/tty_flip.h>
39 #include <linux/module.h>
40 #include <linux/spinlock.h>
41 #include <linux/uaccess.h>
42 #include <linux/usb.h>
43 #include <linux/usb/serial.h>
44 #include <linux/usb/ezusb.h>
47 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu"
48 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
50 #define INSTAT_BUFLEN 32
51 #define GLOCONT_BUFLEN 64
52 #define INDAT49W_BUFLEN 512
55 #define INACK_BUFLEN 1
56 #define OUTCONT_BUFLEN 64
58 /* Per device and per port private data */
59 struct keyspan_serial_private
{
60 const struct keyspan_device_details
*device_details
;
62 struct urb
*instat_urb
;
65 /* added to support 49wg, where data from all 4 ports comes in
66 on 1 EP and high-speed supported */
67 struct urb
*indat_urb
;
70 /* XXX this one probably will need a lock */
71 struct urb
*glocont_urb
;
73 char *ctrl_buf
; /* for EP0 control message */
76 struct keyspan_port_private
{
77 /* Keep track of which input & output endpoints to use */
81 /* Keep duplicate of device details in each port
82 structure as well - simplifies some of the
83 callback functions etc. */
84 const struct keyspan_device_details
*device_details
;
86 /* Input endpoints and buffer for this port */
87 struct urb
*in_urbs
[2];
89 /* Output endpoints and buffer for this port */
90 struct urb
*out_urbs
[2];
93 /* Input ack endpoint */
94 struct urb
*inack_urb
;
97 /* Output control endpoint */
98 struct urb
*outcont_urb
;
101 /* Settings for the port */
105 unsigned int old_cflag
;
106 enum {flow_none
, flow_cts
, flow_xon
} flow_control
;
107 int rts_state
; /* Handshaking pins (outputs) */
109 int cts_state
; /* Handshaking pins (inputs) */
115 unsigned long tx_start_time
[2];
116 int resend_cont
; /* need to resend control packet */
119 /* Include Keyspan message headers. All current Keyspan Adapters
120 make use of one of five message formats which are referred
121 to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and
122 within this driver. */
123 #include "keyspan_usa26msg.h"
124 #include "keyspan_usa28msg.h"
125 #include "keyspan_usa49msg.h"
126 #include "keyspan_usa90msg.h"
127 #include "keyspan_usa67msg.h"
130 module_usb_serial_driver(serial_drivers
, keyspan_ids_combined
);
132 static void keyspan_break_ctl(struct tty_struct
*tty
, int break_state
)
134 struct usb_serial_port
*port
= tty
->driver_data
;
135 struct keyspan_port_private
*p_priv
;
137 p_priv
= usb_get_serial_port_data(port
);
139 if (break_state
== -1)
140 p_priv
->break_on
= 1;
142 p_priv
->break_on
= 0;
144 keyspan_send_setup(port
, 0);
148 static void keyspan_set_termios(struct tty_struct
*tty
,
149 struct usb_serial_port
*port
, struct ktermios
*old_termios
)
151 int baud_rate
, device_port
;
152 struct keyspan_port_private
*p_priv
;
153 const struct keyspan_device_details
*d_details
;
156 p_priv
= usb_get_serial_port_data(port
);
157 d_details
= p_priv
->device_details
;
158 cflag
= tty
->termios
.c_cflag
;
159 device_port
= port
->port_number
;
161 /* Baud rate calculation takes baud rate as an integer
162 so other rates can be generated if desired. */
163 baud_rate
= tty_get_baud_rate(tty
);
164 /* If no match or invalid, don't change */
165 if (d_details
->calculate_baud_rate(port
, baud_rate
, d_details
->baudclk
,
166 NULL
, NULL
, NULL
, device_port
) == KEYSPAN_BAUD_RATE_OK
) {
167 /* FIXME - more to do here to ensure rate changes cleanly */
168 /* FIXME - calcuate exact rate from divisor ? */
169 p_priv
->baud
= baud_rate
;
171 baud_rate
= tty_termios_baud_rate(old_termios
);
173 tty_encode_baud_rate(tty
, baud_rate
, baud_rate
);
174 /* set CTS/RTS handshake etc. */
175 p_priv
->cflag
= cflag
;
176 p_priv
->flow_control
= (cflag
& CRTSCTS
) ? flow_cts
: flow_none
;
178 /* Mark/Space not supported */
179 tty
->termios
.c_cflag
&= ~CMSPAR
;
181 keyspan_send_setup(port
, 0);
184 static int keyspan_tiocmget(struct tty_struct
*tty
)
186 struct usb_serial_port
*port
= tty
->driver_data
;
187 struct keyspan_port_private
*p_priv
= usb_get_serial_port_data(port
);
190 value
= ((p_priv
->rts_state
) ? TIOCM_RTS
: 0) |
191 ((p_priv
->dtr_state
) ? TIOCM_DTR
: 0) |
192 ((p_priv
->cts_state
) ? TIOCM_CTS
: 0) |
193 ((p_priv
->dsr_state
) ? TIOCM_DSR
: 0) |
194 ((p_priv
->dcd_state
) ? TIOCM_CAR
: 0) |
195 ((p_priv
->ri_state
) ? TIOCM_RNG
: 0);
200 static int keyspan_tiocmset(struct tty_struct
*tty
,
201 unsigned int set
, unsigned int clear
)
203 struct usb_serial_port
*port
= tty
->driver_data
;
204 struct keyspan_port_private
*p_priv
= usb_get_serial_port_data(port
);
207 p_priv
->rts_state
= 1;
209 p_priv
->dtr_state
= 1;
210 if (clear
& TIOCM_RTS
)
211 p_priv
->rts_state
= 0;
212 if (clear
& TIOCM_DTR
)
213 p_priv
->dtr_state
= 0;
214 keyspan_send_setup(port
, 0);
218 /* Write function is similar for the four protocols used
219 with only a minor change for usa90 (usa19hs) required */
220 static int keyspan_write(struct tty_struct
*tty
,
221 struct usb_serial_port
*port
, const unsigned char *buf
, int count
)
223 struct keyspan_port_private
*p_priv
;
224 const struct keyspan_device_details
*d_details
;
227 struct urb
*this_urb
;
228 int err
, maxDataLen
, dataOffset
;
230 p_priv
= usb_get_serial_port_data(port
);
231 d_details
= p_priv
->device_details
;
233 if (d_details
->msg_format
== msg_usa90
) {
241 dev_dbg(&port
->dev
, "%s - %d chars, flip=%d\n", __func__
, count
,
244 for (left
= count
; left
> 0; left
-= todo
) {
246 if (todo
> maxDataLen
)
249 flip
= p_priv
->out_flip
;
251 /* Check we have a valid urb/endpoint before we use it... */
252 this_urb
= p_priv
->out_urbs
[flip
];
253 if (this_urb
== NULL
) {
254 /* no bulk out, so return 0 bytes written */
255 dev_dbg(&port
->dev
, "%s - no output urb :(\n", __func__
);
259 dev_dbg(&port
->dev
, "%s - endpoint %d flip %d\n",
260 __func__
, usb_pipeendpoint(this_urb
->pipe
), flip
);
262 if (this_urb
->status
== -EINPROGRESS
) {
263 if (time_before(jiffies
,
264 p_priv
->tx_start_time
[flip
] + 10 * HZ
))
266 usb_unlink_urb(this_urb
);
270 /* First byte in buffer is "last flag" (except for usa19hx)
271 - unused so for now so set to zero */
272 ((char *)this_urb
->transfer_buffer
)[0] = 0;
274 memcpy(this_urb
->transfer_buffer
+ dataOffset
, buf
, todo
);
277 /* send the data out the bulk port */
278 this_urb
->transfer_buffer_length
= todo
+ dataOffset
;
280 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
282 dev_dbg(&port
->dev
, "usb_submit_urb(write bulk) failed (%d)\n", err
);
283 p_priv
->tx_start_time
[flip
] = jiffies
;
285 /* Flip for next time if usa26 or usa28 interface
286 (not used on usa49) */
287 p_priv
->out_flip
= (flip
+ 1) & d_details
->outdat_endp_flip
;
293 static void usa26_indat_callback(struct urb
*urb
)
297 struct usb_serial_port
*port
;
298 unsigned char *data
= urb
->transfer_buffer
;
299 int status
= urb
->status
;
301 endpoint
= usb_pipeendpoint(urb
->pipe
);
304 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
305 __func__
, status
, endpoint
);
310 if (urb
->actual_length
) {
311 /* 0x80 bit is error flag */
312 if ((data
[0] & 0x80) == 0) {
313 /* no errors on individual bytes, only
314 possible overrun err */
315 if (data
[0] & RXERROR_OVERRUN
)
319 for (i
= 1; i
< urb
->actual_length
; ++i
)
320 tty_insert_flip_char(&port
->port
, data
[i
], err
);
322 /* some bytes had errors, every byte has status */
323 dev_dbg(&port
->dev
, "%s - RX error!!!!\n", __func__
);
324 for (i
= 0; i
+ 1 < urb
->actual_length
; i
+= 2) {
325 int stat
= data
[i
], flag
= 0;
326 if (stat
& RXERROR_OVERRUN
)
328 if (stat
& RXERROR_FRAMING
)
330 if (stat
& RXERROR_PARITY
)
332 /* XXX should handle break (0x10) */
333 tty_insert_flip_char(&port
->port
, data
[i
+1],
337 tty_flip_buffer_push(&port
->port
);
340 /* Resubmit urb so we continue receiving */
341 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
343 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
346 /* Outdat handling is common for all devices */
347 static void usa2x_outdat_callback(struct urb
*urb
)
349 struct usb_serial_port
*port
;
350 struct keyspan_port_private
*p_priv
;
353 p_priv
= usb_get_serial_port_data(port
);
354 dev_dbg(&port
->dev
, "%s - urb %d\n", __func__
, urb
== p_priv
->out_urbs
[1]);
356 usb_serial_port_softint(port
);
359 static void usa26_inack_callback(struct urb
*urb
)
363 static void usa26_outcont_callback(struct urb
*urb
)
365 struct usb_serial_port
*port
;
366 struct keyspan_port_private
*p_priv
;
369 p_priv
= usb_get_serial_port_data(port
);
371 if (p_priv
->resend_cont
) {
372 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
373 keyspan_usa26_send_setup(port
->serial
, port
,
374 p_priv
->resend_cont
- 1);
378 static void usa26_instat_callback(struct urb
*urb
)
380 unsigned char *data
= urb
->transfer_buffer
;
381 struct keyspan_usa26_portStatusMessage
*msg
;
382 struct usb_serial
*serial
;
383 struct usb_serial_port
*port
;
384 struct keyspan_port_private
*p_priv
;
385 int old_dcd_state
, err
;
386 int status
= urb
->status
;
388 serial
= urb
->context
;
391 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
394 if (urb
->actual_length
!= 9) {
395 dev_dbg(&urb
->dev
->dev
, "%s - %d byte report??\n", __func__
, urb
->actual_length
);
399 msg
= (struct keyspan_usa26_portStatusMessage
*)data
;
402 dev_dbg(&urb
->dev
->dev
,
403 "%s - port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d",
404 __func__
, msg
->port
, msg
->hskia_cts
, msg
->gpia_dcd
, msg
->dsr
,
405 msg
->ri
, msg
->_txOff
, msg
->_txXoff
, msg
->rxEnabled
,
406 msg
->controlResponse
);
409 /* Now do something useful with the data */
412 /* Check port number from message and retrieve private data */
413 if (msg
->port
>= serial
->num_ports
) {
414 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n", __func__
, msg
->port
);
417 port
= serial
->port
[msg
->port
];
418 p_priv
= usb_get_serial_port_data(port
);
420 /* Update handshaking pin state information */
421 old_dcd_state
= p_priv
->dcd_state
;
422 p_priv
->cts_state
= ((msg
->hskia_cts
) ? 1 : 0);
423 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
424 p_priv
->dcd_state
= ((msg
->gpia_dcd
) ? 1 : 0);
425 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
427 if (old_dcd_state
!= p_priv
->dcd_state
)
428 tty_port_tty_hangup(&port
->port
, true);
430 /* Resubmit urb so we continue receiving */
431 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
433 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
437 static void usa26_glocont_callback(struct urb
*urb
)
442 static void usa28_indat_callback(struct urb
*urb
)
445 struct usb_serial_port
*port
;
447 struct keyspan_port_private
*p_priv
;
448 int status
= urb
->status
;
451 p_priv
= usb_get_serial_port_data(port
);
452 data
= urb
->transfer_buffer
;
454 if (urb
!= p_priv
->in_urbs
[p_priv
->in_flip
])
459 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
460 __func__
, status
, usb_pipeendpoint(urb
->pipe
));
465 p_priv
= usb_get_serial_port_data(port
);
466 data
= urb
->transfer_buffer
;
468 if (urb
->actual_length
) {
469 tty_insert_flip_string(&port
->port
, data
,
471 tty_flip_buffer_push(&port
->port
);
474 /* Resubmit urb so we continue receiving */
475 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
477 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n",
479 p_priv
->in_flip
^= 1;
481 urb
= p_priv
->in_urbs
[p_priv
->in_flip
];
482 } while (urb
->status
!= -EINPROGRESS
);
485 static void usa28_inack_callback(struct urb
*urb
)
489 static void usa28_outcont_callback(struct urb
*urb
)
491 struct usb_serial_port
*port
;
492 struct keyspan_port_private
*p_priv
;
495 p_priv
= usb_get_serial_port_data(port
);
497 if (p_priv
->resend_cont
) {
498 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
499 keyspan_usa28_send_setup(port
->serial
, port
,
500 p_priv
->resend_cont
- 1);
504 static void usa28_instat_callback(struct urb
*urb
)
507 unsigned char *data
= urb
->transfer_buffer
;
508 struct keyspan_usa28_portStatusMessage
*msg
;
509 struct usb_serial
*serial
;
510 struct usb_serial_port
*port
;
511 struct keyspan_port_private
*p_priv
;
513 int status
= urb
->status
;
515 serial
= urb
->context
;
518 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
522 if (urb
->actual_length
!= sizeof(struct keyspan_usa28_portStatusMessage
)) {
523 dev_dbg(&urb
->dev
->dev
, "%s - bad length %d\n", __func__
, urb
->actual_length
);
527 /*dev_dbg(&urb->dev->dev, "%s %12ph", __func__, data);*/
529 /* Now do something useful with the data */
530 msg
= (struct keyspan_usa28_portStatusMessage
*)data
;
532 /* Check port number from message and retrieve private data */
533 if (msg
->port
>= serial
->num_ports
) {
534 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n", __func__
, msg
->port
);
537 port
= serial
->port
[msg
->port
];
538 p_priv
= usb_get_serial_port_data(port
);
540 /* Update handshaking pin state information */
541 old_dcd_state
= p_priv
->dcd_state
;
542 p_priv
->cts_state
= ((msg
->cts
) ? 1 : 0);
543 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
544 p_priv
->dcd_state
= ((msg
->dcd
) ? 1 : 0);
545 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
547 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
548 tty_port_tty_hangup(&port
->port
, true);
550 /* Resubmit urb so we continue receiving */
551 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
553 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
557 static void usa28_glocont_callback(struct urb
*urb
)
562 static void usa49_glocont_callback(struct urb
*urb
)
564 struct usb_serial
*serial
;
565 struct usb_serial_port
*port
;
566 struct keyspan_port_private
*p_priv
;
569 serial
= urb
->context
;
570 for (i
= 0; i
< serial
->num_ports
; ++i
) {
571 port
= serial
->port
[i
];
572 p_priv
= usb_get_serial_port_data(port
);
574 if (p_priv
->resend_cont
) {
575 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
576 keyspan_usa49_send_setup(serial
, port
,
577 p_priv
->resend_cont
- 1);
583 /* This is actually called glostat in the Keyspan
585 static void usa49_instat_callback(struct urb
*urb
)
588 unsigned char *data
= urb
->transfer_buffer
;
589 struct keyspan_usa49_portStatusMessage
*msg
;
590 struct usb_serial
*serial
;
591 struct usb_serial_port
*port
;
592 struct keyspan_port_private
*p_priv
;
594 int status
= urb
->status
;
596 serial
= urb
->context
;
599 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
603 if (urb
->actual_length
!=
604 sizeof(struct keyspan_usa49_portStatusMessage
)) {
605 dev_dbg(&urb
->dev
->dev
, "%s - bad length %d\n", __func__
, urb
->actual_length
);
609 /*dev_dbg(&urb->dev->dev, "%s: %11ph", __func__, data);*/
611 /* Now do something useful with the data */
612 msg
= (struct keyspan_usa49_portStatusMessage
*)data
;
614 /* Check port number from message and retrieve private data */
615 if (msg
->portNumber
>= serial
->num_ports
) {
616 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n",
617 __func__
, msg
->portNumber
);
620 port
= serial
->port
[msg
->portNumber
];
621 p_priv
= usb_get_serial_port_data(port
);
623 /* Update handshaking pin state information */
624 old_dcd_state
= p_priv
->dcd_state
;
625 p_priv
->cts_state
= ((msg
->cts
) ? 1 : 0);
626 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
627 p_priv
->dcd_state
= ((msg
->dcd
) ? 1 : 0);
628 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
630 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
631 tty_port_tty_hangup(&port
->port
, true);
633 /* Resubmit urb so we continue receiving */
634 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
636 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
640 static void usa49_inack_callback(struct urb
*urb
)
644 static void usa49_indat_callback(struct urb
*urb
)
648 struct usb_serial_port
*port
;
649 unsigned char *data
= urb
->transfer_buffer
;
650 int status
= urb
->status
;
652 endpoint
= usb_pipeendpoint(urb
->pipe
);
655 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
656 __func__
, status
, endpoint
);
661 if (urb
->actual_length
) {
662 /* 0x80 bit is error flag */
663 if ((data
[0] & 0x80) == 0) {
664 /* no error on any byte */
665 tty_insert_flip_string(&port
->port
, data
+ 1,
666 urb
->actual_length
- 1);
668 /* some bytes had errors, every byte has status */
669 for (i
= 0; i
+ 1 < urb
->actual_length
; i
+= 2) {
670 int stat
= data
[i
], flag
= 0;
671 if (stat
& RXERROR_OVERRUN
)
673 if (stat
& RXERROR_FRAMING
)
675 if (stat
& RXERROR_PARITY
)
677 /* XXX should handle break (0x10) */
678 tty_insert_flip_char(&port
->port
, data
[i
+1],
682 tty_flip_buffer_push(&port
->port
);
685 /* Resubmit urb so we continue receiving */
686 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
688 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
691 static void usa49wg_indat_callback(struct urb
*urb
)
694 struct usb_serial
*serial
;
695 struct usb_serial_port
*port
;
696 unsigned char *data
= urb
->transfer_buffer
;
697 int status
= urb
->status
;
699 serial
= urb
->context
;
702 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
706 /* inbound data is in the form P#, len, status, data */
710 while (i
< urb
->actual_length
) {
712 /* Check port number from message */
713 if (data
[i
] >= serial
->num_ports
) {
714 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n",
718 port
= serial
->port
[data
[i
++]];
721 /* 0x80 bit is error flag */
722 if ((data
[i
] & 0x80) == 0) {
723 /* no error on any byte */
725 for (x
= 1; x
< len
&& i
< urb
->actual_length
; ++x
)
726 tty_insert_flip_char(&port
->port
,
730 * some bytes had errors, every byte has status
732 for (x
= 0; x
+ 1 < len
&&
733 i
+ 1 < urb
->actual_length
; x
+= 2) {
734 int stat
= data
[i
], flag
= 0;
736 if (stat
& RXERROR_OVERRUN
)
738 if (stat
& RXERROR_FRAMING
)
740 if (stat
& RXERROR_PARITY
)
742 /* XXX should handle break (0x10) */
743 tty_insert_flip_char(&port
->port
, data
[i
+1],
748 tty_flip_buffer_push(&port
->port
);
751 /* Resubmit urb so we continue receiving */
752 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
754 dev_dbg(&urb
->dev
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
757 /* not used, usa-49 doesn't have per-port control endpoints */
758 static void usa49_outcont_callback(struct urb
*urb
)
762 static void usa90_indat_callback(struct urb
*urb
)
766 struct usb_serial_port
*port
;
767 struct keyspan_port_private
*p_priv
;
768 unsigned char *data
= urb
->transfer_buffer
;
769 int status
= urb
->status
;
771 endpoint
= usb_pipeendpoint(urb
->pipe
);
774 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x on endpoint %d.\n",
775 __func__
, status
, endpoint
);
780 p_priv
= usb_get_serial_port_data(port
);
782 if (urb
->actual_length
) {
783 /* if current mode is DMA, looks like usa28 format
784 otherwise looks like usa26 data format */
786 if (p_priv
->baud
> 57600)
787 tty_insert_flip_string(&port
->port
, data
,
790 /* 0x80 bit is error flag */
791 if ((data
[0] & 0x80) == 0) {
792 /* no errors on individual bytes, only
793 possible overrun err*/
794 if (data
[0] & RXERROR_OVERRUN
)
798 for (i
= 1; i
< urb
->actual_length
; ++i
)
799 tty_insert_flip_char(&port
->port
,
802 /* some bytes had errors, every byte has status */
803 dev_dbg(&port
->dev
, "%s - RX error!!!!\n", __func__
);
804 for (i
= 0; i
+ 1 < urb
->actual_length
; i
+= 2) {
805 int stat
= data
[i
], flag
= 0;
806 if (stat
& RXERROR_OVERRUN
)
808 if (stat
& RXERROR_FRAMING
)
810 if (stat
& RXERROR_PARITY
)
812 /* XXX should handle break (0x10) */
813 tty_insert_flip_char(&port
->port
,
818 tty_flip_buffer_push(&port
->port
);
821 /* Resubmit urb so we continue receiving */
822 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
824 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
828 static void usa90_instat_callback(struct urb
*urb
)
830 unsigned char *data
= urb
->transfer_buffer
;
831 struct keyspan_usa90_portStatusMessage
*msg
;
832 struct usb_serial
*serial
;
833 struct usb_serial_port
*port
;
834 struct keyspan_port_private
*p_priv
;
835 int old_dcd_state
, err
;
836 int status
= urb
->status
;
838 serial
= urb
->context
;
841 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
844 if (urb
->actual_length
< 14) {
845 dev_dbg(&urb
->dev
->dev
, "%s - %d byte report??\n", __func__
, urb
->actual_length
);
849 msg
= (struct keyspan_usa90_portStatusMessage
*)data
;
851 /* Now do something useful with the data */
853 port
= serial
->port
[0];
854 p_priv
= usb_get_serial_port_data(port
);
856 /* Update handshaking pin state information */
857 old_dcd_state
= p_priv
->dcd_state
;
858 p_priv
->cts_state
= ((msg
->cts
) ? 1 : 0);
859 p_priv
->dsr_state
= ((msg
->dsr
) ? 1 : 0);
860 p_priv
->dcd_state
= ((msg
->dcd
) ? 1 : 0);
861 p_priv
->ri_state
= ((msg
->ri
) ? 1 : 0);
863 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
864 tty_port_tty_hangup(&port
->port
, true);
866 /* Resubmit urb so we continue receiving */
867 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
869 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
874 static void usa90_outcont_callback(struct urb
*urb
)
876 struct usb_serial_port
*port
;
877 struct keyspan_port_private
*p_priv
;
880 p_priv
= usb_get_serial_port_data(port
);
882 if (p_priv
->resend_cont
) {
883 dev_dbg(&urb
->dev
->dev
, "%s - sending setup\n", __func__
);
884 keyspan_usa90_send_setup(port
->serial
, port
,
885 p_priv
->resend_cont
- 1);
889 /* Status messages from the 28xg */
890 static void usa67_instat_callback(struct urb
*urb
)
893 unsigned char *data
= urb
->transfer_buffer
;
894 struct keyspan_usa67_portStatusMessage
*msg
;
895 struct usb_serial
*serial
;
896 struct usb_serial_port
*port
;
897 struct keyspan_port_private
*p_priv
;
899 int status
= urb
->status
;
901 serial
= urb
->context
;
904 dev_dbg(&urb
->dev
->dev
, "%s - nonzero status: %x\n", __func__
, status
);
908 if (urb
->actual_length
!=
909 sizeof(struct keyspan_usa67_portStatusMessage
)) {
910 dev_dbg(&urb
->dev
->dev
, "%s - bad length %d\n", __func__
, urb
->actual_length
);
915 /* Now do something useful with the data */
916 msg
= (struct keyspan_usa67_portStatusMessage
*)data
;
918 /* Check port number from message and retrieve private data */
919 if (msg
->port
>= serial
->num_ports
) {
920 dev_dbg(&urb
->dev
->dev
, "%s - Unexpected port number %d\n", __func__
, msg
->port
);
924 port
= serial
->port
[msg
->port
];
925 p_priv
= usb_get_serial_port_data(port
);
927 /* Update handshaking pin state information */
928 old_dcd_state
= p_priv
->dcd_state
;
929 p_priv
->cts_state
= ((msg
->hskia_cts
) ? 1 : 0);
930 p_priv
->dcd_state
= ((msg
->gpia_dcd
) ? 1 : 0);
932 if (old_dcd_state
!= p_priv
->dcd_state
&& old_dcd_state
)
933 tty_port_tty_hangup(&port
->port
, true);
935 /* Resubmit urb so we continue receiving */
936 err
= usb_submit_urb(urb
, GFP_ATOMIC
);
938 dev_dbg(&port
->dev
, "%s - resubmit read urb failed. (%d)\n", __func__
, err
);
941 static void usa67_glocont_callback(struct urb
*urb
)
943 struct usb_serial
*serial
;
944 struct usb_serial_port
*port
;
945 struct keyspan_port_private
*p_priv
;
948 serial
= urb
->context
;
949 for (i
= 0; i
< serial
->num_ports
; ++i
) {
950 port
= serial
->port
[i
];
951 p_priv
= usb_get_serial_port_data(port
);
953 if (p_priv
->resend_cont
) {
954 dev_dbg(&port
->dev
, "%s - sending setup\n", __func__
);
955 keyspan_usa67_send_setup(serial
, port
,
956 p_priv
->resend_cont
- 1);
962 static int keyspan_write_room(struct tty_struct
*tty
)
964 struct usb_serial_port
*port
= tty
->driver_data
;
965 struct keyspan_port_private
*p_priv
;
966 const struct keyspan_device_details
*d_details
;
969 struct urb
*this_urb
;
971 p_priv
= usb_get_serial_port_data(port
);
972 d_details
= p_priv
->device_details
;
975 if (d_details
->msg_format
== msg_usa90
)
980 flip
= p_priv
->out_flip
;
982 /* Check both endpoints to see if any are available. */
983 this_urb
= p_priv
->out_urbs
[flip
];
984 if (this_urb
!= NULL
) {
985 if (this_urb
->status
!= -EINPROGRESS
)
987 flip
= (flip
+ 1) & d_details
->outdat_endp_flip
;
988 this_urb
= p_priv
->out_urbs
[flip
];
989 if (this_urb
!= NULL
) {
990 if (this_urb
->status
!= -EINPROGRESS
)
998 static int keyspan_open(struct tty_struct
*tty
, struct usb_serial_port
*port
)
1000 struct keyspan_port_private
*p_priv
;
1001 const struct keyspan_device_details
*d_details
;
1003 int baud_rate
, device_port
;
1005 unsigned int cflag
= 0;
1007 p_priv
= usb_get_serial_port_data(port
);
1008 d_details
= p_priv
->device_details
;
1010 /* Set some sane defaults */
1011 p_priv
->rts_state
= 1;
1012 p_priv
->dtr_state
= 1;
1013 p_priv
->baud
= 9600;
1015 /* force baud and lcr to be set on open */
1016 p_priv
->old_baud
= 0;
1017 p_priv
->old_cflag
= 0;
1019 p_priv
->out_flip
= 0;
1020 p_priv
->in_flip
= 0;
1022 /* Reset low level data toggle and start reading from endpoints */
1023 for (i
= 0; i
< 2; i
++) {
1024 urb
= p_priv
->in_urbs
[i
];
1028 /* make sure endpoint data toggle is synchronized
1030 usb_clear_halt(urb
->dev
, urb
->pipe
);
1031 err
= usb_submit_urb(urb
, GFP_KERNEL
);
1033 dev_dbg(&port
->dev
, "%s - submit urb %d failed (%d)\n", __func__
, i
, err
);
1036 /* Reset low level data toggle on out endpoints */
1037 for (i
= 0; i
< 2; i
++) {
1038 urb
= p_priv
->out_urbs
[i
];
1041 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1042 usb_pipeout(urb->pipe), 0); */
1045 /* get the terminal config for the setup message now so we don't
1046 * need to send 2 of them */
1048 device_port
= port
->port_number
;
1050 cflag
= tty
->termios
.c_cflag
;
1051 /* Baud rate calculation takes baud rate as an integer
1052 so other rates can be generated if desired. */
1053 baud_rate
= tty_get_baud_rate(tty
);
1054 /* If no match or invalid, leave as default */
1056 && d_details
->calculate_baud_rate(port
, baud_rate
, d_details
->baudclk
,
1057 NULL
, NULL
, NULL
, device_port
) == KEYSPAN_BAUD_RATE_OK
) {
1058 p_priv
->baud
= baud_rate
;
1061 /* set CTS/RTS handshake etc. */
1062 p_priv
->cflag
= cflag
;
1063 p_priv
->flow_control
= (cflag
& CRTSCTS
) ? flow_cts
: flow_none
;
1065 keyspan_send_setup(port
, 1);
1067 /* keyspan_set_termios(port, NULL); */
1072 static inline void stop_urb(struct urb
*urb
)
1074 if (urb
&& urb
->status
== -EINPROGRESS
)
1078 static void keyspan_dtr_rts(struct usb_serial_port
*port
, int on
)
1080 struct keyspan_port_private
*p_priv
= usb_get_serial_port_data(port
);
1082 p_priv
->rts_state
= on
;
1083 p_priv
->dtr_state
= on
;
1084 keyspan_send_setup(port
, 0);
1087 static void keyspan_close(struct usb_serial_port
*port
)
1090 struct keyspan_port_private
*p_priv
;
1092 p_priv
= usb_get_serial_port_data(port
);
1094 p_priv
->rts_state
= 0;
1095 p_priv
->dtr_state
= 0;
1097 keyspan_send_setup(port
, 2);
1098 /* pilot-xfer seems to work best with this delay */
1101 p_priv
->out_flip
= 0;
1102 p_priv
->in_flip
= 0;
1104 stop_urb(p_priv
->inack_urb
);
1105 for (i
= 0; i
< 2; i
++) {
1106 stop_urb(p_priv
->in_urbs
[i
]);
1107 stop_urb(p_priv
->out_urbs
[i
]);
1111 /* download the firmware to a pre-renumeration device */
1112 static int keyspan_fake_startup(struct usb_serial
*serial
)
1116 dev_dbg(&serial
->dev
->dev
, "Keyspan startup version %04x product %04x\n",
1117 le16_to_cpu(serial
->dev
->descriptor
.bcdDevice
),
1118 le16_to_cpu(serial
->dev
->descriptor
.idProduct
));
1120 if ((le16_to_cpu(serial
->dev
->descriptor
.bcdDevice
) & 0x8000)
1122 dev_dbg(&serial
->dev
->dev
, "Firmware already loaded. Quitting.\n");
1126 /* Select firmware image on the basis of idProduct */
1127 switch (le16_to_cpu(serial
->dev
->descriptor
.idProduct
)) {
1128 case keyspan_usa28_pre_product_id
:
1129 fw_name
= "keyspan/usa28.fw";
1132 case keyspan_usa28x_pre_product_id
:
1133 fw_name
= "keyspan/usa28x.fw";
1136 case keyspan_usa28xa_pre_product_id
:
1137 fw_name
= "keyspan/usa28xa.fw";
1140 case keyspan_usa28xb_pre_product_id
:
1141 fw_name
= "keyspan/usa28xb.fw";
1144 case keyspan_usa19_pre_product_id
:
1145 fw_name
= "keyspan/usa19.fw";
1148 case keyspan_usa19qi_pre_product_id
:
1149 fw_name
= "keyspan/usa19qi.fw";
1152 case keyspan_mpr_pre_product_id
:
1153 fw_name
= "keyspan/mpr.fw";
1156 case keyspan_usa19qw_pre_product_id
:
1157 fw_name
= "keyspan/usa19qw.fw";
1160 case keyspan_usa18x_pre_product_id
:
1161 fw_name
= "keyspan/usa18x.fw";
1164 case keyspan_usa19w_pre_product_id
:
1165 fw_name
= "keyspan/usa19w.fw";
1168 case keyspan_usa49w_pre_product_id
:
1169 fw_name
= "keyspan/usa49w.fw";
1172 case keyspan_usa49wlc_pre_product_id
:
1173 fw_name
= "keyspan/usa49wlc.fw";
1177 dev_err(&serial
->dev
->dev
, "Unknown product ID (%04x)\n",
1178 le16_to_cpu(serial
->dev
->descriptor
.idProduct
));
1182 dev_dbg(&serial
->dev
->dev
, "Uploading Keyspan %s firmware.\n", fw_name
);
1184 if (ezusb_fx1_ihex_firmware_download(serial
->dev
, fw_name
) < 0) {
1185 dev_err(&serial
->dev
->dev
, "failed to load firmware \"%s\"\n",
1190 /* after downloading firmware Renumeration will occur in a
1191 moment and the new device will bind to the real driver */
1193 /* we don't want this device to have a driver assigned to it. */
1197 /* Helper functions used by keyspan_setup_urbs */
1198 static struct usb_endpoint_descriptor
const *find_ep(struct usb_serial
const *serial
,
1201 struct usb_host_interface
*iface_desc
;
1202 struct usb_endpoint_descriptor
*ep
;
1205 iface_desc
= serial
->interface
->cur_altsetting
;
1206 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
1207 ep
= &iface_desc
->endpoint
[i
].desc
;
1208 if (ep
->bEndpointAddress
== endpoint
)
1211 dev_warn(&serial
->interface
->dev
, "found no endpoint descriptor for "
1212 "endpoint %x\n", endpoint
);
1216 static struct urb
*keyspan_setup_urb(struct usb_serial
*serial
, int endpoint
,
1217 int dir
, void *ctx
, char *buf
, int len
,
1218 void (*callback
)(struct urb
*))
1221 struct usb_endpoint_descriptor
const *ep_desc
;
1222 char const *ep_type_name
;
1225 return NULL
; /* endpoint not needed */
1227 dev_dbg(&serial
->interface
->dev
, "%s - alloc for endpoint %d.\n", __func__
, endpoint
);
1228 urb
= usb_alloc_urb(0, GFP_KERNEL
); /* No ISO */
1230 dev_dbg(&serial
->interface
->dev
, "%s - alloc for endpoint %d failed.\n", __func__
, endpoint
);
1234 if (endpoint
== 0) {
1235 /* control EP filled in when used */
1239 ep_desc
= find_ep(serial
, endpoint
);
1241 /* leak the urb, something's wrong and the callers don't care */
1244 if (usb_endpoint_xfer_int(ep_desc
)) {
1245 ep_type_name
= "INT";
1246 usb_fill_int_urb(urb
, serial
->dev
,
1247 usb_sndintpipe(serial
->dev
, endpoint
) | dir
,
1248 buf
, len
, callback
, ctx
,
1249 ep_desc
->bInterval
);
1250 } else if (usb_endpoint_xfer_bulk(ep_desc
)) {
1251 ep_type_name
= "BULK";
1252 usb_fill_bulk_urb(urb
, serial
->dev
,
1253 usb_sndbulkpipe(serial
->dev
, endpoint
) | dir
,
1254 buf
, len
, callback
, ctx
);
1256 dev_warn(&serial
->interface
->dev
,
1257 "unsupported endpoint type %x\n",
1258 usb_endpoint_type(ep_desc
));
1263 dev_dbg(&serial
->interface
->dev
, "%s - using urb %p for %s endpoint %x\n",
1264 __func__
, urb
, ep_type_name
, endpoint
);
1268 static struct callbacks
{
1269 void (*instat_callback
)(struct urb
*);
1270 void (*glocont_callback
)(struct urb
*);
1271 void (*indat_callback
)(struct urb
*);
1272 void (*outdat_callback
)(struct urb
*);
1273 void (*inack_callback
)(struct urb
*);
1274 void (*outcont_callback
)(struct urb
*);
1275 } keyspan_callbacks
[] = {
1277 /* msg_usa26 callbacks */
1278 .instat_callback
= usa26_instat_callback
,
1279 .glocont_callback
= usa26_glocont_callback
,
1280 .indat_callback
= usa26_indat_callback
,
1281 .outdat_callback
= usa2x_outdat_callback
,
1282 .inack_callback
= usa26_inack_callback
,
1283 .outcont_callback
= usa26_outcont_callback
,
1285 /* msg_usa28 callbacks */
1286 .instat_callback
= usa28_instat_callback
,
1287 .glocont_callback
= usa28_glocont_callback
,
1288 .indat_callback
= usa28_indat_callback
,
1289 .outdat_callback
= usa2x_outdat_callback
,
1290 .inack_callback
= usa28_inack_callback
,
1291 .outcont_callback
= usa28_outcont_callback
,
1293 /* msg_usa49 callbacks */
1294 .instat_callback
= usa49_instat_callback
,
1295 .glocont_callback
= usa49_glocont_callback
,
1296 .indat_callback
= usa49_indat_callback
,
1297 .outdat_callback
= usa2x_outdat_callback
,
1298 .inack_callback
= usa49_inack_callback
,
1299 .outcont_callback
= usa49_outcont_callback
,
1301 /* msg_usa90 callbacks */
1302 .instat_callback
= usa90_instat_callback
,
1303 .glocont_callback
= usa28_glocont_callback
,
1304 .indat_callback
= usa90_indat_callback
,
1305 .outdat_callback
= usa2x_outdat_callback
,
1306 .inack_callback
= usa28_inack_callback
,
1307 .outcont_callback
= usa90_outcont_callback
,
1309 /* msg_usa67 callbacks */
1310 .instat_callback
= usa67_instat_callback
,
1311 .glocont_callback
= usa67_glocont_callback
,
1312 .indat_callback
= usa26_indat_callback
,
1313 .outdat_callback
= usa2x_outdat_callback
,
1314 .inack_callback
= usa26_inack_callback
,
1315 .outcont_callback
= usa26_outcont_callback
,
1319 /* Generic setup urbs function that uses
1320 data in device_details */
1321 static void keyspan_setup_urbs(struct usb_serial
*serial
)
1323 struct keyspan_serial_private
*s_priv
;
1324 const struct keyspan_device_details
*d_details
;
1325 struct callbacks
*cback
;
1327 s_priv
= usb_get_serial_data(serial
);
1328 d_details
= s_priv
->device_details
;
1330 /* Setup values for the various callback routines */
1331 cback
= &keyspan_callbacks
[d_details
->msg_format
];
1333 /* Allocate and set up urbs for each one that is in use,
1334 starting with instat endpoints */
1335 s_priv
->instat_urb
= keyspan_setup_urb
1336 (serial
, d_details
->instat_endpoint
, USB_DIR_IN
,
1337 serial
, s_priv
->instat_buf
, INSTAT_BUFLEN
,
1338 cback
->instat_callback
);
1340 s_priv
->indat_urb
= keyspan_setup_urb
1341 (serial
, d_details
->indat_endpoint
, USB_DIR_IN
,
1342 serial
, s_priv
->indat_buf
, INDAT49W_BUFLEN
,
1343 usa49wg_indat_callback
);
1345 s_priv
->glocont_urb
= keyspan_setup_urb
1346 (serial
, d_details
->glocont_endpoint
, USB_DIR_OUT
,
1347 serial
, s_priv
->glocont_buf
, GLOCONT_BUFLEN
,
1348 cback
->glocont_callback
);
1351 /* usa19 function doesn't require prescaler */
1352 static int keyspan_usa19_calc_baud(struct usb_serial_port
*port
,
1353 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1354 u8
*rate_low
, u8
*prescaler
, int portnum
)
1356 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1358 cnt
; /* inverse of divisor (programmed into 8051) */
1360 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1362 /* prevent divide by zero... */
1363 b16
= baud_rate
* 16L;
1365 return KEYSPAN_INVALID_BAUD_RATE
;
1366 /* Any "standard" rate over 57k6 is marginal on the USA-19
1367 as we run out of divisor resolution. */
1368 if (baud_rate
> 57600)
1369 return KEYSPAN_INVALID_BAUD_RATE
;
1371 /* calculate the divisor and the counter (its inverse) */
1372 div
= baudclk
/ b16
;
1374 return KEYSPAN_INVALID_BAUD_RATE
;
1379 return KEYSPAN_INVALID_BAUD_RATE
;
1381 /* return the counter values if non-null */
1383 *rate_low
= (u8
) (cnt
& 0xff);
1385 *rate_hi
= (u8
) ((cnt
>> 8) & 0xff);
1386 if (rate_low
&& rate_hi
)
1387 dev_dbg(&port
->dev
, "%s - %d %02x %02x.\n",
1388 __func__
, baud_rate
, *rate_hi
, *rate_low
);
1389 return KEYSPAN_BAUD_RATE_OK
;
1392 /* usa19hs function doesn't require prescaler */
1393 static int keyspan_usa19hs_calc_baud(struct usb_serial_port
*port
,
1394 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1395 u8
*rate_low
, u8
*prescaler
, int portnum
)
1397 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1400 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1402 /* prevent divide by zero... */
1403 b16
= baud_rate
* 16L;
1405 return KEYSPAN_INVALID_BAUD_RATE
;
1407 /* calculate the divisor */
1408 div
= baudclk
/ b16
;
1410 return KEYSPAN_INVALID_BAUD_RATE
;
1413 return KEYSPAN_INVALID_BAUD_RATE
;
1415 /* return the counter values if non-null */
1417 *rate_low
= (u8
) (div
& 0xff);
1420 *rate_hi
= (u8
) ((div
>> 8) & 0xff);
1422 if (rate_low
&& rate_hi
)
1423 dev_dbg(&port
->dev
, "%s - %d %02x %02x.\n",
1424 __func__
, baud_rate
, *rate_hi
, *rate_low
);
1426 return KEYSPAN_BAUD_RATE_OK
;
1429 static int keyspan_usa19w_calc_baud(struct usb_serial_port
*port
,
1430 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1431 u8
*rate_low
, u8
*prescaler
, int portnum
)
1433 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1434 clk
, /* clock with 13/8 prescaler */
1435 div
, /* divisor using 13/8 prescaler */
1436 res
, /* resulting baud rate using 13/8 prescaler */
1437 diff
, /* error using 13/8 prescaler */
1442 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1444 /* prevent divide by zero */
1445 b16
= baud_rate
* 16L;
1447 return KEYSPAN_INVALID_BAUD_RATE
;
1449 /* Calculate prescaler by trying them all and looking
1452 /* start with largest possible difference */
1453 smallest_diff
= 0xffffffff;
1455 /* 0 is an invalid prescaler, used as a flag */
1458 for (i
= 8; i
<= 0xff; ++i
) {
1459 clk
= (baudclk
* 8) / (u32
) i
;
1466 diff
= (res
> b16
) ? (res
-b16
) : (b16
-res
);
1468 if (diff
< smallest_diff
) {
1470 smallest_diff
= diff
;
1474 if (best_prescaler
== 0)
1475 return KEYSPAN_INVALID_BAUD_RATE
;
1477 clk
= (baudclk
* 8) / (u32
) best_prescaler
;
1480 /* return the divisor and prescaler if non-null */
1482 *rate_low
= (u8
) (div
& 0xff);
1484 *rate_hi
= (u8
) ((div
>> 8) & 0xff);
1486 *prescaler
= best_prescaler
;
1487 /* dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */
1489 return KEYSPAN_BAUD_RATE_OK
;
1492 /* USA-28 supports different maximum baud rates on each port */
1493 static int keyspan_usa28_calc_baud(struct usb_serial_port
*port
,
1494 u32 baud_rate
, u32 baudclk
, u8
*rate_hi
,
1495 u8
*rate_low
, u8
*prescaler
, int portnum
)
1497 u32 b16
, /* baud rate times 16 (actual rate used internally) */
1499 cnt
; /* inverse of divisor (programmed into 8051) */
1501 dev_dbg(&port
->dev
, "%s - %d.\n", __func__
, baud_rate
);
1503 /* prevent divide by zero */
1504 b16
= baud_rate
* 16L;
1506 return KEYSPAN_INVALID_BAUD_RATE
;
1508 /* calculate the divisor and the counter (its inverse) */
1509 div
= KEYSPAN_USA28_BAUDCLK
/ b16
;
1511 return KEYSPAN_INVALID_BAUD_RATE
;
1515 /* check for out of range, based on portnum,
1516 and return result */
1519 return KEYSPAN_INVALID_BAUD_RATE
;
1523 return KEYSPAN_INVALID_BAUD_RATE
;
1525 return KEYSPAN_INVALID_BAUD_RATE
;
1528 /* return the counter values if not NULL
1529 (port 1 will ignore retHi) */
1531 *rate_low
= (u8
) (cnt
& 0xff);
1533 *rate_hi
= (u8
) ((cnt
>> 8) & 0xff);
1534 dev_dbg(&port
->dev
, "%s - %d OK.\n", __func__
, baud_rate
);
1535 return KEYSPAN_BAUD_RATE_OK
;
1538 static int keyspan_usa26_send_setup(struct usb_serial
*serial
,
1539 struct usb_serial_port
*port
,
1542 struct keyspan_usa26_portControlMessage msg
;
1543 struct keyspan_serial_private
*s_priv
;
1544 struct keyspan_port_private
*p_priv
;
1545 const struct keyspan_device_details
*d_details
;
1546 struct urb
*this_urb
;
1547 int device_port
, err
;
1549 dev_dbg(&port
->dev
, "%s reset=%d\n", __func__
, reset_port
);
1551 s_priv
= usb_get_serial_data(serial
);
1552 p_priv
= usb_get_serial_port_data(port
);
1553 d_details
= s_priv
->device_details
;
1554 device_port
= port
->port_number
;
1556 this_urb
= p_priv
->outcont_urb
;
1558 dev_dbg(&port
->dev
, "%s - endpoint %d\n", __func__
, usb_pipeendpoint(this_urb
->pipe
));
1560 /* Make sure we have an urb then send the message */
1561 if (this_urb
== NULL
) {
1562 dev_dbg(&port
->dev
, "%s - oops no urb.\n", __func__
);
1566 /* Save reset port val for resend.
1567 Don't overwrite resend for open/close condition. */
1568 if ((reset_port
+ 1) > p_priv
->resend_cont
)
1569 p_priv
->resend_cont
= reset_port
+ 1;
1570 if (this_urb
->status
== -EINPROGRESS
) {
1571 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1576 memset(&msg
, 0, sizeof(struct keyspan_usa26_portControlMessage
));
1578 /* Only set baud rate if it's changed */
1579 if (p_priv
->old_baud
!= p_priv
->baud
) {
1580 p_priv
->old_baud
= p_priv
->baud
;
1581 msg
.setClocking
= 0xff;
1582 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
1583 &msg
.baudHi
, &msg
.baudLo
, &msg
.prescaler
,
1584 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
1585 dev_dbg(&port
->dev
, "%s - Invalid baud rate %d requested, using 9600.\n",
1586 __func__
, p_priv
->baud
);
1588 msg
.baudHi
= 125; /* Values for 9600 baud */
1591 msg
.setPrescaler
= 0xff;
1594 msg
.lcr
= (p_priv
->cflag
& CSTOPB
) ? STOPBITS_678_2
: STOPBITS_5678_1
;
1595 switch (p_priv
->cflag
& CSIZE
) {
1597 msg
.lcr
|= USA_DATABITS_5
;
1600 msg
.lcr
|= USA_DATABITS_6
;
1603 msg
.lcr
|= USA_DATABITS_7
;
1606 msg
.lcr
|= USA_DATABITS_8
;
1609 if (p_priv
->cflag
& PARENB
) {
1610 /* note USA_PARITY_NONE == 0 */
1611 msg
.lcr
|= (p_priv
->cflag
& PARODD
) ?
1612 USA_PARITY_ODD
: USA_PARITY_EVEN
;
1616 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
1617 msg
.xonFlowControl
= 0;
1618 msg
.setFlowControl
= 0xff;
1619 msg
.forwardingLength
= 16;
1624 if (reset_port
== 1) {
1633 msg
.returnStatus
= 0;
1634 msg
.resetDataToggle
= 0xff;
1638 else if (reset_port
== 2) {
1647 msg
.returnStatus
= 0;
1648 msg
.resetDataToggle
= 0;
1651 /* Sending intermediate configs */
1653 msg
._txOn
= (!p_priv
->break_on
);
1656 msg
.txBreak
= (p_priv
->break_on
);
1661 msg
.returnStatus
= 0;
1662 msg
.resetDataToggle
= 0x0;
1665 /* Do handshaking outputs */
1666 msg
.setTxTriState_setRts
= 0xff;
1667 msg
.txTriState_rts
= p_priv
->rts_state
;
1669 msg
.setHskoa_setDtr
= 0xff;
1670 msg
.hskoa_dtr
= p_priv
->dtr_state
;
1672 p_priv
->resend_cont
= 0;
1673 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
1675 /* send the data out the device on control endpoint */
1676 this_urb
->transfer_buffer_length
= sizeof(msg
);
1678 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
1680 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed (%d)\n", __func__
, err
);
1684 static int keyspan_usa28_send_setup(struct usb_serial
*serial
,
1685 struct usb_serial_port
*port
,
1688 struct keyspan_usa28_portControlMessage msg
;
1689 struct keyspan_serial_private
*s_priv
;
1690 struct keyspan_port_private
*p_priv
;
1691 const struct keyspan_device_details
*d_details
;
1692 struct urb
*this_urb
;
1693 int device_port
, err
;
1695 s_priv
= usb_get_serial_data(serial
);
1696 p_priv
= usb_get_serial_port_data(port
);
1697 d_details
= s_priv
->device_details
;
1698 device_port
= port
->port_number
;
1700 /* only do something if we have a bulk out endpoint */
1701 this_urb
= p_priv
->outcont_urb
;
1702 if (this_urb
== NULL
) {
1703 dev_dbg(&port
->dev
, "%s - oops no urb.\n", __func__
);
1707 /* Save reset port val for resend.
1708 Don't overwrite resend for open/close condition. */
1709 if ((reset_port
+ 1) > p_priv
->resend_cont
)
1710 p_priv
->resend_cont
= reset_port
+ 1;
1711 if (this_urb
->status
== -EINPROGRESS
) {
1712 dev_dbg(&port
->dev
, "%s already writing\n", __func__
);
1717 memset(&msg
, 0, sizeof(struct keyspan_usa28_portControlMessage
));
1719 msg
.setBaudRate
= 1;
1720 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
1721 &msg
.baudHi
, &msg
.baudLo
, NULL
,
1722 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
1723 dev_dbg(&port
->dev
, "%s - Invalid baud rate requested %d.\n",
1724 __func__
, p_priv
->baud
);
1726 msg
.baudHi
= 0xb2; /* Values for 9600 baud */
1729 /* If parity is enabled, we must calculate it ourselves. */
1730 msg
.parity
= 0; /* XXX for now */
1732 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
1733 msg
.xonFlowControl
= 0;
1735 /* Do handshaking outputs, DTR is inverted relative to RTS */
1736 msg
.rts
= p_priv
->rts_state
;
1737 msg
.dtr
= p_priv
->dtr_state
;
1739 msg
.forwardingLength
= 16;
1741 msg
.breakThreshold
= 45;
1745 /*msg.returnStatus = 1;
1746 msg.resetDataToggle = 0xff;*/
1748 if (reset_port
== 1) {
1752 msg
.txForceXoff
= 0;
1758 msg
.returnStatus
= 0;
1759 msg
.resetDataToggle
= 0xff;
1762 else if (reset_port
== 2) {
1766 msg
.txForceXoff
= 0;
1772 msg
.returnStatus
= 0;
1773 msg
.resetDataToggle
= 0;
1775 /* Sending intermediate configs */
1777 msg
._txOn
= (!p_priv
->break_on
);
1780 msg
.txForceXoff
= 0;
1781 msg
.txBreak
= (p_priv
->break_on
);
1786 msg
.returnStatus
= 0;
1787 msg
.resetDataToggle
= 0x0;
1790 p_priv
->resend_cont
= 0;
1791 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
1793 /* send the data out the device on control endpoint */
1794 this_urb
->transfer_buffer_length
= sizeof(msg
);
1796 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
1798 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed\n", __func__
);
1801 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) OK %d bytes\n", __func__
,
1802 this_urb
->transfer_buffer_length
);
1809 static int keyspan_usa49_send_setup(struct usb_serial
*serial
,
1810 struct usb_serial_port
*port
,
1813 struct keyspan_usa49_portControlMessage msg
;
1814 struct usb_ctrlrequest
*dr
= NULL
;
1815 struct keyspan_serial_private
*s_priv
;
1816 struct keyspan_port_private
*p_priv
;
1817 const struct keyspan_device_details
*d_details
;
1818 struct urb
*this_urb
;
1819 int err
, device_port
;
1821 s_priv
= usb_get_serial_data(serial
);
1822 p_priv
= usb_get_serial_port_data(port
);
1823 d_details
= s_priv
->device_details
;
1825 this_urb
= s_priv
->glocont_urb
;
1827 /* Work out which port within the device is being setup */
1828 device_port
= port
->port_number
;
1830 /* Make sure we have an urb then send the message */
1831 if (this_urb
== NULL
) {
1832 dev_dbg(&port
->dev
, "%s - oops no urb for port.\n", __func__
);
1836 dev_dbg(&port
->dev
, "%s - endpoint %d (%d)\n",
1837 __func__
, usb_pipeendpoint(this_urb
->pipe
), device_port
);
1839 /* Save reset port val for resend.
1840 Don't overwrite resend for open/close condition. */
1841 if ((reset_port
+ 1) > p_priv
->resend_cont
)
1842 p_priv
->resend_cont
= reset_port
+ 1;
1844 if (this_urb
->status
== -EINPROGRESS
) {
1845 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
1850 memset(&msg
, 0, sizeof(struct keyspan_usa49_portControlMessage
));
1852 msg
.portNumber
= device_port
;
1854 /* Only set baud rate if it's changed */
1855 if (p_priv
->old_baud
!= p_priv
->baud
) {
1856 p_priv
->old_baud
= p_priv
->baud
;
1857 msg
.setClocking
= 0xff;
1858 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
1859 &msg
.baudHi
, &msg
.baudLo
, &msg
.prescaler
,
1860 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
1861 dev_dbg(&port
->dev
, "%s - Invalid baud rate %d requested, using 9600.\n",
1862 __func__
, p_priv
->baud
);
1864 msg
.baudHi
= 125; /* Values for 9600 baud */
1867 /* msg.setPrescaler = 0xff; */
1870 msg
.lcr
= (p_priv
->cflag
& CSTOPB
) ? STOPBITS_678_2
: STOPBITS_5678_1
;
1871 switch (p_priv
->cflag
& CSIZE
) {
1873 msg
.lcr
|= USA_DATABITS_5
;
1876 msg
.lcr
|= USA_DATABITS_6
;
1879 msg
.lcr
|= USA_DATABITS_7
;
1882 msg
.lcr
|= USA_DATABITS_8
;
1885 if (p_priv
->cflag
& PARENB
) {
1886 /* note USA_PARITY_NONE == 0 */
1887 msg
.lcr
|= (p_priv
->cflag
& PARODD
) ?
1888 USA_PARITY_ODD
: USA_PARITY_EVEN
;
1892 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
1893 msg
.xonFlowControl
= 0;
1894 msg
.setFlowControl
= 0xff;
1896 msg
.forwardingLength
= 16;
1901 if (reset_port
== 1) {
1910 msg
.returnStatus
= 0;
1911 msg
.resetDataToggle
= 0xff;
1913 msg
.disablePort
= 0;
1916 else if (reset_port
== 2) {
1925 msg
.returnStatus
= 0;
1926 msg
.resetDataToggle
= 0;
1928 msg
.disablePort
= 1;
1930 /* Sending intermediate configs */
1932 msg
._txOn
= (!p_priv
->break_on
);
1935 msg
.txBreak
= (p_priv
->break_on
);
1940 msg
.returnStatus
= 0;
1941 msg
.resetDataToggle
= 0x0;
1943 msg
.disablePort
= 0;
1946 /* Do handshaking outputs */
1948 msg
.rts
= p_priv
->rts_state
;
1951 msg
.dtr
= p_priv
->dtr_state
;
1953 p_priv
->resend_cont
= 0;
1955 /* if the device is a 49wg, we send control message on usb
1958 if (d_details
->product_id
== keyspan_usa49wg_product_id
) {
1959 dr
= (void *)(s_priv
->ctrl_buf
);
1960 dr
->bRequestType
= USB_TYPE_VENDOR
| USB_DIR_OUT
;
1961 dr
->bRequest
= 0xB0; /* 49wg control message */;
1964 dr
->wLength
= cpu_to_le16(sizeof(msg
));
1966 memcpy(s_priv
->glocont_buf
, &msg
, sizeof(msg
));
1968 usb_fill_control_urb(this_urb
, serial
->dev
,
1969 usb_sndctrlpipe(serial
->dev
, 0),
1970 (unsigned char *)dr
, s_priv
->glocont_buf
,
1971 sizeof(msg
), usa49_glocont_callback
, serial
);
1974 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
1976 /* send the data out the device on control endpoint */
1977 this_urb
->transfer_buffer_length
= sizeof(msg
);
1979 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
1981 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed (%d)\n", __func__
, err
);
1984 dev_dbg(&port
->dev
, "%s - usb_submit_urb(%d) OK %d bytes (end %d)\n", __func__
,
1985 outcont_urb
, this_urb
->transfer_buffer_length
,
1986 usb_pipeendpoint(this_urb
->pipe
));
1993 static int keyspan_usa90_send_setup(struct usb_serial
*serial
,
1994 struct usb_serial_port
*port
,
1997 struct keyspan_usa90_portControlMessage msg
;
1998 struct keyspan_serial_private
*s_priv
;
1999 struct keyspan_port_private
*p_priv
;
2000 const struct keyspan_device_details
*d_details
;
2001 struct urb
*this_urb
;
2005 s_priv
= usb_get_serial_data(serial
);
2006 p_priv
= usb_get_serial_port_data(port
);
2007 d_details
= s_priv
->device_details
;
2009 /* only do something if we have a bulk out endpoint */
2010 this_urb
= p_priv
->outcont_urb
;
2011 if (this_urb
== NULL
) {
2012 dev_dbg(&port
->dev
, "%s - oops no urb.\n", __func__
);
2016 /* Save reset port val for resend.
2017 Don't overwrite resend for open/close condition. */
2018 if ((reset_port
+ 1) > p_priv
->resend_cont
)
2019 p_priv
->resend_cont
= reset_port
+ 1;
2020 if (this_urb
->status
== -EINPROGRESS
) {
2021 dev_dbg(&port
->dev
, "%s already writing\n", __func__
);
2026 memset(&msg
, 0, sizeof(struct keyspan_usa90_portControlMessage
));
2028 /* Only set baud rate if it's changed */
2029 if (p_priv
->old_baud
!= p_priv
->baud
) {
2030 p_priv
->old_baud
= p_priv
->baud
;
2031 msg
.setClocking
= 0x01;
2032 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
2033 &msg
.baudHi
, &msg
.baudLo
, &prescaler
, 0) == KEYSPAN_INVALID_BAUD_RATE
) {
2034 dev_dbg(&port
->dev
, "%s - Invalid baud rate %d requested, using 9600.\n",
2035 __func__
, p_priv
->baud
);
2036 p_priv
->baud
= 9600;
2037 d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
2038 &msg
.baudHi
, &msg
.baudLo
, &prescaler
, 0);
2044 /* modes must always be correctly specified */
2045 if (p_priv
->baud
> 57600) {
2046 msg
.rxMode
= RXMODE_DMA
;
2047 msg
.txMode
= TXMODE_DMA
;
2049 msg
.rxMode
= RXMODE_BYHAND
;
2050 msg
.txMode
= TXMODE_BYHAND
;
2053 msg
.lcr
= (p_priv
->cflag
& CSTOPB
) ? STOPBITS_678_2
: STOPBITS_5678_1
;
2054 switch (p_priv
->cflag
& CSIZE
) {
2056 msg
.lcr
|= USA_DATABITS_5
;
2059 msg
.lcr
|= USA_DATABITS_6
;
2062 msg
.lcr
|= USA_DATABITS_7
;
2065 msg
.lcr
|= USA_DATABITS_8
;
2068 if (p_priv
->cflag
& PARENB
) {
2069 /* note USA_PARITY_NONE == 0 */
2070 msg
.lcr
|= (p_priv
->cflag
& PARODD
) ?
2071 USA_PARITY_ODD
: USA_PARITY_EVEN
;
2073 if (p_priv
->old_cflag
!= p_priv
->cflag
) {
2074 p_priv
->old_cflag
= p_priv
->cflag
;
2078 if (p_priv
->flow_control
== flow_cts
)
2079 msg
.txFlowControl
= TXFLOW_CTS
;
2080 msg
.setTxFlowControl
= 0x01;
2081 msg
.setRxFlowControl
= 0x01;
2083 msg
.rxForwardingLength
= 16;
2084 msg
.rxForwardingTimeout
= 16;
2085 msg
.txAckSetting
= 0;
2090 if (reset_port
== 1) {
2091 msg
.portEnabled
= 1;
2093 msg
.txBreak
= (p_priv
->break_on
);
2096 else if (reset_port
== 2)
2097 msg
.portEnabled
= 0;
2098 /* Sending intermediate configs */
2100 msg
.portEnabled
= 1;
2101 msg
.txBreak
= (p_priv
->break_on
);
2104 /* Do handshaking outputs */
2106 msg
.rts
= p_priv
->rts_state
;
2109 msg
.dtr
= p_priv
->dtr_state
;
2111 p_priv
->resend_cont
= 0;
2112 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
2114 /* send the data out the device on control endpoint */
2115 this_urb
->transfer_buffer_length
= sizeof(msg
);
2117 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
2119 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed (%d)\n", __func__
, err
);
2123 static int keyspan_usa67_send_setup(struct usb_serial
*serial
,
2124 struct usb_serial_port
*port
,
2127 struct keyspan_usa67_portControlMessage msg
;
2128 struct keyspan_serial_private
*s_priv
;
2129 struct keyspan_port_private
*p_priv
;
2130 const struct keyspan_device_details
*d_details
;
2131 struct urb
*this_urb
;
2132 int err
, device_port
;
2134 s_priv
= usb_get_serial_data(serial
);
2135 p_priv
= usb_get_serial_port_data(port
);
2136 d_details
= s_priv
->device_details
;
2138 this_urb
= s_priv
->glocont_urb
;
2140 /* Work out which port within the device is being setup */
2141 device_port
= port
->port_number
;
2143 /* Make sure we have an urb then send the message */
2144 if (this_urb
== NULL
) {
2145 dev_dbg(&port
->dev
, "%s - oops no urb for port.\n", __func__
);
2149 /* Save reset port val for resend.
2150 Don't overwrite resend for open/close condition. */
2151 if ((reset_port
+ 1) > p_priv
->resend_cont
)
2152 p_priv
->resend_cont
= reset_port
+ 1;
2153 if (this_urb
->status
== -EINPROGRESS
) {
2154 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */
2159 memset(&msg
, 0, sizeof(struct keyspan_usa67_portControlMessage
));
2161 msg
.port
= device_port
;
2163 /* Only set baud rate if it's changed */
2164 if (p_priv
->old_baud
!= p_priv
->baud
) {
2165 p_priv
->old_baud
= p_priv
->baud
;
2166 msg
.setClocking
= 0xff;
2167 if (d_details
->calculate_baud_rate(port
, p_priv
->baud
, d_details
->baudclk
,
2168 &msg
.baudHi
, &msg
.baudLo
, &msg
.prescaler
,
2169 device_port
) == KEYSPAN_INVALID_BAUD_RATE
) {
2170 dev_dbg(&port
->dev
, "%s - Invalid baud rate %d requested, using 9600.\n",
2171 __func__
, p_priv
->baud
);
2173 msg
.baudHi
= 125; /* Values for 9600 baud */
2176 msg
.setPrescaler
= 0xff;
2179 msg
.lcr
= (p_priv
->cflag
& CSTOPB
) ? STOPBITS_678_2
: STOPBITS_5678_1
;
2180 switch (p_priv
->cflag
& CSIZE
) {
2182 msg
.lcr
|= USA_DATABITS_5
;
2185 msg
.lcr
|= USA_DATABITS_6
;
2188 msg
.lcr
|= USA_DATABITS_7
;
2191 msg
.lcr
|= USA_DATABITS_8
;
2194 if (p_priv
->cflag
& PARENB
) {
2195 /* note USA_PARITY_NONE == 0 */
2196 msg
.lcr
|= (p_priv
->cflag
& PARODD
) ?
2197 USA_PARITY_ODD
: USA_PARITY_EVEN
;
2201 msg
.ctsFlowControl
= (p_priv
->flow_control
== flow_cts
);
2202 msg
.xonFlowControl
= 0;
2203 msg
.setFlowControl
= 0xff;
2204 msg
.forwardingLength
= 16;
2208 if (reset_port
== 1) {
2218 msg
.returnStatus
= 0;
2219 msg
.resetDataToggle
= 0xff;
2220 } else if (reset_port
== 2) {
2230 msg
.returnStatus
= 0;
2231 msg
.resetDataToggle
= 0;
2233 /* Sending intermediate configs */
2234 msg
._txOn
= (!p_priv
->break_on
);
2237 msg
.txBreak
= (p_priv
->break_on
);
2242 msg
.returnStatus
= 0;
2243 msg
.resetDataToggle
= 0x0;
2246 /* Do handshaking outputs */
2247 msg
.setTxTriState_setRts
= 0xff;
2248 msg
.txTriState_rts
= p_priv
->rts_state
;
2250 msg
.setHskoa_setDtr
= 0xff;
2251 msg
.hskoa_dtr
= p_priv
->dtr_state
;
2253 p_priv
->resend_cont
= 0;
2255 memcpy(this_urb
->transfer_buffer
, &msg
, sizeof(msg
));
2257 /* send the data out the device on control endpoint */
2258 this_urb
->transfer_buffer_length
= sizeof(msg
);
2260 err
= usb_submit_urb(this_urb
, GFP_ATOMIC
);
2262 dev_dbg(&port
->dev
, "%s - usb_submit_urb(setup) failed (%d)\n", __func__
, err
);
2266 static void keyspan_send_setup(struct usb_serial_port
*port
, int reset_port
)
2268 struct usb_serial
*serial
= port
->serial
;
2269 struct keyspan_serial_private
*s_priv
;
2270 const struct keyspan_device_details
*d_details
;
2272 s_priv
= usb_get_serial_data(serial
);
2273 d_details
= s_priv
->device_details
;
2275 switch (d_details
->msg_format
) {
2277 keyspan_usa26_send_setup(serial
, port
, reset_port
);
2280 keyspan_usa28_send_setup(serial
, port
, reset_port
);
2283 keyspan_usa49_send_setup(serial
, port
, reset_port
);
2286 keyspan_usa90_send_setup(serial
, port
, reset_port
);
2289 keyspan_usa67_send_setup(serial
, port
, reset_port
);
2295 /* Gets called by the "real" driver (ie once firmware is loaded
2296 and renumeration has taken place. */
2297 static int keyspan_startup(struct usb_serial
*serial
)
2300 struct keyspan_serial_private
*s_priv
;
2301 const struct keyspan_device_details
*d_details
;
2303 for (i
= 0; (d_details
= keyspan_devices
[i
]) != NULL
; ++i
)
2304 if (d_details
->product_id
==
2305 le16_to_cpu(serial
->dev
->descriptor
.idProduct
))
2307 if (d_details
== NULL
) {
2308 dev_err(&serial
->dev
->dev
, "%s - unknown product id %x\n",
2309 __func__
, le16_to_cpu(serial
->dev
->descriptor
.idProduct
));
2313 /* Setup private data for serial driver */
2314 s_priv
= kzalloc(sizeof(struct keyspan_serial_private
), GFP_KERNEL
);
2316 dev_dbg(&serial
->dev
->dev
, "%s - kmalloc for keyspan_serial_private failed.\n", __func__
);
2320 s_priv
->instat_buf
= kzalloc(INSTAT_BUFLEN
, GFP_KERNEL
);
2321 if (!s_priv
->instat_buf
)
2322 goto err_instat_buf
;
2324 s_priv
->indat_buf
= kzalloc(INDAT49W_BUFLEN
, GFP_KERNEL
);
2325 if (!s_priv
->indat_buf
)
2328 s_priv
->glocont_buf
= kzalloc(GLOCONT_BUFLEN
, GFP_KERNEL
);
2329 if (!s_priv
->glocont_buf
)
2330 goto err_glocont_buf
;
2332 s_priv
->ctrl_buf
= kzalloc(sizeof(struct usb_ctrlrequest
), GFP_KERNEL
);
2333 if (!s_priv
->ctrl_buf
)
2336 s_priv
->device_details
= d_details
;
2337 usb_set_serial_data(serial
, s_priv
);
2339 keyspan_setup_urbs(serial
);
2341 if (s_priv
->instat_urb
!= NULL
) {
2342 err
= usb_submit_urb(s_priv
->instat_urb
, GFP_KERNEL
);
2344 dev_dbg(&serial
->dev
->dev
, "%s - submit instat urb failed %d\n", __func__
, err
);
2346 if (s_priv
->indat_urb
!= NULL
) {
2347 err
= usb_submit_urb(s_priv
->indat_urb
, GFP_KERNEL
);
2349 dev_dbg(&serial
->dev
->dev
, "%s - submit indat urb failed %d\n", __func__
, err
);
2355 kfree(s_priv
->glocont_buf
);
2357 kfree(s_priv
->indat_buf
);
2359 kfree(s_priv
->instat_buf
);
2366 static void keyspan_disconnect(struct usb_serial
*serial
)
2368 struct keyspan_serial_private
*s_priv
;
2370 s_priv
= usb_get_serial_data(serial
);
2372 stop_urb(s_priv
->instat_urb
);
2373 stop_urb(s_priv
->glocont_urb
);
2374 stop_urb(s_priv
->indat_urb
);
2377 static void keyspan_release(struct usb_serial
*serial
)
2379 struct keyspan_serial_private
*s_priv
;
2381 s_priv
= usb_get_serial_data(serial
);
2383 usb_free_urb(s_priv
->instat_urb
);
2384 usb_free_urb(s_priv
->indat_urb
);
2385 usb_free_urb(s_priv
->glocont_urb
);
2387 kfree(s_priv
->ctrl_buf
);
2388 kfree(s_priv
->glocont_buf
);
2389 kfree(s_priv
->indat_buf
);
2390 kfree(s_priv
->instat_buf
);
2395 static int keyspan_port_probe(struct usb_serial_port
*port
)
2397 struct usb_serial
*serial
= port
->serial
;
2398 struct keyspan_serial_private
*s_priv
;
2399 struct keyspan_port_private
*p_priv
;
2400 const struct keyspan_device_details
*d_details
;
2401 struct callbacks
*cback
;
2406 s_priv
= usb_get_serial_data(serial
);
2407 d_details
= s_priv
->device_details
;
2409 p_priv
= kzalloc(sizeof(*p_priv
), GFP_KERNEL
);
2413 for (i
= 0; i
< ARRAY_SIZE(p_priv
->in_buffer
); ++i
) {
2414 p_priv
->in_buffer
[i
] = kzalloc(IN_BUFLEN
, GFP_KERNEL
);
2415 if (!p_priv
->in_buffer
[i
])
2419 for (i
= 0; i
< ARRAY_SIZE(p_priv
->out_buffer
); ++i
) {
2420 p_priv
->out_buffer
[i
] = kzalloc(OUT_BUFLEN
, GFP_KERNEL
);
2421 if (!p_priv
->out_buffer
[i
])
2422 goto err_out_buffer
;
2425 p_priv
->inack_buffer
= kzalloc(INACK_BUFLEN
, GFP_KERNEL
);
2426 if (!p_priv
->inack_buffer
)
2427 goto err_inack_buffer
;
2429 p_priv
->outcont_buffer
= kzalloc(OUTCONT_BUFLEN
, GFP_KERNEL
);
2430 if (!p_priv
->outcont_buffer
)
2431 goto err_outcont_buffer
;
2433 p_priv
->device_details
= d_details
;
2435 /* Setup values for the various callback routines */
2436 cback
= &keyspan_callbacks
[d_details
->msg_format
];
2438 port_num
= port
->port_number
;
2440 /* Do indat endpoints first, once for each flip */
2441 endp
= d_details
->indat_endpoints
[port_num
];
2442 for (i
= 0; i
<= d_details
->indat_endp_flip
; ++i
, ++endp
) {
2443 p_priv
->in_urbs
[i
] = keyspan_setup_urb(serial
, endp
,
2445 p_priv
->in_buffer
[i
],
2447 cback
->indat_callback
);
2449 /* outdat endpoints also have flip */
2450 endp
= d_details
->outdat_endpoints
[port_num
];
2451 for (i
= 0; i
<= d_details
->outdat_endp_flip
; ++i
, ++endp
) {
2452 p_priv
->out_urbs
[i
] = keyspan_setup_urb(serial
, endp
,
2454 p_priv
->out_buffer
[i
],
2456 cback
->outdat_callback
);
2458 /* inack endpoint */
2459 p_priv
->inack_urb
= keyspan_setup_urb(serial
,
2460 d_details
->inack_endpoints
[port_num
],
2462 p_priv
->inack_buffer
,
2464 cback
->inack_callback
);
2465 /* outcont endpoint */
2466 p_priv
->outcont_urb
= keyspan_setup_urb(serial
,
2467 d_details
->outcont_endpoints
[port_num
],
2469 p_priv
->outcont_buffer
,
2471 cback
->outcont_callback
);
2473 usb_set_serial_port_data(port
, p_priv
);
2478 kfree(p_priv
->inack_buffer
);
2480 for (i
= 0; i
< ARRAY_SIZE(p_priv
->out_buffer
); ++i
)
2481 kfree(p_priv
->out_buffer
[i
]);
2483 for (i
= 0; i
< ARRAY_SIZE(p_priv
->in_buffer
); ++i
)
2484 kfree(p_priv
->in_buffer
[i
]);
2491 static int keyspan_port_remove(struct usb_serial_port
*port
)
2493 struct keyspan_port_private
*p_priv
;
2496 p_priv
= usb_get_serial_port_data(port
);
2498 stop_urb(p_priv
->inack_urb
);
2499 stop_urb(p_priv
->outcont_urb
);
2500 for (i
= 0; i
< 2; i
++) {
2501 stop_urb(p_priv
->in_urbs
[i
]);
2502 stop_urb(p_priv
->out_urbs
[i
]);
2505 usb_free_urb(p_priv
->inack_urb
);
2506 usb_free_urb(p_priv
->outcont_urb
);
2507 for (i
= 0; i
< 2; i
++) {
2508 usb_free_urb(p_priv
->in_urbs
[i
]);
2509 usb_free_urb(p_priv
->out_urbs
[i
]);
2512 kfree(p_priv
->outcont_buffer
);
2513 kfree(p_priv
->inack_buffer
);
2514 for (i
= 0; i
< ARRAY_SIZE(p_priv
->out_buffer
); ++i
)
2515 kfree(p_priv
->out_buffer
[i
]);
2516 for (i
= 0; i
< ARRAY_SIZE(p_priv
->in_buffer
); ++i
)
2517 kfree(p_priv
->in_buffer
[i
]);
2524 MODULE_AUTHOR(DRIVER_AUTHOR
);
2525 MODULE_DESCRIPTION(DRIVER_DESC
);
2526 MODULE_LICENSE("GPL");
2528 MODULE_FIRMWARE("keyspan/usa28.fw");
2529 MODULE_FIRMWARE("keyspan/usa28x.fw");
2530 MODULE_FIRMWARE("keyspan/usa28xa.fw");
2531 MODULE_FIRMWARE("keyspan/usa28xb.fw");
2532 MODULE_FIRMWARE("keyspan/usa19.fw");
2533 MODULE_FIRMWARE("keyspan/usa19qi.fw");
2534 MODULE_FIRMWARE("keyspan/mpr.fw");
2535 MODULE_FIRMWARE("keyspan/usa19qw.fw");
2536 MODULE_FIRMWARE("keyspan/usa18x.fw");
2537 MODULE_FIRMWARE("keyspan/usa19w.fw");
2538 MODULE_FIRMWARE("keyspan/usa49w.fw");
2539 MODULE_FIRMWARE("keyspan/usa49wlc.fw");