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 #define PL2303_BUF_SIZE 1024
44 #define PL2303_TMP_BUF_SIZE 1024
47 unsigned int buf_size
;
53 static struct usb_device_id id_table
[] = {
54 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID
) },
55 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_RSAQ2
) },
56 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_DCU11
) },
57 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_RSAQ3
) },
58 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_PHAROS
) },
59 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_ALDIGA
) },
60 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_MMX
) },
61 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_GPRS
) },
62 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_HCR331
) },
63 { USB_DEVICE(PL2303_VENDOR_ID
, PL2303_PRODUCT_ID_MOTOROLA
) },
64 { USB_DEVICE(IODATA_VENDOR_ID
, IODATA_PRODUCT_ID
) },
65 { USB_DEVICE(IODATA_VENDOR_ID
, IODATA_PRODUCT_ID_RSAQ5
) },
66 { USB_DEVICE(ATEN_VENDOR_ID
, ATEN_PRODUCT_ID
) },
67 { USB_DEVICE(ATEN_VENDOR_ID2
, ATEN_PRODUCT_ID
) },
68 { USB_DEVICE(ELCOM_VENDOR_ID
, ELCOM_PRODUCT_ID
) },
69 { USB_DEVICE(ELCOM_VENDOR_ID
, ELCOM_PRODUCT_ID_UCSGT
) },
70 { USB_DEVICE(ITEGNO_VENDOR_ID
, ITEGNO_PRODUCT_ID
) },
71 { USB_DEVICE(ITEGNO_VENDOR_ID
, ITEGNO_PRODUCT_ID_2080
) },
72 { USB_DEVICE(MA620_VENDOR_ID
, MA620_PRODUCT_ID
) },
73 { USB_DEVICE(RATOC_VENDOR_ID
, RATOC_PRODUCT_ID
) },
74 { USB_DEVICE(TRIPP_VENDOR_ID
, TRIPP_PRODUCT_ID
) },
75 { USB_DEVICE(RADIOSHACK_VENDOR_ID
, RADIOSHACK_PRODUCT_ID
) },
76 { USB_DEVICE(DCU10_VENDOR_ID
, DCU10_PRODUCT_ID
) },
77 { USB_DEVICE(SITECOM_VENDOR_ID
, SITECOM_PRODUCT_ID
) },
78 { USB_DEVICE(ALCATEL_VENDOR_ID
, ALCATEL_PRODUCT_ID
) },
79 { USB_DEVICE(SAMSUNG_VENDOR_ID
, SAMSUNG_PRODUCT_ID
) },
80 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_SX1
) },
81 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X65
) },
82 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_X75
) },
83 { USB_DEVICE(SIEMENS_VENDOR_ID
, SIEMENS_PRODUCT_ID_EF81
) },
84 { USB_DEVICE(BENQ_VENDOR_ID
, BENQ_PRODUCT_ID_S81
) }, /* Benq/Siemens S81 */
85 { USB_DEVICE(SYNTECH_VENDOR_ID
, SYNTECH_PRODUCT_ID
) },
86 { USB_DEVICE(NOKIA_CA42_VENDOR_ID
, NOKIA_CA42_PRODUCT_ID
) },
87 { USB_DEVICE(CA_42_CA42_VENDOR_ID
, CA_42_CA42_PRODUCT_ID
) },
88 { USB_DEVICE(SAGEM_VENDOR_ID
, SAGEM_PRODUCT_ID
) },
89 { USB_DEVICE(LEADTEK_VENDOR_ID
, LEADTEK_9531_PRODUCT_ID
) },
90 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID
, SPEEDDRAGON_PRODUCT_ID
) },
91 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID
, DATAPILOT_U2_PRODUCT_ID
) },
92 { USB_DEVICE(BELKIN_VENDOR_ID
, BELKIN_PRODUCT_ID
) },
93 { USB_DEVICE(ALCOR_VENDOR_ID
, ALCOR_PRODUCT_ID
) },
94 { USB_DEVICE(WS002IN_VENDOR_ID
, WS002IN_PRODUCT_ID
) },
95 { USB_DEVICE(COREGA_VENDOR_ID
, COREGA_PRODUCT_ID
) },
96 { USB_DEVICE(YCCABLE_VENDOR_ID
, YCCABLE_PRODUCT_ID
) },
97 { USB_DEVICE(SUPERIAL_VENDOR_ID
, SUPERIAL_PRODUCT_ID
) },
98 { USB_DEVICE(HP_VENDOR_ID
, HP_LD220_PRODUCT_ID
) },
99 { USB_DEVICE(CRESSI_VENDOR_ID
, CRESSI_EDY_PRODUCT_ID
) },
100 { USB_DEVICE(ZEAGLE_VENDOR_ID
, ZEAGLE_N2ITION3_PRODUCT_ID
) },
101 { USB_DEVICE(SONY_VENDOR_ID
, SONY_QN3USB_PRODUCT_ID
) },
102 { USB_DEVICE(SANWA_VENDOR_ID
, SANWA_PRODUCT_ID
) },
103 { USB_DEVICE(ADLINK_VENDOR_ID
, ADLINK_ND6530_PRODUCT_ID
) },
104 { USB_DEVICE(SMART_VENDOR_ID
, SMART_PRODUCT_ID
) },
105 { } /* Terminating entry */
108 MODULE_DEVICE_TABLE(usb
, id_table
);
110 static struct usb_driver pl2303_driver
= {
112 .probe
= usb_serial_probe
,
113 .disconnect
= usb_serial_disconnect
,
114 .id_table
= id_table
,
115 .suspend
= usb_serial_suspend
,
116 .resume
= usb_serial_resume
,
118 .supports_autosuspend
= 1,
121 #define SET_LINE_REQUEST_TYPE 0x21
122 #define SET_LINE_REQUEST 0x20
124 #define SET_CONTROL_REQUEST_TYPE 0x21
125 #define SET_CONTROL_REQUEST 0x22
126 #define CONTROL_DTR 0x01
127 #define CONTROL_RTS 0x02
129 #define BREAK_REQUEST_TYPE 0x21
130 #define BREAK_REQUEST 0x23
131 #define BREAK_ON 0xffff
132 #define BREAK_OFF 0x0000
134 #define GET_LINE_REQUEST_TYPE 0xa1
135 #define GET_LINE_REQUEST 0x21
137 #define VENDOR_WRITE_REQUEST_TYPE 0x40
138 #define VENDOR_WRITE_REQUEST 0x01
140 #define VENDOR_READ_REQUEST_TYPE 0xc0
141 #define VENDOR_READ_REQUEST 0x01
143 #define UART_STATE 0x08
144 #define UART_STATE_TRANSIENT_MASK 0x74
145 #define UART_DCD 0x01
146 #define UART_DSR 0x02
147 #define UART_BREAK_ERROR 0x04
148 #define UART_RING 0x08
149 #define UART_FRAME_ERROR 0x10
150 #define UART_PARITY_ERROR 0x20
151 #define UART_OVERRUN_ERROR 0x40
152 #define UART_CTS 0x80
156 type_0
, /* don't know the difference between type 0 and */
157 type_1
, /* type 1, until someone from prolific tells us... */
158 HX
, /* HX version of the pl2303 chip */
161 struct pl2303_private
{
163 struct pl2303_buf
*buf
;
164 int write_urb_in_use
;
165 wait_queue_head_t delta_msr_wait
;
168 enum pl2303_type type
;
174 * Allocate a circular buffer and all associated memory.
176 static struct pl2303_buf
*pl2303_buf_alloc(unsigned int size
)
178 struct pl2303_buf
*pb
;
183 pb
= kmalloc(sizeof(struct pl2303_buf
), GFP_KERNEL
);
187 pb
->buf_buf
= kmalloc(size
, GFP_KERNEL
);
188 if (pb
->buf_buf
== NULL
) {
194 pb
->buf_get
= pb
->buf_put
= pb
->buf_buf
;
202 * Free the buffer and all associated memory.
204 static void pl2303_buf_free(struct pl2303_buf
*pb
)
215 * Clear out all data in the circular buffer.
217 static void pl2303_buf_clear(struct pl2303_buf
*pb
)
220 pb
->buf_get
= pb
->buf_put
;
221 /* equivalent to a get of all data available */
225 * pl2303_buf_data_avail
227 * Return the number of bytes of data available in the circular
230 static unsigned int pl2303_buf_data_avail(struct pl2303_buf
*pb
)
235 return (pb
->buf_size
+ pb
->buf_put
- pb
->buf_get
) % pb
->buf_size
;
239 * pl2303_buf_space_avail
241 * Return the number of bytes of space available in the circular
244 static unsigned int pl2303_buf_space_avail(struct pl2303_buf
*pb
)
249 return (pb
->buf_size
+ pb
->buf_get
- pb
->buf_put
- 1) % pb
->buf_size
;
255 * Copy data data from a user buffer and put it into the circular buffer.
256 * Restrict to the amount of space available.
258 * Return the number of bytes copied.
260 static unsigned int pl2303_buf_put(struct pl2303_buf
*pb
, const char *buf
,
268 len
= pl2303_buf_space_avail(pb
);
275 len
= pb
->buf_buf
+ pb
->buf_size
- pb
->buf_put
;
277 memcpy(pb
->buf_put
, buf
, len
);
278 memcpy(pb
->buf_buf
, buf
+len
, count
- len
);
279 pb
->buf_put
= pb
->buf_buf
+ count
- len
;
281 memcpy(pb
->buf_put
, buf
, count
);
283 pb
->buf_put
+= count
;
284 else /* count == len */
285 pb
->buf_put
= pb
->buf_buf
;
294 * Get data from the circular buffer and copy to the given buffer.
295 * Restrict to the amount of data available.
297 * Return the number of bytes copied.
299 static unsigned int pl2303_buf_get(struct pl2303_buf
*pb
, char *buf
,
307 len
= pl2303_buf_data_avail(pb
);
314 len
= pb
->buf_buf
+ pb
->buf_size
- pb
->buf_get
;
316 memcpy(buf
, pb
->buf_get
, len
);
317 memcpy(buf
+len
, pb
->buf_buf
, count
- len
);
318 pb
->buf_get
= pb
->buf_buf
+ count
- len
;
320 memcpy(buf
, pb
->buf_get
, count
);
322 pb
->buf_get
+= count
;
323 else /* count == len */
324 pb
->buf_get
= pb
->buf_buf
;
330 static int pl2303_vendor_read(__u16 value
, __u16 index
,
331 struct usb_serial
*serial
, unsigned char *buf
)
333 int res
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
334 VENDOR_READ_REQUEST
, VENDOR_READ_REQUEST_TYPE
,
335 value
, index
, buf
, 1, 100);
336 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE
,
337 VENDOR_READ_REQUEST
, value
, index
, res
, buf
[0]);
341 static int pl2303_vendor_write(__u16 value
, __u16 index
,
342 struct usb_serial
*serial
)
344 int res
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
345 VENDOR_WRITE_REQUEST
, VENDOR_WRITE_REQUEST_TYPE
,
346 value
, index
, NULL
, 0, 100);
347 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE
,
348 VENDOR_WRITE_REQUEST
, value
, index
, res
);
352 static int pl2303_startup(struct usb_serial
*serial
)
354 struct pl2303_private
*priv
;
355 enum pl2303_type type
= type_0
;
359 buf
= kmalloc(10, GFP_KERNEL
);
363 if (serial
->dev
->descriptor
.bDeviceClass
== 0x02)
365 else if (serial
->dev
->descriptor
.bMaxPacketSize0
== 0x40)
367 else if (serial
->dev
->descriptor
.bDeviceClass
== 0x00)
369 else if (serial
->dev
->descriptor
.bDeviceClass
== 0xFF)
371 dbg("device type: %d", type
);
373 for (i
= 0; i
< serial
->num_ports
; ++i
) {
374 priv
= kzalloc(sizeof(struct pl2303_private
), GFP_KERNEL
);
377 spin_lock_init(&priv
->lock
);
378 priv
->buf
= pl2303_buf_alloc(PL2303_BUF_SIZE
);
379 if (priv
->buf
== NULL
) {
383 init_waitqueue_head(&priv
->delta_msr_wait
);
385 usb_set_serial_port_data(serial
->port
[i
], priv
);
388 pl2303_vendor_read(0x8484, 0, serial
, buf
);
389 pl2303_vendor_write(0x0404, 0, serial
);
390 pl2303_vendor_read(0x8484, 0, serial
, buf
);
391 pl2303_vendor_read(0x8383, 0, serial
, buf
);
392 pl2303_vendor_read(0x8484, 0, serial
, buf
);
393 pl2303_vendor_write(0x0404, 1, serial
);
394 pl2303_vendor_read(0x8484, 0, serial
, buf
);
395 pl2303_vendor_read(0x8383, 0, serial
, buf
);
396 pl2303_vendor_write(0, 1, serial
);
397 pl2303_vendor_write(1, 0, serial
);
399 pl2303_vendor_write(2, 0x44, serial
);
401 pl2303_vendor_write(2, 0x24, serial
);
408 for (--i
; i
>= 0; --i
) {
409 priv
= usb_get_serial_port_data(serial
->port
[i
]);
410 pl2303_buf_free(priv
->buf
);
412 usb_set_serial_port_data(serial
->port
[i
], NULL
);
417 static int set_control_lines(struct usb_device
*dev
, u8 value
)
421 retval
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0),
422 SET_CONTROL_REQUEST
, SET_CONTROL_REQUEST_TYPE
,
423 value
, 0, NULL
, 0, 100);
424 dbg("%s - value = %d, retval = %d", __func__
, value
, retval
);
428 static void pl2303_send(struct usb_serial_port
*port
)
431 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
434 dbg("%s - port %d", __func__
, port
->number
);
436 spin_lock_irqsave(&priv
->lock
, flags
);
438 if (priv
->write_urb_in_use
) {
439 spin_unlock_irqrestore(&priv
->lock
, flags
);
443 count
= pl2303_buf_get(priv
->buf
, port
->write_urb
->transfer_buffer
,
444 port
->bulk_out_size
);
447 spin_unlock_irqrestore(&priv
->lock
, flags
);
451 priv
->write_urb_in_use
= 1;
453 spin_unlock_irqrestore(&priv
->lock
, flags
);
455 usb_serial_debug_data(debug
, &port
->dev
, __func__
, count
,
456 port
->write_urb
->transfer_buffer
);
458 port
->write_urb
->transfer_buffer_length
= count
;
459 port
->write_urb
->dev
= port
->serial
->dev
;
460 result
= usb_submit_urb(port
->write_urb
, GFP_ATOMIC
);
462 dev_err(&port
->dev
, "%s - failed submitting write urb,"
463 " error %d\n", __func__
, result
);
464 priv
->write_urb_in_use
= 0;
465 /* TODO: reschedule pl2303_send */
468 usb_serial_port_softint(port
);
471 static int pl2303_write(struct tty_struct
*tty
, struct usb_serial_port
*port
,
472 const unsigned char *buf
, int count
)
474 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
477 dbg("%s - port %d, %d bytes", __func__
, port
->number
, count
);
482 spin_lock_irqsave(&priv
->lock
, flags
);
483 count
= pl2303_buf_put(priv
->buf
, buf
, count
);
484 spin_unlock_irqrestore(&priv
->lock
, flags
);
491 static int pl2303_write_room(struct tty_struct
*tty
)
493 struct usb_serial_port
*port
= tty
->driver_data
;
494 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
498 dbg("%s - port %d", __func__
, port
->number
);
500 spin_lock_irqsave(&priv
->lock
, flags
);
501 room
= pl2303_buf_space_avail(priv
->buf
);
502 spin_unlock_irqrestore(&priv
->lock
, flags
);
504 dbg("%s - returns %d", __func__
, room
);
508 static int pl2303_chars_in_buffer(struct tty_struct
*tty
)
510 struct usb_serial_port
*port
= tty
->driver_data
;
511 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
515 dbg("%s - port %d", __func__
, port
->number
);
517 spin_lock_irqsave(&priv
->lock
, flags
);
518 chars
= pl2303_buf_data_avail(priv
->buf
);
519 spin_unlock_irqrestore(&priv
->lock
, flags
);
521 dbg("%s - returns %d", __func__
, chars
);
525 static void pl2303_set_termios(struct tty_struct
*tty
,
526 struct usb_serial_port
*port
, struct ktermios
*old_termios
)
528 struct usb_serial
*serial
= port
->serial
;
529 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
536 const int baud_sup
[] = { 75, 150, 300, 600, 1200, 1800, 2400, 3600,
537 4800, 7200, 9600, 14400, 19200, 28800, 38400,
538 57600, 115200, 230400, 460800, 614400,
539 921600, 1228800, 2457600, 3000000, 6000000 };
540 int baud_floor
, baud_ceil
;
543 dbg("%s - port %d", __func__
, port
->number
);
545 /* The PL2303 is reported to lose bytes if you change
546 serial settings even to the same values as before. Thus
547 we actually need to filter in this specific case */
549 if (!tty_termios_hw_change(tty
->termios
, old_termios
))
552 cflag
= tty
->termios
->c_cflag
;
554 buf
= kzalloc(7, GFP_KERNEL
);
556 dev_err(&port
->dev
, "%s - out of memory.\n", __func__
);
557 /* Report back no change occurred */
558 *tty
->termios
= *old_termios
;
562 i
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
563 GET_LINE_REQUEST
, GET_LINE_REQUEST_TYPE
,
565 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i
,
566 buf
[0], buf
[1], buf
[2], buf
[3], buf
[4], buf
[5], buf
[6]);
569 switch (cflag
& CSIZE
) {
584 dbg("%s - data bits = %d", __func__
, buf
[6]);
587 /* For reference buf[0]:buf[3] baud rate value */
588 /* NOTE: Only the values defined in baud_sup are supported !
589 * => if unsupported values are set, the PL2303 seems to use
590 * 9600 baud (at least my PL2303X always does)
592 baud
= tty_get_baud_rate(tty
);
593 dbg("%s - baud requested = %d", __func__
, baud
);
595 /* Set baudrate to nearest supported value */
596 for (k
=0; k
<ARRAY_SIZE(baud_sup
); k
++) {
597 if (baud_sup
[k
] / baud
) {
598 baud_ceil
= baud_sup
[k
];
602 baud_floor
= baud_sup
[k
-1];
603 if ((baud_ceil
% baud
)
604 > (baud
% baud_floor
))
612 if (baud
> 1228800) {
613 /* type_0, type_1 only support up to 1228800 baud */
614 if (priv
->type
!= HX
)
616 else if (baud
> 6000000)
619 dbg("%s - baud set = %d", __func__
, baud
);
620 if (baud
<= 115200) {
621 buf
[0] = baud
& 0xff;
622 buf
[1] = (baud
>> 8) & 0xff;
623 buf
[2] = (baud
>> 16) & 0xff;
624 buf
[3] = (baud
>> 24) & 0xff;
626 /* apparently the formula for higher speeds is:
627 * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
629 unsigned tmp
= 12*1000*1000*32 / baud
;
632 buf
[1] = (tmp
>= 256);
644 /* For reference buf[4]=0 is 1 stop bits */
645 /* For reference buf[4]=1 is 1.5 stop bits */
646 /* For reference buf[4]=2 is 2 stop bits */
647 if (cflag
& CSTOPB
) {
648 /* NOTE: Comply with "real" UARTs / RS232:
649 * use 1.5 instead of 2 stop bits with 5 data bits
651 if ((cflag
& CSIZE
) == CS5
) {
653 dbg("%s - stop bits = 1.5", __func__
);
656 dbg("%s - stop bits = 2", __func__
);
660 dbg("%s - stop bits = 1", __func__
);
663 if (cflag
& PARENB
) {
664 /* For reference buf[5]=0 is none parity */
665 /* For reference buf[5]=1 is odd parity */
666 /* For reference buf[5]=2 is even parity */
667 /* For reference buf[5]=3 is mark parity */
668 /* For reference buf[5]=4 is space parity */
669 if (cflag
& PARODD
) {
670 if (cflag
& CMSPAR
) {
672 dbg("%s - parity = mark", __func__
);
675 dbg("%s - parity = odd", __func__
);
678 if (cflag
& CMSPAR
) {
680 dbg("%s - parity = space", __func__
);
683 dbg("%s - parity = even", __func__
);
688 dbg("%s - parity = none", __func__
);
691 i
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
692 SET_LINE_REQUEST
, SET_LINE_REQUEST_TYPE
,
694 dbg("0x21:0x20:0:0 %d", i
);
696 /* change control lines if we are switching to or from B0 */
697 spin_lock_irqsave(&priv
->lock
, flags
);
698 control
= priv
->line_control
;
699 if ((cflag
& CBAUD
) == B0
)
700 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
702 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
703 if (control
!= priv
->line_control
) {
704 control
= priv
->line_control
;
705 spin_unlock_irqrestore(&priv
->lock
, flags
);
706 set_control_lines(serial
->dev
, control
);
708 spin_unlock_irqrestore(&priv
->lock
, flags
);
711 buf
[0] = buf
[1] = buf
[2] = buf
[3] = buf
[4] = buf
[5] = buf
[6] = 0;
713 i
= usb_control_msg(serial
->dev
, usb_rcvctrlpipe(serial
->dev
, 0),
714 GET_LINE_REQUEST
, GET_LINE_REQUEST_TYPE
,
716 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i
,
717 buf
[0], buf
[1], buf
[2], buf
[3], buf
[4], buf
[5], buf
[6]);
719 if (cflag
& CRTSCTS
) {
720 if (priv
->type
== HX
)
721 pl2303_vendor_write(0x0, 0x61, serial
);
723 pl2303_vendor_write(0x0, 0x41, serial
);
725 pl2303_vendor_write(0x0, 0x0, serial
);
728 /* Save resulting baud rate */
730 tty_encode_baud_rate(tty
, baud
, baud
);
735 static void pl2303_dtr_rts(struct usb_serial_port
*port
, int on
)
737 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
741 spin_lock_irqsave(&priv
->lock
, flags
);
742 /* Change DTR and RTS */
744 priv
->line_control
|= (CONTROL_DTR
| CONTROL_RTS
);
746 priv
->line_control
&= ~(CONTROL_DTR
| CONTROL_RTS
);
747 control
= priv
->line_control
;
748 spin_unlock_irqrestore(&priv
->lock
, flags
);
749 set_control_lines(port
->serial
->dev
, control
);
752 static void pl2303_close(struct usb_serial_port
*port
)
754 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
757 dbg("%s - port %d", __func__
, port
->number
);
759 spin_lock_irqsave(&priv
->lock
, flags
);
760 /* clear out any remaining data in the buffer */
761 pl2303_buf_clear(priv
->buf
);
762 spin_unlock_irqrestore(&priv
->lock
, flags
);
764 /* shutdown our urbs */
765 dbg("%s - shutting down urbs", __func__
);
766 usb_kill_urb(port
->write_urb
);
767 usb_kill_urb(port
->read_urb
);
768 usb_kill_urb(port
->interrupt_in_urb
);
772 static int pl2303_open(struct tty_struct
*tty
, struct usb_serial_port
*port
)
774 struct ktermios tmp_termios
;
775 struct usb_serial
*serial
= port
->serial
;
776 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
779 dbg("%s - port %d", __func__
, port
->number
);
781 if (priv
->type
!= HX
) {
782 usb_clear_halt(serial
->dev
, port
->write_urb
->pipe
);
783 usb_clear_halt(serial
->dev
, port
->read_urb
->pipe
);
785 /* reset upstream data pipes */
786 pl2303_vendor_write(8, 0, serial
);
787 pl2303_vendor_write(9, 0, serial
);
792 pl2303_set_termios(tty
, port
, &tmp_termios
);
794 dbg("%s - submitting read urb", __func__
);
795 port
->read_urb
->dev
= serial
->dev
;
796 result
= usb_submit_urb(port
->read_urb
, GFP_KERNEL
);
798 dev_err(&port
->dev
, "%s - failed submitting read urb,"
799 " error %d\n", __func__
, result
);
804 dbg("%s - submitting interrupt urb", __func__
);
805 port
->interrupt_in_urb
->dev
= serial
->dev
;
806 result
= usb_submit_urb(port
->interrupt_in_urb
, GFP_KERNEL
);
808 dev_err(&port
->dev
, "%s - failed submitting interrupt urb,"
809 " error %d\n", __func__
, result
);
813 port
->port
.drain_delay
= 256;
817 static int pl2303_tiocmset(struct tty_struct
*tty
, struct file
*file
,
818 unsigned int set
, unsigned int clear
)
820 struct usb_serial_port
*port
= tty
->driver_data
;
821 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
825 if (!usb_get_intfdata(port
->serial
->interface
))
828 spin_lock_irqsave(&priv
->lock
, flags
);
830 priv
->line_control
|= CONTROL_RTS
;
832 priv
->line_control
|= CONTROL_DTR
;
833 if (clear
& TIOCM_RTS
)
834 priv
->line_control
&= ~CONTROL_RTS
;
835 if (clear
& TIOCM_DTR
)
836 priv
->line_control
&= ~CONTROL_DTR
;
837 control
= priv
->line_control
;
838 spin_unlock_irqrestore(&priv
->lock
, flags
);
840 return set_control_lines(port
->serial
->dev
, control
);
843 static int pl2303_tiocmget(struct tty_struct
*tty
, struct file
*file
)
845 struct usb_serial_port
*port
= tty
->driver_data
;
846 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
852 dbg("%s (%d)", __func__
, port
->number
);
854 if (!usb_get_intfdata(port
->serial
->interface
))
857 spin_lock_irqsave(&priv
->lock
, flags
);
858 mcr
= priv
->line_control
;
859 status
= priv
->line_status
;
860 spin_unlock_irqrestore(&priv
->lock
, flags
);
862 result
= ((mcr
& CONTROL_DTR
) ? TIOCM_DTR
: 0)
863 | ((mcr
& CONTROL_RTS
) ? TIOCM_RTS
: 0)
864 | ((status
& UART_CTS
) ? TIOCM_CTS
: 0)
865 | ((status
& UART_DSR
) ? TIOCM_DSR
: 0)
866 | ((status
& UART_RING
) ? TIOCM_RI
: 0)
867 | ((status
& UART_DCD
) ? TIOCM_CD
: 0);
869 dbg("%s - result = %x", __func__
, result
);
874 static int pl2303_carrier_raised(struct usb_serial_port
*port
)
876 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
877 if (priv
->line_status
& UART_DCD
)
882 static int wait_modem_info(struct usb_serial_port
*port
, unsigned int arg
)
884 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
886 unsigned int prevstatus
;
888 unsigned int changed
;
890 spin_lock_irqsave(&priv
->lock
, flags
);
891 prevstatus
= priv
->line_status
;
892 spin_unlock_irqrestore(&priv
->lock
, flags
);
895 interruptible_sleep_on(&priv
->delta_msr_wait
);
896 /* see if a signal did it */
897 if (signal_pending(current
))
900 spin_lock_irqsave(&priv
->lock
, flags
);
901 status
= priv
->line_status
;
902 spin_unlock_irqrestore(&priv
->lock
, flags
);
904 changed
= prevstatus
^ status
;
906 if (((arg
& TIOCM_RNG
) && (changed
& UART_RING
)) ||
907 ((arg
& TIOCM_DSR
) && (changed
& UART_DSR
)) ||
908 ((arg
& TIOCM_CD
) && (changed
& UART_DCD
)) ||
909 ((arg
& TIOCM_CTS
) && (changed
& UART_CTS
))) {
918 static int pl2303_ioctl(struct tty_struct
*tty
, struct file
*file
,
919 unsigned int cmd
, unsigned long arg
)
921 struct usb_serial_port
*port
= tty
->driver_data
;
922 dbg("%s (%d) cmd = 0x%04x", __func__
, port
->number
, cmd
);
926 dbg("%s (%d) TIOCMIWAIT", __func__
, port
->number
);
927 return wait_modem_info(port
, arg
);
929 dbg("%s not supported = 0x%04x", __func__
, cmd
);
935 static void pl2303_break_ctl(struct tty_struct
*tty
, int break_state
)
937 struct usb_serial_port
*port
= tty
->driver_data
;
938 struct usb_serial
*serial
= port
->serial
;
942 dbg("%s - port %d", __func__
, port
->number
);
944 if (break_state
== 0)
948 dbg("%s - turning break %s", __func__
,
949 state
== BREAK_OFF
? "off" : "on");
951 result
= usb_control_msg(serial
->dev
, usb_sndctrlpipe(serial
->dev
, 0),
952 BREAK_REQUEST
, BREAK_REQUEST_TYPE
, state
,
955 dbg("%s - error sending break = %d", __func__
, result
);
958 static void pl2303_release(struct usb_serial
*serial
)
961 struct pl2303_private
*priv
;
965 for (i
= 0; i
< serial
->num_ports
; ++i
) {
966 priv
= usb_get_serial_port_data(serial
->port
[i
]);
968 pl2303_buf_free(priv
->buf
);
974 static void pl2303_update_line_status(struct usb_serial_port
*port
,
976 unsigned int actual_length
)
979 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
980 struct tty_struct
*tty
;
982 u8 status_idx
= UART_STATE
;
983 u8 length
= UART_STATE
+ 1;
987 idv
= le16_to_cpu(port
->serial
->dev
->descriptor
.idVendor
);
988 idp
= le16_to_cpu(port
->serial
->dev
->descriptor
.idProduct
);
991 if (idv
== SIEMENS_VENDOR_ID
) {
992 if (idp
== SIEMENS_PRODUCT_ID_X65
||
993 idp
== SIEMENS_PRODUCT_ID_SX1
||
994 idp
== SIEMENS_PRODUCT_ID_X75
) {
1001 if (actual_length
< length
)
1004 /* Save off the uart status for others to look at */
1005 spin_lock_irqsave(&priv
->lock
, flags
);
1006 prev_line_status
= priv
->line_status
;
1007 priv
->line_status
= data
[status_idx
];
1008 spin_unlock_irqrestore(&priv
->lock
, flags
);
1009 if (priv
->line_status
& UART_BREAK_ERROR
)
1010 usb_serial_handle_break(port
);
1011 wake_up_interruptible(&priv
->delta_msr_wait
);
1013 tty
= tty_port_tty_get(&port
->port
);
1016 if ((priv
->line_status
^ prev_line_status
) & UART_DCD
)
1017 usb_serial_handle_dcd_change(port
, tty
,
1018 priv
->line_status
& UART_DCD
);
1022 static void pl2303_read_int_callback(struct urb
*urb
)
1024 struct usb_serial_port
*port
= urb
->context
;
1025 unsigned char *data
= urb
->transfer_buffer
;
1026 unsigned int actual_length
= urb
->actual_length
;
1027 int status
= urb
->status
;
1030 dbg("%s (%d)", __func__
, port
->number
);
1039 /* this urb is terminated, clean up */
1040 dbg("%s - urb shutting down with status: %d", __func__
,
1044 dbg("%s - nonzero urb status received: %d", __func__
,
1049 usb_serial_debug_data(debug
, &port
->dev
, __func__
,
1050 urb
->actual_length
, urb
->transfer_buffer
);
1052 pl2303_update_line_status(port
, data
, actual_length
);
1055 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
1057 dev_err(&urb
->dev
->dev
,
1058 "%s - usb_submit_urb failed with result %d\n",
1062 static void pl2303_push_data(struct tty_struct
*tty
,
1063 struct usb_serial_port
*port
, struct urb
*urb
,
1066 unsigned char *data
= urb
->transfer_buffer
;
1067 /* get tty_flag from status */
1068 char tty_flag
= TTY_NORMAL
;
1069 /* break takes precedence over parity, */
1070 /* which takes precedence over framing errors */
1071 if (line_status
& UART_BREAK_ERROR
)
1072 tty_flag
= TTY_BREAK
;
1073 else if (line_status
& UART_PARITY_ERROR
)
1074 tty_flag
= TTY_PARITY
;
1075 else if (line_status
& UART_FRAME_ERROR
)
1076 tty_flag
= TTY_FRAME
;
1077 dbg("%s - tty_flag = %d", __func__
, tty_flag
);
1079 tty_buffer_request_room(tty
, urb
->actual_length
+ 1);
1080 /* overrun is special, not associated with a char */
1081 if (line_status
& UART_OVERRUN_ERROR
)
1082 tty_insert_flip_char(tty
, 0, TTY_OVERRUN
);
1084 if (tty_flag
== TTY_NORMAL
&& !(port
->console
&& port
->sysrq
))
1085 tty_insert_flip_string(tty
, data
, urb
->actual_length
);
1088 for (i
= 0; i
< urb
->actual_length
; ++i
)
1089 if (!usb_serial_handle_sysrq_char(tty
, port
, data
[i
]))
1090 tty_insert_flip_char(tty
, data
[i
], tty_flag
);
1092 tty_flip_buffer_push(tty
);
1095 static void pl2303_read_bulk_callback(struct urb
*urb
)
1097 struct usb_serial_port
*port
= urb
->context
;
1098 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
1099 struct tty_struct
*tty
;
1100 unsigned long flags
;
1102 int status
= urb
->status
;
1105 dbg("%s - port %d", __func__
, port
->number
);
1108 dbg("%s - urb status = %d", __func__
, status
);
1109 if (!port
->port
.count
) {
1110 dbg("%s - port is closed, exiting.", __func__
);
1113 if (status
== -EPROTO
) {
1114 /* PL2303 mysteriously fails with -EPROTO reschedule
1116 dbg("%s - caught -EPROTO, resubmitting the urb",
1118 urb
->dev
= port
->serial
->dev
;
1119 result
= usb_submit_urb(urb
, GFP_ATOMIC
);
1121 dev_err(&urb
->dev
->dev
, "%s - failed"
1122 " resubmitting read urb, error %d\n",
1126 dbg("%s - unable to handle the error, exiting.", __func__
);
1130 usb_serial_debug_data(debug
, &port
->dev
, __func__
,
1131 urb
->actual_length
, urb
->transfer_buffer
);
1133 spin_lock_irqsave(&priv
->lock
, flags
);
1134 line_status
= priv
->line_status
;
1135 priv
->line_status
&= ~UART_STATE_TRANSIENT_MASK
;
1136 spin_unlock_irqrestore(&priv
->lock
, flags
);
1137 wake_up_interruptible(&priv
->delta_msr_wait
);
1139 tty
= tty_port_tty_get(&port
->port
);
1140 if (tty
&& urb
->actual_length
) {
1141 pl2303_push_data(tty
, port
, urb
, line_status
);
1144 /* Schedule the next read _if_ we are still open */
1145 if (port
->port
.count
) {
1146 urb
->dev
= port
->serial
->dev
;
1147 result
= usb_submit_urb(urb
, GFP_ATOMIC
);
1149 dev_err(&urb
->dev
->dev
, "%s - failed resubmitting"
1150 " read urb, error %d\n", __func__
, result
);
1156 static void pl2303_write_bulk_callback(struct urb
*urb
)
1158 struct usb_serial_port
*port
= urb
->context
;
1159 struct pl2303_private
*priv
= usb_get_serial_port_data(port
);
1161 int status
= urb
->status
;
1163 dbg("%s - port %d", __func__
, port
->number
);
1172 /* this urb is terminated, clean up */
1173 dbg("%s - urb shutting down with status: %d", __func__
,
1175 priv
->write_urb_in_use
= 0;
1178 /* error in the urb, so we have to resubmit it */
1179 dbg("%s - Overflow in write", __func__
);
1180 dbg("%s - nonzero write bulk status received: %d", __func__
,
1182 port
->write_urb
->transfer_buffer_length
= 1;
1183 port
->write_urb
->dev
= port
->serial
->dev
;
1184 result
= usb_submit_urb(port
->write_urb
, GFP_ATOMIC
);
1186 dev_err(&urb
->dev
->dev
, "%s - failed resubmitting write"
1187 " urb, error %d\n", __func__
, result
);
1192 priv
->write_urb_in_use
= 0;
1194 /* send any buffered data */
1198 /* All of the device info needed for the PL2303 SIO serial converter */
1199 static struct usb_serial_driver pl2303_device
= {
1201 .owner
= THIS_MODULE
,
1204 .id_table
= id_table
,
1205 .usb_driver
= &pl2303_driver
,
1207 .open
= pl2303_open
,
1208 .close
= pl2303_close
,
1209 .dtr_rts
= pl2303_dtr_rts
,
1210 .carrier_raised
= pl2303_carrier_raised
,
1211 .write
= pl2303_write
,
1212 .ioctl
= pl2303_ioctl
,
1213 .break_ctl
= pl2303_break_ctl
,
1214 .set_termios
= pl2303_set_termios
,
1215 .tiocmget
= pl2303_tiocmget
,
1216 .tiocmset
= pl2303_tiocmset
,
1217 .read_bulk_callback
= pl2303_read_bulk_callback
,
1218 .read_int_callback
= pl2303_read_int_callback
,
1219 .write_bulk_callback
= pl2303_write_bulk_callback
,
1220 .write_room
= pl2303_write_room
,
1221 .chars_in_buffer
= pl2303_chars_in_buffer
,
1222 .attach
= pl2303_startup
,
1223 .release
= pl2303_release
,
1226 static int __init
pl2303_init(void)
1230 retval
= usb_serial_register(&pl2303_device
);
1232 goto failed_usb_serial_register
;
1233 retval
= usb_register(&pl2303_driver
);
1235 goto failed_usb_register
;
1236 printk(KERN_INFO KBUILD_MODNAME
": " DRIVER_DESC
"\n");
1238 failed_usb_register
:
1239 usb_serial_deregister(&pl2303_device
);
1240 failed_usb_serial_register
:
1244 static void __exit
pl2303_exit(void)
1246 usb_deregister(&pl2303_driver
);
1247 usb_serial_deregister(&pl2303_device
);
1250 module_init(pl2303_init
);
1251 module_exit(pl2303_exit
);
1253 MODULE_DESCRIPTION(DRIVER_DESC
);
1254 MODULE_LICENSE("GPL");
1256 module_param(debug
, bool, S_IRUGO
| S_IWUSR
);
1257 MODULE_PARM_DESC(debug
, "Debug enabled or not");