1 // SPDX-License-Identifier: GPL-2.0
3 * Prolific PL2303 USB to serial adaptor driver
6 * Copyright (C) 2003 IBM Corp.
8 * Original driver for 2.2.x by anonymous
10 * See Documentation/usb/usb-serial.rst for more information on using this
14 #include <linux/kernel.h>
15 #include <linux/errno.h>
16 #include <linux/slab.h>
17 #include <linux/tty.h>
18 #include <linux/tty_driver.h>
19 #include <linux/tty_flip.h>
20 #include <linux/serial.h>
21 #include <linux/module.h>
22 #include <linux/moduleparam.h>
23 #include <linux/spinlock.h>
24 #include <linux/uaccess.h>
25 #include <linux/usb.h>
26 #include <linux/usb/serial.h>
27 #include <asm/unaligned.h>
31 #define PL2303_QUIRK_UART_STATE_IDX0 BIT(0)
32 #define PL2303_QUIRK_LEGACY BIT(1)
33 #define PL2303_QUIRK_ENDPOINT_HACK BIT(2)
35 static const struct usb_device_id id_table[] = {
36 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID),
37 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
38 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
39 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
40 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
41 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_CHILITAG) },
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(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ZTEK) },
49 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_TB) },
50 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GC) },
51 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GB) },
52 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GT) },
53 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GL) },
54 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GE) },
55 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GS) },
56 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
57 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
58 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID),
59 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
60 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC485),
61 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
62 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC232B),
63 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
64 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID2) },
65 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
66 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
67 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
68 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
69 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
70 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
71 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
72 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
73 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
74 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
75 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
76 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
77 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
78 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
80 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
81 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75),
82 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
83 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81),
84 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
85 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
86 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
87 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
88 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
89 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
90 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
91 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
92 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
93 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
94 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID),
95 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
96 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
97 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
98 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
99 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
100 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
101 { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },
102 { USB_DEVICE(HP_VENDOR_ID, HP_LD381_PRODUCT_ID) },
103 { USB_DEVICE(HP_VENDOR_ID, HP_LD381GC_PRODUCT_ID) },
104 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
105 { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },
106 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
107 { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) },
108 { USB_DEVICE(HP_VENDOR_ID, HP_LM920_PRODUCT_ID) },
109 { USB_DEVICE(HP_VENDOR_ID, HP_LM940_PRODUCT_ID) },
110 { USB_DEVICE(HP_VENDOR_ID, HP_TD620_PRODUCT_ID) },
111 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
112 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
113 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
114 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
115 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
116 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530GC_PRODUCT_ID) },
117 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
118 { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
119 { } /* Terminating entry */
122 MODULE_DEVICE_TABLE(usb, id_table);
124 #define SET_LINE_REQUEST_TYPE 0x21
125 #define SET_LINE_REQUEST 0x20
127 #define SET_CONTROL_REQUEST_TYPE 0x21
128 #define SET_CONTROL_REQUEST 0x22
129 #define CONTROL_DTR 0x01
130 #define CONTROL_RTS 0x02
132 #define BREAK_REQUEST_TYPE 0x21
133 #define BREAK_REQUEST 0x23
134 #define BREAK_ON 0xffff
135 #define BREAK_OFF 0x0000
137 #define GET_LINE_REQUEST_TYPE 0xa1
138 #define GET_LINE_REQUEST 0x21
140 #define VENDOR_WRITE_REQUEST_TYPE 0x40
141 #define VENDOR_WRITE_REQUEST 0x01
142 #define VENDOR_WRITE_NREQUEST 0x80
144 #define VENDOR_READ_REQUEST_TYPE 0xc0
145 #define VENDOR_READ_REQUEST 0x01
146 #define VENDOR_READ_NREQUEST 0x81
148 #define UART_STATE_INDEX 8
149 #define UART_STATE_MSR_MASK 0x8b
150 #define UART_STATE_TRANSIENT_MASK 0x74
151 #define UART_DCD 0x01
152 #define UART_DSR 0x02
153 #define UART_BREAK_ERROR 0x04
154 #define UART_RING 0x08
155 #define UART_FRAME_ERROR 0x10
156 #define UART_PARITY_ERROR 0x20
157 #define UART_OVERRUN_ERROR 0x40
158 #define UART_CTS 0x80
160 #define PL2303_FLOWCTRL_MASK 0xf0
162 #define PL2303_READ_TYPE_HX_STATUS 0x8080
164 #define PL2303_HXN_RESET_REG 0x07
165 #define PL2303_HXN_RESET_UPSTREAM_PIPE 0x02
166 #define PL2303_HXN_RESET_DOWNSTREAM_PIPE 0x01
168 #define PL2303_HXN_FLOWCTRL_REG 0x0a
169 #define PL2303_HXN_FLOWCTRL_MASK 0x1c
170 #define PL2303_HXN_FLOWCTRL_NONE 0x1c
171 #define PL2303_HXN_FLOWCTRL_RTS_CTS 0x18
172 #define PL2303_HXN_FLOWCTRL_XON_XOFF 0x0c
174 static void pl2303_set_break(struct usb_serial_port *port, bool enable);
186 struct pl2303_type_data {
188 speed_t max_baud_rate;
189 unsigned long quirks;
190 unsigned int no_autoxonxoff:1;
191 unsigned int no_divisors:1;
192 unsigned int alt_divisors:1;
195 struct pl2303_serial_private {
196 const struct pl2303_type_data *type;
197 unsigned long quirks;
200 struct pl2303_private {
208 static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
211 .max_baud_rate = 1228800,
212 .quirks = PL2303_QUIRK_LEGACY,
213 .no_autoxonxoff = true,
217 .max_baud_rate = 6000000,
221 .max_baud_rate = 6000000,
222 .alt_divisors = true,
226 .max_baud_rate = 12000000,
227 .alt_divisors = true,
231 .max_baud_rate = 12000000,
235 .max_baud_rate = 12000000,
240 static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
241 unsigned char buf[1])
243 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
244 struct device *dev = &serial->interface->dev;
248 if (spriv->type == &pl2303_type_data[TYPE_HXN])
249 request = VENDOR_READ_NREQUEST;
251 request = VENDOR_READ_REQUEST;
253 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
254 request, VENDOR_READ_REQUEST_TYPE,
255 value, 0, buf, 1, 100);
257 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
265 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
270 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
272 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
273 struct device *dev = &serial->interface->dev;
277 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
279 if (spriv->type == &pl2303_type_data[TYPE_HXN])
280 request = VENDOR_WRITE_NREQUEST;
282 request = VENDOR_WRITE_REQUEST;
284 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
285 request, VENDOR_WRITE_REQUEST_TYPE,
286 value, index, NULL, 0, 100);
288 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
296 static int pl2303_update_reg(struct usb_serial *serial, u8 reg, u8 mask, u8 val)
298 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
302 buf = kmalloc(1, GFP_KERNEL);
306 if (spriv->type == &pl2303_type_data[TYPE_HXN])
307 ret = pl2303_vendor_read(serial, reg, buf);
309 ret = pl2303_vendor_read(serial, reg | 0x80, buf);
317 ret = pl2303_vendor_write(serial, reg, *buf);
324 static int pl2303_probe(struct usb_serial *serial,
325 const struct usb_device_id *id)
327 usb_set_serial_data(serial, (void *)id->driver_info);
333 * Use interrupt endpoint from first interface if available.
335 * This is needed due to the looney way its endpoints are set up.
337 static int pl2303_endpoint_hack(struct usb_serial *serial,
338 struct usb_serial_endpoints *epds)
340 struct usb_interface *interface = serial->interface;
341 struct usb_device *dev = serial->dev;
342 struct device *ddev = &interface->dev;
343 struct usb_host_interface *iface_desc;
344 struct usb_endpoint_descriptor *endpoint;
347 if (interface == dev->actconfig->interface[0])
350 /* check out the endpoints of the other interface */
351 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
353 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
354 endpoint = &iface_desc->endpoint[i].desc;
356 if (!usb_endpoint_is_int_in(endpoint))
359 dev_dbg(ddev, "found interrupt in on separate interface\n");
360 if (epds->num_interrupt_in < ARRAY_SIZE(epds->interrupt_in))
361 epds->interrupt_in[epds->num_interrupt_in++] = endpoint;
367 static int pl2303_calc_num_ports(struct usb_serial *serial,
368 struct usb_serial_endpoints *epds)
370 unsigned long quirks = (unsigned long)usb_get_serial_data(serial);
371 struct device *dev = &serial->interface->dev;
374 if (quirks & PL2303_QUIRK_ENDPOINT_HACK) {
375 ret = pl2303_endpoint_hack(serial, epds);
380 if (epds->num_interrupt_in < 1) {
381 dev_err(dev, "required interrupt-in endpoint missing\n");
388 static bool pl2303_supports_hx_status(struct usb_serial *serial)
393 ret = usb_control_msg_recv(serial->dev, 0, VENDOR_READ_REQUEST,
394 VENDOR_READ_REQUEST_TYPE, PL2303_READ_TYPE_HX_STATUS,
395 0, &buf, 1, 100, GFP_KERNEL);
400 static int pl2303_detect_type(struct usb_serial *serial)
402 struct usb_device_descriptor *desc = &serial->dev->descriptor;
403 u16 bcdDevice, bcdUSB;
406 * Legacy PL2303H, variants 0 and 1 (difference unknown).
408 if (desc->bDeviceClass == 0x02)
409 return TYPE_H; /* variant 0 */
411 if (desc->bMaxPacketSize0 != 0x40) {
412 if (desc->bDeviceClass == 0x00 || desc->bDeviceClass == 0xff)
413 return TYPE_H; /* variant 1 */
415 return TYPE_H; /* variant 0 */
418 bcdDevice = le16_to_cpu(desc->bcdDevice);
419 bcdUSB = le16_to_cpu(desc->bcdUSB);
439 * Assume it's an HXN-type if the device doesn't
440 * support the old read request value.
442 if (!pl2303_supports_hx_status(serial))
453 dev_err(&serial->interface->dev,
458 static int pl2303_startup(struct usb_serial *serial)
460 struct pl2303_serial_private *spriv;
461 enum pl2303_type type;
465 ret = pl2303_detect_type(serial);
470 dev_dbg(&serial->interface->dev, "device type: %s\n", pl2303_type_data[type].name);
472 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
476 spriv->type = &pl2303_type_data[type];
477 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
478 spriv->quirks |= spriv->type->quirks;
480 usb_set_serial_data(serial, spriv);
482 if (type != TYPE_HXN) {
483 buf = kmalloc(1, GFP_KERNEL);
489 pl2303_vendor_read(serial, 0x8484, buf);
490 pl2303_vendor_write(serial, 0x0404, 0);
491 pl2303_vendor_read(serial, 0x8484, buf);
492 pl2303_vendor_read(serial, 0x8383, buf);
493 pl2303_vendor_read(serial, 0x8484, buf);
494 pl2303_vendor_write(serial, 0x0404, 1);
495 pl2303_vendor_read(serial, 0x8484, buf);
496 pl2303_vendor_read(serial, 0x8383, buf);
497 pl2303_vendor_write(serial, 0, 1);
498 pl2303_vendor_write(serial, 1, 0);
499 if (spriv->quirks & PL2303_QUIRK_LEGACY)
500 pl2303_vendor_write(serial, 2, 0x24);
502 pl2303_vendor_write(serial, 2, 0x44);
510 static void pl2303_release(struct usb_serial *serial)
512 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
517 static int pl2303_port_probe(struct usb_serial_port *port)
519 struct pl2303_private *priv;
521 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
525 spin_lock_init(&priv->lock);
527 usb_set_serial_port_data(port, priv);
529 port->port.drain_delay = 256;
534 static void pl2303_port_remove(struct usb_serial_port *port)
536 struct pl2303_private *priv = usb_get_serial_port_data(port);
541 static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
543 struct usb_device *dev = port->serial->dev;
546 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
548 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
549 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
550 value, 0, NULL, 0, 100);
552 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
558 * Returns the nearest supported baud rate that can be set directly without
561 static speed_t pl2303_get_supported_baud_rate(speed_t baud)
563 static const speed_t baud_sup[] = {
564 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
565 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
566 614400, 921600, 1228800, 2457600, 3000000, 6000000
571 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
572 if (baud_sup[i] > baud)
576 if (i == ARRAY_SIZE(baud_sup))
577 baud = baud_sup[i - 1];
578 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
579 baud = baud_sup[i - 1];
587 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
590 static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
593 put_unaligned_le32(baud, buf);
598 static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
601 unsigned int baseline, mantissa, exponent;
604 * Apparently the formula is:
605 * baudrate = 12M * 32 / (mantissa * 4^exponent)
607 * mantissa = buf[8:0]
608 * exponent = buf[11:9]
610 baseline = 12000000 * 32;
611 mantissa = baseline / baud;
613 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
615 while (mantissa >= 512) {
617 mantissa >>= 2; /* divide by 4 */
620 /* Exponent is maxed. Trim mantissa and leave. */
628 buf[1] = exponent << 1 | mantissa >> 8;
629 buf[0] = mantissa & 0xff;
631 /* Calculate and return the exact baud rate. */
632 baud = (baseline / mantissa) >> (exponent << 1);
637 static speed_t pl2303_encode_baud_rate_divisor_alt(unsigned char buf[4],
640 unsigned int baseline, mantissa, exponent;
643 * Apparently, for the TA version the formula is:
644 * baudrate = 12M * 32 / (mantissa * 2^exponent)
646 * mantissa = buf[10:0]
647 * exponent = buf[15:13 16]
649 baseline = 12000000 * 32;
650 mantissa = baseline / baud;
652 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
654 while (mantissa >= 2048) {
656 mantissa >>= 1; /* divide by 2 */
659 /* Exponent is maxed. Trim mantissa and leave. */
666 buf[2] = exponent & 0x01;
667 buf[1] = (exponent & ~0x01) << 4 | mantissa >> 8;
668 buf[0] = mantissa & 0xff;
670 /* Calculate and return the exact baud rate. */
671 baud = (baseline / mantissa) >> exponent;
676 static void pl2303_encode_baud_rate(struct tty_struct *tty,
677 struct usb_serial_port *port,
680 struct usb_serial *serial = port->serial;
681 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
685 baud = tty_get_baud_rate(tty);
686 dev_dbg(&port->dev, "baud requested = %u\n", baud);
690 if (spriv->type->max_baud_rate)
691 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
693 * Use direct method for supported baud rates, otherwise use divisors.
694 * Newer chip types do not support divisor encoding.
696 if (spriv->type->no_divisors)
699 baud_sup = pl2303_get_supported_baud_rate(baud);
701 if (baud == baud_sup)
702 baud = pl2303_encode_baud_rate_direct(buf, baud);
703 else if (spriv->type->alt_divisors)
704 baud = pl2303_encode_baud_rate_divisor_alt(buf, baud);
706 baud = pl2303_encode_baud_rate_divisor(buf, baud);
708 /* Save resulting baud rate */
709 tty_encode_baud_rate(tty, baud, baud);
710 dev_dbg(&port->dev, "baud set = %u\n", baud);
713 static int pl2303_get_line_request(struct usb_serial_port *port,
714 unsigned char buf[7])
716 struct usb_device *udev = port->serial->dev;
719 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
720 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
723 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
731 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
736 static int pl2303_set_line_request(struct usb_serial_port *port,
737 unsigned char buf[7])
739 struct usb_device *udev = port->serial->dev;
742 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
743 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
746 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
750 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
755 static bool pl2303_termios_change(const struct ktermios *a, const struct ktermios *b)
759 ixon_change = ((a->c_iflag ^ b->c_iflag) & (IXON | IXANY)) ||
760 a->c_cc[VSTART] != b->c_cc[VSTART] ||
761 a->c_cc[VSTOP] != b->c_cc[VSTOP];
763 return tty_termios_hw_change(a, b) || ixon_change;
766 static bool pl2303_enable_xonxoff(struct tty_struct *tty, const struct pl2303_type_data *type)
768 if (!I_IXON(tty) || I_IXANY(tty))
771 if (START_CHAR(tty) != 0x11 || STOP_CHAR(tty) != 0x13)
774 if (type->no_autoxonxoff)
780 static void pl2303_set_termios(struct tty_struct *tty,
781 struct usb_serial_port *port, struct ktermios *old_termios)
783 struct usb_serial *serial = port->serial;
784 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
785 struct pl2303_private *priv = usb_get_serial_port_data(port);
791 if (old_termios && !pl2303_termios_change(&tty->termios, old_termios))
794 buf = kzalloc(7, GFP_KERNEL);
796 /* Report back no change occurred */
798 tty->termios = *old_termios;
802 pl2303_get_line_request(port, buf);
804 buf[6] = tty_get_char_size(tty->termios.c_cflag);
805 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
807 /* For reference buf[0]:buf[3] baud rate value */
808 pl2303_encode_baud_rate(tty, port, &buf[0]);
810 /* For reference buf[4]=0 is 1 stop bits */
811 /* For reference buf[4]=1 is 1.5 stop bits */
812 /* For reference buf[4]=2 is 2 stop bits */
815 * NOTE: Comply with "real" UARTs / RS232:
816 * use 1.5 instead of 2 stop bits with 5 data bits
818 if (C_CSIZE(tty) == CS5) {
820 dev_dbg(&port->dev, "stop bits = 1.5\n");
823 dev_dbg(&port->dev, "stop bits = 2\n");
827 dev_dbg(&port->dev, "stop bits = 1\n");
831 /* For reference buf[5]=0 is none parity */
832 /* For reference buf[5]=1 is odd parity */
833 /* For reference buf[5]=2 is even parity */
834 /* For reference buf[5]=3 is mark parity */
835 /* For reference buf[5]=4 is space parity */
839 dev_dbg(&port->dev, "parity = mark\n");
842 dev_dbg(&port->dev, "parity = odd\n");
847 dev_dbg(&port->dev, "parity = space\n");
850 dev_dbg(&port->dev, "parity = even\n");
855 dev_dbg(&port->dev, "parity = none\n");
859 * Some PL2303 are known to lose bytes if you change serial settings
860 * even to the same values as before. Thus we actually need to filter
861 * in this specific case.
863 * Note that the tty_termios_hw_change check above is not sufficient
864 * as a previously requested baud rate may differ from the one
865 * actually used (and stored in old_termios).
867 * NOTE: No additional locking needed for line_settings as it is
868 * only used in set_termios, which is serialised against itself.
870 if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
871 ret = pl2303_set_line_request(port, buf);
873 memcpy(priv->line_settings, buf, 7);
876 /* change control lines if we are switching to or from B0 */
877 spin_lock_irqsave(&priv->lock, flags);
878 control = priv->line_control;
879 if (C_BAUD(tty) == B0)
880 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
881 else if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
882 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
883 if (control != priv->line_control) {
884 control = priv->line_control;
885 spin_unlock_irqrestore(&priv->lock, flags);
886 pl2303_set_control_lines(port, control);
888 spin_unlock_irqrestore(&priv->lock, flags);
891 if (C_CRTSCTS(tty)) {
892 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
893 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x40);
894 } else if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
895 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG,
896 PL2303_HXN_FLOWCTRL_MASK,
897 PL2303_HXN_FLOWCTRL_RTS_CTS);
899 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x60);
901 } else if (pl2303_enable_xonxoff(tty, spriv->type)) {
902 if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
903 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG,
904 PL2303_HXN_FLOWCTRL_MASK,
905 PL2303_HXN_FLOWCTRL_XON_XOFF);
907 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0xc0);
910 if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
911 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG,
912 PL2303_HXN_FLOWCTRL_MASK,
913 PL2303_HXN_FLOWCTRL_NONE);
915 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0);
922 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
924 struct pl2303_private *priv = usb_get_serial_port_data(port);
928 spin_lock_irqsave(&priv->lock, flags);
930 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
932 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
933 control = priv->line_control;
934 spin_unlock_irqrestore(&priv->lock, flags);
936 pl2303_set_control_lines(port, control);
939 static void pl2303_close(struct usb_serial_port *port)
941 usb_serial_generic_close(port);
942 usb_kill_urb(port->interrupt_in_urb);
943 pl2303_set_break(port, false);
946 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
948 struct usb_serial *serial = port->serial;
949 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
952 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
953 usb_clear_halt(serial->dev, port->write_urb->pipe);
954 usb_clear_halt(serial->dev, port->read_urb->pipe);
956 /* reset upstream data pipes */
957 if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
958 pl2303_vendor_write(serial, PL2303_HXN_RESET_REG,
959 PL2303_HXN_RESET_UPSTREAM_PIPE |
960 PL2303_HXN_RESET_DOWNSTREAM_PIPE);
962 pl2303_vendor_write(serial, 8, 0);
963 pl2303_vendor_write(serial, 9, 0);
969 pl2303_set_termios(tty, port, NULL);
971 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
973 dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
978 result = usb_serial_generic_open(tty, port);
980 usb_kill_urb(port->interrupt_in_urb);
987 static int pl2303_tiocmset(struct tty_struct *tty,
988 unsigned int set, unsigned int clear)
990 struct usb_serial_port *port = tty->driver_data;
991 struct pl2303_private *priv = usb_get_serial_port_data(port);
996 spin_lock_irqsave(&priv->lock, flags);
998 priv->line_control |= CONTROL_RTS;
1000 priv->line_control |= CONTROL_DTR;
1001 if (clear & TIOCM_RTS)
1002 priv->line_control &= ~CONTROL_RTS;
1003 if (clear & TIOCM_DTR)
1004 priv->line_control &= ~CONTROL_DTR;
1005 control = priv->line_control;
1006 spin_unlock_irqrestore(&priv->lock, flags);
1008 ret = pl2303_set_control_lines(port, control);
1010 return usb_translate_errors(ret);
1015 static int pl2303_tiocmget(struct tty_struct *tty)
1017 struct usb_serial_port *port = tty->driver_data;
1018 struct pl2303_private *priv = usb_get_serial_port_data(port);
1019 unsigned long flags;
1021 unsigned int status;
1022 unsigned int result;
1024 spin_lock_irqsave(&priv->lock, flags);
1025 mcr = priv->line_control;
1026 status = priv->line_status;
1027 spin_unlock_irqrestore(&priv->lock, flags);
1029 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
1030 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
1031 | ((status & UART_CTS) ? TIOCM_CTS : 0)
1032 | ((status & UART_DSR) ? TIOCM_DSR : 0)
1033 | ((status & UART_RING) ? TIOCM_RI : 0)
1034 | ((status & UART_DCD) ? TIOCM_CD : 0);
1036 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
1041 static int pl2303_carrier_raised(struct usb_serial_port *port)
1043 struct pl2303_private *priv = usb_get_serial_port_data(port);
1045 if (priv->line_status & UART_DCD)
1051 static void pl2303_set_break(struct usb_serial_port *port, bool enable)
1053 struct usb_serial *serial = port->serial;
1062 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
1063 state == BREAK_OFF ? "off" : "on");
1065 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1066 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
1069 dev_err(&port->dev, "error sending break = %d\n", result);
1072 static void pl2303_break_ctl(struct tty_struct *tty, int state)
1074 struct usb_serial_port *port = tty->driver_data;
1076 pl2303_set_break(port, state);
1079 static void pl2303_update_line_status(struct usb_serial_port *port,
1080 unsigned char *data,
1081 unsigned int actual_length)
1083 struct usb_serial *serial = port->serial;
1084 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
1085 struct pl2303_private *priv = usb_get_serial_port_data(port);
1086 struct tty_struct *tty;
1087 unsigned long flags;
1088 unsigned int status_idx = UART_STATE_INDEX;
1092 if (spriv->quirks & PL2303_QUIRK_UART_STATE_IDX0)
1095 if (actual_length < status_idx + 1)
1098 status = data[status_idx];
1100 /* Save off the uart status for others to look at */
1101 spin_lock_irqsave(&priv->lock, flags);
1102 delta = priv->line_status ^ status;
1103 priv->line_status = status;
1104 spin_unlock_irqrestore(&priv->lock, flags);
1106 if (status & UART_BREAK_ERROR)
1107 usb_serial_handle_break(port);
1109 if (delta & UART_STATE_MSR_MASK) {
1110 if (delta & UART_CTS)
1112 if (delta & UART_DSR)
1114 if (delta & UART_RING)
1116 if (delta & UART_DCD) {
1118 tty = tty_port_tty_get(&port->port);
1120 usb_serial_handle_dcd_change(port, tty,
1126 wake_up_interruptible(&port->port.delta_msr_wait);
1130 static void pl2303_read_int_callback(struct urb *urb)
1132 struct usb_serial_port *port = urb->context;
1133 unsigned char *data = urb->transfer_buffer;
1134 unsigned int actual_length = urb->actual_length;
1135 int status = urb->status;
1145 /* this urb is terminated, clean up */
1146 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
1150 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
1155 usb_serial_debug_data(&port->dev, __func__,
1156 urb->actual_length, urb->transfer_buffer);
1158 pl2303_update_line_status(port, data, actual_length);
1161 retval = usb_submit_urb(urb, GFP_ATOMIC);
1164 "%s - usb_submit_urb failed with result %d\n",
1169 static void pl2303_process_read_urb(struct urb *urb)
1171 struct usb_serial_port *port = urb->context;
1172 struct pl2303_private *priv = usb_get_serial_port_data(port);
1173 unsigned char *data = urb->transfer_buffer;
1174 char tty_flag = TTY_NORMAL;
1175 unsigned long flags;
1179 /* update line status */
1180 spin_lock_irqsave(&priv->lock, flags);
1181 line_status = priv->line_status;
1182 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1183 spin_unlock_irqrestore(&priv->lock, flags);
1185 if (!urb->actual_length)
1189 * Break takes precedence over parity, which takes precedence over
1192 if (line_status & UART_BREAK_ERROR)
1193 tty_flag = TTY_BREAK;
1194 else if (line_status & UART_PARITY_ERROR)
1195 tty_flag = TTY_PARITY;
1196 else if (line_status & UART_FRAME_ERROR)
1197 tty_flag = TTY_FRAME;
1199 if (tty_flag != TTY_NORMAL)
1200 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__,
1202 /* overrun is special, not associated with a char */
1203 if (line_status & UART_OVERRUN_ERROR)
1204 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
1207 for (i = 0; i < urb->actual_length; ++i)
1208 if (!usb_serial_handle_sysrq_char(port, data[i]))
1209 tty_insert_flip_char(&port->port, data[i],
1212 tty_insert_flip_string_fixed_flag(&port->port, data, tty_flag,
1213 urb->actual_length);
1216 tty_flip_buffer_push(&port->port);
1219 static struct usb_serial_driver pl2303_device = {
1221 .owner = THIS_MODULE,
1224 .id_table = id_table,
1227 .num_interrupt_in = 0, /* see pl2303_calc_num_ports */
1228 .bulk_in_size = 256,
1229 .bulk_out_size = 256,
1230 .open = pl2303_open,
1231 .close = pl2303_close,
1232 .dtr_rts = pl2303_dtr_rts,
1233 .carrier_raised = pl2303_carrier_raised,
1234 .break_ctl = pl2303_break_ctl,
1235 .set_termios = pl2303_set_termios,
1236 .tiocmget = pl2303_tiocmget,
1237 .tiocmset = pl2303_tiocmset,
1238 .tiocmiwait = usb_serial_generic_tiocmiwait,
1239 .process_read_urb = pl2303_process_read_urb,
1240 .read_int_callback = pl2303_read_int_callback,
1241 .probe = pl2303_probe,
1242 .calc_num_ports = pl2303_calc_num_ports,
1243 .attach = pl2303_startup,
1244 .release = pl2303_release,
1245 .port_probe = pl2303_port_probe,
1246 .port_remove = pl2303_port_remove,
1249 static struct usb_serial_driver * const serial_drivers[] = {
1250 &pl2303_device, NULL
1253 module_usb_serial_driver(serial_drivers, id_table);
1255 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
1256 MODULE_LICENSE("GPL v2");