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 <linux/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)
34 #define PL2303_QUIRK_NO_BREAK_GETLINE BIT(3)
36 static const struct usb_device_id id_table[] = {
37 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID),
38 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
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_CHILITAG) },
43 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
44 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
48 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
49 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ZTEK) },
50 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_TB) },
51 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GC) },
52 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GB) },
53 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GT) },
54 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GL) },
55 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GE) },
56 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GS) },
57 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
58 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
59 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID),
60 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
61 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC485),
62 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
63 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC232B),
64 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
65 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID2) },
66 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
67 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
68 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
69 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
70 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
71 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
72 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
73 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
74 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
75 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
76 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
77 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
78 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
79 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
81 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
82 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75),
83 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
84 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81),
85 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
86 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
87 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
88 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
89 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
90 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
91 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
92 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
93 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
94 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
95 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID),
96 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
97 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
98 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
99 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
100 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
101 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
102 { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },
103 { USB_DEVICE(HP_VENDOR_ID, HP_LD381_PRODUCT_ID) },
104 { USB_DEVICE(HP_VENDOR_ID, HP_LD381GC_PRODUCT_ID) },
105 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
106 { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },
107 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
108 { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) },
109 { USB_DEVICE(HP_VENDOR_ID, HP_LM920_PRODUCT_ID) },
110 { USB_DEVICE(HP_VENDOR_ID, HP_LM930_PRODUCT_ID) },
111 { USB_DEVICE(HP_VENDOR_ID, HP_LM940_PRODUCT_ID) },
112 { USB_DEVICE(HP_VENDOR_ID, HP_TD620_PRODUCT_ID) },
113 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
114 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
115 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
116 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
117 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
118 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530GC_PRODUCT_ID) },
119 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
120 { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
121 { USB_DEVICE(IBM_VENDOR_ID, IBM_PRODUCT_ID) },
122 { USB_DEVICE(MACROSILICON_VENDOR_ID, MACROSILICON_MS3020_PRODUCT_ID) },
123 { } /* Terminating entry */
126 MODULE_DEVICE_TABLE(usb, id_table);
128 #define SET_LINE_REQUEST_TYPE 0x21
129 #define SET_LINE_REQUEST 0x20
131 #define SET_CONTROL_REQUEST_TYPE 0x21
132 #define SET_CONTROL_REQUEST 0x22
133 #define CONTROL_DTR 0x01
134 #define CONTROL_RTS 0x02
136 #define BREAK_REQUEST_TYPE 0x21
137 #define BREAK_REQUEST 0x23
138 #define BREAK_ON 0xffff
139 #define BREAK_OFF 0x0000
141 #define GET_LINE_REQUEST_TYPE 0xa1
142 #define GET_LINE_REQUEST 0x21
144 #define VENDOR_WRITE_REQUEST_TYPE 0x40
145 #define VENDOR_WRITE_REQUEST 0x01
146 #define VENDOR_WRITE_NREQUEST 0x80
148 #define VENDOR_READ_REQUEST_TYPE 0xc0
149 #define VENDOR_READ_REQUEST 0x01
150 #define VENDOR_READ_NREQUEST 0x81
152 #define UART_STATE_INDEX 8
153 #define UART_STATE_MSR_MASK 0x8b
154 #define UART_STATE_TRANSIENT_MASK 0x74
155 #define UART_DCD 0x01
156 #define UART_DSR 0x02
157 #define UART_BREAK_ERROR 0x04
158 #define UART_RING 0x08
159 #define UART_FRAME_ERROR 0x10
160 #define UART_PARITY_ERROR 0x20
161 #define UART_OVERRUN_ERROR 0x40
162 #define UART_CTS 0x80
164 #define PL2303_FLOWCTRL_MASK 0xf0
166 #define PL2303_READ_TYPE_HX_STATUS 0x8080
168 #define PL2303_HXN_RESET_REG 0x07
169 #define PL2303_HXN_RESET_UPSTREAM_PIPE 0x02
170 #define PL2303_HXN_RESET_DOWNSTREAM_PIPE 0x01
172 #define PL2303_HXN_FLOWCTRL_REG 0x0a
173 #define PL2303_HXN_FLOWCTRL_MASK 0x1c
174 #define PL2303_HXN_FLOWCTRL_NONE 0x1c
175 #define PL2303_HXN_FLOWCTRL_RTS_CTS 0x18
176 #define PL2303_HXN_FLOWCTRL_XON_XOFF 0x0c
178 static int pl2303_set_break(struct usb_serial_port *port, bool enable);
190 struct pl2303_type_data {
192 speed_t max_baud_rate;
193 unsigned long quirks;
194 unsigned int no_autoxonxoff:1;
195 unsigned int no_divisors:1;
196 unsigned int alt_divisors:1;
199 struct pl2303_serial_private {
200 const struct pl2303_type_data *type;
201 unsigned long quirks;
204 struct pl2303_private {
212 static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
215 .max_baud_rate = 1228800,
216 .quirks = PL2303_QUIRK_LEGACY,
217 .no_autoxonxoff = true,
221 .max_baud_rate = 6000000,
225 .max_baud_rate = 6000000,
226 .alt_divisors = true,
230 .max_baud_rate = 12000000,
231 .alt_divisors = true,
235 .max_baud_rate = 12000000,
239 .max_baud_rate = 12000000,
244 static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
245 unsigned char buf[1])
247 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
248 struct device *dev = &serial->interface->dev;
252 if (spriv->type == &pl2303_type_data[TYPE_HXN])
253 request = VENDOR_READ_NREQUEST;
255 request = VENDOR_READ_REQUEST;
257 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
258 request, VENDOR_READ_REQUEST_TYPE,
259 value, 0, buf, 1, 100);
261 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
269 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
274 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
276 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
277 struct device *dev = &serial->interface->dev;
281 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
283 if (spriv->type == &pl2303_type_data[TYPE_HXN])
284 request = VENDOR_WRITE_NREQUEST;
286 request = VENDOR_WRITE_REQUEST;
288 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
289 request, VENDOR_WRITE_REQUEST_TYPE,
290 value, index, NULL, 0, 100);
292 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
300 static int pl2303_update_reg(struct usb_serial *serial, u8 reg, u8 mask, u8 val)
302 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
306 buf = kmalloc(1, GFP_KERNEL);
310 if (spriv->type == &pl2303_type_data[TYPE_HXN])
311 ret = pl2303_vendor_read(serial, reg, buf);
313 ret = pl2303_vendor_read(serial, reg | 0x80, buf);
321 ret = pl2303_vendor_write(serial, reg, *buf);
328 static int pl2303_probe(struct usb_serial *serial,
329 const struct usb_device_id *id)
331 usb_set_serial_data(serial, (void *)id->driver_info);
337 * Use interrupt endpoint from first interface if available.
339 * This is needed due to the looney way its endpoints are set up.
341 static int pl2303_endpoint_hack(struct usb_serial *serial,
342 struct usb_serial_endpoints *epds)
344 struct usb_interface *interface = serial->interface;
345 struct usb_device *dev = serial->dev;
346 struct device *ddev = &interface->dev;
347 struct usb_host_interface *iface_desc;
348 struct usb_endpoint_descriptor *endpoint;
351 if (interface == dev->actconfig->interface[0])
354 /* check out the endpoints of the other interface */
355 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
357 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
358 endpoint = &iface_desc->endpoint[i].desc;
360 if (!usb_endpoint_is_int_in(endpoint))
363 dev_dbg(ddev, "found interrupt in on separate interface\n");
364 if (epds->num_interrupt_in < ARRAY_SIZE(epds->interrupt_in))
365 epds->interrupt_in[epds->num_interrupt_in++] = endpoint;
371 static int pl2303_calc_num_ports(struct usb_serial *serial,
372 struct usb_serial_endpoints *epds)
374 unsigned long quirks = (unsigned long)usb_get_serial_data(serial);
375 struct device *dev = &serial->interface->dev;
378 if (quirks & PL2303_QUIRK_ENDPOINT_HACK) {
379 ret = pl2303_endpoint_hack(serial, epds);
384 if (epds->num_interrupt_in < 1) {
385 dev_err(dev, "required interrupt-in endpoint missing\n");
392 static bool pl2303_supports_hx_status(struct usb_serial *serial)
397 ret = usb_control_msg_recv(serial->dev, 0, VENDOR_READ_REQUEST,
398 VENDOR_READ_REQUEST_TYPE, PL2303_READ_TYPE_HX_STATUS,
399 0, &buf, 1, 100, GFP_KERNEL);
404 static int pl2303_detect_type(struct usb_serial *serial)
406 struct usb_device_descriptor *desc = &serial->dev->descriptor;
407 u16 bcdDevice, bcdUSB;
410 * Legacy PL2303H, variants 0 and 1 (difference unknown).
412 if (desc->bDeviceClass == 0x02)
413 return TYPE_H; /* variant 0 */
415 if (desc->bMaxPacketSize0 != 0x40) {
416 if (desc->bDeviceClass == 0x00 || desc->bDeviceClass == 0xff)
417 return TYPE_H; /* variant 1 */
419 return TYPE_H; /* variant 0 */
422 bcdDevice = le16_to_cpu(desc->bcdDevice);
423 bcdUSB = le16_to_cpu(desc->bcdUSB);
427 /* USB 1.0.1? Let's assume they meant 1.1... */
444 case 0x300: /* GT / TA */
445 if (pl2303_supports_hx_status(serial))
452 case 0x500: /* GE / TB */
453 if (pl2303_supports_hx_status(serial))
466 dev_err(&serial->interface->dev,
471 static bool pl2303_is_hxd_clone(struct usb_serial *serial)
473 struct usb_device *udev = serial->dev;
477 buf = kmalloc(7, GFP_KERNEL);
481 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
482 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
487 return ret == -EPIPE;
490 static int pl2303_startup(struct usb_serial *serial)
492 struct pl2303_serial_private *spriv;
493 enum pl2303_type type;
497 ret = pl2303_detect_type(serial);
502 dev_dbg(&serial->interface->dev, "device type: %s\n", pl2303_type_data[type].name);
504 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
508 spriv->type = &pl2303_type_data[type];
509 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
510 spriv->quirks |= spriv->type->quirks;
512 if (type == TYPE_HXD && pl2303_is_hxd_clone(serial))
513 spriv->quirks |= PL2303_QUIRK_NO_BREAK_GETLINE;
515 usb_set_serial_data(serial, spriv);
517 if (type != TYPE_HXN) {
518 buf = kmalloc(1, GFP_KERNEL);
524 pl2303_vendor_read(serial, 0x8484, buf);
525 pl2303_vendor_write(serial, 0x0404, 0);
526 pl2303_vendor_read(serial, 0x8484, buf);
527 pl2303_vendor_read(serial, 0x8383, buf);
528 pl2303_vendor_read(serial, 0x8484, buf);
529 pl2303_vendor_write(serial, 0x0404, 1);
530 pl2303_vendor_read(serial, 0x8484, buf);
531 pl2303_vendor_read(serial, 0x8383, buf);
532 pl2303_vendor_write(serial, 0, 1);
533 pl2303_vendor_write(serial, 1, 0);
534 if (spriv->quirks & PL2303_QUIRK_LEGACY)
535 pl2303_vendor_write(serial, 2, 0x24);
537 pl2303_vendor_write(serial, 2, 0x44);
545 static void pl2303_release(struct usb_serial *serial)
547 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
552 static int pl2303_port_probe(struct usb_serial_port *port)
554 struct pl2303_private *priv;
556 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
560 spin_lock_init(&priv->lock);
562 usb_set_serial_port_data(port, priv);
564 port->port.drain_delay = 256;
569 static void pl2303_port_remove(struct usb_serial_port *port)
571 struct pl2303_private *priv = usb_get_serial_port_data(port);
576 static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
578 struct usb_device *dev = port->serial->dev;
581 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
583 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
584 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
585 value, 0, NULL, 0, 100);
587 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
593 * Returns the nearest supported baud rate that can be set directly without
596 static speed_t pl2303_get_supported_baud_rate(speed_t baud)
598 static const speed_t baud_sup[] = {
599 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
600 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
601 614400, 921600, 1228800, 2457600, 3000000, 6000000
606 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
607 if (baud_sup[i] > baud)
611 if (i == ARRAY_SIZE(baud_sup))
612 baud = baud_sup[i - 1];
613 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
614 baud = baud_sup[i - 1];
622 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
625 static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
628 put_unaligned_le32(baud, buf);
633 static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
636 unsigned int baseline, mantissa, exponent;
639 * Apparently the formula is:
640 * baudrate = 12M * 32 / (mantissa * 4^exponent)
642 * mantissa = buf[8:0]
643 * exponent = buf[11:9]
645 baseline = 12000000 * 32;
646 mantissa = baseline / baud;
648 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
650 while (mantissa >= 512) {
652 mantissa >>= 2; /* divide by 4 */
655 /* Exponent is maxed. Trim mantissa and leave. */
663 buf[1] = exponent << 1 | mantissa >> 8;
664 buf[0] = mantissa & 0xff;
666 /* Calculate and return the exact baud rate. */
667 baud = (baseline / mantissa) >> (exponent << 1);
672 static speed_t pl2303_encode_baud_rate_divisor_alt(unsigned char buf[4],
675 unsigned int baseline, mantissa, exponent;
678 * Apparently, for the TA version the formula is:
679 * baudrate = 12M * 32 / (mantissa * 2^exponent)
681 * mantissa = buf[10:0]
682 * exponent = buf[15:13 16]
684 baseline = 12000000 * 32;
685 mantissa = baseline / baud;
687 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
689 while (mantissa >= 2048) {
691 mantissa >>= 1; /* divide by 2 */
694 /* Exponent is maxed. Trim mantissa and leave. */
701 buf[2] = exponent & 0x01;
702 buf[1] = (exponent & ~0x01) << 4 | mantissa >> 8;
703 buf[0] = mantissa & 0xff;
705 /* Calculate and return the exact baud rate. */
706 baud = (baseline / mantissa) >> exponent;
711 static void pl2303_encode_baud_rate(struct tty_struct *tty,
712 struct usb_serial_port *port,
715 struct usb_serial *serial = port->serial;
716 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
720 baud = tty_get_baud_rate(tty);
721 dev_dbg(&port->dev, "baud requested = %u\n", baud);
725 if (spriv->type->max_baud_rate)
726 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
728 * Use direct method for supported baud rates, otherwise use divisors.
729 * Newer chip types do not support divisor encoding.
731 if (spriv->type->no_divisors)
734 baud_sup = pl2303_get_supported_baud_rate(baud);
736 if (baud == baud_sup)
737 baud = pl2303_encode_baud_rate_direct(buf, baud);
738 else if (spriv->type->alt_divisors)
739 baud = pl2303_encode_baud_rate_divisor_alt(buf, baud);
741 baud = pl2303_encode_baud_rate_divisor(buf, baud);
743 /* Save resulting baud rate */
744 tty_encode_baud_rate(tty, baud, baud);
745 dev_dbg(&port->dev, "baud set = %u\n", baud);
748 static int pl2303_get_line_request(struct usb_serial_port *port,
749 unsigned char buf[7])
751 struct usb_serial *serial = port->serial;
752 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
753 struct usb_device *udev = serial->dev;
756 if (spriv->quirks & PL2303_QUIRK_NO_BREAK_GETLINE) {
757 struct pl2303_private *priv = usb_get_serial_port_data(port);
759 memcpy(buf, priv->line_settings, 7);
763 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
764 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
767 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
775 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
780 static int pl2303_set_line_request(struct usb_serial_port *port,
781 unsigned char buf[7])
783 struct usb_device *udev = port->serial->dev;
786 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
787 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
790 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
794 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
799 static bool pl2303_termios_change(const struct ktermios *a, const struct ktermios *b)
803 ixon_change = ((a->c_iflag ^ b->c_iflag) & (IXON | IXANY)) ||
804 a->c_cc[VSTART] != b->c_cc[VSTART] ||
805 a->c_cc[VSTOP] != b->c_cc[VSTOP];
807 return tty_termios_hw_change(a, b) || ixon_change;
810 static bool pl2303_enable_xonxoff(struct tty_struct *tty, const struct pl2303_type_data *type)
812 if (!I_IXON(tty) || I_IXANY(tty))
815 if (START_CHAR(tty) != 0x11 || STOP_CHAR(tty) != 0x13)
818 if (type->no_autoxonxoff)
824 static void pl2303_set_termios(struct tty_struct *tty,
825 struct usb_serial_port *port,
826 const struct ktermios *old_termios)
828 struct usb_serial *serial = port->serial;
829 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
830 struct pl2303_private *priv = usb_get_serial_port_data(port);
836 if (old_termios && !pl2303_termios_change(&tty->termios, old_termios))
839 buf = kzalloc(7, GFP_KERNEL);
841 /* Report back no change occurred */
843 tty->termios = *old_termios;
847 pl2303_get_line_request(port, buf);
849 buf[6] = tty_get_char_size(tty->termios.c_cflag);
850 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
852 /* For reference buf[0]:buf[3] baud rate value */
853 pl2303_encode_baud_rate(tty, port, &buf[0]);
855 /* For reference buf[4]=0 is 1 stop bits */
856 /* For reference buf[4]=1 is 1.5 stop bits */
857 /* For reference buf[4]=2 is 2 stop bits */
860 * NOTE: Comply with "real" UARTs / RS232:
861 * use 1.5 instead of 2 stop bits with 5 data bits
863 if (C_CSIZE(tty) == CS5) {
865 dev_dbg(&port->dev, "stop bits = 1.5\n");
868 dev_dbg(&port->dev, "stop bits = 2\n");
872 dev_dbg(&port->dev, "stop bits = 1\n");
876 /* For reference buf[5]=0 is none parity */
877 /* For reference buf[5]=1 is odd parity */
878 /* For reference buf[5]=2 is even parity */
879 /* For reference buf[5]=3 is mark parity */
880 /* For reference buf[5]=4 is space parity */
884 dev_dbg(&port->dev, "parity = mark\n");
887 dev_dbg(&port->dev, "parity = odd\n");
892 dev_dbg(&port->dev, "parity = space\n");
895 dev_dbg(&port->dev, "parity = even\n");
900 dev_dbg(&port->dev, "parity = none\n");
904 * Some PL2303 are known to lose bytes if you change serial settings
905 * even to the same values as before. Thus we actually need to filter
906 * in this specific case.
908 * Note that the tty_termios_hw_change check above is not sufficient
909 * as a previously requested baud rate may differ from the one
910 * actually used (and stored in old_termios).
912 * NOTE: No additional locking needed for line_settings as it is
913 * only used in set_termios, which is serialised against itself.
915 if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
916 ret = pl2303_set_line_request(port, buf);
918 memcpy(priv->line_settings, buf, 7);
921 /* change control lines if we are switching to or from B0 */
922 spin_lock_irqsave(&priv->lock, flags);
923 control = priv->line_control;
924 if (C_BAUD(tty) == B0)
925 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
926 else if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
927 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
928 if (control != priv->line_control) {
929 control = priv->line_control;
930 spin_unlock_irqrestore(&priv->lock, flags);
931 pl2303_set_control_lines(port, control);
933 spin_unlock_irqrestore(&priv->lock, flags);
936 if (C_CRTSCTS(tty)) {
937 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
938 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x40);
939 } else if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
940 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG,
941 PL2303_HXN_FLOWCTRL_MASK,
942 PL2303_HXN_FLOWCTRL_RTS_CTS);
944 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x60);
946 } else if (pl2303_enable_xonxoff(tty, spriv->type)) {
947 if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
948 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG,
949 PL2303_HXN_FLOWCTRL_MASK,
950 PL2303_HXN_FLOWCTRL_XON_XOFF);
952 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0xc0);
955 if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
956 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG,
957 PL2303_HXN_FLOWCTRL_MASK,
958 PL2303_HXN_FLOWCTRL_NONE);
960 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0);
967 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
969 struct pl2303_private *priv = usb_get_serial_port_data(port);
973 spin_lock_irqsave(&priv->lock, flags);
975 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
977 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
978 control = priv->line_control;
979 spin_unlock_irqrestore(&priv->lock, flags);
981 pl2303_set_control_lines(port, control);
984 static void pl2303_close(struct usb_serial_port *port)
986 usb_serial_generic_close(port);
987 usb_kill_urb(port->interrupt_in_urb);
988 pl2303_set_break(port, false);
991 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
993 struct usb_serial *serial = port->serial;
994 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
997 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
998 usb_clear_halt(serial->dev, port->write_urb->pipe);
999 usb_clear_halt(serial->dev, port->read_urb->pipe);
1001 /* reset upstream data pipes */
1002 if (spriv->type == &pl2303_type_data[TYPE_HXN]) {
1003 pl2303_vendor_write(serial, PL2303_HXN_RESET_REG,
1004 PL2303_HXN_RESET_UPSTREAM_PIPE |
1005 PL2303_HXN_RESET_DOWNSTREAM_PIPE);
1007 pl2303_vendor_write(serial, 8, 0);
1008 pl2303_vendor_write(serial, 9, 0);
1014 pl2303_set_termios(tty, port, NULL);
1016 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
1018 dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
1023 result = usb_serial_generic_open(tty, port);
1025 usb_kill_urb(port->interrupt_in_urb);
1032 static int pl2303_tiocmset(struct tty_struct *tty,
1033 unsigned int set, unsigned int clear)
1035 struct usb_serial_port *port = tty->driver_data;
1036 struct pl2303_private *priv = usb_get_serial_port_data(port);
1037 unsigned long flags;
1041 spin_lock_irqsave(&priv->lock, flags);
1042 if (set & TIOCM_RTS)
1043 priv->line_control |= CONTROL_RTS;
1044 if (set & TIOCM_DTR)
1045 priv->line_control |= CONTROL_DTR;
1046 if (clear & TIOCM_RTS)
1047 priv->line_control &= ~CONTROL_RTS;
1048 if (clear & TIOCM_DTR)
1049 priv->line_control &= ~CONTROL_DTR;
1050 control = priv->line_control;
1051 spin_unlock_irqrestore(&priv->lock, flags);
1053 ret = pl2303_set_control_lines(port, control);
1055 return usb_translate_errors(ret);
1060 static int pl2303_tiocmget(struct tty_struct *tty)
1062 struct usb_serial_port *port = tty->driver_data;
1063 struct pl2303_private *priv = usb_get_serial_port_data(port);
1064 unsigned long flags;
1066 unsigned int status;
1067 unsigned int result;
1069 spin_lock_irqsave(&priv->lock, flags);
1070 mcr = priv->line_control;
1071 status = priv->line_status;
1072 spin_unlock_irqrestore(&priv->lock, flags);
1074 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
1075 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
1076 | ((status & UART_CTS) ? TIOCM_CTS : 0)
1077 | ((status & UART_DSR) ? TIOCM_DSR : 0)
1078 | ((status & UART_RING) ? TIOCM_RI : 0)
1079 | ((status & UART_DCD) ? TIOCM_CD : 0);
1081 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
1086 static int pl2303_carrier_raised(struct usb_serial_port *port)
1088 struct pl2303_private *priv = usb_get_serial_port_data(port);
1090 if (priv->line_status & UART_DCD)
1096 static int pl2303_set_break(struct usb_serial_port *port, bool enable)
1098 struct usb_serial *serial = port->serial;
1099 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
1103 if (spriv->quirks & PL2303_QUIRK_NO_BREAK_GETLINE)
1111 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
1112 state == BREAK_OFF ? "off" : "on");
1114 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
1115 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
1118 dev_err(&port->dev, "error sending break = %d\n", result);
1125 static int pl2303_break_ctl(struct tty_struct *tty, int state)
1127 struct usb_serial_port *port = tty->driver_data;
1129 return pl2303_set_break(port, state);
1132 static void pl2303_update_line_status(struct usb_serial_port *port,
1133 unsigned char *data,
1134 unsigned int actual_length)
1136 struct usb_serial *serial = port->serial;
1137 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
1138 struct pl2303_private *priv = usb_get_serial_port_data(port);
1139 struct tty_struct *tty;
1140 unsigned long flags;
1141 unsigned int status_idx = UART_STATE_INDEX;
1145 if (spriv->quirks & PL2303_QUIRK_UART_STATE_IDX0)
1148 if (actual_length < status_idx + 1)
1151 status = data[status_idx];
1153 /* Save off the uart status for others to look at */
1154 spin_lock_irqsave(&priv->lock, flags);
1155 delta = priv->line_status ^ status;
1156 priv->line_status = status;
1157 spin_unlock_irqrestore(&priv->lock, flags);
1159 if (status & UART_BREAK_ERROR)
1160 usb_serial_handle_break(port);
1162 if (delta & UART_STATE_MSR_MASK) {
1163 if (delta & UART_CTS)
1165 if (delta & UART_DSR)
1167 if (delta & UART_RING)
1169 if (delta & UART_DCD) {
1171 tty = tty_port_tty_get(&port->port);
1173 usb_serial_handle_dcd_change(port, tty,
1179 wake_up_interruptible(&port->port.delta_msr_wait);
1183 static void pl2303_read_int_callback(struct urb *urb)
1185 struct usb_serial_port *port = urb->context;
1186 unsigned char *data = urb->transfer_buffer;
1187 unsigned int actual_length = urb->actual_length;
1188 int status = urb->status;
1198 /* this urb is terminated, clean up */
1199 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
1203 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
1208 usb_serial_debug_data(&port->dev, __func__,
1209 urb->actual_length, urb->transfer_buffer);
1211 pl2303_update_line_status(port, data, actual_length);
1214 retval = usb_submit_urb(urb, GFP_ATOMIC);
1217 "%s - usb_submit_urb failed with result %d\n",
1222 static void pl2303_process_read_urb(struct urb *urb)
1224 struct usb_serial_port *port = urb->context;
1225 struct pl2303_private *priv = usb_get_serial_port_data(port);
1226 unsigned char *data = urb->transfer_buffer;
1227 char tty_flag = TTY_NORMAL;
1228 unsigned long flags;
1232 /* update line status */
1233 spin_lock_irqsave(&priv->lock, flags);
1234 line_status = priv->line_status;
1235 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1236 spin_unlock_irqrestore(&priv->lock, flags);
1238 if (!urb->actual_length)
1242 * Break takes precedence over parity, which takes precedence over
1245 if (line_status & UART_BREAK_ERROR)
1246 tty_flag = TTY_BREAK;
1247 else if (line_status & UART_PARITY_ERROR)
1248 tty_flag = TTY_PARITY;
1249 else if (line_status & UART_FRAME_ERROR)
1250 tty_flag = TTY_FRAME;
1252 if (tty_flag != TTY_NORMAL)
1253 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__,
1255 /* overrun is special, not associated with a char */
1256 if (line_status & UART_OVERRUN_ERROR)
1257 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
1260 for (i = 0; i < urb->actual_length; ++i)
1261 if (!usb_serial_handle_sysrq_char(port, data[i]))
1262 tty_insert_flip_char(&port->port, data[i],
1265 tty_insert_flip_string_fixed_flag(&port->port, data, tty_flag,
1266 urb->actual_length);
1269 tty_flip_buffer_push(&port->port);
1272 static struct usb_serial_driver pl2303_device = {
1276 .id_table = id_table,
1279 .num_interrupt_in = 0, /* see pl2303_calc_num_ports */
1280 .bulk_in_size = 256,
1281 .bulk_out_size = 256,
1282 .open = pl2303_open,
1283 .close = pl2303_close,
1284 .dtr_rts = pl2303_dtr_rts,
1285 .carrier_raised = pl2303_carrier_raised,
1286 .break_ctl = pl2303_break_ctl,
1287 .set_termios = pl2303_set_termios,
1288 .tiocmget = pl2303_tiocmget,
1289 .tiocmset = pl2303_tiocmset,
1290 .tiocmiwait = usb_serial_generic_tiocmiwait,
1291 .process_read_urb = pl2303_process_read_urb,
1292 .read_int_callback = pl2303_read_int_callback,
1293 .probe = pl2303_probe,
1294 .calc_num_ports = pl2303_calc_num_ports,
1295 .attach = pl2303_startup,
1296 .release = pl2303_release,
1297 .port_probe = pl2303_port_probe,
1298 .port_remove = pl2303_port_remove,
1301 static struct usb_serial_driver * const serial_drivers[] = {
1302 &pl2303_device, NULL
1305 module_usb_serial_driver(serial_drivers, id_table);
1307 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
1308 MODULE_LICENSE("GPL v2");