2 * Prolific PL2303 USB to serial adaptor driver
4 * Copyright (C) 2001-2007 Greg Kroah-Hartman (greg@kroah.com)
5 * Copyright (C) 2003 IBM Corp.
7 * Original driver for 2.2.x by anonymous
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License version
11 * 2 as published by the Free Software Foundation.
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/serial.h>
26 #include <linux/module.h>
27 #include <linux/moduleparam.h>
28 #include <linux/spinlock.h>
29 #include <linux/uaccess.h>
30 #include <linux/usb.h>
31 #include <linux/usb/serial.h>
37 #define DRIVER_DESC "Prolific PL2303 USB to serial adaptor driver"
41 #define PL2303_CLOSING_WAIT (30*HZ)
43 #define PL2303_BUF_SIZE 1024
44 #define PL2303_TMP_BUF_SIZE 1024
47 unsigned int buf_size;
53 static struct usb_device_id id_table [] = {
54 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) },
55 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
56 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
57 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
58 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
59 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
60 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
61 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
62 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
63 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
64 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
65 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
66 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
67 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
68 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
69 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
70 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
71 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
72 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
73 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
74 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
75 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
76 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
77 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
78 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
79 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
81 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
82 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
83 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
84 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
85 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
86 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
87 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
88 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
89 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
90 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
91 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
92 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
93 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
94 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
95 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
96 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
97 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
98 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
99 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
100 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
101 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
102 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
103 { } /* Terminating entry */
106 MODULE_DEVICE_TABLE(usb, id_table);
108 static struct usb_driver pl2303_driver = {
110 .probe = usb_serial_probe,
111 .disconnect = usb_serial_disconnect,
112 .id_table = id_table,
113 .suspend = usb_serial_suspend,
114 .resume = usb_serial_resume,
116 .supports_autosuspend = 1,
119 #define SET_LINE_REQUEST_TYPE 0x21
120 #define SET_LINE_REQUEST 0x20
122 #define SET_CONTROL_REQUEST_TYPE 0x21
123 #define SET_CONTROL_REQUEST 0x22
124 #define CONTROL_DTR 0x01
125 #define CONTROL_RTS 0x02
127 #define BREAK_REQUEST_TYPE 0x21
128 #define BREAK_REQUEST 0x23
129 #define BREAK_ON 0xffff
130 #define BREAK_OFF 0x0000
132 #define GET_LINE_REQUEST_TYPE 0xa1
133 #define GET_LINE_REQUEST 0x21
135 #define VENDOR_WRITE_REQUEST_TYPE 0x40
136 #define VENDOR_WRITE_REQUEST 0x01
138 #define VENDOR_READ_REQUEST_TYPE 0xc0
139 #define VENDOR_READ_REQUEST 0x01
141 #define UART_STATE 0x08
142 #define UART_STATE_TRANSIENT_MASK 0x74
143 #define UART_DCD 0x01
144 #define UART_DSR 0x02
145 #define UART_BREAK_ERROR 0x04
146 #define UART_RING 0x08
147 #define UART_FRAME_ERROR 0x10
148 #define UART_PARITY_ERROR 0x20
149 #define UART_OVERRUN_ERROR 0x40
150 #define UART_CTS 0x80
154 type_0, /* don't know the difference between type 0 and */
155 type_1, /* type 1, until someone from prolific tells us... */
156 HX, /* HX version of the pl2303 chip */
159 struct pl2303_private {
161 struct pl2303_buf *buf;
162 int write_urb_in_use;
163 wait_queue_head_t delta_msr_wait;
166 enum pl2303_type type;
172 * Allocate a circular buffer and all associated memory.
174 static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
176 struct pl2303_buf *pb;
181 pb = kmalloc(sizeof(struct pl2303_buf), GFP_KERNEL);
185 pb->buf_buf = kmalloc(size, GFP_KERNEL);
186 if (pb->buf_buf == NULL) {
192 pb->buf_get = pb->buf_put = pb->buf_buf;
200 * Free the buffer and all associated memory.
202 static void pl2303_buf_free(struct pl2303_buf *pb)
213 * Clear out all data in the circular buffer.
215 static void pl2303_buf_clear(struct pl2303_buf *pb)
218 pb->buf_get = pb->buf_put;
219 /* equivalent to a get of all data available */
223 * pl2303_buf_data_avail
225 * Return the number of bytes of data available in the circular
228 static unsigned int pl2303_buf_data_avail(struct pl2303_buf *pb)
233 return (pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size;
237 * pl2303_buf_space_avail
239 * Return the number of bytes of space available in the circular
242 static unsigned int pl2303_buf_space_avail(struct pl2303_buf *pb)
247 return (pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size;
253 * Copy data data from a user buffer and put it into the circular buffer.
254 * Restrict to the amount of space available.
256 * Return the number of bytes copied.
258 static unsigned int pl2303_buf_put(struct pl2303_buf *pb, const char *buf,
266 len = pl2303_buf_space_avail(pb);
273 len = pb->buf_buf + pb->buf_size - pb->buf_put;
275 memcpy(pb->buf_put, buf, len);
276 memcpy(pb->buf_buf, buf+len, count - len);
277 pb->buf_put = pb->buf_buf + count - len;
279 memcpy(pb->buf_put, buf, count);
281 pb->buf_put += count;
282 else /* count == len */
283 pb->buf_put = pb->buf_buf;
292 * Get data from the circular buffer and copy to the given buffer.
293 * Restrict to the amount of data available.
295 * Return the number of bytes copied.
297 static unsigned int pl2303_buf_get(struct pl2303_buf *pb, char *buf,
305 len = pl2303_buf_data_avail(pb);
312 len = pb->buf_buf + pb->buf_size - pb->buf_get;
314 memcpy(buf, pb->buf_get, len);
315 memcpy(buf+len, pb->buf_buf, count - len);
316 pb->buf_get = pb->buf_buf + count - len;
318 memcpy(buf, pb->buf_get, count);
320 pb->buf_get += count;
321 else /* count == len */
322 pb->buf_get = pb->buf_buf;
328 static int pl2303_vendor_read(__u16 value, __u16 index,
329 struct usb_serial *serial, unsigned char *buf)
331 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
332 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
333 value, index, buf, 1, 100);
334 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
335 VENDOR_READ_REQUEST, value, index, res, buf[0]);
339 static int pl2303_vendor_write(__u16 value, __u16 index,
340 struct usb_serial *serial)
342 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
343 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
344 value, index, NULL, 0, 100);
345 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
346 VENDOR_WRITE_REQUEST, value, index, res);
350 static int pl2303_startup(struct usb_serial *serial)
352 struct pl2303_private *priv;
353 enum pl2303_type type = type_0;
357 buf = kmalloc(10, GFP_KERNEL);
361 if (serial->dev->descriptor.bDeviceClass == 0x02)
363 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
365 else if (serial->dev->descriptor.bDeviceClass == 0x00)
367 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
369 dbg("device type: %d", type);
371 for (i = 0; i < serial->num_ports; ++i) {
372 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
375 spin_lock_init(&priv->lock);
376 priv->buf = pl2303_buf_alloc(PL2303_BUF_SIZE);
377 if (priv->buf == NULL) {
381 init_waitqueue_head(&priv->delta_msr_wait);
383 usb_set_serial_port_data(serial->port[i], priv);
386 pl2303_vendor_read(0x8484, 0, serial, buf);
387 pl2303_vendor_write(0x0404, 0, serial);
388 pl2303_vendor_read(0x8484, 0, serial, buf);
389 pl2303_vendor_read(0x8383, 0, serial, buf);
390 pl2303_vendor_read(0x8484, 0, serial, buf);
391 pl2303_vendor_write(0x0404, 1, serial);
392 pl2303_vendor_read(0x8484, 0, serial, buf);
393 pl2303_vendor_read(0x8383, 0, serial, buf);
394 pl2303_vendor_write(0, 1, serial);
395 pl2303_vendor_write(1, 0, serial);
397 pl2303_vendor_write(2, 0x44, serial);
399 pl2303_vendor_write(2, 0x24, serial);
406 for (--i; i >= 0; --i) {
407 priv = usb_get_serial_port_data(serial->port[i]);
408 pl2303_buf_free(priv->buf);
410 usb_set_serial_port_data(serial->port[i], NULL);
415 static int set_control_lines(struct usb_device *dev, u8 value)
419 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
420 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
421 value, 0, NULL, 0, 100);
422 dbg("%s - value = %d, retval = %d", __func__, value, retval);
426 static void pl2303_send(struct usb_serial_port *port)
429 struct pl2303_private *priv = usb_get_serial_port_data(port);
432 dbg("%s - port %d", __func__, port->number);
434 spin_lock_irqsave(&priv->lock, flags);
436 if (priv->write_urb_in_use) {
437 spin_unlock_irqrestore(&priv->lock, flags);
441 count = pl2303_buf_get(priv->buf, port->write_urb->transfer_buffer,
442 port->bulk_out_size);
445 spin_unlock_irqrestore(&priv->lock, flags);
449 priv->write_urb_in_use = 1;
451 spin_unlock_irqrestore(&priv->lock, flags);
453 usb_serial_debug_data(debug, &port->dev, __func__, count,
454 port->write_urb->transfer_buffer);
456 port->write_urb->transfer_buffer_length = count;
457 port->write_urb->dev = port->serial->dev;
458 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
460 dev_err(&port->dev, "%s - failed submitting write urb,"
461 " error %d\n", __func__, result);
462 priv->write_urb_in_use = 0;
463 /* TODO: reschedule pl2303_send */
466 usb_serial_port_softint(port);
469 static int pl2303_write(struct tty_struct *tty, struct usb_serial_port *port,
470 const unsigned char *buf, int count)
472 struct pl2303_private *priv = usb_get_serial_port_data(port);
475 dbg("%s - port %d, %d bytes", __func__, port->number, count);
480 spin_lock_irqsave(&priv->lock, flags);
481 count = pl2303_buf_put(priv->buf, buf, count);
482 spin_unlock_irqrestore(&priv->lock, flags);
489 static int pl2303_write_room(struct tty_struct *tty)
491 struct usb_serial_port *port = tty->driver_data;
492 struct pl2303_private *priv = usb_get_serial_port_data(port);
496 dbg("%s - port %d", __func__, port->number);
498 spin_lock_irqsave(&priv->lock, flags);
499 room = pl2303_buf_space_avail(priv->buf);
500 spin_unlock_irqrestore(&priv->lock, flags);
502 dbg("%s - returns %d", __func__, room);
506 static int pl2303_chars_in_buffer(struct tty_struct *tty)
508 struct usb_serial_port *port = tty->driver_data;
509 struct pl2303_private *priv = usb_get_serial_port_data(port);
513 dbg("%s - port %d", __func__, port->number);
515 spin_lock_irqsave(&priv->lock, flags);
516 chars = pl2303_buf_data_avail(priv->buf);
517 spin_unlock_irqrestore(&priv->lock, flags);
519 dbg("%s - returns %d", __func__, chars);
523 static void pl2303_set_termios(struct tty_struct *tty,
524 struct usb_serial_port *port, struct ktermios *old_termios)
526 struct usb_serial *serial = port->serial;
527 struct pl2303_private *priv = usb_get_serial_port_data(port);
534 const int baud_sup[] = { 75, 150, 300, 600, 1200, 1800, 2400, 3600,
535 4800, 7200, 9600, 14400, 19200, 28800, 38400,
536 57600, 115200, 230400, 460800, 614400,
537 921600, 1228800, 2457600, 3000000, 6000000 };
538 int baud_floor, baud_ceil;
541 dbg("%s - port %d", __func__, port->number);
543 /* The PL2303 is reported to lose bytes if you change
544 serial settings even to the same values as before. Thus
545 we actually need to filter in this specific case */
547 if (!tty_termios_hw_change(tty->termios, old_termios))
550 cflag = tty->termios->c_cflag;
552 buf = kzalloc(7, GFP_KERNEL);
554 dev_err(&port->dev, "%s - out of memory.\n", __func__);
555 /* Report back no change occurred */
556 *tty->termios = *old_termios;
560 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
561 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
563 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
564 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
567 switch (cflag & CSIZE) {
582 dbg("%s - data bits = %d", __func__, buf[6]);
585 /* For reference buf[0]:buf[3] baud rate value */
586 /* NOTE: Only the values defined in baud_sup are supported !
587 * => if unsupported values are set, the PL2303 seems to use
588 * 9600 baud (at least my PL2303X always does)
590 baud = tty_get_baud_rate(tty);
591 dbg("%s - baud requested = %d", __func__, baud);
593 /* Set baudrate to nearest supported value */
594 for (k=0; k<ARRAY_SIZE(baud_sup); k++) {
595 if (baud_sup[k] / baud) {
596 baud_ceil = baud_sup[k];
600 baud_floor = baud_sup[k-1];
601 if ((baud_ceil % baud)
602 > (baud % baud_floor))
610 if (baud > 1228800) {
611 /* type_0, type_1 only support up to 1228800 baud */
612 if (priv->type != HX)
614 else if (baud > 6000000)
617 dbg("%s - baud set = %d", __func__, baud);
618 buf[0] = baud & 0xff;
619 buf[1] = (baud >> 8) & 0xff;
620 buf[2] = (baud >> 16) & 0xff;
621 buf[3] = (baud >> 24) & 0xff;
624 /* For reference buf[4]=0 is 1 stop bits */
625 /* For reference buf[4]=1 is 1.5 stop bits */
626 /* For reference buf[4]=2 is 2 stop bits */
627 if (cflag & CSTOPB) {
628 /* NOTE: Comply with "real" UARTs / RS232:
629 * use 1.5 instead of 2 stop bits with 5 data bits
631 if ((cflag & CSIZE) == CS5) {
633 dbg("%s - stop bits = 1.5", __func__);
636 dbg("%s - stop bits = 2", __func__);
640 dbg("%s - stop bits = 1", __func__);
643 if (cflag & PARENB) {
644 /* For reference buf[5]=0 is none parity */
645 /* For reference buf[5]=1 is odd parity */
646 /* For reference buf[5]=2 is even parity */
647 /* For reference buf[5]=3 is mark parity */
648 /* For reference buf[5]=4 is space parity */
649 if (cflag & PARODD) {
650 if (cflag & CMSPAR) {
652 dbg("%s - parity = mark", __func__);
655 dbg("%s - parity = odd", __func__);
658 if (cflag & CMSPAR) {
660 dbg("%s - parity = space", __func__);
663 dbg("%s - parity = even", __func__);
668 dbg("%s - parity = none", __func__);
671 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
672 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
674 dbg("0x21:0x20:0:0 %d", i);
676 /* change control lines if we are switching to or from B0 */
677 spin_lock_irqsave(&priv->lock, flags);
678 control = priv->line_control;
679 if ((cflag & CBAUD) == B0)
680 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
682 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
683 if (control != priv->line_control) {
684 control = priv->line_control;
685 spin_unlock_irqrestore(&priv->lock, flags);
686 set_control_lines(serial->dev, control);
688 spin_unlock_irqrestore(&priv->lock, flags);
691 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
693 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
694 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
696 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
697 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
699 if (cflag & CRTSCTS) {
700 if (priv->type == HX)
701 pl2303_vendor_write(0x0, 0x61, serial);
703 pl2303_vendor_write(0x0, 0x41, serial);
705 pl2303_vendor_write(0x0, 0x0, serial);
708 /* Save resulting baud rate */
710 tty_encode_baud_rate(tty, baud, baud);
715 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
717 struct pl2303_private *priv = usb_get_serial_port_data(port);
721 spin_lock_irqsave(&priv->lock, flags);
722 /* Change DTR and RTS */
724 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
726 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
727 control = priv->line_control;
728 spin_unlock_irqrestore(&priv->lock, flags);
729 set_control_lines(port->serial->dev, control);
732 static void pl2303_close(struct usb_serial_port *port)
734 struct pl2303_private *priv = usb_get_serial_port_data(port);
737 dbg("%s - port %d", __func__, port->number);
739 spin_lock_irqsave(&priv->lock, flags);
740 /* clear out any remaining data in the buffer */
741 pl2303_buf_clear(priv->buf);
742 spin_unlock_irqrestore(&priv->lock, flags);
744 /* shutdown our urbs */
745 dbg("%s - shutting down urbs", __func__);
746 usb_kill_urb(port->write_urb);
747 usb_kill_urb(port->read_urb);
748 usb_kill_urb(port->interrupt_in_urb);
752 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
754 struct ktermios tmp_termios;
755 struct usb_serial *serial = port->serial;
756 struct pl2303_private *priv = usb_get_serial_port_data(port);
759 dbg("%s - port %d", __func__, port->number);
761 if (priv->type != HX) {
762 usb_clear_halt(serial->dev, port->write_urb->pipe);
763 usb_clear_halt(serial->dev, port->read_urb->pipe);
765 /* reset upstream data pipes */
766 pl2303_vendor_write(8, 0, serial);
767 pl2303_vendor_write(9, 0, serial);
772 pl2303_set_termios(tty, port, &tmp_termios);
774 dbg("%s - submitting read urb", __func__);
775 port->read_urb->dev = serial->dev;
776 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
778 dev_err(&port->dev, "%s - failed submitting read urb,"
779 " error %d\n", __func__, result);
784 dbg("%s - submitting interrupt urb", __func__);
785 port->interrupt_in_urb->dev = serial->dev;
786 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
788 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
789 " error %d\n", __func__, result);
793 port->port.drain_delay = 256;
797 static int pl2303_tiocmset(struct tty_struct *tty, struct file *file,
798 unsigned int set, unsigned int clear)
800 struct usb_serial_port *port = tty->driver_data;
801 struct pl2303_private *priv = usb_get_serial_port_data(port);
805 if (!usb_get_intfdata(port->serial->interface))
808 spin_lock_irqsave(&priv->lock, flags);
810 priv->line_control |= CONTROL_RTS;
812 priv->line_control |= CONTROL_DTR;
813 if (clear & TIOCM_RTS)
814 priv->line_control &= ~CONTROL_RTS;
815 if (clear & TIOCM_DTR)
816 priv->line_control &= ~CONTROL_DTR;
817 control = priv->line_control;
818 spin_unlock_irqrestore(&priv->lock, flags);
820 return set_control_lines(port->serial->dev, control);
823 static int pl2303_tiocmget(struct tty_struct *tty, struct file *file)
825 struct usb_serial_port *port = tty->driver_data;
826 struct pl2303_private *priv = usb_get_serial_port_data(port);
832 dbg("%s (%d)", __func__, port->number);
834 if (!usb_get_intfdata(port->serial->interface))
837 spin_lock_irqsave(&priv->lock, flags);
838 mcr = priv->line_control;
839 status = priv->line_status;
840 spin_unlock_irqrestore(&priv->lock, flags);
842 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
843 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
844 | ((status & UART_CTS) ? TIOCM_CTS : 0)
845 | ((status & UART_DSR) ? TIOCM_DSR : 0)
846 | ((status & UART_RING) ? TIOCM_RI : 0)
847 | ((status & UART_DCD) ? TIOCM_CD : 0);
849 dbg("%s - result = %x", __func__, result);
854 static int pl2303_carrier_raised(struct usb_serial_port *port)
856 struct pl2303_private *priv = usb_get_serial_port_data(port);
857 if (priv->line_status & UART_DCD)
862 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
864 struct pl2303_private *priv = usb_get_serial_port_data(port);
866 unsigned int prevstatus;
868 unsigned int changed;
870 spin_lock_irqsave(&priv->lock, flags);
871 prevstatus = priv->line_status;
872 spin_unlock_irqrestore(&priv->lock, flags);
875 interruptible_sleep_on(&priv->delta_msr_wait);
876 /* see if a signal did it */
877 if (signal_pending(current))
880 spin_lock_irqsave(&priv->lock, flags);
881 status = priv->line_status;
882 spin_unlock_irqrestore(&priv->lock, flags);
884 changed = prevstatus ^ status;
886 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
887 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
888 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
889 ((arg & TIOCM_CTS) && (changed & UART_CTS))) {
898 static int pl2303_ioctl(struct tty_struct *tty, struct file *file,
899 unsigned int cmd, unsigned long arg)
901 struct usb_serial_port *port = tty->driver_data;
902 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
906 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
907 return wait_modem_info(port, arg);
909 dbg("%s not supported = 0x%04x", __func__, cmd);
915 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
917 struct usb_serial_port *port = tty->driver_data;
918 struct usb_serial *serial = port->serial;
922 dbg("%s - port %d", __func__, port->number);
924 if (break_state == 0)
928 dbg("%s - turning break %s", __func__,
929 state == BREAK_OFF ? "off" : "on");
931 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
932 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
935 dbg("%s - error sending break = %d", __func__, result);
938 static void pl2303_release(struct usb_serial *serial)
941 struct pl2303_private *priv;
945 for (i = 0; i < serial->num_ports; ++i) {
946 priv = usb_get_serial_port_data(serial->port[i]);
948 pl2303_buf_free(priv->buf);
954 static void pl2303_update_line_status(struct usb_serial_port *port,
956 unsigned int actual_length)
959 struct pl2303_private *priv = usb_get_serial_port_data(port);
960 struct tty_struct *tty;
962 u8 status_idx = UART_STATE;
963 u8 length = UART_STATE + 1;
967 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
968 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
971 if (idv == SIEMENS_VENDOR_ID) {
972 if (idp == SIEMENS_PRODUCT_ID_X65 ||
973 idp == SIEMENS_PRODUCT_ID_SX1 ||
974 idp == SIEMENS_PRODUCT_ID_X75) {
981 if (actual_length < length)
984 /* Save off the uart status for others to look at */
985 spin_lock_irqsave(&priv->lock, flags);
986 prev_line_status = priv->line_status;
987 priv->line_status = data[status_idx];
988 spin_unlock_irqrestore(&priv->lock, flags);
989 if (priv->line_status & UART_BREAK_ERROR)
990 usb_serial_handle_break(port);
991 wake_up_interruptible(&priv->delta_msr_wait);
993 tty = tty_port_tty_get(&port->port);
996 if ((priv->line_status ^ prev_line_status) & UART_DCD)
997 usb_serial_handle_dcd_change(port, tty,
998 priv->line_status & UART_DCD);
1002 static void pl2303_read_int_callback(struct urb *urb)
1004 struct usb_serial_port *port = urb->context;
1005 unsigned char *data = urb->transfer_buffer;
1006 unsigned int actual_length = urb->actual_length;
1007 int status = urb->status;
1010 dbg("%s (%d)", __func__, port->number);
1019 /* this urb is terminated, clean up */
1020 dbg("%s - urb shutting down with status: %d", __func__,
1024 dbg("%s - nonzero urb status received: %d", __func__,
1029 usb_serial_debug_data(debug, &port->dev, __func__,
1030 urb->actual_length, urb->transfer_buffer);
1032 pl2303_update_line_status(port, data, actual_length);
1035 retval = usb_submit_urb(urb, GFP_ATOMIC);
1037 dev_err(&urb->dev->dev,
1038 "%s - usb_submit_urb failed with result %d\n",
1042 static void pl2303_push_data(struct tty_struct *tty,
1043 struct usb_serial_port *port, struct urb *urb,
1046 unsigned char *data = urb->transfer_buffer;
1047 /* get tty_flag from status */
1048 char tty_flag = TTY_NORMAL;
1049 /* break takes precedence over parity, */
1050 /* which takes precedence over framing errors */
1051 if (line_status & UART_BREAK_ERROR)
1052 tty_flag = TTY_BREAK;
1053 else if (line_status & UART_PARITY_ERROR)
1054 tty_flag = TTY_PARITY;
1055 else if (line_status & UART_FRAME_ERROR)
1056 tty_flag = TTY_FRAME;
1057 dbg("%s - tty_flag = %d", __func__, tty_flag);
1059 tty_buffer_request_room(tty, urb->actual_length + 1);
1060 /* overrun is special, not associated with a char */
1061 if (line_status & UART_OVERRUN_ERROR)
1062 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1064 if (tty_flag == TTY_NORMAL && !(port->console && port->sysrq))
1065 tty_insert_flip_string(tty, data, urb->actual_length);
1068 for (i = 0; i < urb->actual_length; ++i)
1069 if (!usb_serial_handle_sysrq_char(tty, port, data[i]))
1070 tty_insert_flip_char(tty, data[i], tty_flag);
1072 tty_flip_buffer_push(tty);
1075 static void pl2303_read_bulk_callback(struct urb *urb)
1077 struct usb_serial_port *port = urb->context;
1078 struct pl2303_private *priv = usb_get_serial_port_data(port);
1079 struct tty_struct *tty;
1080 unsigned long flags;
1082 int status = urb->status;
1085 dbg("%s - port %d", __func__, port->number);
1088 dbg("%s - urb status = %d", __func__, status);
1089 if (!port->port.count) {
1090 dbg("%s - port is closed, exiting.", __func__);
1093 if (status == -EPROTO) {
1094 /* PL2303 mysteriously fails with -EPROTO reschedule
1096 dbg("%s - caught -EPROTO, resubmitting the urb",
1098 urb->dev = port->serial->dev;
1099 result = usb_submit_urb(urb, GFP_ATOMIC);
1101 dev_err(&urb->dev->dev, "%s - failed"
1102 " resubmitting read urb, error %d\n",
1106 dbg("%s - unable to handle the error, exiting.", __func__);
1110 usb_serial_debug_data(debug, &port->dev, __func__,
1111 urb->actual_length, urb->transfer_buffer);
1113 spin_lock_irqsave(&priv->lock, flags);
1114 line_status = priv->line_status;
1115 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1116 spin_unlock_irqrestore(&priv->lock, flags);
1117 wake_up_interruptible(&priv->delta_msr_wait);
1119 tty = tty_port_tty_get(&port->port);
1120 if (tty && urb->actual_length) {
1121 pl2303_push_data(tty, port, urb, line_status);
1124 /* Schedule the next read _if_ we are still open */
1125 if (port->port.count) {
1126 urb->dev = port->serial->dev;
1127 result = usb_submit_urb(urb, GFP_ATOMIC);
1129 dev_err(&urb->dev->dev, "%s - failed resubmitting"
1130 " read urb, error %d\n", __func__, result);
1136 static void pl2303_write_bulk_callback(struct urb *urb)
1138 struct usb_serial_port *port = urb->context;
1139 struct pl2303_private *priv = usb_get_serial_port_data(port);
1141 int status = urb->status;
1143 dbg("%s - port %d", __func__, port->number);
1152 /* this urb is terminated, clean up */
1153 dbg("%s - urb shutting down with status: %d", __func__,
1155 priv->write_urb_in_use = 0;
1158 /* error in the urb, so we have to resubmit it */
1159 dbg("%s - Overflow in write", __func__);
1160 dbg("%s - nonzero write bulk status received: %d", __func__,
1162 port->write_urb->transfer_buffer_length = 1;
1163 port->write_urb->dev = port->serial->dev;
1164 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1166 dev_err(&urb->dev->dev, "%s - failed resubmitting write"
1167 " urb, error %d\n", __func__, result);
1172 priv->write_urb_in_use = 0;
1174 /* send any buffered data */
1178 /* All of the device info needed for the PL2303 SIO serial converter */
1179 static struct usb_serial_driver pl2303_device = {
1181 .owner = THIS_MODULE,
1184 .id_table = id_table,
1185 .usb_driver = &pl2303_driver,
1187 .open = pl2303_open,
1188 .close = pl2303_close,
1189 .dtr_rts = pl2303_dtr_rts,
1190 .carrier_raised = pl2303_carrier_raised,
1191 .write = pl2303_write,
1192 .ioctl = pl2303_ioctl,
1193 .break_ctl = pl2303_break_ctl,
1194 .set_termios = pl2303_set_termios,
1195 .tiocmget = pl2303_tiocmget,
1196 .tiocmset = pl2303_tiocmset,
1197 .read_bulk_callback = pl2303_read_bulk_callback,
1198 .read_int_callback = pl2303_read_int_callback,
1199 .write_bulk_callback = pl2303_write_bulk_callback,
1200 .write_room = pl2303_write_room,
1201 .chars_in_buffer = pl2303_chars_in_buffer,
1202 .attach = pl2303_startup,
1203 .release = pl2303_release,
1206 static int __init pl2303_init(void)
1210 retval = usb_serial_register(&pl2303_device);
1212 goto failed_usb_serial_register;
1213 retval = usb_register(&pl2303_driver);
1215 goto failed_usb_register;
1216 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1218 failed_usb_register:
1219 usb_serial_deregister(&pl2303_device);
1220 failed_usb_serial_register:
1224 static void __exit pl2303_exit(void)
1226 usb_deregister(&pl2303_driver);
1227 usb_serial_deregister(&pl2303_device);
1230 module_init(pl2303_init);
1231 module_exit(pl2303_exit);
1233 MODULE_DESCRIPTION(DRIVER_DESC);
1234 MODULE_LICENSE("GPL");
1236 module_param(debug, bool, S_IRUGO | S_IWUSR);
1237 MODULE_PARM_DESC(debug, "Debug enabled or not");