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(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
63 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
64 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
65 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
66 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
67 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
68 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
69 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
70 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
71 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
72 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
73 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
74 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
75 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
76 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
77 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
78 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
81 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
82 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
83 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
84 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
85 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
86 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
87 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
88 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
89 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
90 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
91 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
92 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
93 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
94 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
95 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
96 { } /* Terminating entry */
99 MODULE_DEVICE_TABLE(usb, id_table);
101 static struct usb_driver pl2303_driver = {
103 .probe = usb_serial_probe,
104 .disconnect = usb_serial_disconnect,
105 .id_table = id_table,
106 .suspend = usb_serial_suspend,
107 .resume = usb_serial_resume,
109 .supports_autosuspend = 1,
112 #define SET_LINE_REQUEST_TYPE 0x21
113 #define SET_LINE_REQUEST 0x20
115 #define SET_CONTROL_REQUEST_TYPE 0x21
116 #define SET_CONTROL_REQUEST 0x22
117 #define CONTROL_DTR 0x01
118 #define CONTROL_RTS 0x02
120 #define BREAK_REQUEST_TYPE 0x21
121 #define BREAK_REQUEST 0x23
122 #define BREAK_ON 0xffff
123 #define BREAK_OFF 0x0000
125 #define GET_LINE_REQUEST_TYPE 0xa1
126 #define GET_LINE_REQUEST 0x21
128 #define VENDOR_WRITE_REQUEST_TYPE 0x40
129 #define VENDOR_WRITE_REQUEST 0x01
131 #define VENDOR_READ_REQUEST_TYPE 0xc0
132 #define VENDOR_READ_REQUEST 0x01
134 #define UART_STATE 0x08
135 #define UART_STATE_TRANSIENT_MASK 0x74
136 #define UART_DCD 0x01
137 #define UART_DSR 0x02
138 #define UART_BREAK_ERROR 0x04
139 #define UART_RING 0x08
140 #define UART_FRAME_ERROR 0x10
141 #define UART_PARITY_ERROR 0x20
142 #define UART_OVERRUN_ERROR 0x40
143 #define UART_CTS 0x80
147 type_0, /* don't know the difference between type 0 and */
148 type_1, /* type 1, until someone from prolific tells us... */
149 HX, /* HX version of the pl2303 chip */
152 struct pl2303_private {
154 struct pl2303_buf *buf;
155 int write_urb_in_use;
156 wait_queue_head_t delta_msr_wait;
159 enum pl2303_type type;
165 * Allocate a circular buffer and all associated memory.
167 static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
169 struct pl2303_buf *pb;
174 pb = kmalloc(sizeof(struct pl2303_buf), GFP_KERNEL);
178 pb->buf_buf = kmalloc(size, GFP_KERNEL);
179 if (pb->buf_buf == NULL) {
185 pb->buf_get = pb->buf_put = pb->buf_buf;
193 * Free the buffer and all associated memory.
195 static void pl2303_buf_free(struct pl2303_buf *pb)
206 * Clear out all data in the circular buffer.
208 static void pl2303_buf_clear(struct pl2303_buf *pb)
211 pb->buf_get = pb->buf_put;
212 /* equivalent to a get of all data available */
216 * pl2303_buf_data_avail
218 * Return the number of bytes of data available in the circular
221 static unsigned int pl2303_buf_data_avail(struct pl2303_buf *pb)
226 return (pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size;
230 * pl2303_buf_space_avail
232 * Return the number of bytes of space available in the circular
235 static unsigned int pl2303_buf_space_avail(struct pl2303_buf *pb)
240 return (pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size;
246 * Copy data data from a user buffer and put it into the circular buffer.
247 * Restrict to the amount of space available.
249 * Return the number of bytes copied.
251 static unsigned int pl2303_buf_put(struct pl2303_buf *pb, const char *buf,
259 len = pl2303_buf_space_avail(pb);
266 len = pb->buf_buf + pb->buf_size - pb->buf_put;
268 memcpy(pb->buf_put, buf, len);
269 memcpy(pb->buf_buf, buf+len, count - len);
270 pb->buf_put = pb->buf_buf + count - len;
272 memcpy(pb->buf_put, buf, count);
274 pb->buf_put += count;
275 else /* count == len */
276 pb->buf_put = pb->buf_buf;
285 * Get data from the circular buffer and copy to the given buffer.
286 * Restrict to the amount of data available.
288 * Return the number of bytes copied.
290 static unsigned int pl2303_buf_get(struct pl2303_buf *pb, char *buf,
298 len = pl2303_buf_data_avail(pb);
305 len = pb->buf_buf + pb->buf_size - pb->buf_get;
307 memcpy(buf, pb->buf_get, len);
308 memcpy(buf+len, pb->buf_buf, count - len);
309 pb->buf_get = pb->buf_buf + count - len;
311 memcpy(buf, pb->buf_get, count);
313 pb->buf_get += count;
314 else /* count == len */
315 pb->buf_get = pb->buf_buf;
321 static int pl2303_vendor_read(__u16 value, __u16 index,
322 struct usb_serial *serial, unsigned char *buf)
324 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
325 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
326 value, index, buf, 1, 100);
327 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
328 VENDOR_READ_REQUEST, value, index, res, buf[0]);
332 static int pl2303_vendor_write(__u16 value, __u16 index,
333 struct usb_serial *serial)
335 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
336 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
337 value, index, NULL, 0, 100);
338 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
339 VENDOR_WRITE_REQUEST, value, index, res);
343 static int pl2303_startup(struct usb_serial *serial)
345 struct pl2303_private *priv;
346 enum pl2303_type type = type_0;
350 buf = kmalloc(10, GFP_KERNEL);
354 if (serial->dev->descriptor.bDeviceClass == 0x02)
356 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
358 else if (serial->dev->descriptor.bDeviceClass == 0x00)
360 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
362 dbg("device type: %d", type);
364 for (i = 0; i < serial->num_ports; ++i) {
365 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
368 spin_lock_init(&priv->lock);
369 priv->buf = pl2303_buf_alloc(PL2303_BUF_SIZE);
370 if (priv->buf == NULL) {
374 init_waitqueue_head(&priv->delta_msr_wait);
376 usb_set_serial_port_data(serial->port[i], priv);
379 pl2303_vendor_read(0x8484, 0, serial, buf);
380 pl2303_vendor_write(0x0404, 0, serial);
381 pl2303_vendor_read(0x8484, 0, serial, buf);
382 pl2303_vendor_read(0x8383, 0, serial, buf);
383 pl2303_vendor_read(0x8484, 0, serial, buf);
384 pl2303_vendor_write(0x0404, 1, serial);
385 pl2303_vendor_read(0x8484, 0, serial, buf);
386 pl2303_vendor_read(0x8383, 0, serial, buf);
387 pl2303_vendor_write(0, 1, serial);
388 pl2303_vendor_write(1, 0, serial);
390 pl2303_vendor_write(2, 0x44, serial);
392 pl2303_vendor_write(2, 0x24, serial);
399 for (--i; i >= 0; --i) {
400 priv = usb_get_serial_port_data(serial->port[i]);
401 pl2303_buf_free(priv->buf);
403 usb_set_serial_port_data(serial->port[i], NULL);
408 static int set_control_lines(struct usb_device *dev, u8 value)
412 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
413 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
414 value, 0, NULL, 0, 100);
415 dbg("%s - value = %d, retval = %d", __func__, value, retval);
419 static void pl2303_send(struct usb_serial_port *port)
422 struct pl2303_private *priv = usb_get_serial_port_data(port);
425 dbg("%s - port %d", __func__, port->number);
427 spin_lock_irqsave(&priv->lock, flags);
429 if (priv->write_urb_in_use) {
430 spin_unlock_irqrestore(&priv->lock, flags);
434 count = pl2303_buf_get(priv->buf, port->write_urb->transfer_buffer,
435 port->bulk_out_size);
438 spin_unlock_irqrestore(&priv->lock, flags);
442 priv->write_urb_in_use = 1;
444 spin_unlock_irqrestore(&priv->lock, flags);
446 usb_serial_debug_data(debug, &port->dev, __func__, count,
447 port->write_urb->transfer_buffer);
449 port->write_urb->transfer_buffer_length = count;
450 port->write_urb->dev = port->serial->dev;
451 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
453 dev_err(&port->dev, "%s - failed submitting write urb,"
454 " error %d\n", __func__, result);
455 priv->write_urb_in_use = 0;
456 /* TODO: reschedule pl2303_send */
459 usb_serial_port_softint(port);
462 static int pl2303_write(struct tty_struct *tty, struct usb_serial_port *port,
463 const unsigned char *buf, int count)
465 struct pl2303_private *priv = usb_get_serial_port_data(port);
468 dbg("%s - port %d, %d bytes", __func__, port->number, count);
473 spin_lock_irqsave(&priv->lock, flags);
474 count = pl2303_buf_put(priv->buf, buf, count);
475 spin_unlock_irqrestore(&priv->lock, flags);
482 static int pl2303_write_room(struct tty_struct *tty)
484 struct usb_serial_port *port = tty->driver_data;
485 struct pl2303_private *priv = usb_get_serial_port_data(port);
489 dbg("%s - port %d", __func__, port->number);
491 spin_lock_irqsave(&priv->lock, flags);
492 room = pl2303_buf_space_avail(priv->buf);
493 spin_unlock_irqrestore(&priv->lock, flags);
495 dbg("%s - returns %d", __func__, room);
499 static int pl2303_chars_in_buffer(struct tty_struct *tty)
501 struct usb_serial_port *port = tty->driver_data;
502 struct pl2303_private *priv = usb_get_serial_port_data(port);
506 dbg("%s - port %d", __func__, port->number);
508 spin_lock_irqsave(&priv->lock, flags);
509 chars = pl2303_buf_data_avail(priv->buf);
510 spin_unlock_irqrestore(&priv->lock, flags);
512 dbg("%s - returns %d", __func__, chars);
516 static void pl2303_set_termios(struct tty_struct *tty,
517 struct usb_serial_port *port, struct ktermios *old_termios)
519 struct usb_serial *serial = port->serial;
520 struct pl2303_private *priv = usb_get_serial_port_data(port);
528 dbg("%s - port %d", __func__, port->number);
530 /* The PL2303 is reported to lose bytes if you change
531 serial settings even to the same values as before. Thus
532 we actually need to filter in this specific case */
534 if (!tty_termios_hw_change(tty->termios, old_termios))
537 cflag = tty->termios->c_cflag;
539 buf = kzalloc(7, GFP_KERNEL);
541 dev_err(&port->dev, "%s - out of memory.\n", __func__);
542 /* Report back no change occurred */
543 *tty->termios = *old_termios;
547 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
548 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
550 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
551 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
554 switch (cflag & CSIZE) {
569 dbg("%s - data bits = %d", __func__, buf[6]);
572 baud = tty_get_baud_rate(tty);
573 dbg("%s - baud = %d", __func__, baud);
575 buf[0] = baud & 0xff;
576 buf[1] = (baud >> 8) & 0xff;
577 buf[2] = (baud >> 16) & 0xff;
578 buf[3] = (baud >> 24) & 0xff;
581 /* For reference buf[4]=0 is 1 stop bits */
582 /* For reference buf[4]=1 is 1.5 stop bits */
583 /* For reference buf[4]=2 is 2 stop bits */
584 if (cflag & CSTOPB) {
586 dbg("%s - stop bits = 2", __func__);
589 dbg("%s - stop bits = 1", __func__);
592 if (cflag & PARENB) {
593 /* For reference buf[5]=0 is none parity */
594 /* For reference buf[5]=1 is odd parity */
595 /* For reference buf[5]=2 is even parity */
596 /* For reference buf[5]=3 is mark parity */
597 /* For reference buf[5]=4 is space parity */
598 if (cflag & PARODD) {
600 dbg("%s - parity = odd", __func__);
603 dbg("%s - parity = even", __func__);
607 dbg("%s - parity = none", __func__);
610 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
611 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
613 dbg("0x21:0x20:0:0 %d", i);
615 /* change control lines if we are switching to or from B0 */
616 spin_lock_irqsave(&priv->lock, flags);
617 control = priv->line_control;
618 if ((cflag & CBAUD) == B0)
619 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
621 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
622 if (control != priv->line_control) {
623 control = priv->line_control;
624 spin_unlock_irqrestore(&priv->lock, flags);
625 set_control_lines(serial->dev, control);
627 spin_unlock_irqrestore(&priv->lock, flags);
630 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
632 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
633 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
635 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
636 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
638 if (cflag & CRTSCTS) {
639 if (priv->type == HX)
640 pl2303_vendor_write(0x0, 0x61, serial);
642 pl2303_vendor_write(0x0, 0x41, serial);
644 pl2303_vendor_write(0x0, 0x0, serial);
647 /* FIXME: Need to read back resulting baud rate */
649 tty_encode_baud_rate(tty, baud, baud);
654 static void pl2303_close(struct tty_struct *tty,
655 struct usb_serial_port *port, struct file *filp)
657 struct pl2303_private *priv = usb_get_serial_port_data(port);
659 unsigned int c_cflag;
664 dbg("%s - port %d", __func__, port->number);
666 /* wait for data to drain from the buffer */
667 spin_lock_irqsave(&priv->lock, flags);
668 timeout = PL2303_CLOSING_WAIT;
669 init_waitqueue_entry(&wait, current);
670 add_wait_queue(&tty->write_wait, &wait);
672 set_current_state(TASK_INTERRUPTIBLE);
673 if (pl2303_buf_data_avail(priv->buf) == 0 ||
674 timeout == 0 || signal_pending(current) ||
675 port->serial->disconnected)
677 spin_unlock_irqrestore(&priv->lock, flags);
678 timeout = schedule_timeout(timeout);
679 spin_lock_irqsave(&priv->lock, flags);
681 set_current_state(TASK_RUNNING);
682 remove_wait_queue(&tty->write_wait, &wait);
683 /* clear out any remaining data in the buffer */
684 pl2303_buf_clear(priv->buf);
685 spin_unlock_irqrestore(&priv->lock, flags);
687 /* wait for characters to drain from the device */
688 /* (this is long enough for the entire 256 byte */
689 /* pl2303 hardware buffer to drain with no flow */
690 /* control for data rates of 1200 bps or more, */
691 /* for lower rates we should really know how much */
692 /* data is in the buffer to compute a delay */
693 /* that is not unnecessarily long) */
694 bps = tty_get_baud_rate(tty);
696 timeout = max((HZ*2560)/bps, HZ/10);
699 schedule_timeout_interruptible(timeout);
701 /* shutdown our urbs */
702 dbg("%s - shutting down urbs", __func__);
703 usb_kill_urb(port->write_urb);
704 usb_kill_urb(port->read_urb);
705 usb_kill_urb(port->interrupt_in_urb);
708 c_cflag = tty->termios->c_cflag;
709 if (c_cflag & HUPCL) {
710 /* drop DTR and RTS */
711 spin_lock_irqsave(&priv->lock, flags);
712 priv->line_control = 0;
713 spin_unlock_irqrestore(&priv->lock, flags);
714 set_control_lines(port->serial->dev, 0);
719 static int pl2303_open(struct tty_struct *tty,
720 struct usb_serial_port *port, struct file *filp)
722 struct ktermios tmp_termios;
723 struct usb_serial *serial = port->serial;
724 struct pl2303_private *priv = usb_get_serial_port_data(port);
727 dbg("%s - port %d", __func__, port->number);
729 if (priv->type != HX) {
730 usb_clear_halt(serial->dev, port->write_urb->pipe);
731 usb_clear_halt(serial->dev, port->read_urb->pipe);
733 /* reset upstream data pipes */
734 pl2303_vendor_write(8, 0, serial);
735 pl2303_vendor_write(9, 0, serial);
740 pl2303_set_termios(tty, port, &tmp_termios);
742 /* FIXME: need to assert RTS and DTR if CRTSCTS off */
744 dbg("%s - submitting read urb", __func__);
745 port->read_urb->dev = serial->dev;
746 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
748 dev_err(&port->dev, "%s - failed submitting read urb,"
749 " error %d\n", __func__, result);
750 pl2303_close(tty, port, NULL);
754 dbg("%s - submitting interrupt urb", __func__);
755 port->interrupt_in_urb->dev = serial->dev;
756 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
758 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
759 " error %d\n", __func__, result);
760 pl2303_close(tty, port, NULL);
766 static int pl2303_tiocmset(struct tty_struct *tty, struct file *file,
767 unsigned int set, unsigned int clear)
769 struct usb_serial_port *port = tty->driver_data;
770 struct pl2303_private *priv = usb_get_serial_port_data(port);
774 if (!usb_get_intfdata(port->serial->interface))
777 spin_lock_irqsave(&priv->lock, flags);
779 priv->line_control |= CONTROL_RTS;
781 priv->line_control |= CONTROL_DTR;
782 if (clear & TIOCM_RTS)
783 priv->line_control &= ~CONTROL_RTS;
784 if (clear & TIOCM_DTR)
785 priv->line_control &= ~CONTROL_DTR;
786 control = priv->line_control;
787 spin_unlock_irqrestore(&priv->lock, flags);
789 return set_control_lines(port->serial->dev, control);
792 static int pl2303_tiocmget(struct tty_struct *tty, struct file *file)
794 struct usb_serial_port *port = tty->driver_data;
795 struct pl2303_private *priv = usb_get_serial_port_data(port);
801 dbg("%s (%d)", __func__, port->number);
803 if (!usb_get_intfdata(port->serial->interface))
806 spin_lock_irqsave(&priv->lock, flags);
807 mcr = priv->line_control;
808 status = priv->line_status;
809 spin_unlock_irqrestore(&priv->lock, flags);
811 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
812 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
813 | ((status & UART_CTS) ? TIOCM_CTS : 0)
814 | ((status & UART_DSR) ? TIOCM_DSR : 0)
815 | ((status & UART_RING) ? TIOCM_RI : 0)
816 | ((status & UART_DCD) ? TIOCM_CD : 0);
818 dbg("%s - result = %x", __func__, result);
823 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
825 struct pl2303_private *priv = usb_get_serial_port_data(port);
827 unsigned int prevstatus;
829 unsigned int changed;
831 spin_lock_irqsave(&priv->lock, flags);
832 prevstatus = priv->line_status;
833 spin_unlock_irqrestore(&priv->lock, flags);
836 interruptible_sleep_on(&priv->delta_msr_wait);
837 /* see if a signal did it */
838 if (signal_pending(current))
841 spin_lock_irqsave(&priv->lock, flags);
842 status = priv->line_status;
843 spin_unlock_irqrestore(&priv->lock, flags);
845 changed = prevstatus ^ status;
847 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
848 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
849 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
850 ((arg & TIOCM_CTS) && (changed & UART_CTS))) {
859 static int pl2303_ioctl(struct tty_struct *tty, struct file *file,
860 unsigned int cmd, unsigned long arg)
862 struct usb_serial_port *port = tty->driver_data;
863 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
867 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
868 return wait_modem_info(port, arg);
870 dbg("%s not supported = 0x%04x", __func__, cmd);
876 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
878 struct usb_serial_port *port = tty->driver_data;
879 struct usb_serial *serial = port->serial;
883 dbg("%s - port %d", __func__, port->number);
885 if (break_state == 0)
889 dbg("%s - turning break %s", __func__,
890 state == BREAK_OFF ? "off" : "on");
892 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
893 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
896 dbg("%s - error sending break = %d", __func__, result);
899 static void pl2303_shutdown(struct usb_serial *serial)
902 struct pl2303_private *priv;
906 for (i = 0; i < serial->num_ports; ++i) {
907 priv = usb_get_serial_port_data(serial->port[i]);
909 pl2303_buf_free(priv->buf);
911 usb_set_serial_port_data(serial->port[i], NULL);
916 static void pl2303_update_line_status(struct usb_serial_port *port,
918 unsigned int actual_length)
921 struct pl2303_private *priv = usb_get_serial_port_data(port);
923 u8 status_idx = UART_STATE;
924 u8 length = UART_STATE + 1;
927 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
928 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
931 if (idv == SIEMENS_VENDOR_ID) {
932 if (idp == SIEMENS_PRODUCT_ID_X65 ||
933 idp == SIEMENS_PRODUCT_ID_SX1 ||
934 idp == SIEMENS_PRODUCT_ID_X75) {
941 if (actual_length < length)
944 /* Save off the uart status for others to look at */
945 spin_lock_irqsave(&priv->lock, flags);
946 priv->line_status = data[status_idx];
947 spin_unlock_irqrestore(&priv->lock, flags);
948 wake_up_interruptible(&priv->delta_msr_wait);
951 static void pl2303_read_int_callback(struct urb *urb)
953 struct usb_serial_port *port = urb->context;
954 unsigned char *data = urb->transfer_buffer;
955 unsigned int actual_length = urb->actual_length;
956 int status = urb->status;
959 dbg("%s (%d)", __func__, port->number);
968 /* this urb is terminated, clean up */
969 dbg("%s - urb shutting down with status: %d", __func__,
973 dbg("%s - nonzero urb status received: %d", __func__,
978 usb_serial_debug_data(debug, &port->dev, __func__,
979 urb->actual_length, urb->transfer_buffer);
981 pl2303_update_line_status(port, data, actual_length);
984 retval = usb_submit_urb(urb, GFP_ATOMIC);
986 dev_err(&urb->dev->dev,
987 "%s - usb_submit_urb failed with result %d\n",
991 static void pl2303_read_bulk_callback(struct urb *urb)
993 struct usb_serial_port *port = urb->context;
994 struct pl2303_private *priv = usb_get_serial_port_data(port);
995 struct tty_struct *tty;
996 unsigned char *data = urb->transfer_buffer;
1000 int status = urb->status;
1004 dbg("%s - port %d", __func__, port->number);
1007 dbg("%s - urb status = %d", __func__, status);
1008 if (!port->port.count) {
1009 dbg("%s - port is closed, exiting.", __func__);
1012 if (status == -EPROTO) {
1013 /* PL2303 mysteriously fails with -EPROTO reschedule
1015 dbg("%s - caught -EPROTO, resubmitting the urb",
1017 urb->dev = port->serial->dev;
1018 result = usb_submit_urb(urb, GFP_ATOMIC);
1020 dev_err(&urb->dev->dev, "%s - failed"
1021 " resubmitting read urb, error %d\n",
1025 dbg("%s - unable to handle the error, exiting.", __func__);
1029 usb_serial_debug_data(debug, &port->dev, __func__,
1030 urb->actual_length, data);
1032 /* get tty_flag from status */
1033 tty_flag = TTY_NORMAL;
1035 spin_lock_irqsave(&priv->lock, flags);
1036 line_status = priv->line_status;
1037 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1038 spin_unlock_irqrestore(&priv->lock, flags);
1039 wake_up_interruptible(&priv->delta_msr_wait);
1041 /* break takes precedence over parity, */
1042 /* which takes precedence over framing errors */
1043 if (line_status & UART_BREAK_ERROR)
1044 tty_flag = TTY_BREAK;
1045 else if (line_status & UART_PARITY_ERROR)
1046 tty_flag = TTY_PARITY;
1047 else if (line_status & UART_FRAME_ERROR)
1048 tty_flag = TTY_FRAME;
1049 dbg("%s - tty_flag = %d", __func__, tty_flag);
1051 tty = tty_port_tty_get(&port->port);
1052 if (tty && urb->actual_length) {
1053 tty_buffer_request_room(tty, urb->actual_length + 1);
1054 /* overrun is special, not associated with a char */
1055 if (line_status & UART_OVERRUN_ERROR)
1056 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1057 for (i = 0; i < urb->actual_length; ++i)
1058 tty_insert_flip_char(tty, data[i], tty_flag);
1059 tty_flip_buffer_push(tty);
1062 /* Schedule the next read _if_ we are still open */
1063 if (port->port.count) {
1064 urb->dev = port->serial->dev;
1065 result = usb_submit_urb(urb, GFP_ATOMIC);
1067 dev_err(&urb->dev->dev, "%s - failed resubmitting"
1068 " read urb, error %d\n", __func__, result);
1074 static void pl2303_write_bulk_callback(struct urb *urb)
1076 struct usb_serial_port *port = urb->context;
1077 struct pl2303_private *priv = usb_get_serial_port_data(port);
1079 int status = urb->status;
1081 dbg("%s - port %d", __func__, port->number);
1090 /* this urb is terminated, clean up */
1091 dbg("%s - urb shutting down with status: %d", __func__,
1093 priv->write_urb_in_use = 0;
1096 /* error in the urb, so we have to resubmit it */
1097 dbg("%s - Overflow in write", __func__);
1098 dbg("%s - nonzero write bulk status received: %d", __func__,
1100 port->write_urb->transfer_buffer_length = 1;
1101 port->write_urb->dev = port->serial->dev;
1102 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1104 dev_err(&urb->dev->dev, "%s - failed resubmitting write"
1105 " urb, error %d\n", __func__, result);
1110 priv->write_urb_in_use = 0;
1112 /* send any buffered data */
1116 /* All of the device info needed for the PL2303 SIO serial converter */
1117 static struct usb_serial_driver pl2303_device = {
1119 .owner = THIS_MODULE,
1122 .id_table = id_table,
1123 .usb_driver = &pl2303_driver,
1125 .open = pl2303_open,
1126 .close = pl2303_close,
1127 .write = pl2303_write,
1128 .ioctl = pl2303_ioctl,
1129 .break_ctl = pl2303_break_ctl,
1130 .set_termios = pl2303_set_termios,
1131 .tiocmget = pl2303_tiocmget,
1132 .tiocmset = pl2303_tiocmset,
1133 .read_bulk_callback = pl2303_read_bulk_callback,
1134 .read_int_callback = pl2303_read_int_callback,
1135 .write_bulk_callback = pl2303_write_bulk_callback,
1136 .write_room = pl2303_write_room,
1137 .chars_in_buffer = pl2303_chars_in_buffer,
1138 .attach = pl2303_startup,
1139 .shutdown = pl2303_shutdown,
1142 static int __init pl2303_init(void)
1146 retval = usb_serial_register(&pl2303_device);
1148 goto failed_usb_serial_register;
1149 retval = usb_register(&pl2303_driver);
1151 goto failed_usb_register;
1152 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1154 failed_usb_register:
1155 usb_serial_deregister(&pl2303_device);
1156 failed_usb_serial_register:
1160 static void __exit pl2303_exit(void)
1162 usb_deregister(&pl2303_driver);
1163 usb_serial_deregister(&pl2303_device);
1166 module_init(pl2303_init);
1167 module_exit(pl2303_exit);
1169 MODULE_DESCRIPTION(DRIVER_DESC);
1170 MODULE_LICENSE("GPL");
1172 module_param(debug, bool, S_IRUGO | S_IWUSR);
1173 MODULE_PARM_DESC(debug, "Debug enabled or not");