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_PHAROS
) },
45 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_ALDIGA
) },
46 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_MMX
) },
47 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_GPRS
) },
48 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_HCR331
) },
49 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_MOTOROLA
) },
50 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_ZTEK
) },
51 { USB_DEVICE(IODATA_VENDOR_ID
, IODATA_PRODUCT_ID
) },
52 { USB_DEVICE(IODATA_VENDOR_ID
, IODATA_PRODUCT_ID_RSAQ5
) },
53 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_ID
),
54 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
55 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_UC485
),
56 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
57 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_ID2
) },
58 { USB_DEVICE(ATEN_VENDOR_ID2
, ATEN_PRODUCT_ID
) },
59 { USB_DEVICE(ELCOM_VENDOR_ID
, ELCOM_PRODUCT_ID
) },
60 { USB_DEVICE(ELCOM_VENDOR_ID
, ELCOM_PRODUCT_ID_UCSGT
) },
61 { USB_DEVICE(ITEGNO_VENDOR_ID
, ITEGNO_PRODUCT_ID
) },
62 { USB_DEVICE(ITEGNO_VENDOR_ID
, ITEGNO_PRODUCT_ID_2080
) },
63 { USB_DEVICE(MA620_VENDOR_ID
, MA620_PRODUCT_ID
) },
64 { USB_DEVICE(RATOC_VENDOR_ID
, RATOC_PRODUCT_ID
) },
65 { USB_DEVICE(TRIPP_VENDOR_ID
, TRIPP_PRODUCT_ID
) },
66 { USB_DEVICE(RADIOSHACK_VENDOR_ID
, RADIOSHACK_PRODUCT_ID
) },
67 { USB_DEVICE(DCU10_VENDOR_ID
, DCU10_PRODUCT_ID
) },
68 { USB_DEVICE(SITECOM_VENDOR_ID
, SITECOM_PRODUCT_ID
) },
69 { USB_DEVICE(ALCATEL_VENDOR_ID
, ALCATEL_PRODUCT_ID
) },
70 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_SX1
),
71 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
72 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X65
),
73 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
74 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X75
),
75 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
76 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_EF81
),
77 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
78 { USB_DEVICE(BENQ_VENDOR_ID
, BENQ_PRODUCT_ID_S81
) }, /* Benq/Siemens S81 */
79 { USB_DEVICE(SYNTECH_VENDOR_ID
, SYNTECH_PRODUCT_ID
) },
80 { USB_DEVICE(NOKIA_CA42_VENDOR_ID
, NOKIA_CA42_PRODUCT_ID
) },
81 { USB_DEVICE(CA_42_CA42_VENDOR_ID
, CA_42_CA42_PRODUCT_ID
) },
82 { USB_DEVICE(SAGEM_VENDOR_ID
, SAGEM_PRODUCT_ID
) },
83 { USB_DEVICE(LEADTEK_VENDOR_ID
, LEADTEK_9531_PRODUCT_ID
) },
84 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID
, SPEEDDRAGON_PRODUCT_ID
) },
85 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID
, DATAPILOT_U2_PRODUCT_ID
) },
86 { USB_DEVICE(BELKIN_VENDOR_ID
, BELKIN_PRODUCT_ID
) },
87 { USB_DEVICE(ALCOR_VENDOR_ID
, ALCOR_PRODUCT_ID
),
88 .driver_info
= PL2303_QUIRK_ENDPOINT_HACK
},
89 { USB_DEVICE(WS002IN_VENDOR_ID
, WS002IN_PRODUCT_ID
) },
90 { USB_DEVICE(COREGA_VENDOR_ID
, COREGA_PRODUCT_ID
) },
91 { USB_DEVICE(YCCABLE_VENDOR_ID
, YCCABLE_PRODUCT_ID
) },
92 { USB_DEVICE(SUPERIAL_VENDOR_ID
, SUPERIAL_PRODUCT_ID
) },
93 { USB_DEVICE(HP_VENDOR_ID
, HP_LD220_PRODUCT_ID
) },
94 { USB_DEVICE(HP_VENDOR_ID
, HP_LD960_PRODUCT_ID
) },
95 { USB_DEVICE(HP_VENDOR_ID
, HP_LCM220_PRODUCT_ID
) },
96 { USB_DEVICE(HP_VENDOR_ID
, HP_LCM960_PRODUCT_ID
) },
97 { USB_DEVICE(CRESSI_VENDOR_ID
, CRESSI_EDY_PRODUCT_ID
) },
98 { USB_DEVICE(ZEAGLE_VENDOR_ID
, ZEAGLE_N2ITION3_PRODUCT_ID
) },
99 { USB_DEVICE(SONY_VENDOR_ID
, SONY_QN3USB_PRODUCT_ID
) },
100 { USB_DEVICE(SANWA_VENDOR_ID
, SANWA_PRODUCT_ID
) },
101 { USB_DEVICE(ADLINK_VENDOR_ID
, ADLINK_ND6530_PRODUCT_ID
) },
102 { USB_DEVICE(SMART_VENDOR_ID
, SMART_PRODUCT_ID
) },
103 { } /* Terminating entry */
106 MODULE_DEVICE_TABLE(usb
, id_table
);
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_INDEX 8
131 #define UART_STATE_MSR_MASK 0x8b
132 #define UART_STATE_TRANSIENT_MASK 0x74
133 #define UART_DCD 0x01
134 #define UART_DSR 0x02
135 #define UART_BREAK_ERROR 0x04
136 #define UART_RING 0x08
137 #define UART_FRAME_ERROR 0x10
138 #define UART_PARITY_ERROR 0x20
139 #define UART_OVERRUN_ERROR 0x40
140 #define UART_CTS 0x80
142 static void pl2303_set_break(struct usb_serial_port
*port
, bool enable
);
145 TYPE_01
, /* Type 0 and 1 (difference unknown) */
146 TYPE_HX
, /* HX version of the pl2303 chip */
150 struct pl2303_type_data
{
151 speed_t max_baud_rate
;
152 unsigned long quirks
;
155 struct pl2303_serial_private
{
156 const struct pl2303_type_data
*type
;
157 unsigned long quirks
;
160 struct pl2303_private
{
168 static const struct pl2303_type_data pl2303_type_data
[TYPE_COUNT
] = {
170 .max_baud_rate
= 1228800,
171 .quirks
= PL2303_QUIRK_LEGACY
,
174 .max_baud_rate
= 12000000,
178 static int pl2303_vendor_read(struct usb_serial
*serial
, u16 value
,
179 unsigned char buf
[1])
181 struct device
*dev
= &serial
->interface
->dev
;
184 res
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
185 VENDOR_READ_REQUEST
, VENDOR_READ_REQUEST_TYPE
,
186 value
, 0, buf
, 1, 100);
188 dev_err(dev
, "%s - failed to read [%04x]: %d\n", __func__
,
196 dev_dbg(dev
, "%s - [%04x] = %02x\n", __func__
, value
, buf
[0]);
201 static int pl2303_vendor_write(struct usb_serial
*serial
, u16 value
, u16 index
)
203 struct device
*dev
= &serial
->interface
->dev
;
206 dev_dbg(dev
, "%s - [%04x] = %02x\n", __func__
, value
, index
);
208 res
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
209 VENDOR_WRITE_REQUEST
, VENDOR_WRITE_REQUEST_TYPE
,
210 value
, index
, NULL
, 0, 100);
212 dev_err(dev
, "%s - failed to write [%04x]: %d\n", __func__
,
220 static int pl2303_probe(struct usb_serial
*serial
,
221 const struct usb_device_id
*id
)
223 usb_set_serial_data(serial
, (void *)id
->driver_info
);
229 * Use interrupt endpoint from first interface if available.
231 * This is needed due to the looney way its endpoints are set up.
233 static int pl2303_endpoint_hack(struct usb_serial
*serial
,
234 struct usb_serial_endpoints
*epds
)
236 struct usb_interface
*interface
= serial
->interface
;
237 struct usb_device
*dev
= serial
->dev
;
238 struct device
*ddev
= &interface
->dev
;
239 struct usb_host_interface
*iface_desc
;
240 struct usb_endpoint_descriptor
*endpoint
;
243 if (interface
== dev
->actconfig
->interface
[0])
246 /* check out the endpoints of the other interface */
247 iface_desc
= dev
->actconfig
->interface
[0]->cur_altsetting
;
249 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
250 endpoint
= &iface_desc
->endpoint
[i
].desc
;
252 if (!usb_endpoint_is_int_in(endpoint
))
255 dev_dbg(ddev
, "found interrupt in on separate interface\n");
256 if (epds
->num_interrupt_in
< ARRAY_SIZE(epds
->interrupt_in
))
257 epds
->interrupt_in
[epds
->num_interrupt_in
++] = endpoint
;
263 static int pl2303_calc_num_ports(struct usb_serial
*serial
,
264 struct usb_serial_endpoints
*epds
)
266 unsigned long quirks
= (unsigned long)usb_get_serial_data(serial
);
267 struct device
*dev
= &serial
->interface
->dev
;
270 if (quirks
& PL2303_QUIRK_ENDPOINT_HACK
) {
271 ret
= pl2303_endpoint_hack(serial
, epds
);
276 if (epds
->num_interrupt_in
< 1) {
277 dev_err(dev
, "required interrupt-in endpoint missing\n");
284 static int pl2303_startup(struct usb_serial
*serial
)
286 struct pl2303_serial_private
*spriv
;
287 enum pl2303_type type
= TYPE_01
;
290 spriv
= kzalloc(sizeof(*spriv
), GFP_KERNEL
);
294 buf
= kmalloc(1, GFP_KERNEL
);
300 if (serial
->dev
->descriptor
.bDeviceClass
== 0x02)
301 type
= TYPE_01
; /* type 0 */
302 else if (serial
->dev
->descriptor
.bMaxPacketSize0
== 0x40)
304 else if (serial
->dev
->descriptor
.bDeviceClass
== 0x00)
305 type
= TYPE_01
; /* type 1 */
306 else if (serial
->dev
->descriptor
.bDeviceClass
== 0xFF)
307 type
= TYPE_01
; /* type 1 */
308 dev_dbg(&serial
->interface
->dev
, "device type: %d\n", type
);
310 spriv
->type
= &pl2303_type_data
[type
];
311 spriv
->quirks
= (unsigned long)usb_get_serial_data(serial
);
312 spriv
->quirks
|= spriv
->type
->quirks
;
314 usb_set_serial_data(serial
, spriv
);
316 pl2303_vendor_read(serial
, 0x8484, buf
);
317 pl2303_vendor_write(serial
, 0x0404, 0);
318 pl2303_vendor_read(serial
, 0x8484, buf
);
319 pl2303_vendor_read(serial
, 0x8383, buf
);
320 pl2303_vendor_read(serial
, 0x8484, buf
);
321 pl2303_vendor_write(serial
, 0x0404, 1);
322 pl2303_vendor_read(serial
, 0x8484, buf
);
323 pl2303_vendor_read(serial
, 0x8383, buf
);
324 pl2303_vendor_write(serial
, 0, 1);
325 pl2303_vendor_write(serial
, 1, 0);
326 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
)
327 pl2303_vendor_write(serial
, 2, 0x24);
329 pl2303_vendor_write(serial
, 2, 0x44);
336 static void pl2303_release(struct usb_serial
*serial
)
338 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
343 static int pl2303_port_probe(struct usb_serial_port
*port
)
345 struct pl2303_private
*priv
;
347 priv
= kzalloc(sizeof(*priv
), GFP_KERNEL
);
351 spin_lock_init(&priv
->lock
);
353 usb_set_serial_port_data(port
, priv
);
355 port
->port
.drain_delay
= 256;
360 static int pl2303_port_remove(struct usb_serial_port
*port
)
362 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
369 static int pl2303_set_control_lines(struct usb_serial_port
*port
, u8 value
)
371 struct usb_device
*dev
= port
->serial
->dev
;
374 dev_dbg(&port
->dev
, "%s - %02x\n", __func__
, value
);
376 retval
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0),
377 SET_CONTROL_REQUEST
, SET_CONTROL_REQUEST_TYPE
,
378 value
, 0, NULL
, 0, 100);
380 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, retval
);
386 * Returns the nearest supported baud rate that can be set directly without
389 static speed_t
pl2303_get_supported_baud_rate(speed_t baud
)
391 static const speed_t baud_sup
[] = {
392 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
393 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
394 614400, 921600, 1228800, 2457600, 3000000, 6000000
399 for (i
= 0; i
< ARRAY_SIZE(baud_sup
); ++i
) {
400 if (baud_sup
[i
] > baud
)
404 if (i
== ARRAY_SIZE(baud_sup
))
405 baud
= baud_sup
[i
- 1];
406 else if (i
> 0 && (baud_sup
[i
] - baud
) > (baud
- baud_sup
[i
- 1]))
407 baud
= baud_sup
[i
- 1];
415 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
418 static speed_t
pl2303_encode_baud_rate_direct(unsigned char buf
[4],
421 put_unaligned_le32(baud
, buf
);
426 static speed_t
pl2303_encode_baud_rate_divisor(unsigned char buf
[4],
429 unsigned int baseline
, mantissa
, exponent
;
432 * Apparently the formula is:
433 * baudrate = 12M * 32 / (mantissa * 4^exponent)
435 * mantissa = buf[8:0]
436 * exponent = buf[11:9]
438 baseline
= 12000000 * 32;
439 mantissa
= baseline
/ baud
;
441 mantissa
= 1; /* Avoid dividing by zero if baud > 32*12M. */
443 while (mantissa
>= 512) {
445 mantissa
>>= 2; /* divide by 4 */
448 /* Exponent is maxed. Trim mantissa and leave. */
456 buf
[1] = exponent
<< 1 | mantissa
>> 8;
457 buf
[0] = mantissa
& 0xff;
459 /* Calculate and return the exact baud rate. */
460 baud
= (baseline
/ mantissa
) >> (exponent
<< 1);
465 static void pl2303_encode_baud_rate(struct tty_struct
*tty
,
466 struct usb_serial_port
*port
,
469 struct usb_serial
*serial
= port
->serial
;
470 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
474 baud
= tty_get_baud_rate(tty
);
475 dev_dbg(&port
->dev
, "baud requested = %u\n", baud
);
479 if (spriv
->type
->max_baud_rate
)
480 baud
= min_t(speed_t
, baud
, spriv
->type
->max_baud_rate
);
482 * Use direct method for supported baud rates, otherwise use divisors.
484 baud_sup
= pl2303_get_supported_baud_rate(baud
);
486 if (baud
== baud_sup
)
487 baud
= pl2303_encode_baud_rate_direct(buf
, baud
);
489 baud
= pl2303_encode_baud_rate_divisor(buf
, baud
);
491 /* Save resulting baud rate */
492 tty_encode_baud_rate(tty
, baud
, baud
);
493 dev_dbg(&port
->dev
, "baud set = %u\n", baud
);
496 static int pl2303_get_line_request(struct usb_serial_port
*port
,
497 unsigned char buf
[7])
499 struct usb_device
*udev
= port
->serial
->dev
;
502 ret
= usb_control_msg(udev
, usb_rcvctrlpipe(udev
, 0),
503 GET_LINE_REQUEST
, GET_LINE_REQUEST_TYPE
,
506 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, ret
);
514 dev_dbg(&port
->dev
, "%s - %7ph\n", __func__
, buf
);
519 static int pl2303_set_line_request(struct usb_serial_port
*port
,
520 unsigned char buf
[7])
522 struct usb_device
*udev
= port
->serial
->dev
;
525 ret
= usb_control_msg(udev
, usb_sndctrlpipe(udev
, 0),
526 SET_LINE_REQUEST
, SET_LINE_REQUEST_TYPE
,
529 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, ret
);
533 dev_dbg(&port
->dev
, "%s - %7ph\n", __func__
, buf
);
538 static void pl2303_set_termios(struct tty_struct
*tty
,
539 struct usb_serial_port
*port
, struct ktermios
*old_termios
)
541 struct usb_serial
*serial
= port
->serial
;
542 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
543 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
549 if (old_termios
&& !tty_termios_hw_change(&tty
->termios
, old_termios
))
552 buf
= kzalloc(7, GFP_KERNEL
);
554 /* Report back no change occurred */
556 tty
->termios
= *old_termios
;
560 pl2303_get_line_request(port
, buf
);
562 switch (C_CSIZE(tty
)) {
576 dev_dbg(&port
->dev
, "data bits = %d\n", buf
[6]);
578 /* For reference buf[0]:buf[3] baud rate value */
579 pl2303_encode_baud_rate(tty
, port
, &buf
[0]);
581 /* For reference buf[4]=0 is 1 stop bits */
582 /* For reference buf[4]=1 is 1.5 stop bits */
583 /* For reference buf[4]=2 is 2 stop bits */
586 * NOTE: Comply with "real" UARTs / RS232:
587 * use 1.5 instead of 2 stop bits with 5 data bits
589 if (C_CSIZE(tty
) == CS5
) {
591 dev_dbg(&port
->dev
, "stop bits = 1.5\n");
594 dev_dbg(&port
->dev
, "stop bits = 2\n");
598 dev_dbg(&port
->dev
, "stop bits = 1\n");
602 /* For reference buf[5]=0 is none parity */
603 /* For reference buf[5]=1 is odd parity */
604 /* For reference buf[5]=2 is even parity */
605 /* For reference buf[5]=3 is mark parity */
606 /* For reference buf[5]=4 is space parity */
610 dev_dbg(&port
->dev
, "parity = mark\n");
613 dev_dbg(&port
->dev
, "parity = odd\n");
618 dev_dbg(&port
->dev
, "parity = space\n");
621 dev_dbg(&port
->dev
, "parity = even\n");
626 dev_dbg(&port
->dev
, "parity = none\n");
630 * Some PL2303 are known to lose bytes if you change serial settings
631 * even to the same values as before. Thus we actually need to filter
632 * in this specific case.
634 * Note that the tty_termios_hw_change check above is not sufficient
635 * as a previously requested baud rate may differ from the one
636 * actually used (and stored in old_termios).
638 * NOTE: No additional locking needed for line_settings as it is
639 * only used in set_termios, which is serialised against itself.
641 if (!old_termios
|| memcmp(buf
, priv
->line_settings
, 7)) {
642 ret
= pl2303_set_line_request(port
, buf
);
644 memcpy(priv
->line_settings
, buf
, 7);
647 /* change control lines if we are switching to or from B0 */
648 spin_lock_irqsave(&priv
->lock
, flags
);
649 control
= priv
->line_control
;
650 if (C_BAUD(tty
) == B0
)
651 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
652 else if (old_termios
&& (old_termios
->c_cflag
& CBAUD
) == B0
)
653 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
654 if (control
!= priv
->line_control
) {
655 control
= priv
->line_control
;
656 spin_unlock_irqrestore(&priv
->lock
, flags
);
657 pl2303_set_control_lines(port
, control
);
659 spin_unlock_irqrestore(&priv
->lock
, flags
);
662 if (C_CRTSCTS(tty
)) {
663 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
)
664 pl2303_vendor_write(serial
, 0x0, 0x41);
666 pl2303_vendor_write(serial
, 0x0, 0x61);
668 pl2303_vendor_write(serial
, 0x0, 0x0);
674 static void pl2303_dtr_rts(struct usb_serial_port
*port
, int on
)
676 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
680 spin_lock_irqsave(&priv
->lock
, flags
);
682 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
684 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
685 control
= priv
->line_control
;
686 spin_unlock_irqrestore(&priv
->lock
, flags
);
688 pl2303_set_control_lines(port
, control
);
691 static void pl2303_close(struct usb_serial_port
*port
)
693 usb_serial_generic_close(port
);
694 usb_kill_urb(port
->interrupt_in_urb
);
695 pl2303_set_break(port
, false);
698 static int pl2303_open(struct tty_struct
*tty
, struct usb_serial_port
*port
)
700 struct usb_serial
*serial
= port
->serial
;
701 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
704 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
) {
705 usb_clear_halt(serial
->dev
, port
->write_urb
->pipe
);
706 usb_clear_halt(serial
->dev
, port
->read_urb
->pipe
);
708 /* reset upstream data pipes */
709 pl2303_vendor_write(serial
, 8, 0);
710 pl2303_vendor_write(serial
, 9, 0);
715 pl2303_set_termios(tty
, port
, NULL
);
717 result
= usb_submit_urb(port
->interrupt_in_urb
, GFP_KERNEL
);
719 dev_err(&port
->dev
, "failed to submit interrupt urb: %d\n",
724 result
= usb_serial_generic_open(tty
, port
);
726 usb_kill_urb(port
->interrupt_in_urb
);
733 static int pl2303_tiocmset(struct tty_struct
*tty
,
734 unsigned int set
, unsigned int clear
)
736 struct usb_serial_port
*port
= tty
->driver_data
;
737 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
742 spin_lock_irqsave(&priv
->lock
, flags
);
744 priv
->line_control
|= CONTROL_RTS
;
746 priv
->line_control
|= CONTROL_DTR
;
747 if (clear
& TIOCM_RTS
)
748 priv
->line_control
&= ~CONTROL_RTS
;
749 if (clear
& TIOCM_DTR
)
750 priv
->line_control
&= ~CONTROL_DTR
;
751 control
= priv
->line_control
;
752 spin_unlock_irqrestore(&priv
->lock
, flags
);
754 ret
= pl2303_set_control_lines(port
, control
);
756 return usb_translate_errors(ret
);
761 static int pl2303_tiocmget(struct tty_struct
*tty
)
763 struct usb_serial_port
*port
= tty
->driver_data
;
764 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
770 spin_lock_irqsave(&priv
->lock
, flags
);
771 mcr
= priv
->line_control
;
772 status
= priv
->line_status
;
773 spin_unlock_irqrestore(&priv
->lock
, flags
);
775 result
= ((mcr
& CONTROL_DTR
) ? TIOCM_DTR
: 0)
776 | ((mcr
& CONTROL_RTS
) ? TIOCM_RTS
: 0)
777 | ((status
& UART_CTS
) ? TIOCM_CTS
: 0)
778 | ((status
& UART_DSR
) ? TIOCM_DSR
: 0)
779 | ((status
& UART_RING
) ? TIOCM_RI
: 0)
780 | ((status
& UART_DCD
) ? TIOCM_CD
: 0);
782 dev_dbg(&port
->dev
, "%s - result = %x\n", __func__
, result
);
787 static int pl2303_carrier_raised(struct usb_serial_port
*port
)
789 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
791 if (priv
->line_status
& UART_DCD
)
797 static int pl2303_ioctl(struct tty_struct
*tty
,
798 unsigned int cmd
, unsigned long arg
)
800 struct serial_struct ser
;
801 struct usb_serial_port
*port
= tty
->driver_data
;
805 memset(&ser
, 0, sizeof ser
);
806 ser
.type
= PORT_16654
;
807 ser
.line
= port
->minor
;
808 ser
.port
= port
->port_number
;
809 ser
.baud_base
= 460800;
811 if (copy_to_user((void __user
*)arg
, &ser
, sizeof ser
))
822 static void pl2303_set_break(struct usb_serial_port
*port
, bool enable
)
824 struct usb_serial
*serial
= port
->serial
;
833 dev_dbg(&port
->dev
, "%s - turning break %s\n", __func__
,
834 state
== BREAK_OFF
? "off" : "on");
836 result
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
837 BREAK_REQUEST
, BREAK_REQUEST_TYPE
, state
,
840 dev_err(&port
->dev
, "error sending break = %d\n", result
);
843 static void pl2303_break_ctl(struct tty_struct
*tty
, int state
)
845 struct usb_serial_port
*port
= tty
->driver_data
;
847 pl2303_set_break(port
, state
);
850 static void pl2303_update_line_status(struct usb_serial_port
*port
,
852 unsigned int actual_length
)
854 struct usb_serial
*serial
= port
->serial
;
855 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
856 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
857 struct tty_struct
*tty
;
859 unsigned int status_idx
= UART_STATE_INDEX
;
863 if (spriv
->quirks
& PL2303_QUIRK_UART_STATE_IDX0
)
866 if (actual_length
< status_idx
+ 1)
869 status
= data
[status_idx
];
871 /* Save off the uart status for others to look at */
872 spin_lock_irqsave(&priv
->lock
, flags
);
873 delta
= priv
->line_status
^ status
;
874 priv
->line_status
= status
;
875 spin_unlock_irqrestore(&priv
->lock
, flags
);
877 if (status
& UART_BREAK_ERROR
)
878 usb_serial_handle_break(port
);
880 if (delta
& UART_STATE_MSR_MASK
) {
881 if (delta
& UART_CTS
)
883 if (delta
& UART_DSR
)
885 if (delta
& UART_RING
)
887 if (delta
& UART_DCD
) {
889 tty
= tty_port_tty_get(&port
->port
);
891 usb_serial_handle_dcd_change(port
, tty
,
897 wake_up_interruptible(&port
->port
.delta_msr_wait
);
901 static void pl2303_read_int_callback(struct urb
*urb
)
903 struct usb_serial_port
*port
= urb
->context
;
904 unsigned char *data
= urb
->transfer_buffer
;
905 unsigned int actual_length
= urb
->actual_length
;
906 int status
= urb
->status
;
916 /* this urb is terminated, clean up */
917 dev_dbg(&port
->dev
, "%s - urb shutting down with status: %d\n",
921 dev_dbg(&port
->dev
, "%s - nonzero urb status received: %d\n",
926 usb_serial_debug_data(&port
->dev
, __func__
,
927 urb
->actual_length
, urb
->transfer_buffer
);
929 pl2303_update_line_status(port
, data
, actual_length
);
932 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
935 "%s - usb_submit_urb failed with result %d\n",
940 static void pl2303_process_read_urb(struct urb
*urb
)
942 struct usb_serial_port
*port
= urb
->context
;
943 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
944 unsigned char *data
= urb
->transfer_buffer
;
945 char tty_flag
= TTY_NORMAL
;
950 /* update line status */
951 spin_lock_irqsave(&priv
->lock
, flags
);
952 line_status
= priv
->line_status
;
953 priv
->line_status
&= ~UART_STATE_TRANSIENT_MASK
;
954 spin_unlock_irqrestore(&priv
->lock
, flags
);
956 if (!urb
->actual_length
)
960 * Break takes precedence over parity, which takes precedence over
963 if (line_status
& UART_BREAK_ERROR
)
964 tty_flag
= TTY_BREAK
;
965 else if (line_status
& UART_PARITY_ERROR
)
966 tty_flag
= TTY_PARITY
;
967 else if (line_status
& UART_FRAME_ERROR
)
968 tty_flag
= TTY_FRAME
;
970 if (tty_flag
!= TTY_NORMAL
)
971 dev_dbg(&port
->dev
, "%s - tty_flag = %d\n", __func__
,
973 /* overrun is special, not associated with a char */
974 if (line_status
& UART_OVERRUN_ERROR
)
975 tty_insert_flip_char(&port
->port
, 0, TTY_OVERRUN
);
977 if (port
->port
.console
&& port
->sysrq
) {
978 for (i
= 0; i
< urb
->actual_length
; ++i
)
979 if (!usb_serial_handle_sysrq_char(port
, data
[i
]))
980 tty_insert_flip_char(&port
->port
, data
[i
],
983 tty_insert_flip_string_fixed_flag(&port
->port
, data
, tty_flag
,
987 tty_flip_buffer_push(&port
->port
);
990 static struct usb_serial_driver pl2303_device
= {
992 .owner
= THIS_MODULE
,
995 .id_table
= id_table
,
998 .num_interrupt_in
= 0, /* see pl2303_calc_num_ports */
1000 .bulk_out_size
= 256,
1001 .open
= pl2303_open
,
1002 .close
= pl2303_close
,
1003 .dtr_rts
= pl2303_dtr_rts
,
1004 .carrier_raised
= pl2303_carrier_raised
,
1005 .ioctl
= pl2303_ioctl
,
1006 .break_ctl
= pl2303_break_ctl
,
1007 .set_termios
= pl2303_set_termios
,
1008 .tiocmget
= pl2303_tiocmget
,
1009 .tiocmset
= pl2303_tiocmset
,
1010 .tiocmiwait
= usb_serial_generic_tiocmiwait
,
1011 .process_read_urb
= pl2303_process_read_urb
,
1012 .read_int_callback
= pl2303_read_int_callback
,
1013 .probe
= pl2303_probe
,
1014 .calc_num_ports
= pl2303_calc_num_ports
,
1015 .attach
= pl2303_startup
,
1016 .release
= pl2303_release
,
1017 .port_probe
= pl2303_port_probe
,
1018 .port_remove
= pl2303_port_remove
,
1021 static struct usb_serial_driver
* const serial_drivers
[] = {
1022 &pl2303_device
, NULL
1025 module_usb_serial_driver(serial_drivers
, id_table
);
1027 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
1028 MODULE_LICENSE("GPL");