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(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
117 { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
118 { } /* Terminating entry */
121 MODULE_DEVICE_TABLE(usb, id_table);
123 #define SET_LINE_REQUEST_TYPE 0x21
124 #define SET_LINE_REQUEST 0x20
126 #define SET_CONTROL_REQUEST_TYPE 0x21
127 #define SET_CONTROL_REQUEST 0x22
128 #define CONTROL_DTR 0x01
129 #define CONTROL_RTS 0x02
131 #define BREAK_REQUEST_TYPE 0x21
132 #define BREAK_REQUEST 0x23
133 #define BREAK_ON 0xffff
134 #define BREAK_OFF 0x0000
136 #define GET_LINE_REQUEST_TYPE 0xa1
137 #define GET_LINE_REQUEST 0x21
139 #define VENDOR_WRITE_REQUEST_TYPE 0x40
140 #define VENDOR_WRITE_REQUEST 0x01
141 #define VENDOR_WRITE_NREQUEST 0x80
143 #define VENDOR_READ_REQUEST_TYPE 0xc0
144 #define VENDOR_READ_REQUEST 0x01
145 #define VENDOR_READ_NREQUEST 0x81
147 #define UART_STATE_INDEX 8
148 #define UART_STATE_MSR_MASK 0x8b
149 #define UART_STATE_TRANSIENT_MASK 0x74
150 #define UART_DCD 0x01
151 #define UART_DSR 0x02
152 #define UART_BREAK_ERROR 0x04
153 #define UART_RING 0x08
154 #define UART_FRAME_ERROR 0x10
155 #define UART_PARITY_ERROR 0x20
156 #define UART_OVERRUN_ERROR 0x40
157 #define UART_CTS 0x80
159 #define PL2303_FLOWCTRL_MASK 0xf0
161 #define PL2303_READ_TYPE_HX_STATUS 0x8080
163 #define PL2303_HXN_RESET_REG 0x07
164 #define PL2303_HXN_RESET_UPSTREAM_PIPE 0x02
165 #define PL2303_HXN_RESET_DOWNSTREAM_PIPE 0x01
167 #define PL2303_HXN_FLOWCTRL_REG 0x0a
168 #define PL2303_HXN_FLOWCTRL_MASK 0x1c
169 #define PL2303_HXN_FLOWCTRL_NONE 0x1c
170 #define PL2303_HXN_FLOWCTRL_RTS_CTS 0x18
171 #define PL2303_HXN_FLOWCTRL_XON_XOFF 0x0c
173 static void pl2303_set_break(struct usb_serial_port *port, bool enable);
185 struct pl2303_type_data {
187 speed_t max_baud_rate;
188 unsigned long quirks;
189 unsigned int no_autoxonxoff:1;
190 unsigned int no_divisors:1;
191 unsigned int alt_divisors:1;
194 struct pl2303_serial_private {
195 const struct pl2303_type_data *type;
196 unsigned long quirks;
199 struct pl2303_private {
207 static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
210 .max_baud_rate = 1228800,
211 .quirks = PL2303_QUIRK_LEGACY,
212 .no_autoxonxoff = true,
216 .max_baud_rate = 6000000,
220 .max_baud_rate = 6000000,
221 .alt_divisors = true,
225 .max_baud_rate = 12000000,
226 .alt_divisors = true,
230 .max_baud_rate = 12000000,
234 .max_baud_rate = 12000000,
239 static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
240 unsigned char buf[1])
242 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
243 struct device *dev = &serial->interface->dev;
247 if (spriv->type == &pl2303_type_data[TYPE_HXN])
248 request = VENDOR_READ_NREQUEST;
250 request = VENDOR_READ_REQUEST;
252 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
253 request, VENDOR_READ_REQUEST_TYPE,
254 value, 0, buf, 1, 100);
256 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
264 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
269 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
271 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
272 struct device *dev = &serial->interface->dev;
276 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
278 if (spriv->type == &pl2303_type_data[TYPE_HXN])
279 request = VENDOR_WRITE_NREQUEST;
281 request = VENDOR_WRITE_REQUEST;
283 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
284 request, VENDOR_WRITE_REQUEST_TYPE,
285 value, index, NULL, 0, 100);
287 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
295 static int pl2303_update_reg(struct usb_serial *serial, u8 reg, u8 mask, u8 val)
297 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
301 buf = kmalloc(1, GFP_KERNEL);
305 if (spriv->type == &pl2303_type_data[TYPE_HXN])
306 ret = pl2303_vendor_read(serial, reg, buf);
308 ret = pl2303_vendor_read(serial, reg | 0x80, buf);
316 ret = pl2303_vendor_write(serial, reg, *buf);
323 static int pl2303_probe(struct usb_serial *serial,
324 const struct usb_device_id *id)
326 usb_set_serial_data(serial, (void *)id->driver_info);
332 * Use interrupt endpoint from first interface if available.
334 * This is needed due to the looney way its endpoints are set up.
336 static int pl2303_endpoint_hack(struct usb_serial *serial,
337 struct usb_serial_endpoints *epds)
339 struct usb_interface *interface = serial->interface;
340 struct usb_device *dev = serial->dev;
341 struct device *ddev = &interface->dev;
342 struct usb_host_interface *iface_desc;
343 struct usb_endpoint_descriptor *endpoint;
346 if (interface == dev->actconfig->interface[0])
349 /* check out the endpoints of the other interface */
350 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
352 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
353 endpoint = &iface_desc->endpoint[i].desc;
355 if (!usb_endpoint_is_int_in(endpoint))
358 dev_dbg(ddev, "found interrupt in on separate interface\n");
359 if (epds->num_interrupt_in < ARRAY_SIZE(epds->interrupt_in))
360 epds->interrupt_in[epds->num_interrupt_in++] = endpoint;
366 static int pl2303_calc_num_ports(struct usb_serial *serial,
367 struct usb_serial_endpoints *epds)
369 unsigned long quirks = (unsigned long)usb_get_serial_data(serial);
370 struct device *dev = &serial->interface->dev;
373 if (quirks & PL2303_QUIRK_ENDPOINT_HACK) {
374 ret = pl2303_endpoint_hack(serial, epds);
379 if (epds->num_interrupt_in < 1) {
380 dev_err(dev, "required interrupt-in endpoint missing\n");
387 static bool pl2303_supports_hx_status(struct usb_serial *serial)
392 ret = usb_control_msg_recv(serial->dev, 0, VENDOR_READ_REQUEST,
393 VENDOR_READ_REQUEST_TYPE, PL2303_READ_TYPE_HX_STATUS,
394 0, &buf, 1, 100, GFP_KERNEL);
399 static int pl2303_detect_type(struct usb_serial *serial)
401 struct usb_device_descriptor *desc = &serial->dev->descriptor;
402 u16 bcdDevice, bcdUSB;
405 * Legacy PL2303H, variants 0 and 1 (difference unknown).
407 if (desc->bDeviceClass == 0x02)
408 return TYPE_H; /* variant 0 */
410 if (desc->bMaxPacketSize0 != 0x40) {
411 if (desc->bDeviceClass == 0x00 || desc->bDeviceClass == 0xff)
412 return TYPE_H; /* variant 1 */
414 return TYPE_H; /* variant 0 */
417 bcdDevice = le16_to_cpu(desc->bcdDevice);
418 bcdUSB = le16_to_cpu(desc->bcdUSB);
423 * Assume it's an HXN-type if the device doesn't support the old read
426 if (bcdUSB == 0x200 && !pl2303_supports_hx_status(serial))
440 dev_err(&serial->interface->dev,
445 static int pl2303_startup(struct usb_serial *serial)
447 struct pl2303_serial_private *spriv;
448 enum pl2303_type type;
452 ret = pl2303_detect_type(serial);
457 dev_dbg(&serial->interface->dev, "device type: %s\n", pl2303_type_data[type].name);
459 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
463 spriv->type = &pl2303_type_data[type];
464 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
465 spriv->quirks |= spriv->type->quirks;
467 usb_set_serial_data(serial, spriv);
469 if (type != TYPE_HXN) {
470 buf = kmalloc(1, GFP_KERNEL);
476 pl2303_vendor_read(serial, 0x8484, buf);
477 pl2303_vendor_write(serial, 0x0404, 0);
478 pl2303_vendor_read(serial, 0x8484, buf);
479 pl2303_vendor_read(serial, 0x8383, buf);
480 pl2303_vendor_read(serial, 0x8484, buf);
481 pl2303_vendor_write(serial, 0x0404, 1);
482 pl2303_vendor_read(serial, 0x8484, buf);
483 pl2303_vendor_read(serial, 0x8383, buf);
484 pl2303_vendor_write(serial, 0, 1);
485 pl2303_vendor_write(serial, 1, 0);
486 if (spriv->quirks & PL2303_QUIRK_LEGACY)
487 pl2303_vendor_write(serial, 2, 0x24);
489 pl2303_vendor_write(serial, 2, 0x44);
497 static void pl2303_release(struct usb_serial *serial)
499 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
504 static int pl2303_port_probe(struct usb_serial_port *port)
506 struct pl2303_private *priv;
508 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
512 spin_lock_init(&priv->lock);
514 usb_set_serial_port_data(port, priv);
516 port->port.drain_delay = 256;
521 static void pl2303_port_remove(struct usb_serial_port *port)
523 struct pl2303_private *priv = usb_get_serial_port_data(port);
528 static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
530 struct usb_device *dev = port->serial->dev;
533 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
535 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
536 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
537 value, 0, NULL, 0, 100);
539 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
545 * Returns the nearest supported baud rate that can be set directly without
548 static speed_t pl2303_get_supported_baud_rate(speed_t baud)
550 static const speed_t baud_sup[] = {
551 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
552 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
553 614400, 921600, 1228800, 2457600, 3000000, 6000000
558 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
559 if (baud_sup[i] > baud)
563 if (i == ARRAY_SIZE(baud_sup))
564 baud = baud_sup[i - 1];
565 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
566 baud = baud_sup[i - 1];
574 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
577 static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
580 put_unaligned_le32(baud, buf);
585 static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
588 unsigned int baseline, mantissa, exponent;
591 * Apparently the formula is:
592 * baudrate = 12M * 32 / (mantissa * 4^exponent)
594 * mantissa = buf[8:0]
595 * exponent = buf[11:9]
597 baseline = 12000000 * 32;
598 mantissa = baseline / baud;
600 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
602 while (mantissa >= 512) {
604 mantissa >>= 2; /* divide by 4 */
607 /* Exponent is maxed. Trim mantissa and leave. */
615 buf[1] = exponent << 1 | mantissa >> 8;
616 buf[0] = mantissa & 0xff;
618 /* Calculate and return the exact baud rate. */
619 baud = (baseline / mantissa) >> (exponent << 1);
624 static speed_t pl2303_encode_baud_rate_divisor_alt(unsigned char buf[4],
627 unsigned int baseline, mantissa, exponent;
630 * Apparently, for the TA version the formula is:
631 * baudrate = 12M * 32 / (mantissa * 2^exponent)
633 * mantissa = buf[10:0]
634 * exponent = buf[15:13 16]
636 baseline = 12000000 * 32;
637 mantissa = baseline / baud;
639 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
641 while (mantissa >= 2048) {
643 mantissa >>= 1; /* divide by 2 */
646 /* Exponent is maxed. Trim mantissa and leave. */
653 buf[2] = exponent & 0x01;
654 buf[1] = (exponent & ~0x01) << 4 | mantissa >> 8;
655 buf[0] = mantissa & 0xff;
657 /* Calculate and return the exact baud rate. */
658 baud = (baseline / mantissa) >> exponent;
663 static void pl2303_encode_baud_rate(struct tty_struct *tty,
664 struct usb_serial_port *port,
667 struct usb_serial *serial = port->serial;
668 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
672 baud = tty_get_baud_rate(tty);
673 dev_dbg(&port->dev, "baud requested = %u\n", baud);
677 if (spriv->type->max_baud_rate)
678 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
680 * Use direct method for supported baud rates, otherwise use divisors.
681 * Newer chip types do not support divisor encoding.
683 if (spriv->type->no_divisors)
686 baud_sup = pl2303_get_supported_baud_rate(baud);
688 if (baud == baud_sup)
689 baud = pl2303_encode_baud_rate_direct(buf, baud);
690 else if (spriv->type->alt_divisors)
691 baud = pl2303_encode_baud_rate_divisor_alt(buf, baud);
693 baud = pl2303_encode_baud_rate_divisor(buf, baud);
695 /* Save resulting baud rate */
696 tty_encode_baud_rate(tty, baud, baud);
697 dev_dbg(&port->dev, "baud set = %u\n", baud);
700 static int pl2303_get_line_request(struct usb_serial_port *port,
701 unsigned char buf[7])
703 struct usb_device *udev = port->serial->dev;
706 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
707 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
710 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
718 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
723 static int pl2303_set_line_request(struct usb_serial_port *port,
724 unsigned char buf[7])
726 struct usb_device *udev = port->serial->dev;
729 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
730 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
733 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
737 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
742 static bool pl2303_termios_change(const struct ktermios *a, const struct ktermios *b)
746 ixon_change = ((a->c_iflag ^ b->c_iflag) & (IXON | IXANY)) ||
747 a->c_cc[VSTART] != b->c_cc[VSTART] ||
748 a->c_cc[VSTOP] != b->c_cc[VSTOP];
750 return tty_termios_hw_change(a, b) || ixon_change;
753 static bool pl2303_enable_xonxoff(struct tty_struct *tty, const struct pl2303_type_data *type)
755 if (!I_IXON(tty) || I_IXANY(tty))
758 if (START_CHAR(tty) != 0x11 || STOP_CHAR(tty) != 0x13)
761 if (type->no_autoxonxoff)
767 static void pl2303_set_termios(struct tty_struct *tty,
768 struct usb_serial_port *port, struct ktermios *old_termios)
770 struct usb_serial *serial = port->serial;
771 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
772 struct pl2303_private *priv = usb_get_serial_port_data(port);
778 if (old_termios && !pl2303_termios_change(&tty->termios, old_termios))
781 buf = kzalloc(7, GFP_KERNEL);
783 /* Report back no change occurred */
785 tty->termios = *old_termios;
789 pl2303_get_line_request(port, buf);
791 switch (C_CSIZE(tty)) {
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");