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(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
60 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
61 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
62 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
63 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
64 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
65 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
66 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
67 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
68 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
69 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
70 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
71 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
72 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
73 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
74 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
75 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
76 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
77 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
78 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
81 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
82 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
83 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
84 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
85 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
86 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
87 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
88 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
89 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
90 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
91 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
92 { USB_DEVICE(HL340_VENDOR_ID, HL340_PRODUCT_ID) },
93 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
94 { } /* Terminating entry */
97 MODULE_DEVICE_TABLE(usb, id_table);
99 static struct usb_driver pl2303_driver = {
101 .probe = usb_serial_probe,
102 .disconnect = usb_serial_disconnect,
103 .id_table = id_table,
104 .suspend = usb_serial_suspend,
105 .resume = usb_serial_resume,
107 .supports_autosuspend = 1,
110 #define SET_LINE_REQUEST_TYPE 0x21
111 #define SET_LINE_REQUEST 0x20
113 #define SET_CONTROL_REQUEST_TYPE 0x21
114 #define SET_CONTROL_REQUEST 0x22
115 #define CONTROL_DTR 0x01
116 #define CONTROL_RTS 0x02
118 #define BREAK_REQUEST_TYPE 0x21
119 #define BREAK_REQUEST 0x23
120 #define BREAK_ON 0xffff
121 #define BREAK_OFF 0x0000
123 #define GET_LINE_REQUEST_TYPE 0xa1
124 #define GET_LINE_REQUEST 0x21
126 #define VENDOR_WRITE_REQUEST_TYPE 0x40
127 #define VENDOR_WRITE_REQUEST 0x01
129 #define VENDOR_READ_REQUEST_TYPE 0xc0
130 #define VENDOR_READ_REQUEST 0x01
132 #define UART_STATE 0x08
133 #define UART_STATE_TRANSIENT_MASK 0x74
134 #define UART_DCD 0x01
135 #define UART_DSR 0x02
136 #define UART_BREAK_ERROR 0x04
137 #define UART_RING 0x08
138 #define UART_FRAME_ERROR 0x10
139 #define UART_PARITY_ERROR 0x20
140 #define UART_OVERRUN_ERROR 0x40
141 #define UART_CTS 0x80
145 type_0, /* don't know the difference between type 0 and */
146 type_1, /* type 1, until someone from prolific tells us... */
147 HX, /* HX version of the pl2303 chip */
150 struct pl2303_private {
152 struct pl2303_buf *buf;
153 int write_urb_in_use;
154 wait_queue_head_t delta_msr_wait;
157 u8 termios_initialized;
158 enum pl2303_type type;
164 * Allocate a circular buffer and all associated memory.
166 static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
168 struct pl2303_buf *pb;
173 pb = kmalloc(sizeof(struct pl2303_buf), GFP_KERNEL);
177 pb->buf_buf = kmalloc(size, GFP_KERNEL);
178 if (pb->buf_buf == NULL) {
184 pb->buf_get = pb->buf_put = pb->buf_buf;
192 * Free the buffer and all associated memory.
194 static void pl2303_buf_free(struct pl2303_buf *pb)
205 * Clear out all data in the circular buffer.
207 static void pl2303_buf_clear(struct pl2303_buf *pb)
210 pb->buf_get = pb->buf_put;
211 /* equivalent to a get of all data available */
215 * pl2303_buf_data_avail
217 * Return the number of bytes of data available in the circular
220 static unsigned int pl2303_buf_data_avail(struct pl2303_buf *pb)
225 return ((pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size);
229 * pl2303_buf_space_avail
231 * Return the number of bytes of space available in the circular
234 static unsigned int pl2303_buf_space_avail(struct pl2303_buf *pb)
239 return ((pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size);
245 * Copy data data from a user buffer and put it into the circular buffer.
246 * Restrict to the amount of space available.
248 * Return the number of bytes copied.
250 static unsigned int pl2303_buf_put(struct pl2303_buf *pb, const char *buf,
258 len = pl2303_buf_space_avail(pb);
265 len = pb->buf_buf + pb->buf_size - pb->buf_put;
267 memcpy(pb->buf_put, buf, len);
268 memcpy(pb->buf_buf, buf+len, count - len);
269 pb->buf_put = pb->buf_buf + count - len;
271 memcpy(pb->buf_put, buf, count);
273 pb->buf_put += count;
274 else /* count == len */
275 pb->buf_put = pb->buf_buf;
284 * Get data from the circular buffer and copy to the given buffer.
285 * Restrict to the amount of data available.
287 * Return the number of bytes copied.
289 static unsigned int pl2303_buf_get(struct pl2303_buf *pb, char *buf,
297 len = pl2303_buf_data_avail(pb);
304 len = pb->buf_buf + pb->buf_size - pb->buf_get;
306 memcpy(buf, pb->buf_get, len);
307 memcpy(buf+len, pb->buf_buf, count - len);
308 pb->buf_get = pb->buf_buf + count - len;
310 memcpy(buf, pb->buf_get, count);
312 pb->buf_get += count;
313 else /* count == len */
314 pb->buf_get = pb->buf_buf;
320 static int pl2303_vendor_read(__u16 value, __u16 index,
321 struct usb_serial *serial, unsigned char *buf)
323 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
324 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
325 value, index, buf, 1, 100);
326 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
327 VENDOR_READ_REQUEST, value, index, res, buf[0]);
331 static int pl2303_vendor_write(__u16 value, __u16 index,
332 struct usb_serial *serial)
334 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
335 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
336 value, index, NULL, 0, 100);
337 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
338 VENDOR_WRITE_REQUEST, value, index, res);
342 static int pl2303_startup(struct usb_serial *serial)
344 struct pl2303_private *priv;
345 enum pl2303_type type = type_0;
349 buf = kmalloc(10, GFP_KERNEL);
353 if (serial->dev->descriptor.bDeviceClass == 0x02)
355 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
357 else if (serial->dev->descriptor.bDeviceClass == 0x00)
359 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
361 dbg("device type: %d", type);
363 for (i = 0; i < serial->num_ports; ++i) {
364 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
367 spin_lock_init(&priv->lock);
368 priv->buf = pl2303_buf_alloc(PL2303_BUF_SIZE);
369 if (priv->buf == NULL) {
373 init_waitqueue_head(&priv->delta_msr_wait);
375 usb_set_serial_port_data(serial->port[i], priv);
378 pl2303_vendor_read(0x8484, 0, serial, buf);
379 pl2303_vendor_write(0x0404, 0, serial);
380 pl2303_vendor_read(0x8484, 0, serial, buf);
381 pl2303_vendor_read(0x8383, 0, serial, buf);
382 pl2303_vendor_read(0x8484, 0, serial, buf);
383 pl2303_vendor_write(0x0404, 1, serial);
384 pl2303_vendor_read(0x8484, 0, serial, buf);
385 pl2303_vendor_read(0x8383, 0, serial, buf);
386 pl2303_vendor_write(0, 1, serial);
387 pl2303_vendor_write(1, 0, serial);
389 pl2303_vendor_write(2, 0x44, serial);
391 pl2303_vendor_write(2, 0x24, serial);
398 for (--i; i>=0; --i) {
399 priv = usb_get_serial_port_data(serial->port[i]);
400 pl2303_buf_free(priv->buf);
402 usb_set_serial_port_data(serial->port[i], NULL);
407 static int set_control_lines(struct usb_device *dev, u8 value)
411 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
412 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
413 value, 0, NULL, 0, 100);
414 dbg("%s - value = %d, retval = %d", __func__, value, retval);
418 static void pl2303_send(struct usb_serial_port *port)
421 struct pl2303_private *priv = usb_get_serial_port_data(port);
424 dbg("%s - port %d", __func__, port->number);
426 spin_lock_irqsave(&priv->lock, flags);
428 if (priv->write_urb_in_use) {
429 spin_unlock_irqrestore(&priv->lock, flags);
433 count = pl2303_buf_get(priv->buf, port->write_urb->transfer_buffer,
434 port->bulk_out_size);
437 spin_unlock_irqrestore(&priv->lock, flags);
441 priv->write_urb_in_use = 1;
443 spin_unlock_irqrestore(&priv->lock, flags);
445 usb_serial_debug_data(debug, &port->dev, __func__, count,
446 port->write_urb->transfer_buffer);
448 port->write_urb->transfer_buffer_length = count;
449 port->write_urb->dev = port->serial->dev;
450 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
452 dev_err(&port->dev, "%s - failed submitting write urb,"
453 " error %d\n", __func__, result);
454 priv->write_urb_in_use = 0;
455 // TODO: reschedule pl2303_send
458 usb_serial_port_softint(port);
461 static int pl2303_write(struct tty_struct *tty, struct usb_serial_port *port,
462 const unsigned char *buf, int count)
464 struct pl2303_private *priv = usb_get_serial_port_data(port);
467 dbg("%s - port %d, %d bytes", __func__, port->number, count);
472 spin_lock_irqsave(&priv->lock, flags);
473 count = pl2303_buf_put(priv->buf, buf, count);
474 spin_unlock_irqrestore(&priv->lock, flags);
481 static int pl2303_write_room(struct tty_struct *tty)
483 struct usb_serial_port *port = tty->driver_data;
484 struct pl2303_private *priv = usb_get_serial_port_data(port);
488 dbg("%s - port %d", __func__, port->number);
490 spin_lock_irqsave(&priv->lock, flags);
491 room = pl2303_buf_space_avail(priv->buf);
492 spin_unlock_irqrestore(&priv->lock, flags);
494 dbg("%s - returns %d", __func__, room);
498 static int pl2303_chars_in_buffer(struct tty_struct *tty)
500 struct usb_serial_port *port = tty->driver_data;
501 struct pl2303_private *priv = usb_get_serial_port_data(port);
505 dbg("%s - port %d", __func__, port->number);
507 spin_lock_irqsave(&priv->lock, flags);
508 chars = pl2303_buf_data_avail(priv->buf);
509 spin_unlock_irqrestore(&priv->lock, flags);
511 dbg("%s - returns %d", __func__, chars);
515 static void pl2303_set_termios(struct tty_struct *tty,
516 struct usb_serial_port *port, struct ktermios *old_termios)
518 struct usb_serial *serial = port->serial;
519 struct pl2303_private *priv = usb_get_serial_port_data(port);
527 dbg("%s - port %d", __func__, port->number);
529 spin_lock_irqsave(&priv->lock, flags);
530 if (!priv->termios_initialized) {
531 *(tty->termios) = tty_std_termios;
532 tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
533 tty->termios->c_ispeed = 9600;
534 tty->termios->c_ospeed = 9600;
535 priv->termios_initialized = 1;
537 spin_unlock_irqrestore(&priv->lock, flags);
539 /* The PL2303 is reported to lose bytes if you change
540 serial settings even to the same values as before. Thus
541 we actually need to filter in this specific case */
543 if (!tty_termios_hw_change(tty->termios, old_termios))
546 cflag = tty->termios->c_cflag;
548 buf = kzalloc(7, GFP_KERNEL);
550 dev_err(&port->dev, "%s - out of memory.\n", __func__);
551 /* Report back no change occurred */
552 *tty->termios = *old_termios;
556 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
557 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
559 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
560 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
563 switch (cflag & CSIZE) {
564 case CS5: buf[6] = 5; break;
565 case CS6: buf[6] = 6; break;
566 case CS7: buf[6] = 7; break;
568 case CS8: buf[6] = 8; break;
570 dbg("%s - data bits = %d", __func__, buf[6]);
573 baud = tty_get_baud_rate(tty);
574 dbg("%s - baud = %d", __func__, baud);
576 buf[0] = baud & 0xff;
577 buf[1] = (baud >> 8) & 0xff;
578 buf[2] = (baud >> 16) & 0xff;
579 buf[3] = (baud >> 24) & 0xff;
582 /* For reference buf[4]=0 is 1 stop bits */
583 /* For reference buf[4]=1 is 1.5 stop bits */
584 /* For reference buf[4]=2 is 2 stop bits */
585 if (cflag & CSTOPB) {
587 dbg("%s - stop bits = 2", __func__);
590 dbg("%s - stop bits = 1", __func__);
593 if (cflag & PARENB) {
594 /* For reference buf[5]=0 is none parity */
595 /* For reference buf[5]=1 is odd parity */
596 /* For reference buf[5]=2 is even parity */
597 /* For reference buf[5]=3 is mark parity */
598 /* For reference buf[5]=4 is space parity */
599 if (cflag & PARODD) {
601 dbg("%s - parity = odd", __func__);
604 dbg("%s - parity = even", __func__);
608 dbg("%s - parity = none", __func__);
611 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
612 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
614 dbg("0x21:0x20:0:0 %d", i);
616 /* change control lines if we are switching to or from B0 */
617 spin_lock_irqsave(&priv->lock, flags);
618 control = priv->line_control;
619 if ((cflag & CBAUD) == B0)
620 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
622 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
623 if (control != priv->line_control) {
624 control = priv->line_control;
625 spin_unlock_irqrestore(&priv->lock, flags);
626 set_control_lines(serial->dev, control);
628 spin_unlock_irqrestore(&priv->lock, flags);
631 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
633 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
634 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
636 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
637 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
639 if (cflag & CRTSCTS) {
640 if (priv->type == HX)
641 pl2303_vendor_write(0x0, 0x61, serial);
643 pl2303_vendor_write(0x0, 0x41, serial);
645 pl2303_vendor_write(0x0, 0x0, serial);
648 /* FIXME: Need to read back resulting baud rate */
650 tty_encode_baud_rate(tty, baud, baud);
655 static void pl2303_close(struct tty_struct *tty,
656 struct usb_serial_port *port, struct file *filp)
658 struct pl2303_private *priv = usb_get_serial_port_data(port);
660 unsigned int c_cflag;
665 dbg("%s - port %d", __func__, port->number);
667 /* wait for data to drain from the buffer */
668 spin_lock_irqsave(&priv->lock, flags);
669 timeout = PL2303_CLOSING_WAIT;
670 init_waitqueue_entry(&wait, current);
671 add_wait_queue(&tty->write_wait, &wait);
673 set_current_state(TASK_INTERRUPTIBLE);
674 if (pl2303_buf_data_avail(priv->buf) == 0 ||
675 timeout == 0 || signal_pending(current) ||
676 port->serial->disconnected)
678 spin_unlock_irqrestore(&priv->lock, flags);
679 timeout = schedule_timeout(timeout);
680 spin_lock_irqsave(&priv->lock, flags);
682 set_current_state(TASK_RUNNING);
683 remove_wait_queue(&tty->write_wait, &wait);
684 /* clear out any remaining data in the buffer */
685 pl2303_buf_clear(priv->buf);
686 spin_unlock_irqrestore(&priv->lock, flags);
688 /* wait for characters to drain from the device */
689 /* (this is long enough for the entire 256 byte */
690 /* pl2303 hardware buffer to drain with no flow */
691 /* control for data rates of 1200 bps or more, */
692 /* for lower rates we should really know how much */
693 /* data is in the buffer to compute a delay */
694 /* that is not unnecessarily long) */
695 bps = tty_get_baud_rate(tty);
697 timeout = max((HZ*2560)/bps,HZ/10);
700 schedule_timeout_interruptible(timeout);
702 /* shutdown our urbs */
703 dbg("%s - shutting down urbs", __func__);
704 usb_kill_urb(port->write_urb);
705 usb_kill_urb(port->read_urb);
706 usb_kill_urb(port->interrupt_in_urb);
709 c_cflag = tty->termios->c_cflag;
710 if (c_cflag & HUPCL) {
711 /* drop DTR and RTS */
712 spin_lock_irqsave(&priv->lock, flags);
713 priv->line_control = 0;
714 spin_unlock_irqrestore(&priv->lock, flags);
715 set_control_lines(port->serial->dev, 0);
720 static int pl2303_open(struct tty_struct *tty,
721 struct usb_serial_port *port, struct file *filp)
723 struct ktermios tmp_termios;
724 struct usb_serial *serial = port->serial;
725 struct pl2303_private *priv = usb_get_serial_port_data(port);
728 dbg("%s - port %d", __func__, port->number);
730 if (priv->type != HX) {
731 usb_clear_halt(serial->dev, port->write_urb->pipe);
732 usb_clear_halt(serial->dev, port->read_urb->pipe);
734 /* reset upstream data pipes */
735 pl2303_vendor_write(8, 0, serial);
736 pl2303_vendor_write(9, 0, serial);
741 pl2303_set_termios(tty, port, &tmp_termios);
743 //FIXME: need to assert RTS and DTR if CRTSCTS off
745 dbg("%s - submitting read urb", __func__);
746 port->read_urb->dev = serial->dev;
747 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
749 dev_err(&port->dev, "%s - failed submitting read urb,"
750 " error %d\n", __func__, result);
751 pl2303_close(tty, port, NULL);
755 dbg("%s - submitting interrupt urb", __func__);
756 port->interrupt_in_urb->dev = serial->dev;
757 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
759 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
760 " error %d\n", __func__, result);
761 pl2303_close(tty, port, NULL);
767 static int pl2303_tiocmset(struct tty_struct *tty, struct file *file,
768 unsigned int set, unsigned int clear)
770 struct usb_serial_port *port = tty->driver_data;
771 struct pl2303_private *priv = usb_get_serial_port_data(port);
775 if (!usb_get_intfdata(port->serial->interface))
778 spin_lock_irqsave(&priv->lock, flags);
780 priv->line_control |= CONTROL_RTS;
782 priv->line_control |= CONTROL_DTR;
783 if (clear & TIOCM_RTS)
784 priv->line_control &= ~CONTROL_RTS;
785 if (clear & TIOCM_DTR)
786 priv->line_control &= ~CONTROL_DTR;
787 control = priv->line_control;
788 spin_unlock_irqrestore(&priv->lock, flags);
790 return set_control_lines(port->serial->dev, control);
793 static int pl2303_tiocmget(struct tty_struct *tty, struct file *file)
795 struct usb_serial_port *port = tty->driver_data;
796 struct pl2303_private *priv = usb_get_serial_port_data(port);
802 dbg("%s (%d)", __func__, port->number);
804 if (!usb_get_intfdata(port->serial->interface))
807 spin_lock_irqsave(&priv->lock, flags);
808 mcr = priv->line_control;
809 status = priv->line_status;
810 spin_unlock_irqrestore(&priv->lock, flags);
812 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
813 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
814 | ((status & UART_CTS) ? TIOCM_CTS : 0)
815 | ((status & UART_DSR) ? TIOCM_DSR : 0)
816 | ((status & UART_RING) ? TIOCM_RI : 0)
817 | ((status & UART_DCD) ? TIOCM_CD : 0);
819 dbg("%s - result = %x", __func__, result);
824 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
826 struct pl2303_private *priv = usb_get_serial_port_data(port);
828 unsigned int prevstatus;
830 unsigned int changed;
832 spin_lock_irqsave(&priv->lock, flags);
833 prevstatus = priv->line_status;
834 spin_unlock_irqrestore(&priv->lock, flags);
837 interruptible_sleep_on(&priv->delta_msr_wait);
838 /* see if a signal did it */
839 if (signal_pending(current))
842 spin_lock_irqsave(&priv->lock, flags);
843 status = priv->line_status;
844 spin_unlock_irqrestore(&priv->lock, flags);
846 changed=prevstatus^status;
848 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
849 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
850 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
851 ((arg & TIOCM_CTS) && (changed & UART_CTS)) ) {
860 static int pl2303_ioctl(struct tty_struct *tty, struct file *file,
861 unsigned int cmd, unsigned long arg)
863 struct usb_serial_port *port = tty->driver_data;
864 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
868 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
869 return wait_modem_info(port, arg);
872 dbg("%s not supported = 0x%04x", __func__, cmd);
879 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
881 struct usb_serial_port *port = tty->driver_data;
882 struct usb_serial *serial = port->serial;
886 dbg("%s - port %d", __func__, port->number);
888 if (break_state == 0)
892 dbg("%s - turning break %s", __func__, state==BREAK_OFF ? "off" : "on");
894 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
895 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
898 dbg("%s - error sending break = %d", __func__, result);
901 static void pl2303_shutdown(struct usb_serial *serial)
904 struct pl2303_private *priv;
908 for (i = 0; i < serial->num_ports; ++i) {
909 priv = usb_get_serial_port_data(serial->port[i]);
911 pl2303_buf_free(priv->buf);
913 usb_set_serial_port_data(serial->port[i], NULL);
918 static void pl2303_update_line_status(struct usb_serial_port *port,
920 unsigned int actual_length)
923 struct pl2303_private *priv = usb_get_serial_port_data(port);
925 u8 status_idx = UART_STATE;
926 u8 length = UART_STATE + 1;
929 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
930 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
933 if (idv == SIEMENS_VENDOR_ID) {
934 if (idp == SIEMENS_PRODUCT_ID_X65 ||
935 idp == SIEMENS_PRODUCT_ID_SX1 ||
936 idp == SIEMENS_PRODUCT_ID_X75) {
943 if (actual_length < length)
946 /* Save off the uart status for others to look at */
947 spin_lock_irqsave(&priv->lock, flags);
948 priv->line_status = data[status_idx];
949 spin_unlock_irqrestore(&priv->lock, flags);
950 wake_up_interruptible(&priv->delta_msr_wait);
953 static void pl2303_read_int_callback(struct urb *urb)
955 struct usb_serial_port *port = urb->context;
956 unsigned char *data = urb->transfer_buffer;
957 unsigned int actual_length = urb->actual_length;
958 int status = urb->status;
961 dbg("%s (%d)", __func__, port->number);
970 /* this urb is terminated, clean up */
971 dbg("%s - urb shutting down with status: %d", __func__,
975 dbg("%s - nonzero urb status received: %d", __func__,
980 usb_serial_debug_data(debug, &port->dev, __func__,
981 urb->actual_length, urb->transfer_buffer);
983 pl2303_update_line_status(port, data, actual_length);
986 retval = usb_submit_urb(urb, GFP_ATOMIC);
988 dev_err(&urb->dev->dev,
989 "%s - usb_submit_urb failed with result %d\n",
993 static void pl2303_read_bulk_callback(struct urb *urb)
995 struct usb_serial_port *port = urb->context;
996 struct pl2303_private *priv = usb_get_serial_port_data(port);
997 struct tty_struct *tty;
998 unsigned char *data = urb->transfer_buffer;
1002 int status = urb->status;
1006 dbg("%s - port %d", __func__, port->number);
1009 dbg("%s - urb status = %d", __func__, status);
1010 if (!port->port.count) {
1011 dbg("%s - port is closed, exiting.", __func__);
1014 if (status == -EPROTO) {
1015 /* PL2303 mysteriously fails with -EPROTO reschedule
1017 dbg("%s - caught -EPROTO, resubmitting the urb",
1019 urb->dev = port->serial->dev;
1020 result = usb_submit_urb(urb, GFP_ATOMIC);
1022 dev_err(&urb->dev->dev, "%s - failed"
1023 " resubmitting read urb, error %d\n",
1027 dbg("%s - unable to handle the error, exiting.", __func__);
1031 usb_serial_debug_data(debug, &port->dev, __func__,
1032 urb->actual_length, data);
1034 /* get tty_flag from status */
1035 tty_flag = TTY_NORMAL;
1037 spin_lock_irqsave(&priv->lock, flags);
1038 line_status = priv->line_status;
1039 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1040 spin_unlock_irqrestore(&priv->lock, flags);
1041 wake_up_interruptible(&priv->delta_msr_wait);
1043 /* break takes precedence over parity, */
1044 /* which takes precedence over framing errors */
1045 if (line_status & UART_BREAK_ERROR )
1046 tty_flag = TTY_BREAK;
1047 else if (line_status & UART_PARITY_ERROR)
1048 tty_flag = TTY_PARITY;
1049 else if (line_status & UART_FRAME_ERROR)
1050 tty_flag = TTY_FRAME;
1051 dbg("%s - tty_flag = %d", __func__, tty_flag);
1053 tty = port->port.tty;
1054 if (tty && urb->actual_length) {
1055 tty_buffer_request_room(tty, urb->actual_length + 1);
1056 /* overrun is special, not associated with a char */
1057 if (line_status & UART_OVERRUN_ERROR)
1058 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1059 for (i = 0; i < urb->actual_length; ++i)
1060 tty_insert_flip_char(tty, data[i], tty_flag);
1061 tty_flip_buffer_push(tty);
1064 /* Schedule the next read _if_ we are still open */
1065 if (port->port.count) {
1066 urb->dev = port->serial->dev;
1067 result = usb_submit_urb(urb, GFP_ATOMIC);
1069 dev_err(&urb->dev->dev, "%s - failed resubmitting"
1070 " read urb, error %d\n", __func__, result);
1076 static void pl2303_write_bulk_callback(struct urb *urb)
1078 struct usb_serial_port *port = urb->context;
1079 struct pl2303_private *priv = usb_get_serial_port_data(port);
1081 int status = urb->status;
1083 dbg("%s - port %d", __func__, port->number);
1092 /* this urb is terminated, clean up */
1093 dbg("%s - urb shutting down with status: %d", __func__,
1095 priv->write_urb_in_use = 0;
1098 /* error in the urb, so we have to resubmit it */
1099 dbg("%s - Overflow in write", __func__);
1100 dbg("%s - nonzero write bulk status received: %d", __func__,
1102 port->write_urb->transfer_buffer_length = 1;
1103 port->write_urb->dev = port->serial->dev;
1104 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1106 dev_err(&urb->dev->dev, "%s - failed resubmitting write"
1107 " urb, error %d\n", __func__, result);
1112 priv->write_urb_in_use = 0;
1114 /* send any buffered data */
1118 /* All of the device info needed for the PL2303 SIO serial converter */
1119 static struct usb_serial_driver pl2303_device = {
1121 .owner = THIS_MODULE,
1124 .id_table = id_table,
1125 .usb_driver = &pl2303_driver,
1127 .open = pl2303_open,
1128 .close = pl2303_close,
1129 .write = pl2303_write,
1130 .ioctl = pl2303_ioctl,
1131 .break_ctl = pl2303_break_ctl,
1132 .set_termios = pl2303_set_termios,
1133 .tiocmget = pl2303_tiocmget,
1134 .tiocmset = pl2303_tiocmset,
1135 .read_bulk_callback = pl2303_read_bulk_callback,
1136 .read_int_callback = pl2303_read_int_callback,
1137 .write_bulk_callback = pl2303_write_bulk_callback,
1138 .write_room = pl2303_write_room,
1139 .chars_in_buffer = pl2303_chars_in_buffer,
1140 .attach = pl2303_startup,
1141 .shutdown = pl2303_shutdown,
1144 static int __init pl2303_init(void)
1148 retval = usb_serial_register(&pl2303_device);
1150 goto failed_usb_serial_register;
1151 retval = usb_register(&pl2303_driver);
1153 goto failed_usb_register;
1156 failed_usb_register:
1157 usb_serial_deregister(&pl2303_device);
1158 failed_usb_serial_register:
1162 static void __exit pl2303_exit(void)
1164 usb_deregister(&pl2303_driver);
1165 usb_serial_deregister(&pl2303_device);
1168 module_init(pl2303_init);
1169 module_exit(pl2303_exit);
1171 MODULE_DESCRIPTION(DRIVER_DESC);
1172 MODULE_LICENSE("GPL");
1174 module_param(debug, bool, S_IRUGO | S_IWUSR);
1175 MODULE_PARM_DESC(debug, "Debug enabled or not");