2 * Prolific PL2303 USB to serial adaptor driver
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
17 #include <linux/kernel.h>
18 #include <linux/errno.h>
19 #include <linux/slab.h>
20 #include <linux/tty.h>
21 #include <linux/tty_driver.h>
22 #include <linux/tty_flip.h>
23 #include <linux/serial.h>
24 #include <linux/module.h>
25 #include <linux/moduleparam.h>
26 #include <linux/spinlock.h>
27 #include <linux/uaccess.h>
28 #include <linux/usb.h>
29 #include <linux/usb/serial.h>
30 #include <asm/unaligned.h>
34 #define PL2303_QUIRK_UART_STATE_IDX0 BIT(0)
35 #define PL2303_QUIRK_LEGACY BIT(1)
37 static const struct usb_device_id id_table[] = {
38 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) },
39 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
40 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
41 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
42 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
43 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
44 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
48 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
49 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
50 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
51 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
52 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
53 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
54 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
55 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
56 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
57 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
58 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
59 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
60 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
61 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
62 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
63 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
64 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
65 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
66 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
67 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
68 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75),
69 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
70 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
71 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
72 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
73 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
74 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
75 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
76 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
77 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
78 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
79 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
80 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
81 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
82 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
83 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
84 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
85 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
86 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
87 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
88 { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) },
89 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
90 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
91 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
92 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
93 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
94 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
95 { } /* Terminating entry */
98 MODULE_DEVICE_TABLE(usb, id_table);
100 #define SET_LINE_REQUEST_TYPE 0x21
101 #define SET_LINE_REQUEST 0x20
103 #define SET_CONTROL_REQUEST_TYPE 0x21
104 #define SET_CONTROL_REQUEST 0x22
105 #define CONTROL_DTR 0x01
106 #define CONTROL_RTS 0x02
108 #define BREAK_REQUEST_TYPE 0x21
109 #define BREAK_REQUEST 0x23
110 #define BREAK_ON 0xffff
111 #define BREAK_OFF 0x0000
113 #define GET_LINE_REQUEST_TYPE 0xa1
114 #define GET_LINE_REQUEST 0x21
116 #define VENDOR_WRITE_REQUEST_TYPE 0x40
117 #define VENDOR_WRITE_REQUEST 0x01
119 #define VENDOR_READ_REQUEST_TYPE 0xc0
120 #define VENDOR_READ_REQUEST 0x01
122 #define UART_STATE_INDEX 8
123 #define UART_STATE_MSR_MASK 0x8b
124 #define UART_STATE_TRANSIENT_MASK 0x74
125 #define UART_DCD 0x01
126 #define UART_DSR 0x02
127 #define UART_BREAK_ERROR 0x04
128 #define UART_RING 0x08
129 #define UART_FRAME_ERROR 0x10
130 #define UART_PARITY_ERROR 0x20
131 #define UART_OVERRUN_ERROR 0x40
132 #define UART_CTS 0x80
136 TYPE_01, /* Type 0 and 1 (difference unknown) */
137 TYPE_HX, /* HX version of the pl2303 chip */
141 struct pl2303_type_data {
142 speed_t max_baud_rate;
143 unsigned long quirks;
146 struct pl2303_serial_private {
147 const struct pl2303_type_data *type;
148 unsigned long quirks;
151 struct pl2303_private {
159 static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
161 .max_baud_rate = 1228800,
162 .quirks = PL2303_QUIRK_LEGACY,
166 static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
167 unsigned char buf[1])
169 struct device *dev = &serial->interface->dev;
172 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
173 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
174 value, 0, buf, 1, 100);
176 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
184 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
189 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
191 struct device *dev = &serial->interface->dev;
194 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
196 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
197 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
198 value, index, NULL, 0, 100);
200 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
208 static int pl2303_probe(struct usb_serial *serial,
209 const struct usb_device_id *id)
211 usb_set_serial_data(serial, (void *)id->driver_info);
216 static int pl2303_startup(struct usb_serial *serial)
218 struct pl2303_serial_private *spriv;
219 enum pl2303_type type = TYPE_01;
222 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
226 buf = kmalloc(1, GFP_KERNEL);
232 if (serial->dev->descriptor.bDeviceClass == 0x02)
233 type = TYPE_01; /* type 0 */
234 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
236 else if (serial->dev->descriptor.bDeviceClass == 0x00)
237 type = TYPE_01; /* type 1 */
238 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
239 type = TYPE_01; /* type 1 */
240 dev_dbg(&serial->interface->dev, "device type: %d\n", type);
242 spriv->type = &pl2303_type_data[type];
243 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
244 spriv->quirks |= spriv->type->quirks;
246 usb_set_serial_data(serial, spriv);
248 pl2303_vendor_read(serial, 0x8484, buf);
249 pl2303_vendor_write(serial, 0x0404, 0);
250 pl2303_vendor_read(serial, 0x8484, buf);
251 pl2303_vendor_read(serial, 0x8383, buf);
252 pl2303_vendor_read(serial, 0x8484, buf);
253 pl2303_vendor_write(serial, 0x0404, 1);
254 pl2303_vendor_read(serial, 0x8484, buf);
255 pl2303_vendor_read(serial, 0x8383, buf);
256 pl2303_vendor_write(serial, 0, 1);
257 pl2303_vendor_write(serial, 1, 0);
258 if (spriv->quirks & PL2303_QUIRK_LEGACY)
259 pl2303_vendor_write(serial, 2, 0x24);
261 pl2303_vendor_write(serial, 2, 0x44);
268 static void pl2303_release(struct usb_serial *serial)
270 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
275 static int pl2303_port_probe(struct usb_serial_port *port)
277 struct pl2303_private *priv;
279 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
283 spin_lock_init(&priv->lock);
285 usb_set_serial_port_data(port, priv);
287 port->port.drain_delay = 256;
292 static int pl2303_port_remove(struct usb_serial_port *port)
294 struct pl2303_private *priv = usb_get_serial_port_data(port);
301 static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
303 struct usb_device *dev = port->serial->dev;
306 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
308 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
309 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
310 value, 0, NULL, 0, 100);
312 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
318 * Returns the nearest supported baud rate that can be set directly without
321 static speed_t pl2303_get_supported_baud_rate(speed_t baud)
323 static const speed_t baud_sup[] = {
324 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
325 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
326 614400, 921600, 1228800, 2457600, 3000000, 6000000
331 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
332 if (baud_sup[i] > baud)
336 if (i == ARRAY_SIZE(baud_sup))
337 baud = baud_sup[i - 1];
338 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
339 baud = baud_sup[i - 1];
347 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
350 static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
353 put_unaligned_le32(baud, buf);
358 static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
364 * Apparently the formula is:
365 * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
367 tmp = 12000000 * 32 / baud;
370 buf[1] = (tmp >= 256);
380 static void pl2303_encode_baud_rate(struct tty_struct *tty,
381 struct usb_serial_port *port,
384 struct usb_serial *serial = port->serial;
385 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
389 baud = tty_get_baud_rate(tty);
390 dev_dbg(&port->dev, "baud requested = %u\n", baud);
394 if (spriv->type->max_baud_rate)
395 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
397 * Set baud rate to nearest supported value.
399 * NOTE: Baud rate 500k can only be set using divisors.
401 baud_sup = pl2303_get_supported_baud_rate(baud);
404 baud = pl2303_encode_baud_rate_divisor(buf, baud);
406 baud = pl2303_encode_baud_rate_direct(buf, baud_sup);
408 /* Save resulting baud rate */
409 tty_encode_baud_rate(tty, baud, baud);
410 dev_dbg(&port->dev, "baud set = %u\n", baud);
413 static int pl2303_get_line_request(struct usb_serial_port *port,
414 unsigned char buf[7])
416 struct usb_device *udev = port->serial->dev;
419 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
420 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
423 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
431 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
436 static int pl2303_set_line_request(struct usb_serial_port *port,
437 unsigned char buf[7])
439 struct usb_device *udev = port->serial->dev;
442 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
443 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
446 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
454 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
459 static void pl2303_set_termios(struct tty_struct *tty,
460 struct usb_serial_port *port, struct ktermios *old_termios)
462 struct usb_serial *serial = port->serial;
463 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
464 struct pl2303_private *priv = usb_get_serial_port_data(port);
470 if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios))
473 buf = kzalloc(7, GFP_KERNEL);
475 /* Report back no change occurred */
477 tty->termios = *old_termios;
481 pl2303_get_line_request(port, buf);
483 switch (C_CSIZE(tty)) {
497 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
499 /* For reference buf[0]:buf[3] baud rate value */
500 pl2303_encode_baud_rate(tty, port, &buf[0]);
502 /* For reference buf[4]=0 is 1 stop bits */
503 /* For reference buf[4]=1 is 1.5 stop bits */
504 /* For reference buf[4]=2 is 2 stop bits */
507 * NOTE: Comply with "real" UARTs / RS232:
508 * use 1.5 instead of 2 stop bits with 5 data bits
510 if (C_CSIZE(tty) == CS5) {
512 dev_dbg(&port->dev, "stop bits = 1.5\n");
515 dev_dbg(&port->dev, "stop bits = 2\n");
519 dev_dbg(&port->dev, "stop bits = 1\n");
523 /* For reference buf[5]=0 is none parity */
524 /* For reference buf[5]=1 is odd parity */
525 /* For reference buf[5]=2 is even parity */
526 /* For reference buf[5]=3 is mark parity */
527 /* For reference buf[5]=4 is space parity */
531 dev_dbg(&port->dev, "parity = mark\n");
534 dev_dbg(&port->dev, "parity = odd\n");
539 dev_dbg(&port->dev, "parity = space\n");
542 dev_dbg(&port->dev, "parity = even\n");
547 dev_dbg(&port->dev, "parity = none\n");
551 * Some PL2303 are known to lose bytes if you change serial settings
552 * even to the same values as before. Thus we actually need to filter
553 * in this specific case.
555 * Note that the tty_termios_hw_change check above is not sufficient
556 * as a previously requested baud rate may differ from the one
557 * actually used (and stored in old_termios).
559 * NOTE: No additional locking needed for line_settings as it is
560 * only used in set_termios, which is serialised against itself.
562 if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
563 ret = pl2303_set_line_request(port, buf);
565 memcpy(priv->line_settings, buf, 7);
568 /* change control lines if we are switching to or from B0 */
569 spin_lock_irqsave(&priv->lock, flags);
570 control = priv->line_control;
571 if (C_BAUD(tty) == B0)
572 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
573 else if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
574 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
575 if (control != priv->line_control) {
576 control = priv->line_control;
577 spin_unlock_irqrestore(&priv->lock, flags);
578 pl2303_set_control_lines(port, control);
580 spin_unlock_irqrestore(&priv->lock, flags);
583 if (C_CRTSCTS(tty)) {
584 if (spriv->quirks & PL2303_QUIRK_LEGACY)
585 pl2303_vendor_write(serial, 0x0, 0x41);
587 pl2303_vendor_write(serial, 0x0, 0x61);
589 pl2303_vendor_write(serial, 0x0, 0x0);
595 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
597 struct pl2303_private *priv = usb_get_serial_port_data(port);
601 spin_lock_irqsave(&priv->lock, flags);
603 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
605 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
606 control = priv->line_control;
607 spin_unlock_irqrestore(&priv->lock, flags);
609 pl2303_set_control_lines(port, control);
612 static void pl2303_close(struct usb_serial_port *port)
614 usb_serial_generic_close(port);
615 usb_kill_urb(port->interrupt_in_urb);
618 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
620 struct usb_serial *serial = port->serial;
621 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
624 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
625 usb_clear_halt(serial->dev, port->write_urb->pipe);
626 usb_clear_halt(serial->dev, port->read_urb->pipe);
628 /* reset upstream data pipes */
629 pl2303_vendor_write(serial, 8, 0);
630 pl2303_vendor_write(serial, 9, 0);
635 pl2303_set_termios(tty, port, NULL);
637 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
639 dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
644 result = usb_serial_generic_open(tty, port);
646 usb_kill_urb(port->interrupt_in_urb);
653 static int pl2303_tiocmset(struct tty_struct *tty,
654 unsigned int set, unsigned int clear)
656 struct usb_serial_port *port = tty->driver_data;
657 struct pl2303_private *priv = usb_get_serial_port_data(port);
662 spin_lock_irqsave(&priv->lock, flags);
664 priv->line_control |= CONTROL_RTS;
666 priv->line_control |= CONTROL_DTR;
667 if (clear & TIOCM_RTS)
668 priv->line_control &= ~CONTROL_RTS;
669 if (clear & TIOCM_DTR)
670 priv->line_control &= ~CONTROL_DTR;
671 control = priv->line_control;
672 spin_unlock_irqrestore(&priv->lock, flags);
674 ret = pl2303_set_control_lines(port, control);
676 return usb_translate_errors(ret);
681 static int pl2303_tiocmget(struct tty_struct *tty)
683 struct usb_serial_port *port = tty->driver_data;
684 struct pl2303_private *priv = usb_get_serial_port_data(port);
690 spin_lock_irqsave(&priv->lock, flags);
691 mcr = priv->line_control;
692 status = priv->line_status;
693 spin_unlock_irqrestore(&priv->lock, flags);
695 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
696 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
697 | ((status & UART_CTS) ? TIOCM_CTS : 0)
698 | ((status & UART_DSR) ? TIOCM_DSR : 0)
699 | ((status & UART_RING) ? TIOCM_RI : 0)
700 | ((status & UART_DCD) ? TIOCM_CD : 0);
702 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
707 static int pl2303_carrier_raised(struct usb_serial_port *port)
709 struct pl2303_private *priv = usb_get_serial_port_data(port);
711 if (priv->line_status & UART_DCD)
717 static int pl2303_ioctl(struct tty_struct *tty,
718 unsigned int cmd, unsigned long arg)
720 struct serial_struct ser;
721 struct usb_serial_port *port = tty->driver_data;
725 memset(&ser, 0, sizeof ser);
726 ser.type = PORT_16654;
727 ser.line = port->minor;
728 ser.port = port->port_number;
729 ser.baud_base = 460800;
731 if (copy_to_user((void __user *)arg, &ser, sizeof ser))
742 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
744 struct usb_serial_port *port = tty->driver_data;
745 struct usb_serial *serial = port->serial;
749 if (break_state == 0)
754 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
755 state == BREAK_OFF ? "off" : "on");
757 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
758 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
761 dev_err(&port->dev, "error sending break = %d\n", result);
764 static void pl2303_update_line_status(struct usb_serial_port *port,
766 unsigned int actual_length)
768 struct usb_serial *serial = port->serial;
769 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
770 struct pl2303_private *priv = usb_get_serial_port_data(port);
771 struct tty_struct *tty;
773 unsigned int status_idx = UART_STATE_INDEX;
777 if (spriv->quirks & PL2303_QUIRK_UART_STATE_IDX0)
780 if (actual_length < status_idx + 1)
783 status = data[status_idx];
785 /* Save off the uart status for others to look at */
786 spin_lock_irqsave(&priv->lock, flags);
787 delta = priv->line_status ^ status;
788 priv->line_status = status;
789 spin_unlock_irqrestore(&priv->lock, flags);
791 if (status & UART_BREAK_ERROR)
792 usb_serial_handle_break(port);
794 if (delta & UART_STATE_MSR_MASK) {
795 if (delta & UART_CTS)
797 if (delta & UART_DSR)
799 if (delta & UART_RING)
801 if (delta & UART_DCD) {
803 tty = tty_port_tty_get(&port->port);
805 usb_serial_handle_dcd_change(port, tty,
811 wake_up_interruptible(&port->port.delta_msr_wait);
815 static void pl2303_read_int_callback(struct urb *urb)
817 struct usb_serial_port *port = urb->context;
818 unsigned char *data = urb->transfer_buffer;
819 unsigned int actual_length = urb->actual_length;
820 int status = urb->status;
830 /* this urb is terminated, clean up */
831 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
835 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
840 usb_serial_debug_data(&port->dev, __func__,
841 urb->actual_length, urb->transfer_buffer);
843 pl2303_update_line_status(port, data, actual_length);
846 retval = usb_submit_urb(urb, GFP_ATOMIC);
849 "%s - usb_submit_urb failed with result %d\n",
854 static void pl2303_process_read_urb(struct urb *urb)
856 struct usb_serial_port *port = urb->context;
857 struct pl2303_private *priv = usb_get_serial_port_data(port);
858 unsigned char *data = urb->transfer_buffer;
859 char tty_flag = TTY_NORMAL;
864 /* update line status */
865 spin_lock_irqsave(&priv->lock, flags);
866 line_status = priv->line_status;
867 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
868 spin_unlock_irqrestore(&priv->lock, flags);
870 if (!urb->actual_length)
874 * Break takes precedence over parity, which takes precedence over
877 if (line_status & UART_BREAK_ERROR)
878 tty_flag = TTY_BREAK;
879 else if (line_status & UART_PARITY_ERROR)
880 tty_flag = TTY_PARITY;
881 else if (line_status & UART_FRAME_ERROR)
882 tty_flag = TTY_FRAME;
884 if (tty_flag != TTY_NORMAL)
885 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__,
887 /* overrun is special, not associated with a char */
888 if (line_status & UART_OVERRUN_ERROR)
889 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
891 if (port->port.console && port->sysrq) {
892 for (i = 0; i < urb->actual_length; ++i)
893 if (!usb_serial_handle_sysrq_char(port, data[i]))
894 tty_insert_flip_char(&port->port, data[i],
897 tty_insert_flip_string_fixed_flag(&port->port, data, tty_flag,
901 tty_flip_buffer_push(&port->port);
904 static struct usb_serial_driver pl2303_device = {
906 .owner = THIS_MODULE,
909 .id_table = id_table,
912 .bulk_out_size = 256,
914 .close = pl2303_close,
915 .dtr_rts = pl2303_dtr_rts,
916 .carrier_raised = pl2303_carrier_raised,
917 .ioctl = pl2303_ioctl,
918 .break_ctl = pl2303_break_ctl,
919 .set_termios = pl2303_set_termios,
920 .tiocmget = pl2303_tiocmget,
921 .tiocmset = pl2303_tiocmset,
922 .tiocmiwait = usb_serial_generic_tiocmiwait,
923 .process_read_urb = pl2303_process_read_urb,
924 .read_int_callback = pl2303_read_int_callback,
925 .probe = pl2303_probe,
926 .attach = pl2303_startup,
927 .release = pl2303_release,
928 .port_probe = pl2303_port_probe,
929 .port_remove = pl2303_port_remove,
932 static struct usb_serial_driver * const serial_drivers[] = {
936 module_usb_serial_driver(serial_drivers, id_table);
938 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
939 MODULE_LICENSE("GPL");