1 /*
2 * Prolific PL2303 USB to serial adaptor driver
3 *
4 * Copyright (C) 2001-2007 Greg Kroah-Hartman (greg@kroah.com)
5 * Copyright (C) 2003 IBM Corp.
6 *
7 * Original driver for 2.2.x by anonymous
8 *
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.
12 *
13 * See Documentation/usb/usb-serial.txt for more information on using this
14 * driver
15 *
16 */
17
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>
32 #include "pl2303.h"
33
34 /*
35 * Version Information
36 */
37 #define DRIVER_DESC "Prolific PL2303 USB to serial adaptor driver"
38
39 static int debug;
40
41 #define PL2303_CLOSING_WAIT (30*HZ)
42
43 #define PL2303_BUF_SIZE 1024
44 #define PL2303_TMP_BUF_SIZE 1024
45
46 struct pl2303_buf {
47 unsigned int buf_size;
48 char *buf_buf;
49 char *buf_get;
50 char *buf_put;
51 };
52
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(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
63 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
64 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
65 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
66 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
67 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
68 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
69 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
70 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
71 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
72 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
73 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
74 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
75 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
76 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
77 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
78 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
81 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
82 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
83 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
84 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
85 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
86 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
87 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
88 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
89 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
90 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
91 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
92 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
93 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
94 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
95 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
96 { } /* Terminating entry */
97 };
98
99 MODULE_DEVICE_TABLE(usb, id_table);
100
101 static struct usb_driver pl2303_driver = {
102 .name = "pl2303",
103 .probe = usb_serial_probe,
104 .disconnect = usb_serial_disconnect,
105 .id_table = id_table,
106 .suspend = usb_serial_suspend,
107 .resume = usb_serial_resume,
108 .no_dynamic_id = 1,
109 .supports_autosuspend = 1,
110 };
111
112 #define SET_LINE_REQUEST_TYPE 0x21
113 #define SET_LINE_REQUEST 0x20
114
115 #define SET_CONTROL_REQUEST_TYPE 0x21
116 #define SET_CONTROL_REQUEST 0x22
117 #define CONTROL_DTR 0x01
118 #define CONTROL_RTS 0x02
119
120 #define BREAK_REQUEST_TYPE 0x21
121 #define BREAK_REQUEST 0x23
122 #define BREAK_ON 0xffff
123 #define BREAK_OFF 0x0000
124
125 #define GET_LINE_REQUEST_TYPE 0xa1
126 #define GET_LINE_REQUEST 0x21
127
128 #define VENDOR_WRITE_REQUEST_TYPE 0x40
129 #define VENDOR_WRITE_REQUEST 0x01
130
131 #define VENDOR_READ_REQUEST_TYPE 0xc0
132 #define VENDOR_READ_REQUEST 0x01
133
134 #define UART_STATE 0x08
135 #define UART_STATE_TRANSIENT_MASK 0x74
136 #define UART_DCD 0x01
137 #define UART_DSR 0x02
138 #define UART_BREAK_ERROR 0x04
139 #define UART_RING 0x08
140 #define UART_FRAME_ERROR 0x10
141 #define UART_PARITY_ERROR 0x20
142 #define UART_OVERRUN_ERROR 0x40
143 #define UART_CTS 0x80
144
145
146 enum pl2303_type {
147 type_0, /* don't know the difference between type 0 and */
148 type_1, /* type 1, until someone from prolific tells us... */
149 HX, /* HX version of the pl2303 chip */
150 };
151
152 struct pl2303_private {
153 spinlock_t lock;
154 struct pl2303_buf *buf;
155 int write_urb_in_use;
156 wait_queue_head_t delta_msr_wait;
157 u8 line_control;
158 u8 line_status;
159 enum pl2303_type type;
160 };
161
162 /*
163 * pl2303_buf_alloc
164 *
165 * Allocate a circular buffer and all associated memory.
166 */
pl2303_buf_alloc(unsigned int size)167 static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
168 {
169 struct pl2303_buf *pb;
170
171 if (size == 0)
172 return NULL;
173
174 pb = kmalloc(sizeof(struct pl2303_buf), GFP_KERNEL);
175 if (pb == NULL)
176 return NULL;
177
178 pb->buf_buf = kmalloc(size, GFP_KERNEL);
179 if (pb->buf_buf == NULL) {
180 kfree(pb);
181 return NULL;
182 }
183
184 pb->buf_size = size;
185 pb->buf_get = pb->buf_put = pb->buf_buf;
186
187 return pb;
188 }
189
190 /*
191 * pl2303_buf_free
192 *
193 * Free the buffer and all associated memory.
194 */
pl2303_buf_free(struct pl2303_buf * pb)195 static void pl2303_buf_free(struct pl2303_buf *pb)
196 {
197 if (pb) {
198 kfree(pb->buf_buf);
199 kfree(pb);
200 }
201 }
202
203 /*
204 * pl2303_buf_clear
205 *
206 * Clear out all data in the circular buffer.
207 */
pl2303_buf_clear(struct pl2303_buf * pb)208 static void pl2303_buf_clear(struct pl2303_buf *pb)
209 {
210 if (pb != NULL)
211 pb->buf_get = pb->buf_put;
212 /* equivalent to a get of all data available */
213 }
214
215 /*
216 * pl2303_buf_data_avail
217 *
218 * Return the number of bytes of data available in the circular
219 * buffer.
220 */
pl2303_buf_data_avail(struct pl2303_buf * pb)221 static unsigned int pl2303_buf_data_avail(struct pl2303_buf *pb)
222 {
223 if (pb == NULL)
224 return 0;
225
226 return (pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size;
227 }
228
229 /*
230 * pl2303_buf_space_avail
231 *
232 * Return the number of bytes of space available in the circular
233 * buffer.
234 */
pl2303_buf_space_avail(struct pl2303_buf * pb)235 static unsigned int pl2303_buf_space_avail(struct pl2303_buf *pb)
236 {
237 if (pb == NULL)
238 return 0;
239
240 return (pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size;
241 }
242
243 /*
244 * pl2303_buf_put
245 *
246 * Copy data data from a user buffer and put it into the circular buffer.
247 * Restrict to the amount of space available.
248 *
249 * Return the number of bytes copied.
250 */
pl2303_buf_put(struct pl2303_buf * pb,const char * buf,unsigned int count)251 static unsigned int pl2303_buf_put(struct pl2303_buf *pb, const char *buf,
252 unsigned int count)
253 {
254 unsigned int len;
255
256 if (pb == NULL)
257 return 0;
258
259 len = pl2303_buf_space_avail(pb);
260 if (count > len)
261 count = len;
262
263 if (count == 0)
264 return 0;
265
266 len = pb->buf_buf + pb->buf_size - pb->buf_put;
267 if (count > len) {
268 memcpy(pb->buf_put, buf, len);
269 memcpy(pb->buf_buf, buf+len, count - len);
270 pb->buf_put = pb->buf_buf + count - len;
271 } else {
272 memcpy(pb->buf_put, buf, count);
273 if (count < len)
274 pb->buf_put += count;
275 else /* count == len */
276 pb->buf_put = pb->buf_buf;
277 }
278
279 return count;
280 }
281
282 /*
283 * pl2303_buf_get
284 *
285 * Get data from the circular buffer and copy to the given buffer.
286 * Restrict to the amount of data available.
287 *
288 * Return the number of bytes copied.
289 */
pl2303_buf_get(struct pl2303_buf * pb,char * buf,unsigned int count)290 static unsigned int pl2303_buf_get(struct pl2303_buf *pb, char *buf,
291 unsigned int count)
292 {
293 unsigned int len;
294
295 if (pb == NULL)
296 return 0;
297
298 len = pl2303_buf_data_avail(pb);
299 if (count > len)
300 count = len;
301
302 if (count == 0)
303 return 0;
304
305 len = pb->buf_buf + pb->buf_size - pb->buf_get;
306 if (count > len) {
307 memcpy(buf, pb->buf_get, len);
308 memcpy(buf+len, pb->buf_buf, count - len);
309 pb->buf_get = pb->buf_buf + count - len;
310 } else {
311 memcpy(buf, pb->buf_get, count);
312 if (count < len)
313 pb->buf_get += count;
314 else /* count == len */
315 pb->buf_get = pb->buf_buf;
316 }
317
318 return count;
319 }
320
pl2303_vendor_read(__u16 value,__u16 index,struct usb_serial * serial,unsigned char * buf)321 static int pl2303_vendor_read(__u16 value, __u16 index,
322 struct usb_serial *serial, unsigned char *buf)
323 {
324 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
325 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
326 value, index, buf, 1, 100);
327 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
328 VENDOR_READ_REQUEST, value, index, res, buf[0]);
329 return res;
330 }
331
pl2303_vendor_write(__u16 value,__u16 index,struct usb_serial * serial)332 static int pl2303_vendor_write(__u16 value, __u16 index,
333 struct usb_serial *serial)
334 {
335 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
336 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
337 value, index, NULL, 0, 100);
338 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
339 VENDOR_WRITE_REQUEST, value, index, res);
340 return res;
341 }
342
pl2303_startup(struct usb_serial * serial)343 static int pl2303_startup(struct usb_serial *serial)
344 {
345 struct pl2303_private *priv;
346 enum pl2303_type type = type_0;
347 unsigned char *buf;
348 int i;
349
350 buf = kmalloc(10, GFP_KERNEL);
351 if (buf == NULL)
352 return -ENOMEM;
353
354 if (serial->dev->descriptor.bDeviceClass == 0x02)
355 type = type_0;
356 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
357 type = HX;
358 else if (serial->dev->descriptor.bDeviceClass == 0x00)
359 type = type_1;
360 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
361 type = type_1;
362 dbg("device type: %d", type);
363
364 for (i = 0; i < serial->num_ports; ++i) {
365 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
366 if (!priv)
367 goto cleanup;
368 spin_lock_init(&priv->lock);
369 priv->buf = pl2303_buf_alloc(PL2303_BUF_SIZE);
370 if (priv->buf == NULL) {
371 kfree(priv);
372 goto cleanup;
373 }
374 init_waitqueue_head(&priv->delta_msr_wait);
375 priv->type = type;
376 usb_set_serial_port_data(serial->port[i], priv);
377 }
378
379 pl2303_vendor_read(0x8484, 0, serial, buf);
380 pl2303_vendor_write(0x0404, 0, serial);
381 pl2303_vendor_read(0x8484, 0, serial, buf);
382 pl2303_vendor_read(0x8383, 0, serial, buf);
383 pl2303_vendor_read(0x8484, 0, serial, buf);
384 pl2303_vendor_write(0x0404, 1, serial);
385 pl2303_vendor_read(0x8484, 0, serial, buf);
386 pl2303_vendor_read(0x8383, 0, serial, buf);
387 pl2303_vendor_write(0, 1, serial);
388 pl2303_vendor_write(1, 0, serial);
389 if (type == HX)
390 pl2303_vendor_write(2, 0x44, serial);
391 else
392 pl2303_vendor_write(2, 0x24, serial);
393
394 kfree(buf);
395 return 0;
396
397 cleanup:
398 kfree(buf);
399 for (--i; i >= 0; --i) {
400 priv = usb_get_serial_port_data(serial->port[i]);
401 pl2303_buf_free(priv->buf);
402 kfree(priv);
403 usb_set_serial_port_data(serial->port[i], NULL);
404 }
405 return -ENOMEM;
406 }
407
set_control_lines(struct usb_device * dev,u8 value)408 static int set_control_lines(struct usb_device *dev, u8 value)
409 {
410 int retval;
411
412 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
413 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
414 value, 0, NULL, 0, 100);
415 dbg("%s - value = %d, retval = %d", __func__, value, retval);
416 return retval;
417 }
418
pl2303_send(struct usb_serial_port * port)419 static void pl2303_send(struct usb_serial_port *port)
420 {
421 int count, result;
422 struct pl2303_private *priv = usb_get_serial_port_data(port);
423 unsigned long flags;
424
425 dbg("%s - port %d", __func__, port->number);
426
427 spin_lock_irqsave(&priv->lock, flags);
428
429 if (priv->write_urb_in_use) {
430 spin_unlock_irqrestore(&priv->lock, flags);
431 return;
432 }
433
434 count = pl2303_buf_get(priv->buf, port->write_urb->transfer_buffer,
435 port->bulk_out_size);
436
437 if (count == 0) {
438 spin_unlock_irqrestore(&priv->lock, flags);
439 return;
440 }
441
442 priv->write_urb_in_use = 1;
443
444 spin_unlock_irqrestore(&priv->lock, flags);
445
446 usb_serial_debug_data(debug, &port->dev, __func__, count,
447 port->write_urb->transfer_buffer);
448
449 port->write_urb->transfer_buffer_length = count;
450 port->write_urb->dev = port->serial->dev;
451 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
452 if (result) {
453 dev_err(&port->dev, "%s - failed submitting write urb,"
454 " error %d\n", __func__, result);
455 priv->write_urb_in_use = 0;
456 /* TODO: reschedule pl2303_send */
457 }
458
459 usb_serial_port_softint(port);
460 }
461
pl2303_write(struct tty_struct * tty,struct usb_serial_port * port,const unsigned char * buf,int count)462 static int pl2303_write(struct tty_struct *tty, struct usb_serial_port *port,
463 const unsigned char *buf, int count)
464 {
465 struct pl2303_private *priv = usb_get_serial_port_data(port);
466 unsigned long flags;
467
468 dbg("%s - port %d, %d bytes", __func__, port->number, count);
469
470 if (!count)
471 return count;
472
473 spin_lock_irqsave(&priv->lock, flags);
474 count = pl2303_buf_put(priv->buf, buf, count);
475 spin_unlock_irqrestore(&priv->lock, flags);
476
477 pl2303_send(port);
478
479 return count;
480 }
481
pl2303_write_room(struct tty_struct * tty)482 static int pl2303_write_room(struct tty_struct *tty)
483 {
484 struct usb_serial_port *port = tty->driver_data;
485 struct pl2303_private *priv = usb_get_serial_port_data(port);
486 int room = 0;
487 unsigned long flags;
488
489 dbg("%s - port %d", __func__, port->number);
490
491 spin_lock_irqsave(&priv->lock, flags);
492 room = pl2303_buf_space_avail(priv->buf);
493 spin_unlock_irqrestore(&priv->lock, flags);
494
495 dbg("%s - returns %d", __func__, room);
496 return room;
497 }
498
pl2303_chars_in_buffer(struct tty_struct * tty)499 static int pl2303_chars_in_buffer(struct tty_struct *tty)
500 {
501 struct usb_serial_port *port = tty->driver_data;
502 struct pl2303_private *priv = usb_get_serial_port_data(port);
503 int chars = 0;
504 unsigned long flags;
505
506 dbg("%s - port %d", __func__, port->number);
507
508 spin_lock_irqsave(&priv->lock, flags);
509 chars = pl2303_buf_data_avail(priv->buf);
510 spin_unlock_irqrestore(&priv->lock, flags);
511
512 dbg("%s - returns %d", __func__, chars);
513 return chars;
514 }
515
pl2303_set_termios(struct tty_struct * tty,struct usb_serial_port * port,struct ktermios * old_termios)516 static void pl2303_set_termios(struct tty_struct *tty,
517 struct usb_serial_port *port, struct ktermios *old_termios)
518 {
519 struct usb_serial *serial = port->serial;
520 struct pl2303_private *priv = usb_get_serial_port_data(port);
521 unsigned long flags;
522 unsigned int cflag;
523 unsigned char *buf;
524 int baud;
525 int i;
526 u8 control;
527
528 dbg("%s - port %d", __func__, port->number);
529
530 /* The PL2303 is reported to lose bytes if you change
531 serial settings even to the same values as before. Thus
532 we actually need to filter in this specific case */
533
534 if (!tty_termios_hw_change(tty->termios, old_termios))
535 return;
536
537 cflag = tty->termios->c_cflag;
538
539 buf = kzalloc(7, GFP_KERNEL);
540 if (!buf) {
541 dev_err(&port->dev, "%s - out of memory.\n", __func__);
542 /* Report back no change occurred */
543 *tty->termios = *old_termios;
544 return;
545 }
546
547 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
548 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
549 0, 0, buf, 7, 100);
550 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
551 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
552
553 if (cflag & CSIZE) {
554 switch (cflag & CSIZE) {
555 case CS5:
556 buf[6] = 5;
557 break;
558 case CS6:
559 buf[6] = 6;
560 break;
561 case CS7:
562 buf[6] = 7;
563 break;
564 default:
565 case CS8:
566 buf[6] = 8;
567 break;
568 }
569 dbg("%s - data bits = %d", __func__, buf[6]);
570 }
571
572 baud = tty_get_baud_rate(tty);
573 dbg("%s - baud = %d", __func__, baud);
574 if (baud) {
575 buf[0] = baud & 0xff;
576 buf[1] = (baud >> 8) & 0xff;
577 buf[2] = (baud >> 16) & 0xff;
578 buf[3] = (baud >> 24) & 0xff;
579 }
580
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 */
584 if (cflag & CSTOPB) {
585 buf[4] = 2;
586 dbg("%s - stop bits = 2", __func__);
587 } else {
588 buf[4] = 0;
589 dbg("%s - stop bits = 1", __func__);
590 }
591
592 if (cflag & PARENB) {
593 /* For reference buf[5]=0 is none parity */
594 /* For reference buf[5]=1 is odd parity */
595 /* For reference buf[5]=2 is even parity */
596 /* For reference buf[5]=3 is mark parity */
597 /* For reference buf[5]=4 is space parity */
598 if (cflag & PARODD) {
599 buf[5] = 1;
600 dbg("%s - parity = odd", __func__);
601 } else {
602 buf[5] = 2;
603 dbg("%s - parity = even", __func__);
604 }
605 } else {
606 buf[5] = 0;
607 dbg("%s - parity = none", __func__);
608 }
609
610 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
611 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
612 0, 0, buf, 7, 100);
613 dbg("0x21:0x20:0:0 %d", i);
614
615 /* change control lines if we are switching to or from B0 */
616 spin_lock_irqsave(&priv->lock, flags);
617 control = priv->line_control;
618 if ((cflag & CBAUD) == B0)
619 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
620 else
621 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
622 if (control != priv->line_control) {
623 control = priv->line_control;
624 spin_unlock_irqrestore(&priv->lock, flags);
625 set_control_lines(serial->dev, control);
626 } else {
627 spin_unlock_irqrestore(&priv->lock, flags);
628 }
629
630 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
631
632 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
633 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
634 0, 0, buf, 7, 100);
635 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
636 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
637
638 if (cflag & CRTSCTS) {
639 if (priv->type == HX)
640 pl2303_vendor_write(0x0, 0x61, serial);
641 else
642 pl2303_vendor_write(0x0, 0x41, serial);
643 } else {
644 pl2303_vendor_write(0x0, 0x0, serial);
645 }
646
647 /* FIXME: Need to read back resulting baud rate */
648 if (baud)
649 tty_encode_baud_rate(tty, baud, baud);
650
651 kfree(buf);
652 }
653
pl2303_close(struct tty_struct * tty,struct usb_serial_port * port,struct file * filp)654 static void pl2303_close(struct tty_struct *tty,
655 struct usb_serial_port *port, struct file *filp)
656 {
657 struct pl2303_private *priv = usb_get_serial_port_data(port);
658 unsigned long flags;
659 unsigned int c_cflag;
660 int bps;
661 long timeout;
662 wait_queue_t wait;
663
664 dbg("%s - port %d", __func__, port->number);
665
666 /* wait for data to drain from the buffer */
667 spin_lock_irqsave(&priv->lock, flags);
668 timeout = PL2303_CLOSING_WAIT;
669 init_waitqueue_entry(&wait, current);
670 add_wait_queue(&tty->write_wait, &wait);
671 for (;;) {
672 set_current_state(TASK_INTERRUPTIBLE);
673 if (pl2303_buf_data_avail(priv->buf) == 0 ||
674 timeout == 0 || signal_pending(current) ||
675 port->serial->disconnected)
676 break;
677 spin_unlock_irqrestore(&priv->lock, flags);
678 timeout = schedule_timeout(timeout);
679 spin_lock_irqsave(&priv->lock, flags);
680 }
681 set_current_state(TASK_RUNNING);
682 remove_wait_queue(&tty->write_wait, &wait);
683 /* clear out any remaining data in the buffer */
684 pl2303_buf_clear(priv->buf);
685 spin_unlock_irqrestore(&priv->lock, flags);
686
687 /* wait for characters to drain from the device */
688 /* (this is long enough for the entire 256 byte */
689 /* pl2303 hardware buffer to drain with no flow */
690 /* control for data rates of 1200 bps or more, */
691 /* for lower rates we should really know how much */
692 /* data is in the buffer to compute a delay */
693 /* that is not unnecessarily long) */
694 bps = tty_get_baud_rate(tty);
695 if (bps > 1200)
696 timeout = max((HZ*2560)/bps, HZ/10);
697 else
698 timeout = 2*HZ;
699 schedule_timeout_interruptible(timeout);
700
701 /* shutdown our urbs */
702 dbg("%s - shutting down urbs", __func__);
703 usb_kill_urb(port->write_urb);
704 usb_kill_urb(port->read_urb);
705 usb_kill_urb(port->interrupt_in_urb);
706
707 if (tty) {
708 c_cflag = tty->termios->c_cflag;
709 if (c_cflag & HUPCL) {
710 /* drop DTR and RTS */
711 spin_lock_irqsave(&priv->lock, flags);
712 priv->line_control = 0;
713 spin_unlock_irqrestore(&priv->lock, flags);
714 set_control_lines(port->serial->dev, 0);
715 }
716 }
717 }
718
pl2303_open(struct tty_struct * tty,struct usb_serial_port * port,struct file * filp)719 static int pl2303_open(struct tty_struct *tty,
720 struct usb_serial_port *port, struct file *filp)
721 {
722 struct ktermios tmp_termios;
723 struct usb_serial *serial = port->serial;
724 struct pl2303_private *priv = usb_get_serial_port_data(port);
725 int result;
726
727 dbg("%s - port %d", __func__, port->number);
728
729 if (priv->type != HX) {
730 usb_clear_halt(serial->dev, port->write_urb->pipe);
731 usb_clear_halt(serial->dev, port->read_urb->pipe);
732 } else {
733 /* reset upstream data pipes */
734 pl2303_vendor_write(8, 0, serial);
735 pl2303_vendor_write(9, 0, serial);
736 }
737
738 /* Setup termios */
739 if (tty)
740 pl2303_set_termios(tty, port, &tmp_termios);
741
742 /* FIXME: need to assert RTS and DTR if CRTSCTS off */
743
744 dbg("%s - submitting read urb", __func__);
745 port->read_urb->dev = serial->dev;
746 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
747 if (result) {
748 dev_err(&port->dev, "%s - failed submitting read urb,"
749 " error %d\n", __func__, result);
750 pl2303_close(tty, port, NULL);
751 return -EPROTO;
752 }
753
754 dbg("%s - submitting interrupt urb", __func__);
755 port->interrupt_in_urb->dev = serial->dev;
756 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
757 if (result) {
758 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
759 " error %d\n", __func__, result);
760 pl2303_close(tty, port, NULL);
761 return -EPROTO;
762 }
763 return 0;
764 }
765
pl2303_tiocmset(struct tty_struct * tty,struct file * file,unsigned int set,unsigned int clear)766 static int pl2303_tiocmset(struct tty_struct *tty, struct file *file,
767 unsigned int set, unsigned int clear)
768 {
769 struct usb_serial_port *port = tty->driver_data;
770 struct pl2303_private *priv = usb_get_serial_port_data(port);
771 unsigned long flags;
772 u8 control;
773
774 if (!usb_get_intfdata(port->serial->interface))
775 return -ENODEV;
776
777 spin_lock_irqsave(&priv->lock, flags);
778 if (set & TIOCM_RTS)
779 priv->line_control |= CONTROL_RTS;
780 if (set & TIOCM_DTR)
781 priv->line_control |= CONTROL_DTR;
782 if (clear & TIOCM_RTS)
783 priv->line_control &= ~CONTROL_RTS;
784 if (clear & TIOCM_DTR)
785 priv->line_control &= ~CONTROL_DTR;
786 control = priv->line_control;
787 spin_unlock_irqrestore(&priv->lock, flags);
788
789 return set_control_lines(port->serial->dev, control);
790 }
791
pl2303_tiocmget(struct tty_struct * tty,struct file * file)792 static int pl2303_tiocmget(struct tty_struct *tty, struct file *file)
793 {
794 struct usb_serial_port *port = tty->driver_data;
795 struct pl2303_private *priv = usb_get_serial_port_data(port);
796 unsigned long flags;
797 unsigned int mcr;
798 unsigned int status;
799 unsigned int result;
800
801 dbg("%s (%d)", __func__, port->number);
802
803 if (!usb_get_intfdata(port->serial->interface))
804 return -ENODEV;
805
806 spin_lock_irqsave(&priv->lock, flags);
807 mcr = priv->line_control;
808 status = priv->line_status;
809 spin_unlock_irqrestore(&priv->lock, flags);
810
811 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
812 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
813 | ((status & UART_CTS) ? TIOCM_CTS : 0)
814 | ((status & UART_DSR) ? TIOCM_DSR : 0)
815 | ((status & UART_RING) ? TIOCM_RI : 0)
816 | ((status & UART_DCD) ? TIOCM_CD : 0);
817
818 dbg("%s - result = %x", __func__, result);
819
820 return result;
821 }
822
wait_modem_info(struct usb_serial_port * port,unsigned int arg)823 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
824 {
825 struct pl2303_private *priv = usb_get_serial_port_data(port);
826 unsigned long flags;
827 unsigned int prevstatus;
828 unsigned int status;
829 unsigned int changed;
830
831 spin_lock_irqsave(&priv->lock, flags);
832 prevstatus = priv->line_status;
833 spin_unlock_irqrestore(&priv->lock, flags);
834
835 while (1) {
836 interruptible_sleep_on(&priv->delta_msr_wait);
837 /* see if a signal did it */
838 if (signal_pending(current))
839 return -ERESTARTSYS;
840
841 spin_lock_irqsave(&priv->lock, flags);
842 status = priv->line_status;
843 spin_unlock_irqrestore(&priv->lock, flags);
844
845 changed = prevstatus ^ status;
846
847 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
848 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
849 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
850 ((arg & TIOCM_CTS) && (changed & UART_CTS))) {
851 return 0;
852 }
853 prevstatus = status;
854 }
855 /* NOTREACHED */
856 return 0;
857 }
858
pl2303_ioctl(struct tty_struct * tty,struct file * file,unsigned int cmd,unsigned long arg)859 static int pl2303_ioctl(struct tty_struct *tty, struct file *file,
860 unsigned int cmd, unsigned long arg)
861 {
862 struct usb_serial_port *port = tty->driver_data;
863 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
864
865 switch (cmd) {
866 case TIOCMIWAIT:
867 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
868 return wait_modem_info(port, arg);
869 default:
870 dbg("%s not supported = 0x%04x", __func__, cmd);
871 break;
872 }
873 return -ENOIOCTLCMD;
874 }
875
pl2303_break_ctl(struct tty_struct * tty,int break_state)876 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
877 {
878 struct usb_serial_port *port = tty->driver_data;
879 struct usb_serial *serial = port->serial;
880 u16 state;
881 int result;
882
883 dbg("%s - port %d", __func__, port->number);
884
885 if (break_state == 0)
886 state = BREAK_OFF;
887 else
888 state = BREAK_ON;
889 dbg("%s - turning break %s", __func__,
890 state == BREAK_OFF ? "off" : "on");
891
892 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
893 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
894 0, NULL, 0, 100);
895 if (result)
896 dbg("%s - error sending break = %d", __func__, result);
897 }
898
pl2303_shutdown(struct usb_serial * serial)899 static void pl2303_shutdown(struct usb_serial *serial)
900 {
901 int i;
902 struct pl2303_private *priv;
903
904 dbg("%s", __func__);
905
906 for (i = 0; i < serial->num_ports; ++i) {
907 priv = usb_get_serial_port_data(serial->port[i]);
908 if (priv) {
909 pl2303_buf_free(priv->buf);
910 kfree(priv);
911 usb_set_serial_port_data(serial->port[i], NULL);
912 }
913 }
914 }
915
pl2303_update_line_status(struct usb_serial_port * port,unsigned char * data,unsigned int actual_length)916 static void pl2303_update_line_status(struct usb_serial_port *port,
917 unsigned char *data,
918 unsigned int actual_length)
919 {
920
921 struct pl2303_private *priv = usb_get_serial_port_data(port);
922 unsigned long flags;
923 u8 status_idx = UART_STATE;
924 u8 length = UART_STATE + 1;
925 u16 idv, idp;
926
927 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
928 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
929
930
931 if (idv == SIEMENS_VENDOR_ID) {
932 if (idp == SIEMENS_PRODUCT_ID_X65 ||
933 idp == SIEMENS_PRODUCT_ID_SX1 ||
934 idp == SIEMENS_PRODUCT_ID_X75) {
935
936 length = 1;
937 status_idx = 0;
938 }
939 }
940
941 if (actual_length < length)
942 return;
943
944 /* Save off the uart status for others to look at */
945 spin_lock_irqsave(&priv->lock, flags);
946 priv->line_status = data[status_idx];
947 spin_unlock_irqrestore(&priv->lock, flags);
948 wake_up_interruptible(&priv->delta_msr_wait);
949 }
950
pl2303_read_int_callback(struct urb * urb)951 static void pl2303_read_int_callback(struct urb *urb)
952 {
953 struct usb_serial_port *port = urb->context;
954 unsigned char *data = urb->transfer_buffer;
955 unsigned int actual_length = urb->actual_length;
956 int status = urb->status;
957 int retval;
958
959 dbg("%s (%d)", __func__, port->number);
960
961 switch (status) {
962 case 0:
963 /* success */
964 break;
965 case -ECONNRESET:
966 case -ENOENT:
967 case -ESHUTDOWN:
968 /* this urb is terminated, clean up */
969 dbg("%s - urb shutting down with status: %d", __func__,
970 status);
971 return;
972 default:
973 dbg("%s - nonzero urb status received: %d", __func__,
974 status);
975 goto exit;
976 }
977
978 usb_serial_debug_data(debug, &port->dev, __func__,
979 urb->actual_length, urb->transfer_buffer);
980
981 pl2303_update_line_status(port, data, actual_length);
982
983 exit:
984 retval = usb_submit_urb(urb, GFP_ATOMIC);
985 if (retval)
986 dev_err(&urb->dev->dev,
987 "%s - usb_submit_urb failed with result %d\n",
988 __func__, retval);
989 }
990
pl2303_read_bulk_callback(struct urb * urb)991 static void pl2303_read_bulk_callback(struct urb *urb)
992 {
993 struct usb_serial_port *port = urb->context;
994 struct pl2303_private *priv = usb_get_serial_port_data(port);
995 struct tty_struct *tty;
996 unsigned char *data = urb->transfer_buffer;
997 unsigned long flags;
998 int i;
999 int result;
1000 int status = urb->status;
1001 u8 line_status;
1002 char tty_flag;
1003
1004 dbg("%s - port %d", __func__, port->number);
1005
1006 if (status) {
1007 dbg("%s - urb status = %d", __func__, status);
1008 if (!port->port.count) {
1009 dbg("%s - port is closed, exiting.", __func__);
1010 return;
1011 }
1012 if (status == -EPROTO) {
1013 /* PL2303 mysteriously fails with -EPROTO reschedule
1014 * the read */
1015 dbg("%s - caught -EPROTO, resubmitting the urb",
1016 __func__);
1017 urb->dev = port->serial->dev;
1018 result = usb_submit_urb(urb, GFP_ATOMIC);
1019 if (result)
1020 dev_err(&urb->dev->dev, "%s - failed"
1021 " resubmitting read urb, error %d\n",
1022 __func__, result);
1023 return;
1024 }
1025 dbg("%s - unable to handle the error, exiting.", __func__);
1026 return;
1027 }
1028
1029 usb_serial_debug_data(debug, &port->dev, __func__,
1030 urb->actual_length, data);
1031
1032 /* get tty_flag from status */
1033 tty_flag = TTY_NORMAL;
1034
1035 spin_lock_irqsave(&priv->lock, flags);
1036 line_status = priv->line_status;
1037 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1038 spin_unlock_irqrestore(&priv->lock, flags);
1039 wake_up_interruptible(&priv->delta_msr_wait);
1040
1041 /* break takes precedence over parity, */
1042 /* which takes precedence over framing errors */
1043 if (line_status & UART_BREAK_ERROR)
1044 tty_flag = TTY_BREAK;
1045 else if (line_status & UART_PARITY_ERROR)
1046 tty_flag = TTY_PARITY;
1047 else if (line_status & UART_FRAME_ERROR)
1048 tty_flag = TTY_FRAME;
1049 dbg("%s - tty_flag = %d", __func__, tty_flag);
1050
1051 tty = tty_port_tty_get(&port->port);
1052 if (tty && urb->actual_length) {
1053 tty_buffer_request_room(tty, urb->actual_length + 1);
1054 /* overrun is special, not associated with a char */
1055 if (line_status & UART_OVERRUN_ERROR)
1056 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1057 for (i = 0; i < urb->actual_length; ++i)
1058 tty_insert_flip_char(tty, data[i], tty_flag);
1059 tty_flip_buffer_push(tty);
1060 }
1061 tty_kref_put(tty);
1062 /* Schedule the next read _if_ we are still open */
1063 if (port->port.count) {
1064 urb->dev = port->serial->dev;
1065 result = usb_submit_urb(urb, GFP_ATOMIC);
1066 if (result)
1067 dev_err(&urb->dev->dev, "%s - failed resubmitting"
1068 " read urb, error %d\n", __func__, result);
1069 }
1070
1071 return;
1072 }
1073
pl2303_write_bulk_callback(struct urb * urb)1074 static void pl2303_write_bulk_callback(struct urb *urb)
1075 {
1076 struct usb_serial_port *port = urb->context;
1077 struct pl2303_private *priv = usb_get_serial_port_data(port);
1078 int result;
1079 int status = urb->status;
1080
1081 dbg("%s - port %d", __func__, port->number);
1082
1083 switch (status) {
1084 case 0:
1085 /* success */
1086 break;
1087 case -ECONNRESET:
1088 case -ENOENT:
1089 case -ESHUTDOWN:
1090 /* this urb is terminated, clean up */
1091 dbg("%s - urb shutting down with status: %d", __func__,
1092 status);
1093 priv->write_urb_in_use = 0;
1094 return;
1095 default:
1096 /* error in the urb, so we have to resubmit it */
1097 dbg("%s - Overflow in write", __func__);
1098 dbg("%s - nonzero write bulk status received: %d", __func__,
1099 status);
1100 port->write_urb->transfer_buffer_length = 1;
1101 port->write_urb->dev = port->serial->dev;
1102 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
1103 if (result)
1104 dev_err(&urb->dev->dev, "%s - failed resubmitting write"
1105 " urb, error %d\n", __func__, result);
1106 else
1107 return;
1108 }
1109
1110 priv->write_urb_in_use = 0;
1111
1112 /* send any buffered data */
1113 pl2303_send(port);
1114 }
1115
1116 /* All of the device info needed for the PL2303 SIO serial converter */
1117 static struct usb_serial_driver pl2303_device = {
1118 .driver = {
1119 .owner = THIS_MODULE,
1120 .name = "pl2303",
1121 },
1122 .id_table = id_table,
1123 .usb_driver = &pl2303_driver,
1124 .num_ports = 1,
1125 .open = pl2303_open,
1126 .close = pl2303_close,
1127 .write = pl2303_write,
1128 .ioctl = pl2303_ioctl,
1129 .break_ctl = pl2303_break_ctl,
1130 .set_termios = pl2303_set_termios,
1131 .tiocmget = pl2303_tiocmget,
1132 .tiocmset = pl2303_tiocmset,
1133 .read_bulk_callback = pl2303_read_bulk_callback,
1134 .read_int_callback = pl2303_read_int_callback,
1135 .write_bulk_callback = pl2303_write_bulk_callback,
1136 .write_room = pl2303_write_room,
1137 .chars_in_buffer = pl2303_chars_in_buffer,
1138 .attach = pl2303_startup,
1139 .shutdown = pl2303_shutdown,
1140 };
1141
pl2303_init(void)1142 static int __init pl2303_init(void)
1143 {
1144 int retval;
1145
1146 retval = usb_serial_register(&pl2303_device);
1147 if (retval)
1148 goto failed_usb_serial_register;
1149 retval = usb_register(&pl2303_driver);
1150 if (retval)
1151 goto failed_usb_register;
1152 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1153 return 0;
1154 failed_usb_register:
1155 usb_serial_deregister(&pl2303_device);
1156 failed_usb_serial_register:
1157 return retval;
1158 }
1159
pl2303_exit(void)1160 static void __exit pl2303_exit(void)
1161 {
1162 usb_deregister(&pl2303_driver);
1163 usb_serial_deregister(&pl2303_device);
1164 }
1165
1166 module_init(pl2303_init);
1167 module_exit(pl2303_exit);
1168
1169 MODULE_DESCRIPTION(DRIVER_DESC);
1170 MODULE_LICENSE("GPL");
1171
1172 module_param(debug, bool, S_IRUGO | S_IWUSR);
1173 MODULE_PARM_DESC(debug, "Debug enabled or not");
1174
1175