2 * USB Keyspan PDA / Xircom / Entregra Converter driver
4 * Copyright (C) 1999 - 2001 Greg Kroah-Hartman <greg@kroah.com>
5 * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
6 * Copyright (C) 2000 Al Borchers <borchers@steinerpoint.com>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * See Documentation/usb/usb-serial.txt for more information on using this
18 #include <linux/kernel.h>
19 #include <linux/errno.h>
20 #include <linux/init.h>
21 #include <linux/slab.h>
22 #include <linux/tty.h>
23 #include <linux/tty_driver.h>
24 #include <linux/tty_flip.h>
25 #include <linux/module.h>
26 #include <linux/spinlock.h>
27 #include <linux/workqueue.h>
28 #include <linux/uaccess.h>
29 #include <linux/usb.h>
30 #include <linux/usb/serial.h>
31 #include <linux/usb/ezusb.h>
33 /* make a simple define to handle if we are compiling keyspan_pda or xircom support */
34 #if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE)
39 #if defined(CONFIG_USB_SERIAL_XIRCOM) || defined(CONFIG_USB_SERIAL_XIRCOM_MODULE)
45 #define DRIVER_AUTHOR "Brian Warner <warner@lothar.com>"
46 #define DRIVER_DESC "USB Keyspan PDA Converter driver"
48 struct keyspan_pda_private
{
51 struct work_struct wakeup_work
;
52 struct work_struct unthrottle_work
;
53 struct usb_serial
*serial
;
54 struct usb_serial_port
*port
;
58 #define KEYSPAN_VENDOR_ID 0x06cd
59 #define KEYSPAN_PDA_FAKE_ID 0x0103
60 #define KEYSPAN_PDA_ID 0x0104 /* no clue */
62 /* For Xircom PGSDB9 and older Entregra version of the same device */
63 #define XIRCOM_VENDOR_ID 0x085a
64 #define XIRCOM_FAKE_ID 0x8027
65 #define ENTREGRA_VENDOR_ID 0x1645
66 #define ENTREGRA_FAKE_ID 0x8093
68 static const struct usb_device_id id_table_combined
[] = {
70 { USB_DEVICE(KEYSPAN_VENDOR_ID
, KEYSPAN_PDA_FAKE_ID
) },
73 { USB_DEVICE(XIRCOM_VENDOR_ID
, XIRCOM_FAKE_ID
) },
74 { USB_DEVICE(ENTREGRA_VENDOR_ID
, ENTREGRA_FAKE_ID
) },
76 { USB_DEVICE(KEYSPAN_VENDOR_ID
, KEYSPAN_PDA_ID
) },
77 { } /* Terminating entry */
80 MODULE_DEVICE_TABLE(usb
, id_table_combined
);
82 static const struct usb_device_id id_table_std
[] = {
83 { USB_DEVICE(KEYSPAN_VENDOR_ID
, KEYSPAN_PDA_ID
) },
84 { } /* Terminating entry */
88 static const struct usb_device_id id_table_fake
[] = {
89 { USB_DEVICE(KEYSPAN_VENDOR_ID
, KEYSPAN_PDA_FAKE_ID
) },
90 { } /* Terminating entry */
95 static const struct usb_device_id id_table_fake_xircom
[] = {
96 { USB_DEVICE(XIRCOM_VENDOR_ID
, XIRCOM_FAKE_ID
) },
97 { USB_DEVICE(ENTREGRA_VENDOR_ID
, ENTREGRA_FAKE_ID
) },
102 static void keyspan_pda_wakeup_write(struct work_struct
*work
)
104 struct keyspan_pda_private
*priv
=
105 container_of(work
, struct keyspan_pda_private
, wakeup_work
);
106 struct usb_serial_port
*port
= priv
->port
;
108 tty_port_tty_wakeup(&port
->port
);
111 static void keyspan_pda_request_unthrottle(struct work_struct
*work
)
113 struct keyspan_pda_private
*priv
=
114 container_of(work
, struct keyspan_pda_private
, unthrottle_work
);
115 struct usb_serial
*serial
= priv
->serial
;
118 /* ask the device to tell us when the tx buffer becomes
119 sufficiently empty */
120 result
= usb_control_msg(serial
->dev
,
121 usb_sndctrlpipe(serial
->dev
, 0),
122 7, /* request_unthrottle */
123 USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
125 16, /* value: threshold */
131 dev_dbg(&serial
->dev
->dev
, "%s - error %d from usb_control_msg\n",
136 static void keyspan_pda_rx_interrupt(struct urb
*urb
)
138 struct usb_serial_port
*port
= urb
->context
;
139 unsigned char *data
= urb
->transfer_buffer
;
141 int status
= urb
->status
;
142 struct keyspan_pda_private
*priv
;
143 priv
= usb_get_serial_port_data(port
);
152 /* this urb is terminated, clean up */
153 dev_dbg(&urb
->dev
->dev
, "%s - urb shutting down with status: %d\n", __func__
, status
);
156 dev_dbg(&urb
->dev
->dev
, "%s - nonzero urb status received: %d\n", __func__
, status
);
160 /* see if the message is data or a status interrupt */
163 /* rest of message is rx data */
164 if (urb
->actual_length
) {
165 tty_insert_flip_string(&port
->port
, data
+ 1,
166 urb
->actual_length
- 1);
167 tty_flip_buffer_push(&port
->port
);
171 /* status interrupt */
172 dev_dbg(&port
->dev
, "rx int, d1=%d, d2=%d\n", data
[1], data
[2]);
174 case 1: /* modemline change */
176 case 2: /* tx unthrottle interrupt */
177 priv
->tx_throttled
= 0;
178 /* queue up a wakeup at scheduler time */
179 schedule_work(&priv
->wakeup_work
);
190 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
193 "%s - usb_submit_urb failed with result %d",
198 static void keyspan_pda_rx_throttle(struct tty_struct
*tty
)
200 /* stop receiving characters. We just turn off the URB request, and
201 let chars pile up in the device. If we're doing hardware
202 flowcontrol, the device will signal the other end when its buffer
203 fills up. If we're doing XON/XOFF, this would be a good time to
204 send an XOFF, although it might make sense to foist that off
205 upon the device too. */
206 struct usb_serial_port
*port
= tty
->driver_data
;
208 usb_kill_urb(port
->interrupt_in_urb
);
212 static void keyspan_pda_rx_unthrottle(struct tty_struct
*tty
)
214 struct usb_serial_port
*port
= tty
->driver_data
;
215 /* just restart the receive interrupt URB */
217 if (usb_submit_urb(port
->interrupt_in_urb
, GFP_KERNEL
))
218 dev_dbg(&port
->dev
, "usb_submit_urb(read urb) failed\n");
222 static speed_t
keyspan_pda_setbaud(struct usb_serial
*serial
, speed_t baud
)
259 bindex
= 5; /* Default to 9600 */
263 /* rather than figure out how to sleep while waiting for this
264 to complete, I just use the "legacy" API. */
265 rc
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
268 | USB_RECIP_INTERFACE
269 | USB_DIR_OUT
, /* type */
281 static void keyspan_pda_break_ctl(struct tty_struct
*tty
, int break_state
)
283 struct usb_serial_port
*port
= tty
->driver_data
;
284 struct usb_serial
*serial
= port
->serial
;
288 if (break_state
== -1)
289 value
= 1; /* start break */
291 value
= 0; /* clear break */
292 result
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
294 USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
| USB_DIR_OUT
,
295 value
, 0, NULL
, 0, 2000);
297 dev_dbg(&port
->dev
, "%s - error %d from usb_control_msg\n",
299 /* there is something funky about this.. the TCSBRK that 'cu' performs
300 ought to translate into a break_ctl(-1),break_ctl(0) pair HZ/4
301 seconds apart, but it feels like the break sent isn't as long as it
306 static void keyspan_pda_set_termios(struct tty_struct
*tty
,
307 struct usb_serial_port
*port
, struct ktermios
*old_termios
)
309 struct usb_serial
*serial
= port
->serial
;
312 /* cflag specifies lots of stuff: number of stop bits, parity, number
313 of data bits, baud. What can the device actually handle?:
314 CSTOPB (1 stop bit or 2)
317 There is minimal hw support for parity (a PSW bit seems to hold the
318 parity of whatever is in the accumulator). The UART either deals
319 with 10 bits (start, 8 data, stop) or 11 bits (start, 8 data,
320 1 special, stop). So, with firmware changes, we could do:
322 8N2: 11 bit, extra bit always (mark?)
323 8[EOMS]1: 11 bit, extra bit is parity
324 7[EOMS]1: 10 bit, b0/b7 is parity
325 7[EOMS]2: 11 bit, b0/b7 is parity, extra bit always (mark?)
327 HW flow control is dictated by the tty->termios.c_cflags & CRTSCTS
330 For now, just do baud. */
332 speed
= tty_get_baud_rate(tty
);
333 speed
= keyspan_pda_setbaud(serial
, speed
);
336 dev_dbg(&port
->dev
, "can't handle requested baud rate\n");
337 /* It hasn't changed so.. */
338 speed
= tty_termios_baud_rate(old_termios
);
340 /* Only speed can change so copy the old h/w parameters
341 then encode the new speed */
342 tty_termios_copy_hw(&tty
->termios
, old_termios
);
343 tty_encode_baud_rate(tty
, speed
, speed
);
347 /* modem control pins: DTR and RTS are outputs and can be controlled.
348 DCD, RI, DSR, CTS are inputs and can be read. All outputs can also be
349 read. The byte passed is: DTR(b7) DCD RI DSR CTS RTS(b2) unused unused */
351 static int keyspan_pda_get_modem_info(struct usb_serial
*serial
,
352 unsigned char *value
)
357 data
= kmalloc(1, GFP_KERNEL
);
361 rc
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
363 USB_TYPE_VENDOR
|USB_RECIP_INTERFACE
|USB_DIR_IN
,
364 0, 0, data
, 1, 2000);
373 static int keyspan_pda_set_modem_info(struct usb_serial
*serial
,
377 rc
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
379 USB_TYPE_VENDOR
|USB_RECIP_INTERFACE
|USB_DIR_OUT
,
380 value
, 0, NULL
, 0, 2000);
384 static int keyspan_pda_tiocmget(struct tty_struct
*tty
)
386 struct usb_serial_port
*port
= tty
->driver_data
;
387 struct usb_serial
*serial
= port
->serial
;
389 unsigned char status
;
392 rc
= keyspan_pda_get_modem_info(serial
, &status
);
396 ((status
& (1<<7)) ? TIOCM_DTR
: 0) |
397 ((status
& (1<<6)) ? TIOCM_CAR
: 0) |
398 ((status
& (1<<5)) ? TIOCM_RNG
: 0) |
399 ((status
& (1<<4)) ? TIOCM_DSR
: 0) |
400 ((status
& (1<<3)) ? TIOCM_CTS
: 0) |
401 ((status
& (1<<2)) ? TIOCM_RTS
: 0);
405 static int keyspan_pda_tiocmset(struct tty_struct
*tty
,
406 unsigned int set
, unsigned int clear
)
408 struct usb_serial_port
*port
= tty
->driver_data
;
409 struct usb_serial
*serial
= port
->serial
;
411 unsigned char status
;
413 rc
= keyspan_pda_get_modem_info(serial
, &status
);
422 if (clear
& TIOCM_RTS
)
424 if (clear
& TIOCM_DTR
)
426 rc
= keyspan_pda_set_modem_info(serial
, status
);
430 static int keyspan_pda_write(struct tty_struct
*tty
,
431 struct usb_serial_port
*port
, const unsigned char *buf
, int count
)
433 struct usb_serial
*serial
= port
->serial
;
434 int request_unthrottle
= 0;
436 struct keyspan_pda_private
*priv
;
438 priv
= usb_get_serial_port_data(port
);
439 /* guess how much room is left in the device's ring buffer, and if we
440 want to send more than that, check first, updating our notion of
441 what is left. If our write will result in no room left, ask the
442 device to give us an interrupt when the room available rises above
443 a threshold, and hold off all writers (eventually, those using
444 select() or poll() too) until we receive that unthrottle interrupt.
445 Block if we can't write anything at all, otherwise write as much as
448 dev_dbg(&port
->dev
, "write request of 0 bytes\n");
452 /* we might block because of:
453 the TX urb is in-flight (wait until it completes)
454 the device is full (wait until it says there is room)
456 spin_lock_bh(&port
->lock
);
457 if (!test_bit(0, &port
->write_urbs_free
) || priv
->tx_throttled
) {
458 spin_unlock_bh(&port
->lock
);
461 clear_bit(0, &port
->write_urbs_free
);
462 spin_unlock_bh(&port
->lock
);
464 /* At this point the URB is in our control, nobody else can submit it
465 again (the only sudden transition was the one from EINPROGRESS to
466 finished). Also, the tx process is not throttled. So we are
469 count
= (count
> port
->bulk_out_size
) ? port
->bulk_out_size
: count
;
471 /* Check if we might overrun the Tx buffer. If so, ask the
472 device how much room it really has. This is done only on
473 scheduler time, since usb_control_msg() sleeps. */
474 if (count
> priv
->tx_room
&& !in_interrupt()) {
477 room
= kmalloc(1, GFP_KERNEL
);
483 rc
= usb_control_msg(serial
->dev
,
484 usb_rcvctrlpipe(serial
->dev
, 0),
486 USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
488 0, /* value: 0 means "remaining room" */
494 dev_dbg(&port
->dev
, "roomquery says %d\n", *room
);
495 priv
->tx_room
= *room
;
499 dev_dbg(&port
->dev
, "roomquery failed\n");
503 dev_dbg(&port
->dev
, "roomquery returned 0 bytes\n");
504 rc
= -EIO
; /* device didn't return any data */
508 if (count
> priv
->tx_room
) {
509 /* we're about to completely fill the Tx buffer, so
510 we'll be throttled afterwards. */
511 count
= priv
->tx_room
;
512 request_unthrottle
= 1;
516 /* now transfer data */
517 memcpy(port
->write_urb
->transfer_buffer
, buf
, count
);
518 /* send the data out the bulk port */
519 port
->write_urb
->transfer_buffer_length
= count
;
521 priv
->tx_room
-= count
;
523 rc
= usb_submit_urb(port
->write_urb
, GFP_ATOMIC
);
525 dev_dbg(&port
->dev
, "usb_submit_urb(write bulk) failed\n");
529 /* There wasn't any room left, so we are throttled until
530 the buffer empties a bit */
531 request_unthrottle
= 1;
534 if (request_unthrottle
) {
535 priv
->tx_throttled
= 1; /* block writers */
536 schedule_work(&priv
->unthrottle_work
);
542 set_bit(0, &port
->write_urbs_free
);
547 static void keyspan_pda_write_bulk_callback(struct urb
*urb
)
549 struct usb_serial_port
*port
= urb
->context
;
550 struct keyspan_pda_private
*priv
;
552 set_bit(0, &port
->write_urbs_free
);
553 priv
= usb_get_serial_port_data(port
);
555 /* queue up a wakeup at scheduler time */
556 schedule_work(&priv
->wakeup_work
);
560 static int keyspan_pda_write_room(struct tty_struct
*tty
)
562 struct usb_serial_port
*port
= tty
->driver_data
;
563 struct keyspan_pda_private
*priv
;
564 priv
= usb_get_serial_port_data(port
);
565 /* used by n_tty.c for processing of tabs and such. Giving it our
566 conservative guess is probably good enough, but needs testing by
567 running a console through the device. */
568 return priv
->tx_room
;
572 static int keyspan_pda_chars_in_buffer(struct tty_struct
*tty
)
574 struct usb_serial_port
*port
= tty
->driver_data
;
575 struct keyspan_pda_private
*priv
;
579 priv
= usb_get_serial_port_data(port
);
581 /* when throttled, return at least WAKEUP_CHARS to tell select() (via
582 n_tty.c:normal_poll() ) that we're not writeable. */
584 spin_lock_irqsave(&port
->lock
, flags
);
585 if (!test_bit(0, &port
->write_urbs_free
) || priv
->tx_throttled
)
587 spin_unlock_irqrestore(&port
->lock
, flags
);
592 static void keyspan_pda_dtr_rts(struct usb_serial_port
*port
, int on
)
594 struct usb_serial
*serial
= port
->serial
;
597 keyspan_pda_set_modem_info(serial
, (1 << 7) | (1 << 2));
599 keyspan_pda_set_modem_info(serial
, 0);
603 static int keyspan_pda_open(struct tty_struct
*tty
,
604 struct usb_serial_port
*port
)
606 struct usb_serial
*serial
= port
->serial
;
609 struct keyspan_pda_private
*priv
;
611 /* find out how much room is in the Tx ring */
612 room
= kmalloc(1, GFP_KERNEL
);
616 rc
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
618 USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
626 dev_dbg(&port
->dev
, "%s - roomquery failed\n", __func__
);
630 dev_dbg(&port
->dev
, "%s - roomquery returned 0 bytes\n", __func__
);
634 priv
= usb_get_serial_port_data(port
);
635 priv
->tx_room
= *room
;
636 priv
->tx_throttled
= *room
? 0 : 1;
638 /*Start reading from the device*/
639 rc
= usb_submit_urb(port
->interrupt_in_urb
, GFP_KERNEL
);
641 dev_dbg(&port
->dev
, "%s - usb_submit_urb(read int) failed\n", __func__
);
648 static void keyspan_pda_close(struct usb_serial_port
*port
)
650 usb_kill_urb(port
->write_urb
);
651 usb_kill_urb(port
->interrupt_in_urb
);
655 /* download the firmware to a "fake" device (pre-renumeration) */
656 static int keyspan_pda_fake_startup(struct usb_serial
*serial
)
661 /* download the firmware here ... */
662 response
= ezusb_fx1_set_reset(serial
->dev
, 1);
666 else if (le16_to_cpu(serial
->dev
->descriptor
.idVendor
) == KEYSPAN_VENDOR_ID
)
667 fw_name
= "keyspan_pda/keyspan_pda.fw";
670 else if ((le16_to_cpu(serial
->dev
->descriptor
.idVendor
) == XIRCOM_VENDOR_ID
) ||
671 (le16_to_cpu(serial
->dev
->descriptor
.idVendor
) == ENTREGRA_VENDOR_ID
))
672 fw_name
= "keyspan_pda/xircom_pgs.fw";
675 dev_err(&serial
->dev
->dev
, "%s: unknown vendor, aborting.\n",
680 if (ezusb_fx1_ihex_firmware_download(serial
->dev
, fw_name
) < 0) {
681 dev_err(&serial
->dev
->dev
, "failed to load firmware \"%s\"\n",
686 /* after downloading firmware Renumeration will occur in a
687 moment and the new device will bind to the real driver */
689 /* we want this device to fail to have a driver assigned to it. */
694 MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
697 MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
700 static int keyspan_pda_port_probe(struct usb_serial_port
*port
)
703 struct keyspan_pda_private
*priv
;
705 priv
= kmalloc(sizeof(struct keyspan_pda_private
), GFP_KERNEL
);
709 INIT_WORK(&priv
->wakeup_work
, keyspan_pda_wakeup_write
);
710 INIT_WORK(&priv
->unthrottle_work
, keyspan_pda_request_unthrottle
);
711 priv
->serial
= port
->serial
;
714 usb_set_serial_port_data(port
, priv
);
719 static int keyspan_pda_port_remove(struct usb_serial_port
*port
)
721 struct keyspan_pda_private
*priv
;
723 priv
= usb_get_serial_port_data(port
);
730 static struct usb_serial_driver keyspan_pda_fake_device
= {
732 .owner
= THIS_MODULE
,
733 .name
= "keyspan_pda_pre",
735 .description
= "Keyspan PDA - (prerenumeration)",
736 .id_table
= id_table_fake
,
738 .attach
= keyspan_pda_fake_startup
,
743 static struct usb_serial_driver xircom_pgs_fake_device
= {
745 .owner
= THIS_MODULE
,
746 .name
= "xircom_no_firm",
748 .description
= "Xircom / Entregra PGS - (prerenumeration)",
749 .id_table
= id_table_fake_xircom
,
751 .attach
= keyspan_pda_fake_startup
,
755 static struct usb_serial_driver keyspan_pda_device
= {
757 .owner
= THIS_MODULE
,
758 .name
= "keyspan_pda",
760 .description
= "Keyspan PDA",
761 .id_table
= id_table_std
,
763 .dtr_rts
= keyspan_pda_dtr_rts
,
764 .open
= keyspan_pda_open
,
765 .close
= keyspan_pda_close
,
766 .write
= keyspan_pda_write
,
767 .write_room
= keyspan_pda_write_room
,
768 .write_bulk_callback
= keyspan_pda_write_bulk_callback
,
769 .read_int_callback
= keyspan_pda_rx_interrupt
,
770 .chars_in_buffer
= keyspan_pda_chars_in_buffer
,
771 .throttle
= keyspan_pda_rx_throttle
,
772 .unthrottle
= keyspan_pda_rx_unthrottle
,
773 .set_termios
= keyspan_pda_set_termios
,
774 .break_ctl
= keyspan_pda_break_ctl
,
775 .tiocmget
= keyspan_pda_tiocmget
,
776 .tiocmset
= keyspan_pda_tiocmset
,
777 .port_probe
= keyspan_pda_port_probe
,
778 .port_remove
= keyspan_pda_port_remove
,
781 static struct usb_serial_driver
* const serial_drivers
[] = {
784 &keyspan_pda_fake_device
,
787 &xircom_pgs_fake_device
,
792 module_usb_serial_driver(serial_drivers
, id_table_combined
);
794 MODULE_AUTHOR(DRIVER_AUTHOR
);
795 MODULE_DESCRIPTION(DRIVER_DESC
);
796 MODULE_LICENSE("GPL");