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)
36 #define PL2303_QUIRK_ENDPOINT_HACK BIT(2)
38 static const struct usb_device_id id_table
[] = {
39 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID
),
40 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
41 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_RSAQ2
) },
42 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_DCU11
) },
43 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_RSAQ3
) },
44 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_CHILITAG
) },
45 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_PHAROS
) },
46 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_ALDIGA
) },
47 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_MMX
) },
48 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_GPRS
) },
49 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_HCR331
) },
50 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_MOTOROLA
) },
51 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_ZTEK
) },
52 { USB_DEVICE(IODATA_VENDOR_ID
, IODATA_PRODUCT_ID
) },
53 { USB_DEVICE(IODATA_VENDOR_ID
, IODATA_PRODUCT_ID_RSAQ5
) },
54 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_ID
),
55 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
56 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_UC485
),
57 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
58 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_ID2
) },
59 { USB_DEVICE(ATEN_VENDOR_ID2
, ATEN_PRODUCT_ID
) },
60 { USB_DEVICE(ELCOM_VENDOR_ID
, ELCOM_PRODUCT_ID
) },
61 { USB_DEVICE(ELCOM_VENDOR_ID
, ELCOM_PRODUCT_ID_UCSGT
) },
62 { USB_DEVICE(ITEGNO_VENDOR_ID
, ITEGNO_PRODUCT_ID
) },
63 { USB_DEVICE(ITEGNO_VENDOR_ID
, ITEGNO_PRODUCT_ID_2080
) },
64 { USB_DEVICE(MA620_VENDOR_ID
, MA620_PRODUCT_ID
) },
65 { USB_DEVICE(RATOC_VENDOR_ID
, RATOC_PRODUCT_ID
) },
66 { USB_DEVICE(TRIPP_VENDOR_ID
, TRIPP_PRODUCT_ID
) },
67 { USB_DEVICE(RADIOSHACK_VENDOR_ID
, RADIOSHACK_PRODUCT_ID
) },
68 { USB_DEVICE(DCU10_VENDOR_ID
, DCU10_PRODUCT_ID
) },
69 { USB_DEVICE(SITECOM_VENDOR_ID
, SITECOM_PRODUCT_ID
) },
70 { USB_DEVICE(ALCATEL_VENDOR_ID
, ALCATEL_PRODUCT_ID
) },
71 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_SX1
),
72 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
73 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X65
),
74 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
75 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X75
),
76 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
77 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_EF81
),
78 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
79 { USB_DEVICE(BENQ_VENDOR_ID
, BENQ_PRODUCT_ID_S81
) }, /* Benq/Siemens S81 */
80 { USB_DEVICE(SYNTECH_VENDOR_ID
, SYNTECH_PRODUCT_ID
) },
81 { USB_DEVICE(NOKIA_CA42_VENDOR_ID
, NOKIA_CA42_PRODUCT_ID
) },
82 { USB_DEVICE(CA_42_CA42_VENDOR_ID
, CA_42_CA42_PRODUCT_ID
) },
83 { USB_DEVICE(SAGEM_VENDOR_ID
, SAGEM_PRODUCT_ID
) },
84 { USB_DEVICE(LEADTEK_VENDOR_ID
, LEADTEK_9531_PRODUCT_ID
) },
85 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID
, SPEEDDRAGON_PRODUCT_ID
) },
86 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID
, DATAPILOT_U2_PRODUCT_ID
) },
87 { USB_DEVICE(BELKIN_VENDOR_ID
, BELKIN_PRODUCT_ID
) },
88 { USB_DEVICE(ALCOR_VENDOR_ID
, ALCOR_PRODUCT_ID
),
89 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
90 { USB_DEVICE(WS002IN_VENDOR_ID
, WS002IN_PRODUCT_ID
) },
91 { USB_DEVICE(COREGA_VENDOR_ID
, COREGA_PRODUCT_ID
) },
92 { USB_DEVICE(YCCABLE_VENDOR_ID
, YCCABLE_PRODUCT_ID
) },
93 { USB_DEVICE(SUPERIAL_VENDOR_ID
, SUPERIAL_PRODUCT_ID
) },
94 { USB_DEVICE(HP_VENDOR_ID
, HP_LD220_PRODUCT_ID
) },
95 { USB_DEVICE(HP_VENDOR_ID
, HP_LD960_PRODUCT_ID
) },
96 { USB_DEVICE(HP_VENDOR_ID
, HP_LCM220_PRODUCT_ID
) },
97 { USB_DEVICE(HP_VENDOR_ID
, HP_LCM960_PRODUCT_ID
) },
98 { USB_DEVICE(CRESSI_VENDOR_ID
, CRESSI_EDY_PRODUCT_ID
) },
99 { USB_DEVICE(ZEAGLE_VENDOR_ID
, ZEAGLE_N2ITION3_PRODUCT_ID
) },
100 { USB_DEVICE(SONY_VENDOR_ID
, SONY_QN3USB_PRODUCT_ID
) },
101 { USB_DEVICE(SANWA_VENDOR_ID
, SANWA_PRODUCT_ID
) },
102 { USB_DEVICE(ADLINK_VENDOR_ID
, ADLINK_ND6530_PRODUCT_ID
) },
103 { USB_DEVICE(SMART_VENDOR_ID
, SMART_PRODUCT_ID
) },
104 { } /* Terminating entry */
107 MODULE_DEVICE_TABLE(usb
, id_table
);
109 #define SET_LINE_REQUEST_TYPE 0x21
110 #define SET_LINE_REQUEST 0x20
112 #define SET_CONTROL_REQUEST_TYPE 0x21
113 #define SET_CONTROL_REQUEST 0x22
114 #define CONTROL_DTR 0x01
115 #define CONTROL_RTS 0x02
117 #define BREAK_REQUEST_TYPE 0x21
118 #define BREAK_REQUEST 0x23
119 #define BREAK_ON 0xffff
120 #define BREAK_OFF 0x0000
122 #define GET_LINE_REQUEST_TYPE 0xa1
123 #define GET_LINE_REQUEST 0x21
125 #define VENDOR_WRITE_REQUEST_TYPE 0x40
126 #define VENDOR_WRITE_REQUEST 0x01
128 #define VENDOR_READ_REQUEST_TYPE 0xc0
129 #define VENDOR_READ_REQUEST 0x01
131 #define UART_STATE_INDEX 8
132 #define UART_STATE_MSR_MASK 0x8b
133 #define UART_STATE_TRANSIENT_MASK 0x74
134 #define UART_DCD 0x01
135 #define UART_DSR 0x02
136 #define UART_BREAK_ERROR 0x04
137 #define UART_RING 0x08
138 #define UART_FRAME_ERROR 0x10
139 #define UART_PARITY_ERROR 0x20
140 #define UART_OVERRUN_ERROR 0x40
141 #define UART_CTS 0x80
143 static void pl2303_set_break(struct usb_serial_port
*port
, bool enable
);
146 TYPE_01
, /* Type 0 and 1 (difference unknown) */
147 TYPE_HX
, /* HX version of the pl2303 chip */
151 struct pl2303_type_data
{
152 speed_t max_baud_rate
;
153 unsigned long quirks
;
156 struct pl2303_serial_private
{
157 const struct pl2303_type_data
*type
;
158 unsigned long quirks
;
161 struct pl2303_private
{
169 static const struct pl2303_type_data pl2303_type_data
[TYPE_COUNT
] = {
171 .max_baud_rate
= 1228800,
172 .quirks
= PL2303_QUIRK_LEGACY
,
175 .max_baud_rate
= 12000000,
179 static int pl2303_vendor_read(struct usb_serial
*serial
, u16 value
,
180 unsigned char buf
[1])
182 struct device
*dev
= &serial
->interface
->dev
;
185 res
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
186 VENDOR_READ_REQUEST
, VENDOR_READ_REQUEST_TYPE
,
187 value
, 0, buf
, 1, 100);
189 dev_err(dev
, "%s - failed to read [%04x]: %d\n", __func__
,
197 dev_dbg(dev
, "%s - [%04x] = %02x\n", __func__
, value
, buf
[0]);
202 static int pl2303_vendor_write(struct usb_serial
*serial
, u16 value
, u16 index
)
204 struct device
*dev
= &serial
->interface
->dev
;
207 dev_dbg(dev
, "%s - [%04x] = %02x\n", __func__
, value
, index
);
209 res
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
210 VENDOR_WRITE_REQUEST
, VENDOR_WRITE_REQUEST_TYPE
,
211 value
, index
, NULL
, 0, 100);
213 dev_err(dev
, "%s - failed to write [%04x]: %d\n", __func__
,
221 static int pl2303_probe(struct usb_serial
*serial
,
222 const struct usb_device_id
*id
)
224 usb_set_serial_data(serial
, (void *)id
->driver_info
);
230 * Use interrupt endpoint from first interface if available.
232 * This is needed due to the looney way its endpoints are set up.
234 static int pl2303_endpoint_hack(struct usb_serial
*serial
,
235 struct usb_serial_endpoints
*epds
)
237 struct usb_interface
*interface
= serial
->interface
;
238 struct usb_device
*dev
= serial
->dev
;
239 struct device
*ddev
= &interface
->dev
;
240 struct usb_host_interface
*iface_desc
;
241 struct usb_endpoint_descriptor
*endpoint
;
244 if (interface
== dev
->actconfig
->interface
[0])
247 /* check out the endpoints of the other interface */
248 iface_desc
= dev
->actconfig
->interface
[0]->cur_altsetting
;
250 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
251 endpoint
= &iface_desc
->endpoint
[i
].desc
;
253 if (!usb_endpoint_is_int_in(endpoint
))
256 dev_dbg(ddev
, "found interrupt in on separate interface\n");
257 if (epds
->num_interrupt_in
< ARRAY_SIZE(epds
->interrupt_in
))
258 epds
->interrupt_in
[epds
->num_interrupt_in
++] = endpoint
;
264 static int pl2303_calc_num_ports(struct usb_serial
*serial
,
265 struct usb_serial_endpoints
*epds
)
267 unsigned long quirks
= (unsigned long)usb_get_serial_data(serial
);
268 struct device
*dev
= &serial
->interface
->dev
;
271 if (quirks
& PL2303_QUIRK_ENDPOINT_HACK
) {
272 ret
= pl2303_endpoint_hack(serial
, epds
);
277 if (epds
->num_interrupt_in
< 1) {
278 dev_err(dev
, "required interrupt-in endpoint missing\n");
285 static int pl2303_startup(struct usb_serial
*serial
)
287 struct pl2303_serial_private
*spriv
;
288 enum pl2303_type type
= TYPE_01
;
291 spriv
= kzalloc(sizeof(*spriv
), GFP_KERNEL
);
295 buf
= kmalloc(1, GFP_KERNEL
);
301 if (serial
->dev
->descriptor
.bDeviceClass
== 0x02)
302 type
= TYPE_01
; /* type 0 */
303 else if (serial
->dev
->descriptor
.bMaxPacketSize0
== 0x40)
305 else if (serial
->dev
->descriptor
.bDeviceClass
== 0x00)
306 type
= TYPE_01
; /* type 1 */
307 else if (serial
->dev
->descriptor
.bDeviceClass
== 0xFF)
308 type
= TYPE_01
; /* type 1 */
309 dev_dbg(&serial
->interface
->dev
, "device type: %d\n", type
);
311 spriv
->type
= &pl2303_type_data
[type
];
312 spriv
->quirks
= (unsigned long)usb_get_serial_data(serial
);
313 spriv
->quirks
|= spriv
->type
->quirks
;
315 usb_set_serial_data(serial
, spriv
);
317 pl2303_vendor_read(serial
, 0x8484, buf
);
318 pl2303_vendor_write(serial
, 0x0404, 0);
319 pl2303_vendor_read(serial
, 0x8484, buf
);
320 pl2303_vendor_read(serial
, 0x8383, buf
);
321 pl2303_vendor_read(serial
, 0x8484, buf
);
322 pl2303_vendor_write(serial
, 0x0404, 1);
323 pl2303_vendor_read(serial
, 0x8484, buf
);
324 pl2303_vendor_read(serial
, 0x8383, buf
);
325 pl2303_vendor_write(serial
, 0, 1);
326 pl2303_vendor_write(serial
, 1, 0);
327 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
)
328 pl2303_vendor_write(serial
, 2, 0x24);
330 pl2303_vendor_write(serial
, 2, 0x44);
337 static void pl2303_release(struct usb_serial
*serial
)
339 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
344 static int pl2303_port_probe(struct usb_serial_port
*port
)
346 struct pl2303_private
*priv
;
348 priv
= kzalloc(sizeof(*priv
), GFP_KERNEL
);
352 spin_lock_init(&priv
->lock
);
354 usb_set_serial_port_data(port
, priv
);
356 port
->port
.drain_delay
= 256;
361 static int pl2303_port_remove(struct usb_serial_port
*port
)
363 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
370 static int pl2303_set_control_lines(struct usb_serial_port
*port
, u8 value
)
372 struct usb_device
*dev
= port
->serial
->dev
;
375 dev_dbg(&port
->dev
, "%s - %02x\n", __func__
, value
);
377 retval
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0),
378 SET_CONTROL_REQUEST
, SET_CONTROL_REQUEST_TYPE
,
379 value
, 0, NULL
, 0, 100);
381 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, retval
);
387 * Returns the nearest supported baud rate that can be set directly without
390 static speed_t
pl2303_get_supported_baud_rate(speed_t baud
)
392 static const speed_t baud_sup
[] = {
393 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
394 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
395 614400, 921600, 1228800, 2457600, 3000000, 6000000
400 for (i
= 0; i
< ARRAY_SIZE(baud_sup
); ++i
) {
401 if (baud_sup
[i
] > baud
)
405 if (i
== ARRAY_SIZE(baud_sup
))
406 baud
= baud_sup
[i
- 1];
407 else if (i
> 0 && (baud_sup
[i
] - baud
) > (baud
- baud_sup
[i
- 1]))
408 baud
= baud_sup
[i
- 1];
416 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
419 static speed_t
pl2303_encode_baud_rate_direct(unsigned char buf
[4],
422 put_unaligned_le32(baud
, buf
);
427 static speed_t
pl2303_encode_baud_rate_divisor(unsigned char buf
[4],
430 unsigned int baseline
, mantissa
, exponent
;
433 * Apparently the formula is:
434 * baudrate = 12M * 32 / (mantissa * 4^exponent)
436 * mantissa = buf[8:0]
437 * exponent = buf[11:9]
439 baseline
= 12000000 * 32;
440 mantissa
= baseline
/ baud
;
442 mantissa
= 1; /* Avoid dividing by zero if baud > 32*12M. */
444 while (mantissa
>= 512) {
446 mantissa
>>= 2; /* divide by 4 */
449 /* Exponent is maxed. Trim mantissa and leave. */
457 buf
[1] = exponent
<< 1 | mantissa
>> 8;
458 buf
[0] = mantissa
& 0xff;
460 /* Calculate and return the exact baud rate. */
461 baud
= (baseline
/ mantissa
) >> (exponent
<< 1);
466 static void pl2303_encode_baud_rate(struct tty_struct
*tty
,
467 struct usb_serial_port
*port
,
470 struct usb_serial
*serial
= port
->serial
;
471 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
475 baud
= tty_get_baud_rate(tty
);
476 dev_dbg(&port
->dev
, "baud requested = %u\n", baud
);
480 if (spriv
->type
->max_baud_rate
)
481 baud
= min_t(speed_t
, baud
, spriv
->type
->max_baud_rate
);
483 * Use direct method for supported baud rates, otherwise use divisors.
485 baud_sup
= pl2303_get_supported_baud_rate(baud
);
487 if (baud
== baud_sup
)
488 baud
= pl2303_encode_baud_rate_direct(buf
, baud
);
490 baud
= pl2303_encode_baud_rate_divisor(buf
, baud
);
492 /* Save resulting baud rate */
493 tty_encode_baud_rate(tty
, baud
, baud
);
494 dev_dbg(&port
->dev
, "baud set = %u\n", baud
);
497 static int pl2303_get_line_request(struct usb_serial_port
*port
,
498 unsigned char buf
[7])
500 struct usb_device
*udev
= port
->serial
->dev
;
503 ret
= usb_control_msg(udev
, usb_rcvctrlpipe(udev
, 0),
504 GET_LINE_REQUEST
, GET_LINE_REQUEST_TYPE
,
507 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, ret
);
515 dev_dbg(&port
->dev
, "%s - %7ph\n", __func__
, buf
);
520 static int pl2303_set_line_request(struct usb_serial_port
*port
,
521 unsigned char buf
[7])
523 struct usb_device
*udev
= port
->serial
->dev
;
526 ret
= usb_control_msg(udev
, usb_sndctrlpipe(udev
, 0),
527 SET_LINE_REQUEST
, SET_LINE_REQUEST_TYPE
,
530 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, ret
);
534 dev_dbg(&port
->dev
, "%s - %7ph\n", __func__
, buf
);
539 static void pl2303_set_termios(struct tty_struct
*tty
,
540 struct usb_serial_port
*port
, struct ktermios
*old_termios
)
542 struct usb_serial
*serial
= port
->serial
;
543 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
544 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
550 if (old_termios
&& !tty_termios_hw_change(&tty
->termios
, old_termios
))
553 buf
= kzalloc(7, GFP_KERNEL
);
555 /* Report back no change occurred */
557 tty
->termios
= *old_termios
;
561 pl2303_get_line_request(port
, buf
);
563 switch (C_CSIZE(tty
)) {
577 dev_dbg(&port
->dev
, "data bits = %d\n", buf
[6]);
579 /* For reference buf[0]:buf[3] baud rate value */
580 pl2303_encode_baud_rate(tty
, port
, &buf
[0]);
582 /* For reference buf[4]=0 is 1 stop bits */
583 /* For reference buf[4]=1 is 1.5 stop bits */
584 /* For reference buf[4]=2 is 2 stop bits */
587 * NOTE: Comply with "real" UARTs / RS232:
588 * use 1.5 instead of 2 stop bits with 5 data bits
590 if (C_CSIZE(tty
) == CS5
) {
592 dev_dbg(&port
->dev
, "stop bits = 1.5\n");
595 dev_dbg(&port
->dev
, "stop bits = 2\n");
599 dev_dbg(&port
->dev
, "stop bits = 1\n");
603 /* For reference buf[5]=0 is none parity */
604 /* For reference buf[5]=1 is odd parity */
605 /* For reference buf[5]=2 is even parity */
606 /* For reference buf[5]=3 is mark parity */
607 /* For reference buf[5]=4 is space parity */
611 dev_dbg(&port
->dev
, "parity = mark\n");
614 dev_dbg(&port
->dev
, "parity = odd\n");
619 dev_dbg(&port
->dev
, "parity = space\n");
622 dev_dbg(&port
->dev
, "parity = even\n");
627 dev_dbg(&port
->dev
, "parity = none\n");
631 * Some PL2303 are known to lose bytes if you change serial settings
632 * even to the same values as before. Thus we actually need to filter
633 * in this specific case.
635 * Note that the tty_termios_hw_change check above is not sufficient
636 * as a previously requested baud rate may differ from the one
637 * actually used (and stored in old_termios).
639 * NOTE: No additional locking needed for line_settings as it is
640 * only used in set_termios, which is serialised against itself.
642 if (!old_termios
|| memcmp(buf
, priv
->line_settings
, 7)) {
643 ret
= pl2303_set_line_request(port
, buf
);
645 memcpy(priv
->line_settings
, buf
, 7);
648 /* change control lines if we are switching to or from B0 */
649 spin_lock_irqsave(&priv
->lock
, flags
);
650 control
= priv
->line_control
;
651 if (C_BAUD(tty
) == B0
)
652 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
653 else if (old_termios
&& (old_termios
->c_cflag
& CBAUD
) == B0
)
654 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
655 if (control
!= priv
->line_control
) {
656 control
= priv
->line_control
;
657 spin_unlock_irqrestore(&priv
->lock
, flags
);
658 pl2303_set_control_lines(port
, control
);
660 spin_unlock_irqrestore(&priv
->lock
, flags
);
663 if (C_CRTSCTS(tty
)) {
664 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
)
665 pl2303_vendor_write(serial
, 0x0, 0x41);
667 pl2303_vendor_write(serial
, 0x0, 0x61);
669 pl2303_vendor_write(serial
, 0x0, 0x0);
675 static void pl2303_dtr_rts(struct usb_serial_port
*port
, int on
)
677 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
681 spin_lock_irqsave(&priv
->lock
, flags
);
683 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
685 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
686 control
= priv
->line_control
;
687 spin_unlock_irqrestore(&priv
->lock
, flags
);
689 pl2303_set_control_lines(port
, control
);
692 static void pl2303_close(struct usb_serial_port
*port
)
694 usb_serial_generic_close(port
);
695 usb_kill_urb(port
->interrupt_in_urb
);
696 pl2303_set_break(port
, false);
699 static int pl2303_open(struct tty_struct
*tty
, struct usb_serial_port
*port
)
701 struct usb_serial
*serial
= port
->serial
;
702 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
705 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
) {
706 usb_clear_halt(serial
->dev
, port
->write_urb
->pipe
);
707 usb_clear_halt(serial
->dev
, port
->read_urb
->pipe
);
709 /* reset upstream data pipes */
710 pl2303_vendor_write(serial
, 8, 0);
711 pl2303_vendor_write(serial
, 9, 0);
716 pl2303_set_termios(tty
, port
, NULL
);
718 result
= usb_submit_urb(port
->interrupt_in_urb
, GFP_KERNEL
);
720 dev_err(&port
->dev
, "failed to submit interrupt urb: %d\n",
725 result
= usb_serial_generic_open(tty
, port
);
727 usb_kill_urb(port
->interrupt_in_urb
);
734 static int pl2303_tiocmset(struct tty_struct
*tty
,
735 unsigned int set
, unsigned int clear
)
737 struct usb_serial_port
*port
= tty
->driver_data
;
738 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
743 spin_lock_irqsave(&priv
->lock
, flags
);
745 priv
->line_control
|= CONTROL_RTS
;
747 priv
->line_control
|= CONTROL_DTR
;
748 if (clear
& TIOCM_RTS
)
749 priv
->line_control
&= ~CONTROL_RTS
;
750 if (clear
& TIOCM_DTR
)
751 priv
->line_control
&= ~CONTROL_DTR
;
752 control
= priv
->line_control
;
753 spin_unlock_irqrestore(&priv
->lock
, flags
);
755 ret
= pl2303_set_control_lines(port
, control
);
757 return usb_translate_errors(ret
);
762 static int pl2303_tiocmget(struct tty_struct
*tty
)
764 struct usb_serial_port
*port
= tty
->driver_data
;
765 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
771 spin_lock_irqsave(&priv
->lock
, flags
);
772 mcr
= priv
->line_control
;
773 status
= priv
->line_status
;
774 spin_unlock_irqrestore(&priv
->lock
, flags
);
776 result
= ((mcr
& CONTROL_DTR
) ? TIOCM_DTR
: 0)
777 | ((mcr
& CONTROL_RTS
) ? TIOCM_RTS
: 0)
778 | ((status
& UART_CTS
) ? TIOCM_CTS
: 0)
779 | ((status
& UART_DSR
) ? TIOCM_DSR
: 0)
780 | ((status
& UART_RING
) ? TIOCM_RI
: 0)
781 | ((status
& UART_DCD
) ? TIOCM_CD
: 0);
783 dev_dbg(&port
->dev
, "%s - result = %x\n", __func__
, result
);
788 static int pl2303_carrier_raised(struct usb_serial_port
*port
)
790 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
792 if (priv
->line_status
& UART_DCD
)
798 static int pl2303_ioctl(struct tty_struct
*tty
,
799 unsigned int cmd
, unsigned long arg
)
801 struct serial_struct ser
;
802 struct usb_serial_port
*port
= tty
->driver_data
;
806 memset(&ser
, 0, sizeof ser
);
807 ser
.type
= PORT_16654
;
808 ser
.line
= port
->minor
;
809 ser
.port
= port
->port_number
;
810 ser
.baud_base
= 460800;
812 if (copy_to_user((void __user
*)arg
, &ser
, sizeof ser
))
823 static void pl2303_set_break(struct usb_serial_port
*port
, bool enable
)
825 struct usb_serial
*serial
= port
->serial
;
834 dev_dbg(&port
->dev
, "%s - turning break %s\n", __func__
,
835 state
== BREAK_OFF
? "off" : "on");
837 result
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
838 BREAK_REQUEST
, BREAK_REQUEST_TYPE
, state
,
841 dev_err(&port
->dev
, "error sending break = %d\n", result
);
844 static void pl2303_break_ctl(struct tty_struct
*tty
, int state
)
846 struct usb_serial_port
*port
= tty
->driver_data
;
848 pl2303_set_break(port
, state
);
851 static void pl2303_update_line_status(struct usb_serial_port
*port
,
853 unsigned int actual_length
)
855 struct usb_serial
*serial
= port
->serial
;
856 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
857 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
858 struct tty_struct
*tty
;
860 unsigned int status_idx
= UART_STATE_INDEX
;
864 if (spriv
->quirks
& PL2303_QUIRK_UART_STATE_IDX0
)
867 if (actual_length
< status_idx
+ 1)
870 status
= data
[status_idx
];
872 /* Save off the uart status for others to look at */
873 spin_lock_irqsave(&priv
->lock
, flags
);
874 delta
= priv
->line_status
^ status
;
875 priv
->line_status
= status
;
876 spin_unlock_irqrestore(&priv
->lock
, flags
);
878 if (status
& UART_BREAK_ERROR
)
879 usb_serial_handle_break(port
);
881 if (delta
& UART_STATE_MSR_MASK
) {
882 if (delta
& UART_CTS
)
884 if (delta
& UART_DSR
)
886 if (delta
& UART_RING
)
888 if (delta
& UART_DCD
) {
890 tty
= tty_port_tty_get(&port
->port
);
892 usb_serial_handle_dcd_change(port
, tty
,
898 wake_up_interruptible(&port
->port
.delta_msr_wait
);
902 static void pl2303_read_int_callback(struct urb
*urb
)
904 struct usb_serial_port
*port
= urb
->context
;
905 unsigned char *data
= urb
->transfer_buffer
;
906 unsigned int actual_length
= urb
->actual_length
;
907 int status
= urb
->status
;
917 /* this urb is terminated, clean up */
918 dev_dbg(&port
->dev
, "%s - urb shutting down with status: %d\n",
922 dev_dbg(&port
->dev
, "%s - nonzero urb status received: %d\n",
927 usb_serial_debug_data(&port
->dev
, __func__
,
928 urb
->actual_length
, urb
->transfer_buffer
);
930 pl2303_update_line_status(port
, data
, actual_length
);
933 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
936 "%s - usb_submit_urb failed with result %d\n",
941 static void pl2303_process_read_urb(struct urb
*urb
)
943 struct usb_serial_port
*port
= urb
->context
;
944 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
945 unsigned char *data
= urb
->transfer_buffer
;
946 char tty_flag
= TTY_NORMAL
;
951 /* update line status */
952 spin_lock_irqsave(&priv
->lock
, flags
);
953 line_status
= priv
->line_status
;
954 priv
->line_status
&= ~UART_STATE_TRANSIENT_MASK
;
955 spin_unlock_irqrestore(&priv
->lock
, flags
);
957 if (!urb
->actual_length
)
961 * Break takes precedence over parity, which takes precedence over
964 if (line_status
& UART_BREAK_ERROR
)
965 tty_flag
= TTY_BREAK
;
966 else if (line_status
& UART_PARITY_ERROR
)
967 tty_flag
= TTY_PARITY
;
968 else if (line_status
& UART_FRAME_ERROR
)
969 tty_flag
= TTY_FRAME
;
971 if (tty_flag
!= TTY_NORMAL
)
972 dev_dbg(&port
->dev
, "%s - tty_flag = %d\n", __func__
,
974 /* overrun is special, not associated with a char */
975 if (line_status
& UART_OVERRUN_ERROR
)
976 tty_insert_flip_char(&port
->port
, 0, TTY_OVERRUN
);
978 if (port
->port
.console
&& port
->sysrq
) {
979 for (i
= 0; i
< urb
->actual_length
; ++i
)
980 if (!usb_serial_handle_sysrq_char(port
, data
[i
]))
981 tty_insert_flip_char(&port
->port
, data
[i
],
984 tty_insert_flip_string_fixed_flag(&port
->port
, data
, tty_flag
,
988 tty_flip_buffer_push(&port
->port
);
991 static struct usb_serial_driver pl2303_device
= {
993 .owner
= THIS_MODULE
,
996 .id_table
= id_table
,
999 .num_interrupt_in
= 0, /* see pl2303_calc_num_ports */
1000 .bulk_in_size
= 256,
1001 .bulk_out_size
= 256,
1002 .open
= pl2303_open
,
1003 .close
= pl2303_close
,
1004 .dtr_rts
= pl2303_dtr_rts
,
1005 .carrier_raised
= pl2303_carrier_raised
,
1006 .ioctl
= pl2303_ioctl
,
1007 .break_ctl
= pl2303_break_ctl
,
1008 .set_termios
= pl2303_set_termios
,
1009 .tiocmget
= pl2303_tiocmget
,
1010 .tiocmset
= pl2303_tiocmset
,
1011 .tiocmiwait
= usb_serial_generic_tiocmiwait
,
1012 .process_read_urb
= pl2303_process_read_urb
,
1013 .read_int_callback
= pl2303_read_int_callback
,
1014 .probe
= pl2303_probe
,
1015 .calc_num_ports
= pl2303_calc_num_ports
,
1016 .attach
= pl2303_startup
,
1017 .release
= pl2303_release
,
1018 .port_probe
= pl2303_port_probe
,
1019 .port_remove
= pl2303_port_remove
,
1022 static struct usb_serial_driver
* const serial_drivers
[] = {
1023 &pl2303_device
, NULL
1026 module_usb_serial_driver(serial_drivers
, id_table
);
1028 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
1029 MODULE_LICENSE("GPL");