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(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
70 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
71 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
72 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
73 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
74 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
75 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
76 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
77 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
78 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
79 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
80 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
81 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
82 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
83 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
84 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
85 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
86 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
87 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
88 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
89 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
90 { USB_DEVICE(HL340_VENDOR_ID, HL340_PRODUCT_ID) },
91 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
92 { } /* Terminating entry */
95 MODULE_DEVICE_TABLE(usb, id_table);
97 static struct usb_driver pl2303_driver = {
99 .probe = usb_serial_probe,
100 .disconnect = usb_serial_disconnect,
101 .id_table = id_table,
102 .suspend = usb_serial_suspend,
103 .resume = usb_serial_resume,
105 .supports_autosuspend = 1,
108 #define SET_LINE_REQUEST_TYPE 0x21
109 #define SET_LINE_REQUEST 0x20
111 #define SET_CONTROL_REQUEST_TYPE 0x21
112 #define SET_CONTROL_REQUEST 0x22
113 #define CONTROL_DTR 0x01
114 #define CONTROL_RTS 0x02
116 #define BREAK_REQUEST_TYPE 0x21
117 #define BREAK_REQUEST 0x23
118 #define BREAK_ON 0xffff
119 #define BREAK_OFF 0x0000
121 #define GET_LINE_REQUEST_TYPE 0xa1
122 #define GET_LINE_REQUEST 0x21
124 #define VENDOR_WRITE_REQUEST_TYPE 0x40
125 #define VENDOR_WRITE_REQUEST 0x01
127 #define VENDOR_READ_REQUEST_TYPE 0xc0
128 #define VENDOR_READ_REQUEST 0x01
130 #define UART_STATE 0x08
131 #define UART_STATE_TRANSIENT_MASK 0x74
132 #define UART_DCD 0x01
133 #define UART_DSR 0x02
134 #define UART_BREAK_ERROR 0x04
135 #define UART_RING 0x08
136 #define UART_FRAME_ERROR 0x10
137 #define UART_PARITY_ERROR 0x20
138 #define UART_OVERRUN_ERROR 0x40
139 #define UART_CTS 0x80
143 type_0, /* don't know the difference between type 0 and */
144 type_1, /* type 1, until someone from prolific tells us... */
145 HX, /* HX version of the pl2303 chip */
148 struct pl2303_private {
150 struct pl2303_buf *buf;
151 int write_urb_in_use;
152 wait_queue_head_t delta_msr_wait;
155 u8 termios_initialized;
156 enum pl2303_type type;
162 * Allocate a circular buffer and all associated memory.
164 static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
166 struct pl2303_buf *pb;
171 pb = kmalloc(sizeof(struct pl2303_buf), GFP_KERNEL);
175 pb->buf_buf = kmalloc(size, GFP_KERNEL);
176 if (pb->buf_buf == NULL) {
182 pb->buf_get = pb->buf_put = pb->buf_buf;
190 * Free the buffer and all associated memory.
192 static void pl2303_buf_free(struct pl2303_buf *pb)
203 * Clear out all data in the circular buffer.
205 static void pl2303_buf_clear(struct pl2303_buf *pb)
208 pb->buf_get = pb->buf_put;
209 /* equivalent to a get of all data available */
213 * pl2303_buf_data_avail
215 * Return the number of bytes of data available in the circular
218 static unsigned int pl2303_buf_data_avail(struct pl2303_buf *pb)
223 return ((pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size);
227 * pl2303_buf_space_avail
229 * Return the number of bytes of space available in the circular
232 static unsigned int pl2303_buf_space_avail(struct pl2303_buf *pb)
237 return ((pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size);
243 * Copy data data from a user buffer and put it into the circular buffer.
244 * Restrict to the amount of space available.
246 * Return the number of bytes copied.
248 static unsigned int pl2303_buf_put(struct pl2303_buf *pb, const char *buf,
256 len = pl2303_buf_space_avail(pb);
263 len = pb->buf_buf + pb->buf_size - pb->buf_put;
265 memcpy(pb->buf_put, buf, len);
266 memcpy(pb->buf_buf, buf+len, count - len);
267 pb->buf_put = pb->buf_buf + count - len;
269 memcpy(pb->buf_put, buf, count);
271 pb->buf_put += count;
272 else /* count == len */
273 pb->buf_put = pb->buf_buf;
282 * Get data from the circular buffer and copy to the given buffer.
283 * Restrict to the amount of data available.
285 * Return the number of bytes copied.
287 static unsigned int pl2303_buf_get(struct pl2303_buf *pb, char *buf,
295 len = pl2303_buf_data_avail(pb);
302 len = pb->buf_buf + pb->buf_size - pb->buf_get;
304 memcpy(buf, pb->buf_get, len);
305 memcpy(buf+len, pb->buf_buf, count - len);
306 pb->buf_get = pb->buf_buf + count - len;
308 memcpy(buf, pb->buf_get, count);
310 pb->buf_get += count;
311 else /* count == len */
312 pb->buf_get = pb->buf_buf;
318 static int pl2303_vendor_read(__u16 value, __u16 index,
319 struct usb_serial *serial, unsigned char *buf)
321 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
322 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
323 value, index, buf, 1, 100);
324 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
325 VENDOR_READ_REQUEST, value, index, res, buf[0]);
329 static int pl2303_vendor_write(__u16 value, __u16 index,
330 struct usb_serial *serial)
332 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
333 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
334 value, index, NULL, 0, 100);
335 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
336 VENDOR_WRITE_REQUEST, value, index, res);
340 static int pl2303_startup(struct usb_serial *serial)
342 struct pl2303_private *priv;
343 enum pl2303_type type = type_0;
347 buf = kmalloc(10, GFP_KERNEL);
351 if (serial->dev->descriptor.bDeviceClass == 0x02)
353 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
355 else if (serial->dev->descriptor.bDeviceClass == 0x00)
357 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
359 dbg("device type: %d", type);
361 for (i = 0; i < serial->num_ports; ++i) {
362 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
365 spin_lock_init(&priv->lock);
366 priv->buf = pl2303_buf_alloc(PL2303_BUF_SIZE);
367 if (priv->buf == NULL) {
371 init_waitqueue_head(&priv->delta_msr_wait);
373 usb_set_serial_port_data(serial->port[i], priv);
376 pl2303_vendor_read(0x8484, 0, serial, buf);
377 pl2303_vendor_write(0x0404, 0, serial);
378 pl2303_vendor_read(0x8484, 0, serial, buf);
379 pl2303_vendor_read(0x8383, 0, serial, buf);
380 pl2303_vendor_read(0x8484, 0, serial, buf);
381 pl2303_vendor_write(0x0404, 1, serial);
382 pl2303_vendor_read(0x8484, 0, serial, buf);
383 pl2303_vendor_read(0x8383, 0, serial, buf);
384 pl2303_vendor_write(0, 1, serial);
385 pl2303_vendor_write(1, 0, serial);
387 pl2303_vendor_write(2, 0x44, serial);
389 pl2303_vendor_write(2, 0x24, serial);
396 for (--i; i>=0; --i) {
397 priv = usb_get_serial_port_data(serial->port[i]);
398 pl2303_buf_free(priv->buf);
400 usb_set_serial_port_data(serial->port[i], NULL);
405 static int set_control_lines(struct usb_device *dev, u8 value)
409 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
410 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
411 value, 0, NULL, 0, 100);
412 dbg("%s - value = %d, retval = %d", __func__, value, retval);
416 static void pl2303_send(struct usb_serial_port *port)
419 struct pl2303_private *priv = usb_get_serial_port_data(port);
422 dbg("%s - port %d", __func__, port->number);
424 spin_lock_irqsave(&priv->lock, flags);
426 if (priv->write_urb_in_use) {
427 spin_unlock_irqrestore(&priv->lock, flags);
431 count = pl2303_buf_get(priv->buf, port->write_urb->transfer_buffer,
432 port->bulk_out_size);
435 spin_unlock_irqrestore(&priv->lock, flags);
439 priv->write_urb_in_use = 1;
441 spin_unlock_irqrestore(&priv->lock, flags);
443 usb_serial_debug_data(debug, &port->dev, __func__, count,
444 port->write_urb->transfer_buffer);
446 port->write_urb->transfer_buffer_length = count;
447 port->write_urb->dev = port->serial->dev;
448 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
450 dev_err(&port->dev, "%s - failed submitting write urb,"
451 " error %d\n", __func__, result);
452 priv->write_urb_in_use = 0;
453 // TODO: reschedule pl2303_send
456 usb_serial_port_softint(port);
459 static int pl2303_write(struct usb_serial_port *port, const unsigned char *buf,
462 struct pl2303_private *priv = usb_get_serial_port_data(port);
465 dbg("%s - port %d, %d bytes", __func__, port->number, count);
470 spin_lock_irqsave(&priv->lock, flags);
471 count = pl2303_buf_put(priv->buf, buf, count);
472 spin_unlock_irqrestore(&priv->lock, flags);
479 static int pl2303_write_room(struct usb_serial_port *port)
481 struct pl2303_private *priv = usb_get_serial_port_data(port);
485 dbg("%s - port %d", __func__, port->number);
487 spin_lock_irqsave(&priv->lock, flags);
488 room = pl2303_buf_space_avail(priv->buf);
489 spin_unlock_irqrestore(&priv->lock, flags);
491 dbg("%s - returns %d", __func__, room);
495 static int pl2303_chars_in_buffer(struct usb_serial_port *port)
497 struct pl2303_private *priv = usb_get_serial_port_data(port);
501 dbg("%s - port %d", __func__, port->number);
503 spin_lock_irqsave(&priv->lock, flags);
504 chars = pl2303_buf_data_avail(priv->buf);
505 spin_unlock_irqrestore(&priv->lock, flags);
507 dbg("%s - returns %d", __func__, chars);
511 static void pl2303_set_termios(struct usb_serial_port *port,
512 struct ktermios *old_termios)
514 struct usb_serial *serial = port->serial;
515 struct pl2303_private *priv = usb_get_serial_port_data(port);
523 dbg("%s - port %d", __func__, port->number);
525 spin_lock_irqsave(&priv->lock, flags);
526 if (!priv->termios_initialized) {
527 *(port->tty->termios) = tty_std_termios;
528 port->tty->termios->c_cflag = B9600 | CS8 | CREAD |
530 port->tty->termios->c_ispeed = 9600;
531 port->tty->termios->c_ospeed = 9600;
532 priv->termios_initialized = 1;
534 spin_unlock_irqrestore(&priv->lock, flags);
536 /* The PL2303 is reported to lose bytes if you change
537 serial settings even to the same values as before. Thus
538 we actually need to filter in this specific case */
540 if (!tty_termios_hw_change(port->tty->termios, old_termios))
543 cflag = port->tty->termios->c_cflag;
545 buf = kzalloc(7, GFP_KERNEL);
547 dev_err(&port->dev, "%s - out of memory.\n", __func__);
548 /* Report back no change occurred */
549 *port->tty->termios = *old_termios;
553 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
554 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
556 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
557 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
560 switch (cflag & CSIZE) {
561 case CS5: buf[6] = 5; break;
562 case CS6: buf[6] = 6; break;
563 case CS7: buf[6] = 7; break;
565 case CS8: buf[6] = 8; break;
567 dbg("%s - data bits = %d", __func__, buf[6]);
570 baud = tty_get_baud_rate(port->tty);;
571 dbg("%s - baud = %d", __func__, baud);
573 buf[0] = baud & 0xff;
574 buf[1] = (baud >> 8) & 0xff;
575 buf[2] = (baud >> 16) & 0xff;
576 buf[3] = (baud >> 24) & 0xff;
579 /* For reference buf[4]=0 is 1 stop bits */
580 /* For reference buf[4]=1 is 1.5 stop bits */
581 /* For reference buf[4]=2 is 2 stop bits */
582 if (cflag & CSTOPB) {
584 dbg("%s - stop bits = 2", __func__);
587 dbg("%s - stop bits = 1", __func__);
590 if (cflag & PARENB) {
591 /* For reference buf[5]=0 is none parity */
592 /* For reference buf[5]=1 is odd parity */
593 /* For reference buf[5]=2 is even parity */
594 /* For reference buf[5]=3 is mark parity */
595 /* For reference buf[5]=4 is space parity */
596 if (cflag & PARODD) {
598 dbg("%s - parity = odd", __func__);
601 dbg("%s - parity = even", __func__);
605 dbg("%s - parity = none", __func__);
608 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
609 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
611 dbg("0x21:0x20:0:0 %d", i);
613 /* change control lines if we are switching to or from B0 */
614 spin_lock_irqsave(&priv->lock, flags);
615 control = priv->line_control;
616 if ((cflag & CBAUD) == B0)
617 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
619 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
620 if (control != priv->line_control) {
621 control = priv->line_control;
622 spin_unlock_irqrestore(&priv->lock, flags);
623 set_control_lines(serial->dev, control);
625 spin_unlock_irqrestore(&priv->lock, flags);
628 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
630 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
631 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
633 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
634 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
636 if (cflag & CRTSCTS) {
637 if (priv->type == HX)
638 pl2303_vendor_write(0x0, 0x61, serial);
640 pl2303_vendor_write(0x0, 0x41, serial);
642 pl2303_vendor_write(0x0, 0x0, serial);
645 /* FIXME: Need to read back resulting baud rate */
647 tty_encode_baud_rate(port->tty, baud, baud);
652 static void pl2303_close(struct usb_serial_port *port, struct file *filp)
654 struct pl2303_private *priv = usb_get_serial_port_data(port);
656 unsigned int c_cflag;
661 dbg("%s - port %d", __func__, port->number);
663 /* wait for data to drain from the buffer */
664 spin_lock_irqsave(&priv->lock, flags);
665 timeout = PL2303_CLOSING_WAIT;
666 init_waitqueue_entry(&wait, current);
667 add_wait_queue(&port->tty->write_wait, &wait);
669 set_current_state(TASK_INTERRUPTIBLE);
670 if (pl2303_buf_data_avail(priv->buf) == 0 ||
671 timeout == 0 || signal_pending(current) ||
672 port->serial->disconnected)
674 spin_unlock_irqrestore(&priv->lock, flags);
675 timeout = schedule_timeout(timeout);
676 spin_lock_irqsave(&priv->lock, flags);
678 set_current_state(TASK_RUNNING);
679 remove_wait_queue(&port->tty->write_wait, &wait);
680 /* clear out any remaining data in the buffer */
681 pl2303_buf_clear(priv->buf);
682 spin_unlock_irqrestore(&priv->lock, flags);
684 /* wait for characters to drain from the device */
685 /* (this is long enough for the entire 256 byte */
686 /* pl2303 hardware buffer to drain with no flow */
687 /* control for data rates of 1200 bps or more, */
688 /* for lower rates we should really know how much */
689 /* data is in the buffer to compute a delay */
690 /* that is not unnecessarily long) */
691 bps = tty_get_baud_rate(port->tty);
693 timeout = max((HZ*2560)/bps,HZ/10);
696 schedule_timeout_interruptible(timeout);
698 /* shutdown our urbs */
699 dbg("%s - shutting down urbs", __func__);
700 usb_kill_urb(port->write_urb);
701 usb_kill_urb(port->read_urb);
702 usb_kill_urb(port->interrupt_in_urb);
705 c_cflag = port->tty->termios->c_cflag;
706 if (c_cflag & HUPCL) {
707 /* drop DTR and RTS */
708 spin_lock_irqsave(&priv->lock, flags);
709 priv->line_control = 0;
710 spin_unlock_irqrestore(&priv->lock, flags);
711 set_control_lines(port->serial->dev, 0);
716 static int pl2303_open(struct usb_serial_port *port, struct file *filp)
718 struct ktermios tmp_termios;
719 struct usb_serial *serial = port->serial;
720 struct pl2303_private *priv = usb_get_serial_port_data(port);
723 dbg("%s - port %d", __func__, port->number);
725 if (priv->type != HX) {
726 usb_clear_halt(serial->dev, port->write_urb->pipe);
727 usb_clear_halt(serial->dev, port->read_urb->pipe);
729 /* reset upstream data pipes */
730 pl2303_vendor_write(8, 0, serial);
731 pl2303_vendor_write(9, 0, serial);
736 pl2303_set_termios(port, &tmp_termios);
739 //FIXME: need to assert RTS and DTR if CRTSCTS off
741 dbg("%s - submitting read urb", __func__);
742 port->read_urb->dev = serial->dev;
743 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
745 dev_err(&port->dev, "%s - failed submitting read urb,"
746 " error %d\n", __func__, result);
747 pl2303_close(port, NULL);
751 dbg("%s - submitting interrupt urb", __func__);
752 port->interrupt_in_urb->dev = serial->dev;
753 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
755 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
756 " error %d\n", __func__, result);
757 pl2303_close(port, NULL);
763 static int pl2303_tiocmset(struct usb_serial_port *port, struct file *file,
764 unsigned int set, unsigned int clear)
766 struct pl2303_private *priv = usb_get_serial_port_data(port);
770 if (!usb_get_intfdata(port->serial->interface))
773 spin_lock_irqsave(&priv->lock, flags);
775 priv->line_control |= CONTROL_RTS;
777 priv->line_control |= CONTROL_DTR;
778 if (clear & TIOCM_RTS)
779 priv->line_control &= ~CONTROL_RTS;
780 if (clear & TIOCM_DTR)
781 priv->line_control &= ~CONTROL_DTR;
782 control = priv->line_control;
783 spin_unlock_irqrestore(&priv->lock, flags);
785 return set_control_lines(port->serial->dev, control);
788 static int pl2303_tiocmget(struct usb_serial_port *port, struct file *file)
790 struct pl2303_private *priv = usb_get_serial_port_data(port);
796 dbg("%s (%d)", __func__, port->number);
798 if (!usb_get_intfdata(port->serial->interface))
801 spin_lock_irqsave(&priv->lock, flags);
802 mcr = priv->line_control;
803 status = priv->line_status;
804 spin_unlock_irqrestore(&priv->lock, flags);
806 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
807 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
808 | ((status & UART_CTS) ? TIOCM_CTS : 0)
809 | ((status & UART_DSR) ? TIOCM_DSR : 0)
810 | ((status & UART_RING) ? TIOCM_RI : 0)
811 | ((status & UART_DCD) ? TIOCM_CD : 0);
813 dbg("%s - result = %x", __func__, result);
818 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
820 struct pl2303_private *priv = usb_get_serial_port_data(port);
822 unsigned int prevstatus;
824 unsigned int changed;
826 spin_lock_irqsave(&priv->lock, flags);
827 prevstatus = priv->line_status;
828 spin_unlock_irqrestore(&priv->lock, flags);
831 interruptible_sleep_on(&priv->delta_msr_wait);
832 /* see if a signal did it */
833 if (signal_pending(current))
836 spin_lock_irqsave(&priv->lock, flags);
837 status = priv->line_status;
838 spin_unlock_irqrestore(&priv->lock, flags);
840 changed=prevstatus^status;
842 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
843 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
844 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
845 ((arg & TIOCM_CTS) && (changed & UART_CTS)) ) {
854 static int pl2303_ioctl(struct usb_serial_port *port, struct file *file,
855 unsigned int cmd, unsigned long arg)
857 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
861 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
862 return wait_modem_info(port, arg);
865 dbg("%s not supported = 0x%04x", __func__, cmd);
872 static void pl2303_break_ctl(struct usb_serial_port *port, int break_state)
874 struct usb_serial *serial = port->serial;
878 dbg("%s - port %d", __func__, port->number);
880 if (break_state == 0)
884 dbg("%s - turning break %s", __func__, state==BREAK_OFF ? "off" : "on");
886 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
887 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
890 dbg("%s - error sending break = %d", __func__, result);
893 static void pl2303_shutdown(struct usb_serial *serial)
896 struct pl2303_private *priv;
900 for (i = 0; i < serial->num_ports; ++i) {
901 priv = usb_get_serial_port_data(serial->port[i]);
903 pl2303_buf_free(priv->buf);
905 usb_set_serial_port_data(serial->port[i], NULL);
910 static void pl2303_update_line_status(struct usb_serial_port *port,
912 unsigned int actual_length)
915 struct pl2303_private *priv = usb_get_serial_port_data(port);
917 u8 status_idx = UART_STATE;
918 u8 length = UART_STATE + 1;
921 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
922 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
925 if (idv == SIEMENS_VENDOR_ID) {
926 if (idp == SIEMENS_PRODUCT_ID_X65 ||
927 idp == SIEMENS_PRODUCT_ID_SX1 ||
928 idp == SIEMENS_PRODUCT_ID_X75) {
935 if (actual_length < length)
938 /* Save off the uart status for others to look at */
939 spin_lock_irqsave(&priv->lock, flags);
940 priv->line_status = data[status_idx];
941 spin_unlock_irqrestore(&priv->lock, flags);
942 wake_up_interruptible(&priv->delta_msr_wait);
945 static void pl2303_read_int_callback(struct urb *urb)
947 struct usb_serial_port *port = urb->context;
948 unsigned char *data = urb->transfer_buffer;
949 unsigned int actual_length = urb->actual_length;
950 int status = urb->status;
953 dbg("%s (%d)", __func__, port->number);
962 /* this urb is terminated, clean up */
963 dbg("%s - urb shutting down with status: %d", __func__,
967 dbg("%s - nonzero urb status received: %d", __func__,
972 usb_serial_debug_data(debug, &port->dev, __func__,
973 urb->actual_length, urb->transfer_buffer);
975 pl2303_update_line_status(port, data, actual_length);
978 retval = usb_submit_urb(urb, GFP_ATOMIC);
980 dev_err(&urb->dev->dev,
981 "%s - usb_submit_urb failed with result %d\n",
985 static void pl2303_read_bulk_callback(struct urb *urb)
987 struct usb_serial_port *port = urb->context;
988 struct pl2303_private *priv = usb_get_serial_port_data(port);
989 struct tty_struct *tty;
990 unsigned char *data = urb->transfer_buffer;
994 int status = urb->status;
998 dbg("%s - port %d", __func__, port->number);
1001 dbg("%s - urb status = %d", __func__, status);
1002 if (!port->open_count) {
1003 dbg("%s - port is closed, exiting.", __func__);
1006 if (status == -EPROTO) {
1007 /* PL2303 mysteriously fails with -EPROTO reschedule
1009 dbg("%s - caught -EPROTO, resubmitting the urb",
1011 urb->dev = port->serial->dev;
1012 result = usb_submit_urb(urb, GFP_ATOMIC);
1014 dev_err(&urb->dev->dev, "%s - failed"
1015 " resubmitting read urb, error %d\n",
1019 dbg("%s - unable to handle the error, exiting.", __func__);
1023 usb_serial_debug_data(debug, &port->dev, __func__,
1024 urb->actual_length, data);
1026 /* get tty_flag from status */
1027 tty_flag = TTY_NORMAL;
1029 spin_lock_irqsave(&priv->lock, flags);
1030 line_status = priv->line_status;
1031 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1032 spin_unlock_irqrestore(&priv->lock, flags);
1033 wake_up_interruptible(&priv->delta_msr_wait);
1035 /* break takes precedence over parity, */
1036 /* which takes precedence over framing errors */
1037 if (line_status & UART_BREAK_ERROR )
1038 tty_flag = TTY_BREAK;
1039 else if (line_status & UART_PARITY_ERROR)
1040 tty_flag = TTY_PARITY;
1041 else if (line_status & UART_FRAME_ERROR)
1042 tty_flag = TTY_FRAME;
1043 dbg("%s - tty_flag = %d", __func__, tty_flag);
1046 if (tty && urb->actual_length) {
1047 tty_buffer_request_room(tty, urb->actual_length + 1);
1048 /* overrun is special, not associated with a char */
1049 if (line_status & UART_OVERRUN_ERROR)
1050 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1051 for (i = 0; i < urb->actual_length; ++i)
1052 tty_insert_flip_char(tty, data[i], tty_flag);
1053 tty_flip_buffer_push(tty);
1056 /* Schedule the next read _if_ we are still open */
1057 if (port->open_count) {
1058 urb->dev = port->serial->dev;
1059 result = usb_submit_urb(urb, GFP_ATOMIC);
1061 dev_err(&urb->dev->dev, "%s - failed resubmitting"
1062 " read urb, error %d\n", __func__, result);
1068 static void pl2303_write_bulk_callback(struct urb *urb)
1070 struct usb_serial_port *port = urb->context;
1071 struct pl2303_private *priv = usb_get_serial_port_data(port);
1073 int status = urb->status;
1075 dbg("%s - port %d", __func__, port->number);
1084 /* this urb is terminated, clean up */
1085 dbg("%s - urb shutting down with status: %d", __func__,
1087 priv->write_urb_in_use = 0;
1090 /* error in the urb, so we have to resubmit it */
1091 dbg("%s - Overflow in write", __func__);
1092 dbg("%s - nonzero write bulk status received: %d", __func__,
1094 port->write_urb->transfer_buffer_length = 1;
1095 port->write_urb->dev = port->serial->dev;
1096 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1098 dev_err(&urb->dev->dev, "%s - failed resubmitting write"
1099 " urb, error %d\n", __func__, result);
1104 priv->write_urb_in_use = 0;
1106 /* send any buffered data */
1110 /* All of the device info needed for the PL2303 SIO serial converter */
1111 static struct usb_serial_driver pl2303_device = {
1113 .owner = THIS_MODULE,
1116 .id_table = id_table,
1117 .usb_driver = &pl2303_driver,
1119 .open = pl2303_open,
1120 .close = pl2303_close,
1121 .write = pl2303_write,
1122 .ioctl = pl2303_ioctl,
1123 .break_ctl = pl2303_break_ctl,
1124 .set_termios = pl2303_set_termios,
1125 .tiocmget = pl2303_tiocmget,
1126 .tiocmset = pl2303_tiocmset,
1127 .read_bulk_callback = pl2303_read_bulk_callback,
1128 .read_int_callback = pl2303_read_int_callback,
1129 .write_bulk_callback = pl2303_write_bulk_callback,
1130 .write_room = pl2303_write_room,
1131 .chars_in_buffer = pl2303_chars_in_buffer,
1132 .attach = pl2303_startup,
1133 .shutdown = pl2303_shutdown,
1136 static int __init pl2303_init(void)
1140 retval = usb_serial_register(&pl2303_device);
1142 goto failed_usb_serial_register;
1143 retval = usb_register(&pl2303_driver);
1145 goto failed_usb_register;
1148 failed_usb_register:
1149 usb_serial_deregister(&pl2303_device);
1150 failed_usb_serial_register:
1154 static void __exit pl2303_exit(void)
1156 usb_deregister(&pl2303_driver);
1157 usb_serial_deregister(&pl2303_device);
1160 module_init(pl2303_init);
1161 module_exit(pl2303_exit);
1163 MODULE_DESCRIPTION(DRIVER_DESC);
1164 MODULE_LICENSE("GPL");
1166 module_param(debug, bool, S_IRUGO | S_IWUSR);
1167 MODULE_PARM_DESC(debug, "Debug enabled or not");