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 driver
17 #include <linux/kernel.h>
18 #include <linux/errno.h>
19 #include <linux/init.h>
20 #include <linux/slab.h>
21 #include <linux/tty.h>
22 #include <linux/tty_driver.h>
23 #include <linux/tty_flip.h>
24 #include <linux/serial.h>
25 #include <linux/module.h>
26 #include <linux/moduleparam.h>
27 #include <linux/spinlock.h>
28 #include <asm/uaccess.h>
29 #include <linux/usb.h>
30 #include <linux/usb/serial.h>
36 #define DRIVER_DESC "Prolific PL2303 USB to serial adaptor driver"
40 #define PL2303_CLOSING_WAIT (30*HZ)
42 #define PL2303_BUF_SIZE 1024
43 #define PL2303_TMP_BUF_SIZE 1024
46 unsigned int buf_size;
52 static struct usb_device_id id_table [] = {
53 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) },
54 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
55 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
56 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
57 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
58 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
59 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
60 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
61 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
62 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
63 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
64 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
65 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
66 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
67 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
68 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
69 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
70 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
71 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
72 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
73 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
74 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
75 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
76 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
77 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
78 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
80 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
81 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
82 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
83 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
84 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
85 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
86 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
87 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
88 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
89 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
90 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
91 { USB_DEVICE(HL340_VENDOR_ID, HL340_PRODUCT_ID) },
92 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
93 { } /* Terminating entry */
96 MODULE_DEVICE_TABLE(usb, id_table);
98 static struct usb_driver pl2303_driver = {
100 .probe = usb_serial_probe,
101 .disconnect = usb_serial_disconnect,
102 .id_table = id_table,
103 .suspend = usb_serial_suspend,
104 .resume = usb_serial_resume,
106 .supports_autosuspend = 1,
109 #define SET_LINE_REQUEST_TYPE 0x21
110 #define SET_LINE_REQUEST 0x20
112 #define SET_CONTROL_REQUEST_TYPE 0x21
113 #define SET_CONTROL_REQUEST 0x22
114 #define CONTROL_DTR 0x01
115 #define CONTROL_RTS 0x02
117 #define BREAK_REQUEST_TYPE 0x21
118 #define BREAK_REQUEST 0x23
119 #define BREAK_ON 0xffff
120 #define BREAK_OFF 0x0000
122 #define GET_LINE_REQUEST_TYPE 0xa1
123 #define GET_LINE_REQUEST 0x21
125 #define VENDOR_WRITE_REQUEST_TYPE 0x40
126 #define VENDOR_WRITE_REQUEST 0x01
128 #define VENDOR_READ_REQUEST_TYPE 0xc0
129 #define VENDOR_READ_REQUEST 0x01
131 #define UART_STATE 0x08
132 #define UART_STATE_TRANSIENT_MASK 0x74
133 #define UART_DCD 0x01
134 #define UART_DSR 0x02
135 #define UART_BREAK_ERROR 0x04
136 #define UART_RING 0x08
137 #define UART_FRAME_ERROR 0x10
138 #define UART_PARITY_ERROR 0x20
139 #define UART_OVERRUN_ERROR 0x40
140 #define UART_CTS 0x80
144 type_0, /* don't know the difference between type 0 and */
145 type_1, /* type 1, until someone from prolific tells us... */
146 HX, /* HX version of the pl2303 chip */
149 struct pl2303_private {
151 struct pl2303_buf *buf;
152 int write_urb_in_use;
153 wait_queue_head_t delta_msr_wait;
156 u8 termios_initialized;
157 enum pl2303_type type;
163 * Allocate a circular buffer and all associated memory.
165 static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
167 struct pl2303_buf *pb;
172 pb = kmalloc(sizeof(struct pl2303_buf), GFP_KERNEL);
176 pb->buf_buf = kmalloc(size, GFP_KERNEL);
177 if (pb->buf_buf == NULL) {
183 pb->buf_get = pb->buf_put = pb->buf_buf;
191 * Free the buffer and all associated memory.
193 static void pl2303_buf_free(struct pl2303_buf *pb)
204 * Clear out all data in the circular buffer.
206 static void pl2303_buf_clear(struct pl2303_buf *pb)
209 pb->buf_get = pb->buf_put;
210 /* equivalent to a get of all data available */
214 * pl2303_buf_data_avail
216 * Return the number of bytes of data available in the circular
219 static unsigned int pl2303_buf_data_avail(struct pl2303_buf *pb)
224 return ((pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size);
228 * pl2303_buf_space_avail
230 * Return the number of bytes of space available in the circular
233 static unsigned int pl2303_buf_space_avail(struct pl2303_buf *pb)
238 return ((pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size);
244 * Copy data data from a user buffer and put it into the circular buffer.
245 * Restrict to the amount of space available.
247 * Return the number of bytes copied.
249 static unsigned int pl2303_buf_put(struct pl2303_buf *pb, const char *buf,
257 len = pl2303_buf_space_avail(pb);
264 len = pb->buf_buf + pb->buf_size - pb->buf_put;
266 memcpy(pb->buf_put, buf, len);
267 memcpy(pb->buf_buf, buf+len, count - len);
268 pb->buf_put = pb->buf_buf + count - len;
270 memcpy(pb->buf_put, buf, count);
272 pb->buf_put += count;
273 else /* count == len */
274 pb->buf_put = pb->buf_buf;
283 * Get data from the circular buffer and copy to the given buffer.
284 * Restrict to the amount of data available.
286 * Return the number of bytes copied.
288 static unsigned int pl2303_buf_get(struct pl2303_buf *pb, char *buf,
296 len = pl2303_buf_data_avail(pb);
303 len = pb->buf_buf + pb->buf_size - pb->buf_get;
305 memcpy(buf, pb->buf_get, len);
306 memcpy(buf+len, pb->buf_buf, count - len);
307 pb->buf_get = pb->buf_buf + count - len;
309 memcpy(buf, pb->buf_get, count);
311 pb->buf_get += count;
312 else /* count == len */
313 pb->buf_get = pb->buf_buf;
319 static int pl2303_vendor_read(__u16 value, __u16 index,
320 struct usb_serial *serial, unsigned char *buf)
322 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
323 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
324 value, index, buf, 1, 100);
325 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
326 VENDOR_READ_REQUEST, value, index, res, buf[0]);
330 static int pl2303_vendor_write(__u16 value, __u16 index,
331 struct usb_serial *serial)
333 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
334 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
335 value, index, NULL, 0, 100);
336 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
337 VENDOR_WRITE_REQUEST, value, index, res);
341 static int pl2303_startup(struct usb_serial *serial)
343 struct pl2303_private *priv;
344 enum pl2303_type type = type_0;
348 buf = kmalloc(10, GFP_KERNEL);
352 if (serial->dev->descriptor.bDeviceClass == 0x02)
354 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
356 else if (serial->dev->descriptor.bDeviceClass == 0x00)
358 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
360 dbg("device type: %d", type);
362 for (i = 0; i < serial->num_ports; ++i) {
363 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
366 spin_lock_init(&priv->lock);
367 priv->buf = pl2303_buf_alloc(PL2303_BUF_SIZE);
368 if (priv->buf == NULL) {
372 init_waitqueue_head(&priv->delta_msr_wait);
374 usb_set_serial_port_data(serial->port[i], priv);
377 pl2303_vendor_read(0x8484, 0, serial, buf);
378 pl2303_vendor_write(0x0404, 0, serial);
379 pl2303_vendor_read(0x8484, 0, serial, buf);
380 pl2303_vendor_read(0x8383, 0, serial, buf);
381 pl2303_vendor_read(0x8484, 0, serial, buf);
382 pl2303_vendor_write(0x0404, 1, serial);
383 pl2303_vendor_read(0x8484, 0, serial, buf);
384 pl2303_vendor_read(0x8383, 0, serial, buf);
385 pl2303_vendor_write(0, 1, serial);
386 pl2303_vendor_write(1, 0, serial);
388 pl2303_vendor_write(2, 0x44, serial);
390 pl2303_vendor_write(2, 0x24, serial);
397 for (--i; i>=0; --i) {
398 priv = usb_get_serial_port_data(serial->port[i]);
399 pl2303_buf_free(priv->buf);
401 usb_set_serial_port_data(serial->port[i], NULL);
406 static int set_control_lines(struct usb_device *dev, u8 value)
410 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
411 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
412 value, 0, NULL, 0, 100);
413 dbg("%s - value = %d, retval = %d", __func__, value, retval);
417 static void pl2303_send(struct usb_serial_port *port)
420 struct pl2303_private *priv = usb_get_serial_port_data(port);
423 dbg("%s - port %d", __func__, port->number);
425 spin_lock_irqsave(&priv->lock, flags);
427 if (priv->write_urb_in_use) {
428 spin_unlock_irqrestore(&priv->lock, flags);
432 count = pl2303_buf_get(priv->buf, port->write_urb->transfer_buffer,
433 port->bulk_out_size);
436 spin_unlock_irqrestore(&priv->lock, flags);
440 priv->write_urb_in_use = 1;
442 spin_unlock_irqrestore(&priv->lock, flags);
444 usb_serial_debug_data(debug, &port->dev, __func__, count,
445 port->write_urb->transfer_buffer);
447 port->write_urb->transfer_buffer_length = count;
448 port->write_urb->dev = port->serial->dev;
449 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
451 dev_err(&port->dev, "%s - failed submitting write urb,"
452 " error %d\n", __func__, result);
453 priv->write_urb_in_use = 0;
454 // TODO: reschedule pl2303_send
457 usb_serial_port_softint(port);
460 static int pl2303_write(struct usb_serial_port *port, const unsigned char *buf,
463 struct pl2303_private *priv = usb_get_serial_port_data(port);
466 dbg("%s - port %d, %d bytes", __func__, port->number, count);
471 spin_lock_irqsave(&priv->lock, flags);
472 count = pl2303_buf_put(priv->buf, buf, count);
473 spin_unlock_irqrestore(&priv->lock, flags);
480 static int pl2303_write_room(struct usb_serial_port *port)
482 struct pl2303_private *priv = usb_get_serial_port_data(port);
486 dbg("%s - port %d", __func__, port->number);
488 spin_lock_irqsave(&priv->lock, flags);
489 room = pl2303_buf_space_avail(priv->buf);
490 spin_unlock_irqrestore(&priv->lock, flags);
492 dbg("%s - returns %d", __func__, room);
496 static int pl2303_chars_in_buffer(struct usb_serial_port *port)
498 struct pl2303_private *priv = usb_get_serial_port_data(port);
502 dbg("%s - port %d", __func__, port->number);
504 spin_lock_irqsave(&priv->lock, flags);
505 chars = pl2303_buf_data_avail(priv->buf);
506 spin_unlock_irqrestore(&priv->lock, flags);
508 dbg("%s - returns %d", __func__, chars);
512 static void pl2303_set_termios(struct usb_serial_port *port,
513 struct ktermios *old_termios)
515 struct usb_serial *serial = port->serial;
516 struct pl2303_private *priv = usb_get_serial_port_data(port);
524 dbg("%s - port %d", __func__, port->number);
526 spin_lock_irqsave(&priv->lock, flags);
527 if (!priv->termios_initialized) {
528 *(port->tty->termios) = tty_std_termios;
529 port->tty->termios->c_cflag = B9600 | CS8 | CREAD |
531 port->tty->termios->c_ispeed = 9600;
532 port->tty->termios->c_ospeed = 9600;
533 priv->termios_initialized = 1;
535 spin_unlock_irqrestore(&priv->lock, flags);
537 /* The PL2303 is reported to lose bytes if you change
538 serial settings even to the same values as before. Thus
539 we actually need to filter in this specific case */
541 if (!tty_termios_hw_change(port->tty->termios, old_termios))
544 cflag = port->tty->termios->c_cflag;
546 buf = kzalloc(7, GFP_KERNEL);
548 dev_err(&port->dev, "%s - out of memory.\n", __func__);
552 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
553 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
555 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
556 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
559 switch (cflag & CSIZE) {
560 case CS5: buf[6] = 5; break;
561 case CS6: buf[6] = 6; break;
562 case CS7: buf[6] = 7; break;
564 case CS8: buf[6] = 8; break;
566 dbg("%s - data bits = %d", __func__, buf[6]);
569 baud = tty_get_baud_rate(port->tty);;
570 dbg("%s - baud = %d", __func__, baud);
572 buf[0] = baud & 0xff;
573 buf[1] = (baud >> 8) & 0xff;
574 buf[2] = (baud >> 16) & 0xff;
575 buf[3] = (baud >> 24) & 0xff;
578 /* For reference buf[4]=0 is 1 stop bits */
579 /* For reference buf[4]=1 is 1.5 stop bits */
580 /* For reference buf[4]=2 is 2 stop bits */
581 if (cflag & CSTOPB) {
583 dbg("%s - stop bits = 2", __func__);
586 dbg("%s - stop bits = 1", __func__);
589 if (cflag & PARENB) {
590 /* For reference buf[5]=0 is none parity */
591 /* For reference buf[5]=1 is odd parity */
592 /* For reference buf[5]=2 is even parity */
593 /* For reference buf[5]=3 is mark parity */
594 /* For reference buf[5]=4 is space parity */
595 if (cflag & PARODD) {
597 dbg("%s - parity = odd", __func__);
600 dbg("%s - parity = even", __func__);
604 dbg("%s - parity = none", __func__);
607 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
608 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
610 dbg("0x21:0x20:0:0 %d", i);
612 /* change control lines if we are switching to or from B0 */
613 spin_lock_irqsave(&priv->lock, flags);
614 control = priv->line_control;
615 if ((cflag & CBAUD) == B0)
616 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
618 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
619 if (control != priv->line_control) {
620 control = priv->line_control;
621 spin_unlock_irqrestore(&priv->lock, flags);
622 set_control_lines(serial->dev, control);
624 spin_unlock_irqrestore(&priv->lock, flags);
627 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
629 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
630 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
632 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
633 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
635 if (cflag & CRTSCTS) {
636 if (priv->type == HX)
637 pl2303_vendor_write(0x0, 0x61, serial);
639 pl2303_vendor_write(0x0, 0x41, serial);
641 pl2303_vendor_write(0x0, 0x0, serial);
644 /* FIXME: Need to read back resulting baud rate */
646 tty_encode_baud_rate(port->tty, baud, baud);
651 static void pl2303_close(struct usb_serial_port *port, struct file *filp)
653 struct pl2303_private *priv = usb_get_serial_port_data(port);
655 unsigned int c_cflag;
660 dbg("%s - port %d", __func__, port->number);
662 /* wait for data to drain from the buffer */
663 spin_lock_irqsave(&priv->lock, flags);
664 timeout = PL2303_CLOSING_WAIT;
665 init_waitqueue_entry(&wait, current);
666 add_wait_queue(&port->tty->write_wait, &wait);
668 set_current_state(TASK_INTERRUPTIBLE);
669 if (pl2303_buf_data_avail(priv->buf) == 0 ||
670 timeout == 0 || signal_pending(current) ||
671 port->serial->disconnected)
673 spin_unlock_irqrestore(&priv->lock, flags);
674 timeout = schedule_timeout(timeout);
675 spin_lock_irqsave(&priv->lock, flags);
677 set_current_state(TASK_RUNNING);
678 remove_wait_queue(&port->tty->write_wait, &wait);
679 /* clear out any remaining data in the buffer */
680 pl2303_buf_clear(priv->buf);
681 spin_unlock_irqrestore(&priv->lock, flags);
683 /* wait for characters to drain from the device */
684 /* (this is long enough for the entire 256 byte */
685 /* pl2303 hardware buffer to drain with no flow */
686 /* control for data rates of 1200 bps or more, */
687 /* for lower rates we should really know how much */
688 /* data is in the buffer to compute a delay */
689 /* that is not unnecessarily long) */
690 bps = tty_get_baud_rate(port->tty);
692 timeout = max((HZ*2560)/bps,HZ/10);
695 schedule_timeout_interruptible(timeout);
697 /* shutdown our urbs */
698 dbg("%s - shutting down urbs", __func__);
699 usb_kill_urb(port->write_urb);
700 usb_kill_urb(port->read_urb);
701 usb_kill_urb(port->interrupt_in_urb);
704 c_cflag = port->tty->termios->c_cflag;
705 if (c_cflag & HUPCL) {
706 /* drop DTR and RTS */
707 spin_lock_irqsave(&priv->lock, flags);
708 priv->line_control = 0;
709 spin_unlock_irqrestore(&priv->lock, flags);
710 set_control_lines(port->serial->dev, 0);
715 static int pl2303_open(struct usb_serial_port *port, struct file *filp)
717 struct ktermios tmp_termios;
718 struct usb_serial *serial = port->serial;
719 struct pl2303_private *priv = usb_get_serial_port_data(port);
722 dbg("%s - port %d", __func__, port->number);
724 if (priv->type != HX) {
725 usb_clear_halt(serial->dev, port->write_urb->pipe);
726 usb_clear_halt(serial->dev, port->read_urb->pipe);
728 /* reset upstream data pipes */
729 pl2303_vendor_write(8, 0, serial);
730 pl2303_vendor_write(9, 0, serial);
735 pl2303_set_termios(port, &tmp_termios);
738 //FIXME: need to assert RTS and DTR if CRTSCTS off
740 dbg("%s - submitting read urb", __func__);
741 port->read_urb->dev = serial->dev;
742 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
744 dev_err(&port->dev, "%s - failed submitting read urb,"
745 " error %d\n", __func__, result);
746 pl2303_close(port, NULL);
750 dbg("%s - submitting interrupt urb", __func__);
751 port->interrupt_in_urb->dev = serial->dev;
752 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
754 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
755 " error %d\n", __func__, result);
756 pl2303_close(port, NULL);
762 static int pl2303_tiocmset(struct usb_serial_port *port, struct file *file,
763 unsigned int set, unsigned int clear)
765 struct pl2303_private *priv = usb_get_serial_port_data(port);
769 if (!usb_get_intfdata(port->serial->interface))
772 spin_lock_irqsave(&priv->lock, flags);
774 priv->line_control |= CONTROL_RTS;
776 priv->line_control |= CONTROL_DTR;
777 if (clear & TIOCM_RTS)
778 priv->line_control &= ~CONTROL_RTS;
779 if (clear & TIOCM_DTR)
780 priv->line_control &= ~CONTROL_DTR;
781 control = priv->line_control;
782 spin_unlock_irqrestore(&priv->lock, flags);
784 return set_control_lines(port->serial->dev, control);
787 static int pl2303_tiocmget(struct usb_serial_port *port, struct file *file)
789 struct pl2303_private *priv = usb_get_serial_port_data(port);
795 dbg("%s (%d)", __func__, port->number);
797 if (!usb_get_intfdata(port->serial->interface))
800 spin_lock_irqsave(&priv->lock, flags);
801 mcr = priv->line_control;
802 status = priv->line_status;
803 spin_unlock_irqrestore(&priv->lock, flags);
805 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
806 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
807 | ((status & UART_CTS) ? TIOCM_CTS : 0)
808 | ((status & UART_DSR) ? TIOCM_DSR : 0)
809 | ((status & UART_RING) ? TIOCM_RI : 0)
810 | ((status & UART_DCD) ? TIOCM_CD : 0);
812 dbg("%s - result = %x", __func__, result);
817 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
819 struct pl2303_private *priv = usb_get_serial_port_data(port);
821 unsigned int prevstatus;
823 unsigned int changed;
825 spin_lock_irqsave(&priv->lock, flags);
826 prevstatus = priv->line_status;
827 spin_unlock_irqrestore(&priv->lock, flags);
830 interruptible_sleep_on(&priv->delta_msr_wait);
831 /* see if a signal did it */
832 if (signal_pending(current))
835 spin_lock_irqsave(&priv->lock, flags);
836 status = priv->line_status;
837 spin_unlock_irqrestore(&priv->lock, flags);
839 changed=prevstatus^status;
841 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
842 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
843 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
844 ((arg & TIOCM_CTS) && (changed & UART_CTS)) ) {
853 static int pl2303_ioctl(struct usb_serial_port *port, struct file *file,
854 unsigned int cmd, unsigned long arg)
856 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
860 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
861 return wait_modem_info(port, arg);
864 dbg("%s not supported = 0x%04x", __func__, cmd);
871 static void pl2303_break_ctl(struct usb_serial_port *port, int break_state)
873 struct usb_serial *serial = port->serial;
877 dbg("%s - port %d", __func__, port->number);
879 if (break_state == 0)
883 dbg("%s - turning break %s", __func__, state==BREAK_OFF ? "off" : "on");
885 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
886 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
889 dbg("%s - error sending break = %d", __func__, result);
892 static void pl2303_shutdown(struct usb_serial *serial)
895 struct pl2303_private *priv;
899 for (i = 0; i < serial->num_ports; ++i) {
900 priv = usb_get_serial_port_data(serial->port[i]);
902 pl2303_buf_free(priv->buf);
904 usb_set_serial_port_data(serial->port[i], NULL);
909 static void pl2303_update_line_status(struct usb_serial_port *port,
911 unsigned int actual_length)
914 struct pl2303_private *priv = usb_get_serial_port_data(port);
916 u8 status_idx = UART_STATE;
917 u8 length = UART_STATE + 1;
920 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
921 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
924 if (idv == SIEMENS_VENDOR_ID) {
925 if (idp == SIEMENS_PRODUCT_ID_X65 ||
926 idp == SIEMENS_PRODUCT_ID_SX1 ||
927 idp == SIEMENS_PRODUCT_ID_X75) {
934 if (actual_length < length)
937 /* Save off the uart status for others to look at */
938 spin_lock_irqsave(&priv->lock, flags);
939 priv->line_status = data[status_idx];
940 spin_unlock_irqrestore(&priv->lock, flags);
941 wake_up_interruptible(&priv->delta_msr_wait);
944 static void pl2303_read_int_callback(struct urb *urb)
946 struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
947 unsigned char *data = urb->transfer_buffer;
948 unsigned int actual_length = urb->actual_length;
949 int status = urb->status;
952 dbg("%s (%d)", __func__, port->number);
961 /* this urb is terminated, clean up */
962 dbg("%s - urb shutting down with status: %d", __func__,
966 dbg("%s - nonzero urb status received: %d", __func__,
971 usb_serial_debug_data(debug, &port->dev, __func__,
972 urb->actual_length, urb->transfer_buffer);
974 pl2303_update_line_status(port, data, actual_length);
977 retval = usb_submit_urb(urb, GFP_ATOMIC);
979 dev_err(&urb->dev->dev,
980 "%s - usb_submit_urb failed with result %d\n",
984 static void pl2303_read_bulk_callback(struct urb *urb)
986 struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
987 struct pl2303_private *priv = usb_get_serial_port_data(port);
988 struct tty_struct *tty;
989 unsigned char *data = urb->transfer_buffer;
993 int status = urb->status;
997 dbg("%s - port %d", __func__, port->number);
1000 dbg("%s - urb status = %d", __func__, status);
1001 if (!port->open_count) {
1002 dbg("%s - port is closed, exiting.", __func__);
1005 if (status == -EPROTO) {
1006 /* PL2303 mysteriously fails with -EPROTO reschedule
1008 dbg("%s - caught -EPROTO, resubmitting the urb",
1010 urb->dev = port->serial->dev;
1011 result = usb_submit_urb(urb, GFP_ATOMIC);
1013 dev_err(&urb->dev->dev, "%s - failed"
1014 " resubmitting read urb, error %d\n",
1018 dbg("%s - unable to handle the error, exiting.", __func__);
1022 usb_serial_debug_data(debug, &port->dev, __func__,
1023 urb->actual_length, data);
1025 /* get tty_flag from status */
1026 tty_flag = TTY_NORMAL;
1028 spin_lock_irqsave(&priv->lock, flags);
1029 line_status = priv->line_status;
1030 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1031 spin_unlock_irqrestore(&priv->lock, flags);
1032 wake_up_interruptible(&priv->delta_msr_wait);
1034 /* break takes precedence over parity, */
1035 /* which takes precedence over framing errors */
1036 if (line_status & UART_BREAK_ERROR )
1037 tty_flag = TTY_BREAK;
1038 else if (line_status & UART_PARITY_ERROR)
1039 tty_flag = TTY_PARITY;
1040 else if (line_status & UART_FRAME_ERROR)
1041 tty_flag = TTY_FRAME;
1042 dbg("%s - tty_flag = %d", __func__, tty_flag);
1045 if (tty && urb->actual_length) {
1046 tty_buffer_request_room(tty, urb->actual_length + 1);
1047 /* overrun is special, not associated with a char */
1048 if (line_status & UART_OVERRUN_ERROR)
1049 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1050 for (i = 0; i < urb->actual_length; ++i)
1051 tty_insert_flip_char(tty, data[i], tty_flag);
1052 tty_flip_buffer_push(tty);
1055 /* Schedule the next read _if_ we are still open */
1056 if (port->open_count) {
1057 urb->dev = port->serial->dev;
1058 result = usb_submit_urb(urb, GFP_ATOMIC);
1060 dev_err(&urb->dev->dev, "%s - failed resubmitting"
1061 " read urb, error %d\n", __func__, result);
1067 static void pl2303_write_bulk_callback(struct urb *urb)
1069 struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
1070 struct pl2303_private *priv = usb_get_serial_port_data(port);
1072 int status = urb->status;
1074 dbg("%s - port %d", __func__, port->number);
1083 /* this urb is terminated, clean up */
1084 dbg("%s - urb shutting down with status: %d", __func__,
1086 priv->write_urb_in_use = 0;
1089 /* error in the urb, so we have to resubmit it */
1090 dbg("%s - Overflow in write", __func__);
1091 dbg("%s - nonzero write bulk status received: %d", __func__,
1093 port->write_urb->transfer_buffer_length = 1;
1094 port->write_urb->dev = port->serial->dev;
1095 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1097 dev_err(&urb->dev->dev, "%s - failed resubmitting write"
1098 " urb, error %d\n", __func__, result);
1103 priv->write_urb_in_use = 0;
1105 /* send any buffered data */
1109 /* All of the device info needed for the PL2303 SIO serial converter */
1110 static struct usb_serial_driver pl2303_device = {
1112 .owner = THIS_MODULE,
1115 .id_table = id_table,
1116 .usb_driver = &pl2303_driver,
1118 .open = pl2303_open,
1119 .close = pl2303_close,
1120 .write = pl2303_write,
1121 .ioctl = pl2303_ioctl,
1122 .break_ctl = pl2303_break_ctl,
1123 .set_termios = pl2303_set_termios,
1124 .tiocmget = pl2303_tiocmget,
1125 .tiocmset = pl2303_tiocmset,
1126 .read_bulk_callback = pl2303_read_bulk_callback,
1127 .read_int_callback = pl2303_read_int_callback,
1128 .write_bulk_callback = pl2303_write_bulk_callback,
1129 .write_room = pl2303_write_room,
1130 .chars_in_buffer = pl2303_chars_in_buffer,
1131 .attach = pl2303_startup,
1132 .shutdown = pl2303_shutdown,
1135 static int __init pl2303_init(void)
1139 retval = usb_serial_register(&pl2303_device);
1141 goto failed_usb_serial_register;
1142 retval = usb_register(&pl2303_driver);
1144 goto failed_usb_register;
1147 failed_usb_register:
1148 usb_serial_deregister(&pl2303_device);
1149 failed_usb_serial_register:
1153 static void __exit pl2303_exit(void)
1155 usb_deregister(&pl2303_driver);
1156 usb_serial_deregister(&pl2303_device);
1159 module_init(pl2303_init);
1160 module_exit(pl2303_exit);
1162 MODULE_DESCRIPTION(DRIVER_DESC);
1163 MODULE_LICENSE("GPL");
1165 module_param(debug, bool, S_IRUGO | S_IWUSR);
1166 MODULE_PARM_DESC(debug, "Debug enabled or not");