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
18 #include <linux/kernel.h>
19 #include <linux/errno.h>
20 #include <linux/init.h>
21 #include <linux/slab.h>
22 #include <linux/tty.h>
23 #include <linux/tty_driver.h>
24 #include <linux/tty_flip.h>
25 #include <linux/serial.h>
26 #include <linux/module.h>
27 #include <linux/moduleparam.h>
28 #include <linux/spinlock.h>
29 #include <linux/uaccess.h>
30 #include <linux/usb.h>
31 #include <linux/usb/serial.h>
37 #define DRIVER_DESC "Prolific PL2303 USB to serial adaptor driver"
41 #define PL2303_CLOSING_WAIT (30*HZ)
43 static const struct usb_device_id id_table[] = {
44 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) },
45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
48 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
49 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
50 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
51 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
52 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
53 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
54 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
55 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
56 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
57 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
58 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
59 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
60 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
61 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
62 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
63 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
64 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
65 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
66 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
67 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
68 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
69 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
70 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
71 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
72 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
73 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
74 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
75 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
76 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
77 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
78 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
79 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
80 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
81 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
82 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
83 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
84 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
85 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
86 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
87 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
88 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
89 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
90 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
91 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
92 { } /* Terminating entry */
95 MODULE_DEVICE_TABLE(usb, id_table);
97 static struct usb_driver pl2303_driver = {
99 .probe = usb_serial_probe,
100 .disconnect = usb_serial_disconnect,
101 .id_table = id_table,
102 .suspend = usb_serial_suspend,
103 .resume = usb_serial_resume,
105 .supports_autosuspend = 1,
108 #define SET_LINE_REQUEST_TYPE 0x21
109 #define SET_LINE_REQUEST 0x20
111 #define SET_CONTROL_REQUEST_TYPE 0x21
112 #define SET_CONTROL_REQUEST 0x22
113 #define CONTROL_DTR 0x01
114 #define CONTROL_RTS 0x02
116 #define BREAK_REQUEST_TYPE 0x21
117 #define BREAK_REQUEST 0x23
118 #define BREAK_ON 0xffff
119 #define BREAK_OFF 0x0000
121 #define GET_LINE_REQUEST_TYPE 0xa1
122 #define GET_LINE_REQUEST 0x21
124 #define VENDOR_WRITE_REQUEST_TYPE 0x40
125 #define VENDOR_WRITE_REQUEST 0x01
127 #define VENDOR_READ_REQUEST_TYPE 0xc0
128 #define VENDOR_READ_REQUEST 0x01
130 #define UART_STATE 0x08
131 #define UART_STATE_TRANSIENT_MASK 0x74
132 #define UART_DCD 0x01
133 #define UART_DSR 0x02
134 #define UART_BREAK_ERROR 0x04
135 #define UART_RING 0x08
136 #define UART_FRAME_ERROR 0x10
137 #define UART_PARITY_ERROR 0x20
138 #define UART_OVERRUN_ERROR 0x40
139 #define UART_CTS 0x80
143 type_0, /* don't know the difference between type 0 and */
144 type_1, /* type 1, until someone from prolific tells us... */
145 HX, /* HX version of the pl2303 chip */
148 struct pl2303_private {
150 wait_queue_head_t delta_msr_wait;
153 enum pl2303_type type;
156 static int pl2303_vendor_read(__u16 value, __u16 index,
157 struct usb_serial *serial, unsigned char *buf)
159 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
160 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
161 value, index, buf, 1, 100);
162 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
163 VENDOR_READ_REQUEST, value, index, res, buf[0]);
167 static int pl2303_vendor_write(__u16 value, __u16 index,
168 struct usb_serial *serial)
170 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
171 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
172 value, index, NULL, 0, 100);
173 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
174 VENDOR_WRITE_REQUEST, value, index, res);
178 static int pl2303_startup(struct usb_serial *serial)
180 struct pl2303_private *priv;
181 enum pl2303_type type = type_0;
185 buf = kmalloc(10, GFP_KERNEL);
189 if (serial->dev->descriptor.bDeviceClass == 0x02)
191 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
193 else if (serial->dev->descriptor.bDeviceClass == 0x00)
195 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
197 dbg("device type: %d", type);
199 for (i = 0; i < serial->num_ports; ++i) {
200 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
203 spin_lock_init(&priv->lock);
204 init_waitqueue_head(&priv->delta_msr_wait);
206 usb_set_serial_port_data(serial->port[i], priv);
209 pl2303_vendor_read(0x8484, 0, serial, buf);
210 pl2303_vendor_write(0x0404, 0, serial);
211 pl2303_vendor_read(0x8484, 0, serial, buf);
212 pl2303_vendor_read(0x8383, 0, serial, buf);
213 pl2303_vendor_read(0x8484, 0, serial, buf);
214 pl2303_vendor_write(0x0404, 1, serial);
215 pl2303_vendor_read(0x8484, 0, serial, buf);
216 pl2303_vendor_read(0x8383, 0, serial, buf);
217 pl2303_vendor_write(0, 1, serial);
218 pl2303_vendor_write(1, 0, serial);
220 pl2303_vendor_write(2, 0x44, serial);
222 pl2303_vendor_write(2, 0x24, serial);
229 for (--i; i >= 0; --i) {
230 priv = usb_get_serial_port_data(serial->port[i]);
232 usb_set_serial_port_data(serial->port[i], NULL);
237 static int set_control_lines(struct usb_device *dev, u8 value)
241 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
242 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
243 value, 0, NULL, 0, 100);
244 dbg("%s - value = %d, retval = %d", __func__, value, retval);
248 static void pl2303_set_termios(struct tty_struct *tty,
249 struct usb_serial_port *port, struct ktermios *old_termios)
251 struct usb_serial *serial = port->serial;
252 struct pl2303_private *priv = usb_get_serial_port_data(port);
259 const int baud_sup[] = { 75, 150, 300, 600, 1200, 1800, 2400, 3600,
260 4800, 7200, 9600, 14400, 19200, 28800, 38400,
261 57600, 115200, 230400, 460800, 614400,
262 921600, 1228800, 2457600, 3000000, 6000000 };
263 int baud_floor, baud_ceil;
266 dbg("%s - port %d", __func__, port->number);
268 /* The PL2303 is reported to lose bytes if you change
269 serial settings even to the same values as before. Thus
270 we actually need to filter in this specific case */
272 if (!tty_termios_hw_change(tty->termios, old_termios))
275 cflag = tty->termios->c_cflag;
277 buf = kzalloc(7, GFP_KERNEL);
279 dev_err(&port->dev, "%s - out of memory.\n", __func__);
280 /* Report back no change occurred */
281 *tty->termios = *old_termios;
285 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
286 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
288 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
289 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
292 switch (cflag & CSIZE) {
307 dbg("%s - data bits = %d", __func__, buf[6]);
310 /* For reference buf[0]:buf[3] baud rate value */
311 /* NOTE: Only the values defined in baud_sup are supported !
312 * => if unsupported values are set, the PL2303 seems to use
313 * 9600 baud (at least my PL2303X always does)
315 baud = tty_get_baud_rate(tty);
316 dbg("%s - baud requested = %d", __func__, baud);
318 /* Set baudrate to nearest supported value */
319 for (k=0; k<ARRAY_SIZE(baud_sup); k++) {
320 if (baud_sup[k] / baud) {
321 baud_ceil = baud_sup[k];
325 baud_floor = baud_sup[k-1];
326 if ((baud_ceil % baud)
327 > (baud % baud_floor))
335 if (baud > 1228800) {
336 /* type_0, type_1 only support up to 1228800 baud */
337 if (priv->type != HX)
339 else if (baud > 6000000)
342 dbg("%s - baud set = %d", __func__, baud);
343 buf[0] = baud & 0xff;
344 buf[1] = (baud >> 8) & 0xff;
345 buf[2] = (baud >> 16) & 0xff;
346 buf[3] = (baud >> 24) & 0xff;
349 /* For reference buf[4]=0 is 1 stop bits */
350 /* For reference buf[4]=1 is 1.5 stop bits */
351 /* For reference buf[4]=2 is 2 stop bits */
352 if (cflag & CSTOPB) {
353 /* NOTE: Comply with "real" UARTs / RS232:
354 * use 1.5 instead of 2 stop bits with 5 data bits
356 if ((cflag & CSIZE) == CS5) {
358 dbg("%s - stop bits = 1.5", __func__);
361 dbg("%s - stop bits = 2", __func__);
365 dbg("%s - stop bits = 1", __func__);
368 if (cflag & PARENB) {
369 /* For reference buf[5]=0 is none parity */
370 /* For reference buf[5]=1 is odd parity */
371 /* For reference buf[5]=2 is even parity */
372 /* For reference buf[5]=3 is mark parity */
373 /* For reference buf[5]=4 is space parity */
374 if (cflag & PARODD) {
375 if (cflag & CMSPAR) {
377 dbg("%s - parity = mark", __func__);
380 dbg("%s - parity = odd", __func__);
383 if (cflag & CMSPAR) {
385 dbg("%s - parity = space", __func__);
388 dbg("%s - parity = even", __func__);
393 dbg("%s - parity = none", __func__);
396 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
397 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
399 dbg("0x21:0x20:0:0 %d", i);
401 /* change control lines if we are switching to or from B0 */
402 spin_lock_irqsave(&priv->lock, flags);
403 control = priv->line_control;
404 if ((cflag & CBAUD) == B0)
405 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
407 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
408 if (control != priv->line_control) {
409 control = priv->line_control;
410 spin_unlock_irqrestore(&priv->lock, flags);
411 set_control_lines(serial->dev, control);
413 spin_unlock_irqrestore(&priv->lock, flags);
416 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
418 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
419 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
421 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
422 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
424 if (cflag & CRTSCTS) {
425 if (priv->type == HX)
426 pl2303_vendor_write(0x0, 0x61, serial);
428 pl2303_vendor_write(0x0, 0x41, serial);
430 pl2303_vendor_write(0x0, 0x0, serial);
433 /* Save resulting baud rate */
435 tty_encode_baud_rate(tty, baud, baud);
440 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
442 struct pl2303_private *priv = usb_get_serial_port_data(port);
446 spin_lock_irqsave(&priv->lock, flags);
447 /* Change DTR and RTS */
449 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
451 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
452 control = priv->line_control;
453 spin_unlock_irqrestore(&priv->lock, flags);
454 set_control_lines(port->serial->dev, control);
457 static void pl2303_close(struct usb_serial_port *port)
461 dbg("%s - port %d", __func__, port->number);
463 spin_lock_irqsave(&port->lock, flags);
464 /* clear out any remaining data in the buffer */
465 kfifo_reset_out(&port->write_fifo);
466 spin_unlock_irqrestore(&port->lock, flags);
468 /* shutdown our urbs */
469 dbg("%s - shutting down urbs", __func__);
470 usb_kill_urb(port->write_urb);
471 usb_kill_urb(port->read_urb);
472 usb_kill_urb(port->interrupt_in_urb);
476 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
478 struct ktermios tmp_termios;
479 struct usb_serial *serial = port->serial;
480 struct pl2303_private *priv = usb_get_serial_port_data(port);
483 dbg("%s - port %d", __func__, port->number);
485 if (priv->type != HX) {
486 usb_clear_halt(serial->dev, port->write_urb->pipe);
487 usb_clear_halt(serial->dev, port->read_urb->pipe);
489 /* reset upstream data pipes */
490 pl2303_vendor_write(8, 0, serial);
491 pl2303_vendor_write(9, 0, serial);
496 pl2303_set_termios(tty, port, &tmp_termios);
498 dbg("%s - submitting read urb", __func__);
499 result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL);
505 dbg("%s - submitting interrupt urb", __func__);
506 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
508 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
509 " error %d\n", __func__, result);
513 port->port.drain_delay = 256;
517 static int pl2303_tiocmset(struct tty_struct *tty, struct file *file,
518 unsigned int set, unsigned int clear)
520 struct usb_serial_port *port = tty->driver_data;
521 struct pl2303_private *priv = usb_get_serial_port_data(port);
525 if (!usb_get_intfdata(port->serial->interface))
528 spin_lock_irqsave(&priv->lock, flags);
530 priv->line_control |= CONTROL_RTS;
532 priv->line_control |= CONTROL_DTR;
533 if (clear & TIOCM_RTS)
534 priv->line_control &= ~CONTROL_RTS;
535 if (clear & TIOCM_DTR)
536 priv->line_control &= ~CONTROL_DTR;
537 control = priv->line_control;
538 spin_unlock_irqrestore(&priv->lock, flags);
540 return set_control_lines(port->serial->dev, control);
543 static int pl2303_tiocmget(struct tty_struct *tty, struct file *file)
545 struct usb_serial_port *port = tty->driver_data;
546 struct pl2303_private *priv = usb_get_serial_port_data(port);
552 dbg("%s (%d)", __func__, port->number);
554 if (!usb_get_intfdata(port->serial->interface))
557 spin_lock_irqsave(&priv->lock, flags);
558 mcr = priv->line_control;
559 status = priv->line_status;
560 spin_unlock_irqrestore(&priv->lock, flags);
562 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
563 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
564 | ((status & UART_CTS) ? TIOCM_CTS : 0)
565 | ((status & UART_DSR) ? TIOCM_DSR : 0)
566 | ((status & UART_RING) ? TIOCM_RI : 0)
567 | ((status & UART_DCD) ? TIOCM_CD : 0);
569 dbg("%s - result = %x", __func__, result);
574 static int pl2303_carrier_raised(struct usb_serial_port *port)
576 struct pl2303_private *priv = usb_get_serial_port_data(port);
577 if (priv->line_status & UART_DCD)
582 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
584 struct pl2303_private *priv = usb_get_serial_port_data(port);
586 unsigned int prevstatus;
588 unsigned int changed;
590 spin_lock_irqsave(&priv->lock, flags);
591 prevstatus = priv->line_status;
592 spin_unlock_irqrestore(&priv->lock, flags);
595 interruptible_sleep_on(&priv->delta_msr_wait);
596 /* see if a signal did it */
597 if (signal_pending(current))
600 spin_lock_irqsave(&priv->lock, flags);
601 status = priv->line_status;
602 spin_unlock_irqrestore(&priv->lock, flags);
604 changed = prevstatus ^ status;
606 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
607 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
608 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
609 ((arg & TIOCM_CTS) && (changed & UART_CTS))) {
618 static int pl2303_ioctl(struct tty_struct *tty, struct file *file,
619 unsigned int cmd, unsigned long arg)
621 struct serial_struct ser;
622 struct usb_serial_port *port = tty->driver_data;
623 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
627 memset(&ser, 0, sizeof ser);
628 ser.type = PORT_16654;
629 ser.line = port->serial->minor;
630 ser.port = port->number;
631 ser.baud_base = 460800;
633 if (copy_to_user((void __user *)arg, &ser, sizeof ser))
639 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
640 return wait_modem_info(port, arg);
642 dbg("%s not supported = 0x%04x", __func__, cmd);
648 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
650 struct usb_serial_port *port = tty->driver_data;
651 struct usb_serial *serial = port->serial;
655 dbg("%s - port %d", __func__, port->number);
657 if (break_state == 0)
661 dbg("%s - turning break %s", __func__,
662 state == BREAK_OFF ? "off" : "on");
664 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
665 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
668 dbg("%s - error sending break = %d", __func__, result);
671 static void pl2303_release(struct usb_serial *serial)
674 struct pl2303_private *priv;
678 for (i = 0; i < serial->num_ports; ++i) {
679 priv = usb_get_serial_port_data(serial->port[i]);
684 static void pl2303_update_line_status(struct usb_serial_port *port,
686 unsigned int actual_length)
689 struct pl2303_private *priv = usb_get_serial_port_data(port);
691 u8 status_idx = UART_STATE;
692 u8 length = UART_STATE + 1;
695 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
696 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
699 if (idv == SIEMENS_VENDOR_ID) {
700 if (idp == SIEMENS_PRODUCT_ID_X65 ||
701 idp == SIEMENS_PRODUCT_ID_SX1 ||
702 idp == SIEMENS_PRODUCT_ID_X75) {
709 if (actual_length < length)
712 /* Save off the uart status for others to look at */
713 spin_lock_irqsave(&priv->lock, flags);
714 priv->line_status = data[status_idx];
715 spin_unlock_irqrestore(&priv->lock, flags);
716 if (priv->line_status & UART_BREAK_ERROR)
717 usb_serial_handle_break(port);
718 wake_up_interruptible(&priv->delta_msr_wait);
721 static void pl2303_read_int_callback(struct urb *urb)
723 struct usb_serial_port *port = urb->context;
724 unsigned char *data = urb->transfer_buffer;
725 unsigned int actual_length = urb->actual_length;
726 int status = urb->status;
729 dbg("%s (%d)", __func__, port->number);
738 /* this urb is terminated, clean up */
739 dbg("%s - urb shutting down with status: %d", __func__,
743 dbg("%s - nonzero urb status received: %d", __func__,
748 usb_serial_debug_data(debug, &port->dev, __func__,
749 urb->actual_length, urb->transfer_buffer);
751 pl2303_update_line_status(port, data, actual_length);
754 retval = usb_submit_urb(urb, GFP_ATOMIC);
756 dev_err(&urb->dev->dev,
757 "%s - usb_submit_urb failed with result %d\n",
761 static void pl2303_process_read_urb(struct urb *urb)
763 struct usb_serial_port *port = urb->context;
764 struct pl2303_private *priv = usb_get_serial_port_data(port);
765 struct tty_struct *tty;
766 unsigned char *data = urb->transfer_buffer;
767 char tty_flag = TTY_NORMAL;
772 /* update line status */
773 spin_lock_irqsave(&priv->lock, flags);
774 line_status = priv->line_status;
775 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
776 spin_unlock_irqrestore(&priv->lock, flags);
777 wake_up_interruptible(&priv->delta_msr_wait);
779 if (!urb->actual_length)
782 tty = tty_port_tty_get(&port->port);
786 /* break takes precedence over parity, */
787 /* which takes precedence over framing errors */
788 if (line_status & UART_BREAK_ERROR)
789 tty_flag = TTY_BREAK;
790 else if (line_status & UART_PARITY_ERROR)
791 tty_flag = TTY_PARITY;
792 else if (line_status & UART_FRAME_ERROR)
793 tty_flag = TTY_FRAME;
794 dbg("%s - tty_flag = %d", __func__, tty_flag);
796 /* overrun is special, not associated with a char */
797 if (line_status & UART_OVERRUN_ERROR)
798 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
800 if (tty_flag == TTY_NORMAL && !(port->port.console && port->sysrq))
801 tty_insert_flip_string(tty, data, urb->actual_length);
803 for (i = 0; i < urb->actual_length; ++i)
804 if (!usb_serial_handle_sysrq_char(tty, port, data[i]))
805 tty_insert_flip_char(tty, data[i], tty_flag);
808 tty_flip_buffer_push(tty);
812 /* All of the device info needed for the PL2303 SIO serial converter */
813 static struct usb_serial_driver pl2303_device = {
815 .owner = THIS_MODULE,
818 .id_table = id_table,
819 .usb_driver = &pl2303_driver,
822 .bulk_out_size = 256,
824 .close = pl2303_close,
825 .dtr_rts = pl2303_dtr_rts,
826 .carrier_raised = pl2303_carrier_raised,
827 .ioctl = pl2303_ioctl,
828 .break_ctl = pl2303_break_ctl,
829 .set_termios = pl2303_set_termios,
830 .tiocmget = pl2303_tiocmget,
831 .tiocmset = pl2303_tiocmset,
832 .process_read_urb = pl2303_process_read_urb,
833 .read_int_callback = pl2303_read_int_callback,
834 .attach = pl2303_startup,
835 .release = pl2303_release,
838 static int __init pl2303_init(void)
842 retval = usb_serial_register(&pl2303_device);
844 goto failed_usb_serial_register;
845 retval = usb_register(&pl2303_driver);
847 goto failed_usb_register;
848 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
851 usb_serial_deregister(&pl2303_device);
852 failed_usb_serial_register:
856 static void __exit pl2303_exit(void)
858 usb_deregister(&pl2303_driver);
859 usb_serial_deregister(&pl2303_device);
862 module_init(pl2303_init);
863 module_exit(pl2303_exit);
865 MODULE_DESCRIPTION(DRIVER_DESC);
866 MODULE_LICENSE("GPL");
868 module_param(debug, bool, S_IRUGO | S_IWUSR);
869 MODULE_PARM_DESC(debug, "Debug enabled or not");