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(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ZTEK) },
49 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
50 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
51 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
52 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
53 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
54 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
55 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
56 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
57 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
58 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
59 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
60 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
61 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
62 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
63 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
64 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
65 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
66 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
67 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
68 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
69 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75),
70 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
71 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
72 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
73 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
74 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
75 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
76 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
77 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
78 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
79 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
80 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
81 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
82 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
83 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
84 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
85 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
86 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
87 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
88 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
89 { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) },
90 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
91 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
92 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
93 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
94 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
95 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
96 { } /* Terminating entry */
99 MODULE_DEVICE_TABLE(usb, id_table);
101 #define SET_LINE_REQUEST_TYPE 0x21
102 #define SET_LINE_REQUEST 0x20
104 #define SET_CONTROL_REQUEST_TYPE 0x21
105 #define SET_CONTROL_REQUEST 0x22
106 #define CONTROL_DTR 0x01
107 #define CONTROL_RTS 0x02
109 #define BREAK_REQUEST_TYPE 0x21
110 #define BREAK_REQUEST 0x23
111 #define BREAK_ON 0xffff
112 #define BREAK_OFF 0x0000
114 #define GET_LINE_REQUEST_TYPE 0xa1
115 #define GET_LINE_REQUEST 0x21
117 #define VENDOR_WRITE_REQUEST_TYPE 0x40
118 #define VENDOR_WRITE_REQUEST 0x01
120 #define VENDOR_READ_REQUEST_TYPE 0xc0
121 #define VENDOR_READ_REQUEST 0x01
123 #define UART_STATE_INDEX 8
124 #define UART_STATE_MSR_MASK 0x8b
125 #define UART_STATE_TRANSIENT_MASK 0x74
126 #define UART_DCD 0x01
127 #define UART_DSR 0x02
128 #define UART_BREAK_ERROR 0x04
129 #define UART_RING 0x08
130 #define UART_FRAME_ERROR 0x10
131 #define UART_PARITY_ERROR 0x20
132 #define UART_OVERRUN_ERROR 0x40
133 #define UART_CTS 0x80
137 TYPE_01, /* Type 0 and 1 (difference unknown) */
138 TYPE_HX, /* HX version of the pl2303 chip */
142 struct pl2303_type_data {
143 speed_t max_baud_rate;
144 unsigned long quirks;
147 struct pl2303_serial_private {
148 const struct pl2303_type_data *type;
149 unsigned long quirks;
152 struct pl2303_private {
160 static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
162 .max_baud_rate = 1228800,
163 .quirks = PL2303_QUIRK_LEGACY,
166 .max_baud_rate = 12000000,
170 static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
171 unsigned char buf[1])
173 struct device *dev = &serial->interface->dev;
176 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
177 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
178 value, 0, buf, 1, 100);
180 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
188 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
193 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
195 struct device *dev = &serial->interface->dev;
198 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
200 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
201 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
202 value, index, NULL, 0, 100);
204 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
212 static int pl2303_probe(struct usb_serial *serial,
213 const struct usb_device_id *id)
215 usb_set_serial_data(serial, (void *)id->driver_info);
220 static int pl2303_startup(struct usb_serial *serial)
222 struct pl2303_serial_private *spriv;
223 enum pl2303_type type = TYPE_01;
226 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
230 buf = kmalloc(1, GFP_KERNEL);
236 if (serial->dev->descriptor.bDeviceClass == 0x02)
237 type = TYPE_01; /* type 0 */
238 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
240 else if (serial->dev->descriptor.bDeviceClass == 0x00)
241 type = TYPE_01; /* type 1 */
242 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
243 type = TYPE_01; /* type 1 */
244 dev_dbg(&serial->interface->dev, "device type: %d\n", type);
246 spriv->type = &pl2303_type_data[type];
247 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
248 spriv->quirks |= spriv->type->quirks;
250 usb_set_serial_data(serial, spriv);
252 pl2303_vendor_read(serial, 0x8484, buf);
253 pl2303_vendor_write(serial, 0x0404, 0);
254 pl2303_vendor_read(serial, 0x8484, buf);
255 pl2303_vendor_read(serial, 0x8383, buf);
256 pl2303_vendor_read(serial, 0x8484, buf);
257 pl2303_vendor_write(serial, 0x0404, 1);
258 pl2303_vendor_read(serial, 0x8484, buf);
259 pl2303_vendor_read(serial, 0x8383, buf);
260 pl2303_vendor_write(serial, 0, 1);
261 pl2303_vendor_write(serial, 1, 0);
262 if (spriv->quirks & PL2303_QUIRK_LEGACY)
263 pl2303_vendor_write(serial, 2, 0x24);
265 pl2303_vendor_write(serial, 2, 0x44);
272 static void pl2303_release(struct usb_serial *serial)
274 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
279 static int pl2303_port_probe(struct usb_serial_port *port)
281 struct pl2303_private *priv;
283 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
287 spin_lock_init(&priv->lock);
289 usb_set_serial_port_data(port, priv);
291 port->port.drain_delay = 256;
296 static int pl2303_port_remove(struct usb_serial_port *port)
298 struct pl2303_private *priv = usb_get_serial_port_data(port);
305 static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
307 struct usb_device *dev = port->serial->dev;
310 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
312 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
313 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
314 value, 0, NULL, 0, 100);
316 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
322 * Returns the nearest supported baud rate that can be set directly without
325 static speed_t pl2303_get_supported_baud_rate(speed_t baud)
327 static const speed_t baud_sup[] = {
328 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
329 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
330 614400, 921600, 1228800, 2457600, 3000000, 6000000
335 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
336 if (baud_sup[i] > baud)
340 if (i == ARRAY_SIZE(baud_sup))
341 baud = baud_sup[i - 1];
342 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
343 baud = baud_sup[i - 1];
351 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
354 static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
357 put_unaligned_le32(baud, buf);
362 static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
368 * Apparently the formula is:
369 * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
371 tmp = 12000000 * 32 / baud;
374 buf[1] = (tmp >= 256);
384 static void pl2303_encode_baud_rate(struct tty_struct *tty,
385 struct usb_serial_port *port,
388 struct usb_serial *serial = port->serial;
389 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
393 baud = tty_get_baud_rate(tty);
394 dev_dbg(&port->dev, "baud requested = %u\n", baud);
398 if (spriv->type->max_baud_rate)
399 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
401 * Use direct method for supported baud rates, otherwise use divisors.
403 baud_sup = pl2303_get_supported_baud_rate(baud);
405 if (baud == baud_sup)
406 baud = pl2303_encode_baud_rate_direct(buf, baud);
408 baud = pl2303_encode_baud_rate_divisor(buf, baud);
410 /* Save resulting baud rate */
411 tty_encode_baud_rate(tty, baud, baud);
412 dev_dbg(&port->dev, "baud set = %u\n", baud);
415 static int pl2303_get_line_request(struct usb_serial_port *port,
416 unsigned char buf[7])
418 struct usb_device *udev = port->serial->dev;
421 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
422 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
425 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
433 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
438 static int pl2303_set_line_request(struct usb_serial_port *port,
439 unsigned char buf[7])
441 struct usb_device *udev = port->serial->dev;
444 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
445 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
448 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
456 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
461 static void pl2303_set_termios(struct tty_struct *tty,
462 struct usb_serial_port *port, struct ktermios *old_termios)
464 struct usb_serial *serial = port->serial;
465 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
466 struct pl2303_private *priv = usb_get_serial_port_data(port);
472 if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios))
475 buf = kzalloc(7, GFP_KERNEL);
477 /* Report back no change occurred */
479 tty->termios = *old_termios;
483 pl2303_get_line_request(port, buf);
485 switch (C_CSIZE(tty)) {
499 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
501 /* For reference buf[0]:buf[3] baud rate value */
502 pl2303_encode_baud_rate(tty, port, &buf[0]);
504 /* For reference buf[4]=0 is 1 stop bits */
505 /* For reference buf[4]=1 is 1.5 stop bits */
506 /* For reference buf[4]=2 is 2 stop bits */
509 * NOTE: Comply with "real" UARTs / RS232:
510 * use 1.5 instead of 2 stop bits with 5 data bits
512 if (C_CSIZE(tty) == CS5) {
514 dev_dbg(&port->dev, "stop bits = 1.5\n");
517 dev_dbg(&port->dev, "stop bits = 2\n");
521 dev_dbg(&port->dev, "stop bits = 1\n");
525 /* For reference buf[5]=0 is none parity */
526 /* For reference buf[5]=1 is odd parity */
527 /* For reference buf[5]=2 is even parity */
528 /* For reference buf[5]=3 is mark parity */
529 /* For reference buf[5]=4 is space parity */
533 dev_dbg(&port->dev, "parity = mark\n");
536 dev_dbg(&port->dev, "parity = odd\n");
541 dev_dbg(&port->dev, "parity = space\n");
544 dev_dbg(&port->dev, "parity = even\n");
549 dev_dbg(&port->dev, "parity = none\n");
553 * Some PL2303 are known to lose bytes if you change serial settings
554 * even to the same values as before. Thus we actually need to filter
555 * in this specific case.
557 * Note that the tty_termios_hw_change check above is not sufficient
558 * as a previously requested baud rate may differ from the one
559 * actually used (and stored in old_termios).
561 * NOTE: No additional locking needed for line_settings as it is
562 * only used in set_termios, which is serialised against itself.
564 if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
565 ret = pl2303_set_line_request(port, buf);
567 memcpy(priv->line_settings, buf, 7);
570 /* change control lines if we are switching to or from B0 */
571 spin_lock_irqsave(&priv->lock, flags);
572 control = priv->line_control;
573 if (C_BAUD(tty) == B0)
574 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
575 else if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
576 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
577 if (control != priv->line_control) {
578 control = priv->line_control;
579 spin_unlock_irqrestore(&priv->lock, flags);
580 pl2303_set_control_lines(port, control);
582 spin_unlock_irqrestore(&priv->lock, flags);
585 if (C_CRTSCTS(tty)) {
586 if (spriv->quirks & PL2303_QUIRK_LEGACY)
587 pl2303_vendor_write(serial, 0x0, 0x41);
589 pl2303_vendor_write(serial, 0x0, 0x61);
591 pl2303_vendor_write(serial, 0x0, 0x0);
597 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
599 struct pl2303_private *priv = usb_get_serial_port_data(port);
603 spin_lock_irqsave(&priv->lock, flags);
605 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
607 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
608 control = priv->line_control;
609 spin_unlock_irqrestore(&priv->lock, flags);
611 pl2303_set_control_lines(port, control);
614 static void pl2303_close(struct usb_serial_port *port)
616 usb_serial_generic_close(port);
617 usb_kill_urb(port->interrupt_in_urb);
620 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
622 struct usb_serial *serial = port->serial;
623 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
626 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
627 usb_clear_halt(serial->dev, port->write_urb->pipe);
628 usb_clear_halt(serial->dev, port->read_urb->pipe);
630 /* reset upstream data pipes */
631 pl2303_vendor_write(serial, 8, 0);
632 pl2303_vendor_write(serial, 9, 0);
637 pl2303_set_termios(tty, port, NULL);
639 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
641 dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
646 result = usb_serial_generic_open(tty, port);
648 usb_kill_urb(port->interrupt_in_urb);
655 static int pl2303_tiocmset(struct tty_struct *tty,
656 unsigned int set, unsigned int clear)
658 struct usb_serial_port *port = tty->driver_data;
659 struct pl2303_private *priv = usb_get_serial_port_data(port);
664 spin_lock_irqsave(&priv->lock, flags);
666 priv->line_control |= CONTROL_RTS;
668 priv->line_control |= CONTROL_DTR;
669 if (clear & TIOCM_RTS)
670 priv->line_control &= ~CONTROL_RTS;
671 if (clear & TIOCM_DTR)
672 priv->line_control &= ~CONTROL_DTR;
673 control = priv->line_control;
674 spin_unlock_irqrestore(&priv->lock, flags);
676 ret = pl2303_set_control_lines(port, control);
678 return usb_translate_errors(ret);
683 static int pl2303_tiocmget(struct tty_struct *tty)
685 struct usb_serial_port *port = tty->driver_data;
686 struct pl2303_private *priv = usb_get_serial_port_data(port);
692 spin_lock_irqsave(&priv->lock, flags);
693 mcr = priv->line_control;
694 status = priv->line_status;
695 spin_unlock_irqrestore(&priv->lock, flags);
697 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
698 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
699 | ((status & UART_CTS) ? TIOCM_CTS : 0)
700 | ((status & UART_DSR) ? TIOCM_DSR : 0)
701 | ((status & UART_RING) ? TIOCM_RI : 0)
702 | ((status & UART_DCD) ? TIOCM_CD : 0);
704 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
709 static int pl2303_carrier_raised(struct usb_serial_port *port)
711 struct pl2303_private *priv = usb_get_serial_port_data(port);
713 if (priv->line_status & UART_DCD)
719 static int pl2303_ioctl(struct tty_struct *tty,
720 unsigned int cmd, unsigned long arg)
722 struct serial_struct ser;
723 struct usb_serial_port *port = tty->driver_data;
727 memset(&ser, 0, sizeof ser);
728 ser.type = PORT_16654;
729 ser.line = port->minor;
730 ser.port = port->port_number;
731 ser.baud_base = 460800;
733 if (copy_to_user((void __user *)arg, &ser, sizeof ser))
744 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
746 struct usb_serial_port *port = tty->driver_data;
747 struct usb_serial *serial = port->serial;
751 if (break_state == 0)
756 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
757 state == BREAK_OFF ? "off" : "on");
759 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
760 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
763 dev_err(&port->dev, "error sending break = %d\n", result);
766 static void pl2303_update_line_status(struct usb_serial_port *port,
768 unsigned int actual_length)
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);
773 struct tty_struct *tty;
775 unsigned int status_idx = UART_STATE_INDEX;
779 if (spriv->quirks & PL2303_QUIRK_UART_STATE_IDX0)
782 if (actual_length < status_idx + 1)
785 status = data[status_idx];
787 /* Save off the uart status for others to look at */
788 spin_lock_irqsave(&priv->lock, flags);
789 delta = priv->line_status ^ status;
790 priv->line_status = status;
791 spin_unlock_irqrestore(&priv->lock, flags);
793 if (status & UART_BREAK_ERROR)
794 usb_serial_handle_break(port);
796 if (delta & UART_STATE_MSR_MASK) {
797 if (delta & UART_CTS)
799 if (delta & UART_DSR)
801 if (delta & UART_RING)
803 if (delta & UART_DCD) {
805 tty = tty_port_tty_get(&port->port);
807 usb_serial_handle_dcd_change(port, tty,
813 wake_up_interruptible(&port->port.delta_msr_wait);
817 static void pl2303_read_int_callback(struct urb *urb)
819 struct usb_serial_port *port = urb->context;
820 unsigned char *data = urb->transfer_buffer;
821 unsigned int actual_length = urb->actual_length;
822 int status = urb->status;
832 /* this urb is terminated, clean up */
833 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
837 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
842 usb_serial_debug_data(&port->dev, __func__,
843 urb->actual_length, urb->transfer_buffer);
845 pl2303_update_line_status(port, data, actual_length);
848 retval = usb_submit_urb(urb, GFP_ATOMIC);
851 "%s - usb_submit_urb failed with result %d\n",
856 static void pl2303_process_read_urb(struct urb *urb)
858 struct usb_serial_port *port = urb->context;
859 struct pl2303_private *priv = usb_get_serial_port_data(port);
860 unsigned char *data = urb->transfer_buffer;
861 char tty_flag = TTY_NORMAL;
866 /* update line status */
867 spin_lock_irqsave(&priv->lock, flags);
868 line_status = priv->line_status;
869 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
870 spin_unlock_irqrestore(&priv->lock, flags);
872 if (!urb->actual_length)
876 * Break takes precedence over parity, which takes precedence over
879 if (line_status & UART_BREAK_ERROR)
880 tty_flag = TTY_BREAK;
881 else if (line_status & UART_PARITY_ERROR)
882 tty_flag = TTY_PARITY;
883 else if (line_status & UART_FRAME_ERROR)
884 tty_flag = TTY_FRAME;
886 if (tty_flag != TTY_NORMAL)
887 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__,
889 /* overrun is special, not associated with a char */
890 if (line_status & UART_OVERRUN_ERROR)
891 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
893 if (port->port.console && port->sysrq) {
894 for (i = 0; i < urb->actual_length; ++i)
895 if (!usb_serial_handle_sysrq_char(port, data[i]))
896 tty_insert_flip_char(&port->port, data[i],
899 tty_insert_flip_string_fixed_flag(&port->port, data, tty_flag,
903 tty_flip_buffer_push(&port->port);
906 static struct usb_serial_driver pl2303_device = {
908 .owner = THIS_MODULE,
911 .id_table = id_table,
914 .bulk_out_size = 256,
916 .close = pl2303_close,
917 .dtr_rts = pl2303_dtr_rts,
918 .carrier_raised = pl2303_carrier_raised,
919 .ioctl = pl2303_ioctl,
920 .break_ctl = pl2303_break_ctl,
921 .set_termios = pl2303_set_termios,
922 .tiocmget = pl2303_tiocmget,
923 .tiocmset = pl2303_tiocmset,
924 .tiocmiwait = usb_serial_generic_tiocmiwait,
925 .process_read_urb = pl2303_process_read_urb,
926 .read_int_callback = pl2303_read_int_callback,
927 .probe = pl2303_probe,
928 .attach = pl2303_startup,
929 .release = pl2303_release,
930 .port_probe = pl2303_port_probe,
931 .port_remove = pl2303_port_remove,
934 static struct usb_serial_driver * const serial_drivers[] = {
938 module_usb_serial_driver(serial_drivers, id_table);
940 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
941 MODULE_LICENSE("GPL");