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(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_SX1
),
65 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
66 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X65
),
67 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
68 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X75
),
69 .driver_info
= PL2303_QUIRK_UART_STATE_IDX0
},
70 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_EF81
) },
71 { USB_DEVICE(BENQ_VENDOR_ID
, BENQ_PRODUCT_ID_S81
) }, /* Benq/Siemens S81 */
72 { USB_DEVICE(SYNTECH_VENDOR_ID
, SYNTECH_PRODUCT_ID
) },
73 { USB_DEVICE(NOKIA_CA42_VENDOR_ID
, NOKIA_CA42_PRODUCT_ID
) },
74 { USB_DEVICE(CA_42_CA42_VENDOR_ID
, CA_42_CA42_PRODUCT_ID
) },
75 { USB_DEVICE(SAGEM_VENDOR_ID
, SAGEM_PRODUCT_ID
) },
76 { USB_DEVICE(LEADTEK_VENDOR_ID
, LEADTEK_9531_PRODUCT_ID
) },
77 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID
, SPEEDDRAGON_PRODUCT_ID
) },
78 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID
, DATAPILOT_U2_PRODUCT_ID
) },
79 { USB_DEVICE(BELKIN_VENDOR_ID
, BELKIN_PRODUCT_ID
) },
80 { USB_DEVICE(ALCOR_VENDOR_ID
, ALCOR_PRODUCT_ID
) },
81 { USB_DEVICE(WS002IN_VENDOR_ID
, WS002IN_PRODUCT_ID
) },
82 { USB_DEVICE(COREGA_VENDOR_ID
, COREGA_PRODUCT_ID
) },
83 { USB_DEVICE(YCCABLE_VENDOR_ID
, YCCABLE_PRODUCT_ID
) },
84 { USB_DEVICE(SUPERIAL_VENDOR_ID
, SUPERIAL_PRODUCT_ID
) },
85 { USB_DEVICE(HP_VENDOR_ID
, HP_LD220_PRODUCT_ID
) },
86 { USB_DEVICE(HP_VENDOR_ID
, HP_LD960_PRODUCT_ID
) },
87 { USB_DEVICE(HP_VENDOR_ID
, HP_LCM220_PRODUCT_ID
) },
88 { USB_DEVICE(HP_VENDOR_ID
, HP_LCM960_PRODUCT_ID
) },
89 { USB_DEVICE(CRESSI_VENDOR_ID
, CRESSI_EDY_PRODUCT_ID
) },
90 { USB_DEVICE(ZEAGLE_VENDOR_ID
, ZEAGLE_N2ITION3_PRODUCT_ID
) },
91 { USB_DEVICE(SONY_VENDOR_ID
, SONY_QN3USB_PRODUCT_ID
) },
92 { USB_DEVICE(SANWA_VENDOR_ID
, SANWA_PRODUCT_ID
) },
93 { USB_DEVICE(ADLINK_VENDOR_ID
, ADLINK_ND6530_PRODUCT_ID
) },
94 { USB_DEVICE(SMART_VENDOR_ID
, SMART_PRODUCT_ID
) },
95 { } /* Terminating entry */
98 MODULE_DEVICE_TABLE(usb
, id_table
);
100 #define SET_LINE_REQUEST_TYPE 0x21
101 #define SET_LINE_REQUEST 0x20
103 #define SET_CONTROL_REQUEST_TYPE 0x21
104 #define SET_CONTROL_REQUEST 0x22
105 #define CONTROL_DTR 0x01
106 #define CONTROL_RTS 0x02
108 #define BREAK_REQUEST_TYPE 0x21
109 #define BREAK_REQUEST 0x23
110 #define BREAK_ON 0xffff
111 #define BREAK_OFF 0x0000
113 #define GET_LINE_REQUEST_TYPE 0xa1
114 #define GET_LINE_REQUEST 0x21
116 #define VENDOR_WRITE_REQUEST_TYPE 0x40
117 #define VENDOR_WRITE_REQUEST 0x01
119 #define VENDOR_READ_REQUEST_TYPE 0xc0
120 #define VENDOR_READ_REQUEST 0x01
122 #define UART_STATE_INDEX 8
123 #define UART_STATE_MSR_MASK 0x8b
124 #define UART_STATE_TRANSIENT_MASK 0x74
125 #define UART_DCD 0x01
126 #define UART_DSR 0x02
127 #define UART_BREAK_ERROR 0x04
128 #define UART_RING 0x08
129 #define UART_FRAME_ERROR 0x10
130 #define UART_PARITY_ERROR 0x20
131 #define UART_OVERRUN_ERROR 0x40
132 #define UART_CTS 0x80
134 static void pl2303_set_break(struct usb_serial_port
*port
, bool enable
);
137 TYPE_01
, /* Type 0 and 1 (difference unknown) */
138 TYPE_HX
, /* HX version of the pl2303 chip */
142 struct pl2303_type_data
{
143 speed_t max_baud_rate
;
144 unsigned long quirks
;
147 struct pl2303_serial_private
{
148 const struct pl2303_type_data
*type
;
149 unsigned long quirks
;
152 struct pl2303_private
{
160 static const struct pl2303_type_data pl2303_type_data
[TYPE_COUNT
] = {
162 .max_baud_rate
= 1228800,
163 .quirks
= PL2303_QUIRK_LEGACY
,
166 .max_baud_rate
= 12000000,
170 static int pl2303_vendor_read(struct usb_serial
*serial
, u16 value
,
171 unsigned char buf
[1])
173 struct device
*dev
= &serial
->interface
->dev
;
176 res
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
177 VENDOR_READ_REQUEST
, VENDOR_READ_REQUEST_TYPE
,
178 value
, 0, buf
, 1, 100);
180 dev_err(dev
, "%s - failed to read [%04x]: %d\n", __func__
,
188 dev_dbg(dev
, "%s - [%04x] = %02x\n", __func__
, value
, buf
[0]);
193 static int pl2303_vendor_write(struct usb_serial
*serial
, u16 value
, u16 index
)
195 struct device
*dev
= &serial
->interface
->dev
;
198 dev_dbg(dev
, "%s - [%04x] = %02x\n", __func__
, value
, index
);
200 res
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
201 VENDOR_WRITE_REQUEST
, VENDOR_WRITE_REQUEST_TYPE
,
202 value
, index
, NULL
, 0, 100);
204 dev_err(dev
, "%s - failed to write [%04x]: %d\n", __func__
,
212 static int pl2303_probe(struct usb_serial
*serial
,
213 const struct usb_device_id
*id
)
215 usb_set_serial_data(serial
, (void *)id
->driver_info
);
220 static int pl2303_startup(struct usb_serial
*serial
)
222 struct pl2303_serial_private
*spriv
;
223 enum pl2303_type type
= TYPE_01
;
226 spriv
= kzalloc(sizeof(*spriv
), GFP_KERNEL
);
230 buf
= kmalloc(1, GFP_KERNEL
);
236 if (serial
->dev
->descriptor
.bDeviceClass
== 0x02)
237 type
= TYPE_01
; /* type 0 */
238 else if (serial
->dev
->descriptor
.bMaxPacketSize0
== 0x40)
240 else if (serial
->dev
->descriptor
.bDeviceClass
== 0x00)
241 type
= TYPE_01
; /* type 1 */
242 else if (serial
->dev
->descriptor
.bDeviceClass
== 0xFF)
243 type
= TYPE_01
; /* type 1 */
244 dev_dbg(&serial
->interface
->dev
, "device type: %d\n", type
);
246 spriv
->type
= &pl2303_type_data
[type
];
247 spriv
->quirks
= (unsigned long)usb_get_serial_data(serial
);
248 spriv
->quirks
|= spriv
->type
->quirks
;
250 usb_set_serial_data(serial
, spriv
);
252 pl2303_vendor_read(serial
, 0x8484, buf
);
253 pl2303_vendor_write(serial
, 0x0404, 0);
254 pl2303_vendor_read(serial
, 0x8484, buf
);
255 pl2303_vendor_read(serial
, 0x8383, buf
);
256 pl2303_vendor_read(serial
, 0x8484, buf
);
257 pl2303_vendor_write(serial
, 0x0404, 1);
258 pl2303_vendor_read(serial
, 0x8484, buf
);
259 pl2303_vendor_read(serial
, 0x8383, buf
);
260 pl2303_vendor_write(serial
, 0, 1);
261 pl2303_vendor_write(serial
, 1, 0);
262 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
)
263 pl2303_vendor_write(serial
, 2, 0x24);
265 pl2303_vendor_write(serial
, 2, 0x44);
272 static void pl2303_release(struct usb_serial
*serial
)
274 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
279 static int pl2303_port_probe(struct usb_serial_port
*port
)
281 struct pl2303_private
*priv
;
283 priv
= kzalloc(sizeof(*priv
), GFP_KERNEL
);
287 spin_lock_init(&priv
->lock
);
289 usb_set_serial_port_data(port
, priv
);
291 port
->port
.drain_delay
= 256;
296 static int pl2303_port_remove(struct usb_serial_port
*port
)
298 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
305 static int pl2303_set_control_lines(struct usb_serial_port
*port
, u8 value
)
307 struct usb_device
*dev
= port
->serial
->dev
;
310 dev_dbg(&port
->dev
, "%s - %02x\n", __func__
, value
);
312 retval
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0),
313 SET_CONTROL_REQUEST
, SET_CONTROL_REQUEST_TYPE
,
314 value
, 0, NULL
, 0, 100);
316 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, retval
);
322 * Returns the nearest supported baud rate that can be set directly without
325 static speed_t
pl2303_get_supported_baud_rate(speed_t baud
)
327 static const speed_t baud_sup
[] = {
328 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
329 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
330 614400, 921600, 1228800, 2457600, 3000000, 6000000
335 for (i
= 0; i
< ARRAY_SIZE(baud_sup
); ++i
) {
336 if (baud_sup
[i
] > baud
)
340 if (i
== ARRAY_SIZE(baud_sup
))
341 baud
= baud_sup
[i
- 1];
342 else if (i
> 0 && (baud_sup
[i
] - baud
) > (baud
- baud_sup
[i
- 1]))
343 baud
= baud_sup
[i
- 1];
351 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
354 static speed_t
pl2303_encode_baud_rate_direct(unsigned char buf
[4],
357 put_unaligned_le32(baud
, buf
);
362 static speed_t
pl2303_encode_baud_rate_divisor(unsigned char buf
[4],
368 * Apparently the formula is:
369 * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
371 tmp
= 12000000 * 32 / baud
;
374 buf
[1] = (tmp
>= 256);
384 static void pl2303_encode_baud_rate(struct tty_struct
*tty
,
385 struct usb_serial_port
*port
,
388 struct usb_serial
*serial
= port
->serial
;
389 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
393 baud
= tty_get_baud_rate(tty
);
394 dev_dbg(&port
->dev
, "baud requested = %u\n", baud
);
398 if (spriv
->type
->max_baud_rate
)
399 baud
= min_t(speed_t
, baud
, spriv
->type
->max_baud_rate
);
401 * Use direct method for supported baud rates, otherwise use divisors.
403 baud_sup
= pl2303_get_supported_baud_rate(baud
);
405 if (baud
== baud_sup
)
406 baud
= pl2303_encode_baud_rate_direct(buf
, baud
);
408 baud
= pl2303_encode_baud_rate_divisor(buf
, baud
);
410 /* Save resulting baud rate */
411 tty_encode_baud_rate(tty
, baud
, baud
);
412 dev_dbg(&port
->dev
, "baud set = %u\n", baud
);
415 static int pl2303_get_line_request(struct usb_serial_port
*port
,
416 unsigned char buf
[7])
418 struct usb_device
*udev
= port
->serial
->dev
;
421 ret
= usb_control_msg(udev
, usb_rcvctrlpipe(udev
, 0),
422 GET_LINE_REQUEST
, GET_LINE_REQUEST_TYPE
,
425 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, ret
);
433 dev_dbg(&port
->dev
, "%s - %7ph\n", __func__
, buf
);
438 static int pl2303_set_line_request(struct usb_serial_port
*port
,
439 unsigned char buf
[7])
441 struct usb_device
*udev
= port
->serial
->dev
;
444 ret
= usb_control_msg(udev
, usb_sndctrlpipe(udev
, 0),
445 SET_LINE_REQUEST
, SET_LINE_REQUEST_TYPE
,
448 dev_err(&port
->dev
, "%s - failed: %d\n", __func__
, ret
);
456 dev_dbg(&port
->dev
, "%s - %7ph\n", __func__
, buf
);
461 static void pl2303_set_termios(struct tty_struct
*tty
,
462 struct usb_serial_port
*port
, struct ktermios
*old_termios
)
464 struct usb_serial
*serial
= port
->serial
;
465 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
466 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
472 if (old_termios
&& !tty_termios_hw_change(&tty
->termios
, old_termios
))
475 buf
= kzalloc(7, GFP_KERNEL
);
477 /* Report back no change occurred */
479 tty
->termios
= *old_termios
;
483 pl2303_get_line_request(port
, buf
);
485 switch (C_CSIZE(tty
)) {
499 dev_dbg(&port
->dev
, "data bits = %d\n", buf
[6]);
501 /* For reference buf[0]:buf[3] baud rate value */
502 pl2303_encode_baud_rate(tty
, port
, &buf
[0]);
504 /* For reference buf[4]=0 is 1 stop bits */
505 /* For reference buf[4]=1 is 1.5 stop bits */
506 /* For reference buf[4]=2 is 2 stop bits */
509 * NOTE: Comply with "real" UARTs / RS232:
510 * use 1.5 instead of 2 stop bits with 5 data bits
512 if (C_CSIZE(tty
) == CS5
) {
514 dev_dbg(&port
->dev
, "stop bits = 1.5\n");
517 dev_dbg(&port
->dev
, "stop bits = 2\n");
521 dev_dbg(&port
->dev
, "stop bits = 1\n");
525 /* For reference buf[5]=0 is none parity */
526 /* For reference buf[5]=1 is odd parity */
527 /* For reference buf[5]=2 is even parity */
528 /* For reference buf[5]=3 is mark parity */
529 /* For reference buf[5]=4 is space parity */
533 dev_dbg(&port
->dev
, "parity = mark\n");
536 dev_dbg(&port
->dev
, "parity = odd\n");
541 dev_dbg(&port
->dev
, "parity = space\n");
544 dev_dbg(&port
->dev
, "parity = even\n");
549 dev_dbg(&port
->dev
, "parity = none\n");
553 * Some PL2303 are known to lose bytes if you change serial settings
554 * even to the same values as before. Thus we actually need to filter
555 * in this specific case.
557 * Note that the tty_termios_hw_change check above is not sufficient
558 * as a previously requested baud rate may differ from the one
559 * actually used (and stored in old_termios).
561 * NOTE: No additional locking needed for line_settings as it is
562 * only used in set_termios, which is serialised against itself.
564 if (!old_termios
|| memcmp(buf
, priv
->line_settings
, 7)) {
565 ret
= pl2303_set_line_request(port
, buf
);
567 memcpy(priv
->line_settings
, buf
, 7);
570 /* change control lines if we are switching to or from B0 */
571 spin_lock_irqsave(&priv
->lock
, flags
);
572 control
= priv
->line_control
;
573 if (C_BAUD(tty
) == B0
)
574 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
575 else if (old_termios
&& (old_termios
->c_cflag
& CBAUD
) == B0
)
576 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
577 if (control
!= priv
->line_control
) {
578 control
= priv
->line_control
;
579 spin_unlock_irqrestore(&priv
->lock
, flags
);
580 pl2303_set_control_lines(port
, control
);
582 spin_unlock_irqrestore(&priv
->lock
, flags
);
585 if (C_CRTSCTS(tty
)) {
586 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
)
587 pl2303_vendor_write(serial
, 0x0, 0x41);
589 pl2303_vendor_write(serial
, 0x0, 0x61);
591 pl2303_vendor_write(serial
, 0x0, 0x0);
597 static void pl2303_dtr_rts(struct usb_serial_port
*port
, int on
)
599 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
603 spin_lock_irqsave(&priv
->lock
, flags
);
605 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
607 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
608 control
= priv
->line_control
;
609 spin_unlock_irqrestore(&priv
->lock
, flags
);
611 pl2303_set_control_lines(port
, control
);
614 static void pl2303_close(struct usb_serial_port
*port
)
616 usb_serial_generic_close(port
);
617 usb_kill_urb(port
->interrupt_in_urb
);
618 pl2303_set_break(port
, false);
621 static int pl2303_open(struct tty_struct
*tty
, struct usb_serial_port
*port
)
623 struct usb_serial
*serial
= port
->serial
;
624 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
627 if (spriv
->quirks
& PL2303_QUIRK_LEGACY
) {
628 usb_clear_halt(serial
->dev
, port
->write_urb
->pipe
);
629 usb_clear_halt(serial
->dev
, port
->read_urb
->pipe
);
631 /* reset upstream data pipes */
632 pl2303_vendor_write(serial
, 8, 0);
633 pl2303_vendor_write(serial
, 9, 0);
638 pl2303_set_termios(tty
, port
, NULL
);
640 result
= usb_submit_urb(port
->interrupt_in_urb
, GFP_KERNEL
);
642 dev_err(&port
->dev
, "failed to submit interrupt urb: %d\n",
647 result
= usb_serial_generic_open(tty
, port
);
649 usb_kill_urb(port
->interrupt_in_urb
);
656 static int pl2303_tiocmset(struct tty_struct
*tty
,
657 unsigned int set
, unsigned int clear
)
659 struct usb_serial_port
*port
= tty
->driver_data
;
660 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
665 spin_lock_irqsave(&priv
->lock
, flags
);
667 priv
->line_control
|= CONTROL_RTS
;
669 priv
->line_control
|= CONTROL_DTR
;
670 if (clear
& TIOCM_RTS
)
671 priv
->line_control
&= ~CONTROL_RTS
;
672 if (clear
& TIOCM_DTR
)
673 priv
->line_control
&= ~CONTROL_DTR
;
674 control
= priv
->line_control
;
675 spin_unlock_irqrestore(&priv
->lock
, flags
);
677 ret
= pl2303_set_control_lines(port
, control
);
679 return usb_translate_errors(ret
);
684 static int pl2303_tiocmget(struct tty_struct
*tty
)
686 struct usb_serial_port
*port
= tty
->driver_data
;
687 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
693 spin_lock_irqsave(&priv
->lock
, flags
);
694 mcr
= priv
->line_control
;
695 status
= priv
->line_status
;
696 spin_unlock_irqrestore(&priv
->lock
, flags
);
698 result
= ((mcr
& CONTROL_DTR
) ? TIOCM_DTR
: 0)
699 | ((mcr
& CONTROL_RTS
) ? TIOCM_RTS
: 0)
700 | ((status
& UART_CTS
) ? TIOCM_CTS
: 0)
701 | ((status
& UART_DSR
) ? TIOCM_DSR
: 0)
702 | ((status
& UART_RING
) ? TIOCM_RI
: 0)
703 | ((status
& UART_DCD
) ? TIOCM_CD
: 0);
705 dev_dbg(&port
->dev
, "%s - result = %x\n", __func__
, result
);
710 static int pl2303_carrier_raised(struct usb_serial_port
*port
)
712 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
714 if (priv
->line_status
& UART_DCD
)
720 static int pl2303_ioctl(struct tty_struct
*tty
,
721 unsigned int cmd
, unsigned long arg
)
723 struct serial_struct ser
;
724 struct usb_serial_port
*port
= tty
->driver_data
;
728 memset(&ser
, 0, sizeof ser
);
729 ser
.type
= PORT_16654
;
730 ser
.line
= port
->minor
;
731 ser
.port
= port
->port_number
;
732 ser
.baud_base
= 460800;
734 if (copy_to_user((void __user
*)arg
, &ser
, sizeof ser
))
745 static void pl2303_set_break(struct usb_serial_port
*port
, bool enable
)
747 struct usb_serial
*serial
= port
->serial
;
756 dev_dbg(&port
->dev
, "%s - turning break %s\n", __func__
,
757 state
== BREAK_OFF
? "off" : "on");
759 result
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
760 BREAK_REQUEST
, BREAK_REQUEST_TYPE
, state
,
763 dev_err(&port
->dev
, "error sending break = %d\n", result
);
766 static void pl2303_break_ctl(struct tty_struct
*tty
, int state
)
768 struct usb_serial_port
*port
= tty
->driver_data
;
770 pl2303_set_break(port
, state
);
773 static void pl2303_update_line_status(struct usb_serial_port
*port
,
775 unsigned int actual_length
)
777 struct usb_serial
*serial
= port
->serial
;
778 struct pl2303_serial_private
*spriv
= usb_get_serial_data(serial
);
779 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
780 struct tty_struct
*tty
;
782 unsigned int status_idx
= UART_STATE_INDEX
;
786 if (spriv
->quirks
& PL2303_QUIRK_UART_STATE_IDX0
)
789 if (actual_length
< status_idx
+ 1)
792 status
= data
[status_idx
];
794 /* Save off the uart status for others to look at */
795 spin_lock_irqsave(&priv
->lock
, flags
);
796 delta
= priv
->line_status
^ status
;
797 priv
->line_status
= status
;
798 spin_unlock_irqrestore(&priv
->lock
, flags
);
800 if (status
& UART_BREAK_ERROR
)
801 usb_serial_handle_break(port
);
803 if (delta
& UART_STATE_MSR_MASK
) {
804 if (delta
& UART_CTS
)
806 if (delta
& UART_DSR
)
808 if (delta
& UART_RING
)
810 if (delta
& UART_DCD
) {
812 tty
= tty_port_tty_get(&port
->port
);
814 usb_serial_handle_dcd_change(port
, tty
,
820 wake_up_interruptible(&port
->port
.delta_msr_wait
);
824 static void pl2303_read_int_callback(struct urb
*urb
)
826 struct usb_serial_port
*port
= urb
->context
;
827 unsigned char *data
= urb
->transfer_buffer
;
828 unsigned int actual_length
= urb
->actual_length
;
829 int status
= urb
->status
;
839 /* this urb is terminated, clean up */
840 dev_dbg(&port
->dev
, "%s - urb shutting down with status: %d\n",
844 dev_dbg(&port
->dev
, "%s - nonzero urb status received: %d\n",
849 usb_serial_debug_data(&port
->dev
, __func__
,
850 urb
->actual_length
, urb
->transfer_buffer
);
852 pl2303_update_line_status(port
, data
, actual_length
);
855 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
858 "%s - usb_submit_urb failed with result %d\n",
863 static void pl2303_process_read_urb(struct urb
*urb
)
865 struct usb_serial_port
*port
= urb
->context
;
866 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
867 unsigned char *data
= urb
->transfer_buffer
;
868 char tty_flag
= TTY_NORMAL
;
873 /* update line status */
874 spin_lock_irqsave(&priv
->lock
, flags
);
875 line_status
= priv
->line_status
;
876 priv
->line_status
&= ~UART_STATE_TRANSIENT_MASK
;
877 spin_unlock_irqrestore(&priv
->lock
, flags
);
879 if (!urb
->actual_length
)
883 * Break takes precedence over parity, which takes precedence over
886 if (line_status
& UART_BREAK_ERROR
)
887 tty_flag
= TTY_BREAK
;
888 else if (line_status
& UART_PARITY_ERROR
)
889 tty_flag
= TTY_PARITY
;
890 else if (line_status
& UART_FRAME_ERROR
)
891 tty_flag
= TTY_FRAME
;
893 if (tty_flag
!= TTY_NORMAL
)
894 dev_dbg(&port
->dev
, "%s - tty_flag = %d\n", __func__
,
896 /* overrun is special, not associated with a char */
897 if (line_status
& UART_OVERRUN_ERROR
)
898 tty_insert_flip_char(&port
->port
, 0, TTY_OVERRUN
);
900 if (port
->port
.console
&& port
->sysrq
) {
901 for (i
= 0; i
< urb
->actual_length
; ++i
)
902 if (!usb_serial_handle_sysrq_char(port
, data
[i
]))
903 tty_insert_flip_char(&port
->port
, data
[i
],
906 tty_insert_flip_string_fixed_flag(&port
->port
, data
, tty_flag
,
910 tty_flip_buffer_push(&port
->port
);
913 static struct usb_serial_driver pl2303_device
= {
915 .owner
= THIS_MODULE
,
918 .id_table
= id_table
,
921 .bulk_out_size
= 256,
923 .close
= pl2303_close
,
924 .dtr_rts
= pl2303_dtr_rts
,
925 .carrier_raised
= pl2303_carrier_raised
,
926 .ioctl
= pl2303_ioctl
,
927 .break_ctl
= pl2303_break_ctl
,
928 .set_termios
= pl2303_set_termios
,
929 .tiocmget
= pl2303_tiocmget
,
930 .tiocmset
= pl2303_tiocmset
,
931 .tiocmiwait
= usb_serial_generic_tiocmiwait
,
932 .process_read_urb
= pl2303_process_read_urb
,
933 .read_int_callback
= pl2303_read_int_callback
,
934 .probe
= pl2303_probe
,
935 .attach
= pl2303_startup
,
936 .release
= pl2303_release
,
937 .port_probe
= pl2303_port_probe
,
938 .port_remove
= pl2303_port_remove
,
941 static struct usb_serial_driver
* const serial_drivers
[] = {
945 module_usb_serial_driver(serial_drivers
, id_table
);
947 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
948 MODULE_LICENSE("GPL");