2 * Prolific PL2303 USB to serial adaptor driver
4 * Copyright (C) 2001-2007 Greg Kroah-Hartman (greg@kroah.com)
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,
167 static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
168 unsigned char buf[1])
170 struct device *dev = &serial->interface->dev;
173 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
174 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
175 value, 0, buf, 1, 100);
177 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
185 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
190 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
192 struct device *dev = &serial->interface->dev;
195 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
197 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
198 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
199 value, index, NULL, 0, 100);
201 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
209 static int pl2303_probe(struct usb_serial *serial,
210 const struct usb_device_id *id)
212 usb_set_serial_data(serial, (void *)id->driver_info);
217 static int pl2303_startup(struct usb_serial *serial)
219 struct pl2303_serial_private *spriv;
220 enum pl2303_type type = TYPE_01;
223 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
227 buf = kmalloc(1, GFP_KERNEL);
233 if (serial->dev->descriptor.bDeviceClass == 0x02)
234 type = TYPE_01; /* type 0 */
235 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
237 else if (serial->dev->descriptor.bDeviceClass == 0x00)
238 type = TYPE_01; /* type 1 */
239 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
240 type = TYPE_01; /* type 1 */
241 dev_dbg(&serial->interface->dev, "device type: %d\n", type);
243 spriv->type = &pl2303_type_data[type];
244 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
245 spriv->quirks |= spriv->type->quirks;
247 usb_set_serial_data(serial, spriv);
249 pl2303_vendor_read(serial, 0x8484, buf);
250 pl2303_vendor_write(serial, 0x0404, 0);
251 pl2303_vendor_read(serial, 0x8484, buf);
252 pl2303_vendor_read(serial, 0x8383, buf);
253 pl2303_vendor_read(serial, 0x8484, buf);
254 pl2303_vendor_write(serial, 0x0404, 1);
255 pl2303_vendor_read(serial, 0x8484, buf);
256 pl2303_vendor_read(serial, 0x8383, buf);
257 pl2303_vendor_write(serial, 0, 1);
258 pl2303_vendor_write(serial, 1, 0);
259 if (spriv->quirks & PL2303_QUIRK_LEGACY)
260 pl2303_vendor_write(serial, 2, 0x24);
262 pl2303_vendor_write(serial, 2, 0x44);
269 static void pl2303_release(struct usb_serial *serial)
271 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
276 static int pl2303_port_probe(struct usb_serial_port *port)
278 struct pl2303_private *priv;
280 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
284 spin_lock_init(&priv->lock);
286 usb_set_serial_port_data(port, priv);
288 port->port.drain_delay = 256;
293 static int pl2303_port_remove(struct usb_serial_port *port)
295 struct pl2303_private *priv = usb_get_serial_port_data(port);
302 static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
304 struct usb_device *dev = port->serial->dev;
307 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
309 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
310 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
311 value, 0, NULL, 0, 100);
313 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
319 * Returns the nearest supported baud rate that can be set directly without
322 static speed_t pl2303_get_supported_baud_rate(speed_t baud)
324 static const speed_t baud_sup[] = {
325 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
326 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
327 614400, 921600, 1228800, 2457600, 3000000, 6000000
332 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
333 if (baud_sup[i] > baud)
337 if (i == ARRAY_SIZE(baud_sup))
338 baud = baud_sup[i - 1];
339 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
340 baud = baud_sup[i - 1];
348 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
351 static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
354 put_unaligned_le32(baud, buf);
359 static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
365 * Apparently the formula is:
366 * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
368 tmp = 12000000 * 32 / baud;
371 buf[1] = (tmp >= 256);
381 static void pl2303_encode_baud_rate(struct tty_struct *tty,
382 struct usb_serial_port *port,
385 struct usb_serial *serial = port->serial;
386 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
390 baud = tty_get_baud_rate(tty);
391 dev_dbg(&port->dev, "baud requested = %u\n", baud);
395 if (spriv->type->max_baud_rate)
396 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
398 * Set baud rate to nearest supported value.
400 * NOTE: Baud rate 500k can only be set using divisors.
402 baud_sup = pl2303_get_supported_baud_rate(baud);
405 baud = pl2303_encode_baud_rate_divisor(buf, baud);
407 baud = pl2303_encode_baud_rate_direct(buf, baud_sup);
409 /* Save resulting baud rate */
410 tty_encode_baud_rate(tty, baud, baud);
411 dev_dbg(&port->dev, "baud set = %u\n", baud);
414 static int pl2303_get_line_request(struct usb_serial_port *port,
415 unsigned char buf[7])
417 struct usb_device *udev = port->serial->dev;
420 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
421 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
424 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
432 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
437 static int pl2303_set_line_request(struct usb_serial_port *port,
438 unsigned char buf[7])
440 struct usb_device *udev = port->serial->dev;
443 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
444 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
447 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
455 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
460 static void pl2303_set_termios(struct tty_struct *tty,
461 struct usb_serial_port *port, struct ktermios *old_termios)
463 struct usb_serial *serial = port->serial;
464 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
465 struct pl2303_private *priv = usb_get_serial_port_data(port);
471 if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios))
474 buf = kzalloc(7, GFP_KERNEL);
476 /* Report back no change occurred */
478 tty->termios = *old_termios;
482 pl2303_get_line_request(port, buf);
484 switch (C_CSIZE(tty)) {
498 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
500 /* For reference buf[0]:buf[3] baud rate value */
501 pl2303_encode_baud_rate(tty, port, &buf[0]);
503 /* For reference buf[4]=0 is 1 stop bits */
504 /* For reference buf[4]=1 is 1.5 stop bits */
505 /* For reference buf[4]=2 is 2 stop bits */
508 * NOTE: Comply with "real" UARTs / RS232:
509 * use 1.5 instead of 2 stop bits with 5 data bits
511 if (C_CSIZE(tty) == CS5) {
513 dev_dbg(&port->dev, "stop bits = 1.5\n");
516 dev_dbg(&port->dev, "stop bits = 2\n");
520 dev_dbg(&port->dev, "stop bits = 1\n");
524 /* For reference buf[5]=0 is none parity */
525 /* For reference buf[5]=1 is odd parity */
526 /* For reference buf[5]=2 is even parity */
527 /* For reference buf[5]=3 is mark parity */
528 /* For reference buf[5]=4 is space parity */
532 dev_dbg(&port->dev, "parity = mark\n");
535 dev_dbg(&port->dev, "parity = odd\n");
540 dev_dbg(&port->dev, "parity = space\n");
543 dev_dbg(&port->dev, "parity = even\n");
548 dev_dbg(&port->dev, "parity = none\n");
552 * Some PL2303 are known to lose bytes if you change serial settings
553 * even to the same values as before. Thus we actually need to filter
554 * in this specific case.
556 * Note that the tty_termios_hw_change check above is not sufficient
557 * as a previously requested baud rate may differ from the one
558 * actually used (and stored in old_termios).
560 * NOTE: No additional locking needed for line_settings as it is
561 * only used in set_termios, which is serialised against itself.
563 if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
564 ret = pl2303_set_line_request(port, buf);
566 memcpy(priv->line_settings, buf, 7);
569 /* change control lines if we are switching to or from B0 */
570 spin_lock_irqsave(&priv->lock, flags);
571 control = priv->line_control;
572 if (C_BAUD(tty) == B0)
573 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
574 else if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
575 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
576 if (control != priv->line_control) {
577 control = priv->line_control;
578 spin_unlock_irqrestore(&priv->lock, flags);
579 pl2303_set_control_lines(port, control);
581 spin_unlock_irqrestore(&priv->lock, flags);
584 if (C_CRTSCTS(tty)) {
585 if (spriv->quirks & PL2303_QUIRK_LEGACY)
586 pl2303_vendor_write(serial, 0x0, 0x41);
588 pl2303_vendor_write(serial, 0x0, 0x61);
590 pl2303_vendor_write(serial, 0x0, 0x0);
596 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
598 struct pl2303_private *priv = usb_get_serial_port_data(port);
602 spin_lock_irqsave(&priv->lock, flags);
604 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
606 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
607 control = priv->line_control;
608 spin_unlock_irqrestore(&priv->lock, flags);
610 pl2303_set_control_lines(port, control);
613 static void pl2303_close(struct usb_serial_port *port)
615 usb_serial_generic_close(port);
616 usb_kill_urb(port->interrupt_in_urb);
619 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
621 struct usb_serial *serial = port->serial;
622 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
625 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
626 usb_clear_halt(serial->dev, port->write_urb->pipe);
627 usb_clear_halt(serial->dev, port->read_urb->pipe);
629 /* reset upstream data pipes */
630 pl2303_vendor_write(serial, 8, 0);
631 pl2303_vendor_write(serial, 9, 0);
636 pl2303_set_termios(tty, port, NULL);
638 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
640 dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
645 result = usb_serial_generic_open(tty, port);
647 usb_kill_urb(port->interrupt_in_urb);
654 static int pl2303_tiocmset(struct tty_struct *tty,
655 unsigned int set, unsigned int clear)
657 struct usb_serial_port *port = tty->driver_data;
658 struct pl2303_private *priv = usb_get_serial_port_data(port);
663 spin_lock_irqsave(&priv->lock, flags);
665 priv->line_control |= CONTROL_RTS;
667 priv->line_control |= CONTROL_DTR;
668 if (clear & TIOCM_RTS)
669 priv->line_control &= ~CONTROL_RTS;
670 if (clear & TIOCM_DTR)
671 priv->line_control &= ~CONTROL_DTR;
672 control = priv->line_control;
673 spin_unlock_irqrestore(&priv->lock, flags);
675 ret = pl2303_set_control_lines(port, control);
677 return usb_translate_errors(ret);
682 static int pl2303_tiocmget(struct tty_struct *tty)
684 struct usb_serial_port *port = tty->driver_data;
685 struct pl2303_private *priv = usb_get_serial_port_data(port);
691 spin_lock_irqsave(&priv->lock, flags);
692 mcr = priv->line_control;
693 status = priv->line_status;
694 spin_unlock_irqrestore(&priv->lock, flags);
696 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
697 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
698 | ((status & UART_CTS) ? TIOCM_CTS : 0)
699 | ((status & UART_DSR) ? TIOCM_DSR : 0)
700 | ((status & UART_RING) ? TIOCM_RI : 0)
701 | ((status & UART_DCD) ? TIOCM_CD : 0);
703 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
708 static int pl2303_carrier_raised(struct usb_serial_port *port)
710 struct pl2303_private *priv = usb_get_serial_port_data(port);
712 if (priv->line_status & UART_DCD)
718 static int pl2303_ioctl(struct tty_struct *tty,
719 unsigned int cmd, unsigned long arg)
721 struct serial_struct ser;
722 struct usb_serial_port *port = tty->driver_data;
726 memset(&ser, 0, sizeof ser);
727 ser.type = PORT_16654;
728 ser.line = port->minor;
729 ser.port = port->port_number;
730 ser.baud_base = 460800;
732 if (copy_to_user((void __user *)arg, &ser, sizeof ser))
743 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
745 struct usb_serial_port *port = tty->driver_data;
746 struct usb_serial *serial = port->serial;
750 if (break_state == 0)
755 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
756 state == BREAK_OFF ? "off" : "on");
758 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
759 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
762 dev_err(&port->dev, "error sending break = %d\n", result);
765 static void pl2303_update_line_status(struct usb_serial_port *port,
767 unsigned int actual_length)
769 struct usb_serial *serial = port->serial;
770 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
771 struct pl2303_private *priv = usb_get_serial_port_data(port);
772 struct tty_struct *tty;
774 unsigned int status_idx = UART_STATE_INDEX;
778 if (spriv->quirks & PL2303_QUIRK_UART_STATE_IDX0)
781 if (actual_length < status_idx + 1)
784 status = data[status_idx];
786 /* Save off the uart status for others to look at */
787 spin_lock_irqsave(&priv->lock, flags);
788 delta = priv->line_status ^ status;
789 priv->line_status = status;
790 spin_unlock_irqrestore(&priv->lock, flags);
792 if (status & UART_BREAK_ERROR)
793 usb_serial_handle_break(port);
795 if (delta & UART_STATE_MSR_MASK) {
796 if (delta & UART_CTS)
798 if (delta & UART_DSR)
800 if (delta & UART_RING)
802 if (delta & UART_DCD) {
804 tty = tty_port_tty_get(&port->port);
806 usb_serial_handle_dcd_change(port, tty,
812 wake_up_interruptible(&port->port.delta_msr_wait);
816 static void pl2303_read_int_callback(struct urb *urb)
818 struct usb_serial_port *port = urb->context;
819 unsigned char *data = urb->transfer_buffer;
820 unsigned int actual_length = urb->actual_length;
821 int status = urb->status;
831 /* this urb is terminated, clean up */
832 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
836 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
841 usb_serial_debug_data(&port->dev, __func__,
842 urb->actual_length, urb->transfer_buffer);
844 pl2303_update_line_status(port, data, actual_length);
847 retval = usb_submit_urb(urb, GFP_ATOMIC);
850 "%s - usb_submit_urb failed with result %d\n",
855 static void pl2303_process_read_urb(struct urb *urb)
857 struct usb_serial_port *port = urb->context;
858 struct pl2303_private *priv = usb_get_serial_port_data(port);
859 unsigned char *data = urb->transfer_buffer;
860 char tty_flag = TTY_NORMAL;
865 /* update line status */
866 spin_lock_irqsave(&priv->lock, flags);
867 line_status = priv->line_status;
868 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
869 spin_unlock_irqrestore(&priv->lock, flags);
871 if (!urb->actual_length)
875 * Break takes precedence over parity, which takes precedence over
878 if (line_status & UART_BREAK_ERROR)
879 tty_flag = TTY_BREAK;
880 else if (line_status & UART_PARITY_ERROR)
881 tty_flag = TTY_PARITY;
882 else if (line_status & UART_FRAME_ERROR)
883 tty_flag = TTY_FRAME;
885 if (tty_flag != TTY_NORMAL)
886 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__,
888 /* overrun is special, not associated with a char */
889 if (line_status & UART_OVERRUN_ERROR)
890 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
892 if (port->port.console && port->sysrq) {
893 for (i = 0; i < urb->actual_length; ++i)
894 if (!usb_serial_handle_sysrq_char(port, data[i]))
895 tty_insert_flip_char(&port->port, data[i],
898 tty_insert_flip_string_fixed_flag(&port->port, data, tty_flag,
902 tty_flip_buffer_push(&port->port);
905 static struct usb_serial_driver pl2303_device = {
907 .owner = THIS_MODULE,
910 .id_table = id_table,
913 .bulk_out_size = 256,
915 .close = pl2303_close,
916 .dtr_rts = pl2303_dtr_rts,
917 .carrier_raised = pl2303_carrier_raised,
918 .ioctl = pl2303_ioctl,
919 .break_ctl = pl2303_break_ctl,
920 .set_termios = pl2303_set_termios,
921 .tiocmget = pl2303_tiocmget,
922 .tiocmset = pl2303_tiocmset,
923 .tiocmiwait = usb_serial_generic_tiocmiwait,
924 .process_read_urb = pl2303_process_read_urb,
925 .read_int_callback = pl2303_read_int_callback,
926 .probe = pl2303_probe,
927 .attach = pl2303_startup,
928 .release = pl2303_release,
929 .port_probe = pl2303_port_probe,
930 .port_remove = pl2303_port_remove,
933 static struct usb_serial_driver * const serial_drivers[] = {
937 module_usb_serial_driver(serial_drivers, id_table);
939 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
940 MODULE_LICENSE("GPL");