Loading...
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
39static int debug;
40
41#define PL2303_CLOSING_WAIT (30*HZ)
42
43static const struct usb_device_id id_table[] = {
44 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) },
45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
48 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
49 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
50 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
51 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
52 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
53 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
54 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
55 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
56 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
57 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
58 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
59 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
60 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
61 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
62 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
63 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
64 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
65 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
66 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
67 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
68 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
69 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
70 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
71 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
72 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
73 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
74 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
75 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
76 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
77 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
78 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
79 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
80 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
81 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
82 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
83 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
84 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
85 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
86 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
87 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
88 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_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(WINCHIPHEAD_VENDOR_ID, WINCHIPHEAD_USBSER_PRODUCT_ID) },
95 { } /* Terminating entry */
96};
97
98MODULE_DEVICE_TABLE(usb, id_table);
99
100static struct usb_driver pl2303_driver = {
101 .name = "pl2303",
102 .probe = usb_serial_probe,
103 .disconnect = usb_serial_disconnect,
104 .id_table = id_table,
105 .suspend = usb_serial_suspend,
106 .resume = usb_serial_resume,
107 .no_dynamic_id = 1,
108 .supports_autosuspend = 1,
109};
110
111#define SET_LINE_REQUEST_TYPE 0x21
112#define SET_LINE_REQUEST 0x20
113
114#define SET_CONTROL_REQUEST_TYPE 0x21
115#define SET_CONTROL_REQUEST 0x22
116#define CONTROL_DTR 0x01
117#define CONTROL_RTS 0x02
118
119#define BREAK_REQUEST_TYPE 0x21
120#define BREAK_REQUEST 0x23
121#define BREAK_ON 0xffff
122#define BREAK_OFF 0x0000
123
124#define GET_LINE_REQUEST_TYPE 0xa1
125#define GET_LINE_REQUEST 0x21
126
127#define VENDOR_WRITE_REQUEST_TYPE 0x40
128#define VENDOR_WRITE_REQUEST 0x01
129
130#define VENDOR_READ_REQUEST_TYPE 0xc0
131#define VENDOR_READ_REQUEST 0x01
132
133#define UART_STATE 0x08
134#define UART_STATE_TRANSIENT_MASK 0x74
135#define UART_DCD 0x01
136#define UART_DSR 0x02
137#define UART_BREAK_ERROR 0x04
138#define UART_RING 0x08
139#define UART_FRAME_ERROR 0x10
140#define UART_PARITY_ERROR 0x20
141#define UART_OVERRUN_ERROR 0x40
142#define UART_CTS 0x80
143
144
145enum pl2303_type {
146 type_0, /* don't know the difference between type 0 and */
147 type_1, /* type 1, until someone from prolific tells us... */
148 HX, /* HX version of the pl2303 chip */
149};
150
151struct pl2303_private {
152 spinlock_t lock;
153 wait_queue_head_t delta_msr_wait;
154 u8 line_control;
155 u8 line_status;
156 enum pl2303_type type;
157};
158
159static int pl2303_vendor_read(__u16 value, __u16 index,
160 struct usb_serial *serial, unsigned char *buf)
161{
162 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
163 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
164 value, index, buf, 1, 100);
165 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE,
166 VENDOR_READ_REQUEST, value, index, res, buf[0]);
167 return res;
168}
169
170static int pl2303_vendor_write(__u16 value, __u16 index,
171 struct usb_serial *serial)
172{
173 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
174 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
175 value, index, NULL, 0, 100);
176 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE,
177 VENDOR_WRITE_REQUEST, value, index, res);
178 return res;
179}
180
181static int pl2303_startup(struct usb_serial *serial)
182{
183 struct pl2303_private *priv;
184 enum pl2303_type type = type_0;
185 unsigned char *buf;
186 int i;
187
188 buf = kmalloc(10, GFP_KERNEL);
189 if (buf == NULL)
190 return -ENOMEM;
191
192 if (serial->dev->descriptor.bDeviceClass == 0x02)
193 type = type_0;
194 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
195 type = HX;
196 else if (serial->dev->descriptor.bDeviceClass == 0x00)
197 type = type_1;
198 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
199 type = type_1;
200 dbg("device type: %d", type);
201
202 for (i = 0; i < serial->num_ports; ++i) {
203 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL);
204 if (!priv)
205 goto cleanup;
206 spin_lock_init(&priv->lock);
207 init_waitqueue_head(&priv->delta_msr_wait);
208 priv->type = type;
209 usb_set_serial_port_data(serial->port[i], priv);
210 }
211
212 pl2303_vendor_read(0x8484, 0, serial, buf);
213 pl2303_vendor_write(0x0404, 0, serial);
214 pl2303_vendor_read(0x8484, 0, serial, buf);
215 pl2303_vendor_read(0x8383, 0, serial, buf);
216 pl2303_vendor_read(0x8484, 0, serial, buf);
217 pl2303_vendor_write(0x0404, 1, serial);
218 pl2303_vendor_read(0x8484, 0, serial, buf);
219 pl2303_vendor_read(0x8383, 0, serial, buf);
220 pl2303_vendor_write(0, 1, serial);
221 pl2303_vendor_write(1, 0, serial);
222 if (type == HX)
223 pl2303_vendor_write(2, 0x44, serial);
224 else
225 pl2303_vendor_write(2, 0x24, serial);
226
227 kfree(buf);
228 return 0;
229
230cleanup:
231 kfree(buf);
232 for (--i; i >= 0; --i) {
233 priv = usb_get_serial_port_data(serial->port[i]);
234 kfree(priv);
235 usb_set_serial_port_data(serial->port[i], NULL);
236 }
237 return -ENOMEM;
238}
239
240static int set_control_lines(struct usb_device *dev, u8 value)
241{
242 int retval;
243
244 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
245 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
246 value, 0, NULL, 0, 100);
247 dbg("%s - value = %d, retval = %d", __func__, value, retval);
248 return retval;
249}
250
251static void pl2303_set_termios(struct tty_struct *tty,
252 struct usb_serial_port *port, struct ktermios *old_termios)
253{
254 struct usb_serial *serial = port->serial;
255 struct pl2303_private *priv = usb_get_serial_port_data(port);
256 unsigned long flags;
257 unsigned int cflag;
258 unsigned char *buf;
259 int baud;
260 int i;
261 u8 control;
262 const int baud_sup[] = { 75, 150, 300, 600, 1200, 1800, 2400, 3600,
263 4800, 7200, 9600, 14400, 19200, 28800, 38400,
264 57600, 115200, 230400, 460800, 614400,
265 921600, 1228800, 2457600, 3000000, 6000000 };
266 int baud_floor, baud_ceil;
267 int k;
268
269 dbg("%s - port %d", __func__, port->number);
270
271 /* The PL2303 is reported to lose bytes if you change
272 serial settings even to the same values as before. Thus
273 we actually need to filter in this specific case */
274
275 if (!tty_termios_hw_change(tty->termios, old_termios))
276 return;
277
278 cflag = tty->termios->c_cflag;
279
280 buf = kzalloc(7, GFP_KERNEL);
281 if (!buf) {
282 dev_err(&port->dev, "%s - out of memory.\n", __func__);
283 /* Report back no change occurred */
284 *tty->termios = *old_termios;
285 return;
286 }
287
288 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
289 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
290 0, 0, buf, 7, 100);
291 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
292 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
293
294 if (cflag & CSIZE) {
295 switch (cflag & CSIZE) {
296 case CS5:
297 buf[6] = 5;
298 break;
299 case CS6:
300 buf[6] = 6;
301 break;
302 case CS7:
303 buf[6] = 7;
304 break;
305 default:
306 case CS8:
307 buf[6] = 8;
308 break;
309 }
310 dbg("%s - data bits = %d", __func__, buf[6]);
311 }
312
313 /* For reference buf[0]:buf[3] baud rate value */
314 /* NOTE: Only the values defined in baud_sup are supported !
315 * => if unsupported values are set, the PL2303 seems to use
316 * 9600 baud (at least my PL2303X always does)
317 */
318 baud = tty_get_baud_rate(tty);
319 dbg("%s - baud requested = %d", __func__, baud);
320 if (baud) {
321 /* Set baudrate to nearest supported value */
322 for (k=0; k<ARRAY_SIZE(baud_sup); k++) {
323 if (baud_sup[k] / baud) {
324 baud_ceil = baud_sup[k];
325 if (k==0) {
326 baud = baud_ceil;
327 } else {
328 baud_floor = baud_sup[k-1];
329 if ((baud_ceil % baud)
330 > (baud % baud_floor))
331 baud = baud_floor;
332 else
333 baud = baud_ceil;
334 }
335 break;
336 }
337 }
338 if (baud > 1228800) {
339 /* type_0, type_1 only support up to 1228800 baud */
340 if (priv->type != HX)
341 baud = 1228800;
342 else if (baud > 6000000)
343 baud = 6000000;
344 }
345 dbg("%s - baud set = %d", __func__, baud);
346 if (baud <= 115200) {
347 buf[0] = baud & 0xff;
348 buf[1] = (baud >> 8) & 0xff;
349 buf[2] = (baud >> 16) & 0xff;
350 buf[3] = (baud >> 24) & 0xff;
351 } else {
352 /* apparently the formula for higher speeds is:
353 * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
354 */
355 unsigned tmp = 12*1000*1000*32 / baud;
356 buf[3] = 0x80;
357 buf[2] = 0;
358 buf[1] = (tmp >= 256);
359 while (tmp >= 256) {
360 tmp >>= 2;
361 buf[1] <<= 1;
362 }
363 if (tmp > 256) {
364 tmp %= 256;
365 }
366 buf[0] = tmp;
367 }
368 }
369
370 /* For reference buf[4]=0 is 1 stop bits */
371 /* For reference buf[4]=1 is 1.5 stop bits */
372 /* For reference buf[4]=2 is 2 stop bits */
373 if (cflag & CSTOPB) {
374 /* NOTE: Comply with "real" UARTs / RS232:
375 * use 1.5 instead of 2 stop bits with 5 data bits
376 */
377 if ((cflag & CSIZE) == CS5) {
378 buf[4] = 1;
379 dbg("%s - stop bits = 1.5", __func__);
380 } else {
381 buf[4] = 2;
382 dbg("%s - stop bits = 2", __func__);
383 }
384 } else {
385 buf[4] = 0;
386 dbg("%s - stop bits = 1", __func__);
387 }
388
389 if (cflag & PARENB) {
390 /* For reference buf[5]=0 is none parity */
391 /* For reference buf[5]=1 is odd parity */
392 /* For reference buf[5]=2 is even parity */
393 /* For reference buf[5]=3 is mark parity */
394 /* For reference buf[5]=4 is space parity */
395 if (cflag & PARODD) {
396 if (cflag & CMSPAR) {
397 buf[5] = 3;
398 dbg("%s - parity = mark", __func__);
399 } else {
400 buf[5] = 1;
401 dbg("%s - parity = odd", __func__);
402 }
403 } else {
404 if (cflag & CMSPAR) {
405 buf[5] = 4;
406 dbg("%s - parity = space", __func__);
407 } else {
408 buf[5] = 2;
409 dbg("%s - parity = even", __func__);
410 }
411 }
412 } else {
413 buf[5] = 0;
414 dbg("%s - parity = none", __func__);
415 }
416
417 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
418 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
419 0, 0, buf, 7, 100);
420 dbg("0x21:0x20:0:0 %d", i);
421
422 /* change control lines if we are switching to or from B0 */
423 spin_lock_irqsave(&priv->lock, flags);
424 control = priv->line_control;
425 if ((cflag & CBAUD) == B0)
426 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
427 else
428 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
429 if (control != priv->line_control) {
430 control = priv->line_control;
431 spin_unlock_irqrestore(&priv->lock, flags);
432 set_control_lines(serial->dev, control);
433 } else {
434 spin_unlock_irqrestore(&priv->lock, flags);
435 }
436
437 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
438
439 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
440 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
441 0, 0, buf, 7, 100);
442 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i,
443 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
444
445 if (cflag & CRTSCTS) {
446 if (priv->type == HX)
447 pl2303_vendor_write(0x0, 0x61, serial);
448 else
449 pl2303_vendor_write(0x0, 0x41, serial);
450 } else {
451 pl2303_vendor_write(0x0, 0x0, serial);
452 }
453
454 /* Save resulting baud rate */
455 if (baud)
456 tty_encode_baud_rate(tty, baud, baud);
457
458 kfree(buf);
459}
460
461static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
462{
463 struct pl2303_private *priv = usb_get_serial_port_data(port);
464 unsigned long flags;
465 u8 control;
466
467 spin_lock_irqsave(&priv->lock, flags);
468 /* Change DTR and RTS */
469 if (on)
470 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
471 else
472 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
473 control = priv->line_control;
474 spin_unlock_irqrestore(&priv->lock, flags);
475 set_control_lines(port->serial->dev, control);
476}
477
478static void pl2303_close(struct usb_serial_port *port)
479{
480 dbg("%s - port %d", __func__, port->number);
481
482 usb_serial_generic_close(port);
483 usb_kill_urb(port->interrupt_in_urb);
484}
485
486static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
487{
488 struct ktermios tmp_termios;
489 struct usb_serial *serial = port->serial;
490 struct pl2303_private *priv = usb_get_serial_port_data(port);
491 int result;
492
493 dbg("%s - port %d", __func__, port->number);
494
495 if (priv->type != HX) {
496 usb_clear_halt(serial->dev, port->write_urb->pipe);
497 usb_clear_halt(serial->dev, port->read_urb->pipe);
498 } else {
499 /* reset upstream data pipes */
500 pl2303_vendor_write(8, 0, serial);
501 pl2303_vendor_write(9, 0, serial);
502 }
503
504 /* Setup termios */
505 if (tty)
506 pl2303_set_termios(tty, port, &tmp_termios);
507
508 dbg("%s - submitting read urb", __func__);
509 result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL);
510 if (result) {
511 pl2303_close(port);
512 return -EPROTO;
513 }
514
515 dbg("%s - submitting interrupt urb", __func__);
516 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
517 if (result) {
518 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
519 " error %d\n", __func__, result);
520 pl2303_close(port);
521 return -EPROTO;
522 }
523 port->port.drain_delay = 256;
524 return 0;
525}
526
527static int pl2303_tiocmset(struct tty_struct *tty,
528 unsigned int set, unsigned int clear)
529{
530 struct usb_serial_port *port = tty->driver_data;
531 struct pl2303_private *priv = usb_get_serial_port_data(port);
532 unsigned long flags;
533 u8 control;
534
535 if (!usb_get_intfdata(port->serial->interface))
536 return -ENODEV;
537
538 spin_lock_irqsave(&priv->lock, flags);
539 if (set & TIOCM_RTS)
540 priv->line_control |= CONTROL_RTS;
541 if (set & TIOCM_DTR)
542 priv->line_control |= CONTROL_DTR;
543 if (clear & TIOCM_RTS)
544 priv->line_control &= ~CONTROL_RTS;
545 if (clear & TIOCM_DTR)
546 priv->line_control &= ~CONTROL_DTR;
547 control = priv->line_control;
548 spin_unlock_irqrestore(&priv->lock, flags);
549
550 return set_control_lines(port->serial->dev, control);
551}
552
553static int pl2303_tiocmget(struct tty_struct *tty)
554{
555 struct usb_serial_port *port = tty->driver_data;
556 struct pl2303_private *priv = usb_get_serial_port_data(port);
557 unsigned long flags;
558 unsigned int mcr;
559 unsigned int status;
560 unsigned int result;
561
562 dbg("%s (%d)", __func__, port->number);
563
564 if (!usb_get_intfdata(port->serial->interface))
565 return -ENODEV;
566
567 spin_lock_irqsave(&priv->lock, flags);
568 mcr = priv->line_control;
569 status = priv->line_status;
570 spin_unlock_irqrestore(&priv->lock, flags);
571
572 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
573 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
574 | ((status & UART_CTS) ? TIOCM_CTS : 0)
575 | ((status & UART_DSR) ? TIOCM_DSR : 0)
576 | ((status & UART_RING) ? TIOCM_RI : 0)
577 | ((status & UART_DCD) ? TIOCM_CD : 0);
578
579 dbg("%s - result = %x", __func__, result);
580
581 return result;
582}
583
584static int pl2303_carrier_raised(struct usb_serial_port *port)
585{
586 struct pl2303_private *priv = usb_get_serial_port_data(port);
587 if (priv->line_status & UART_DCD)
588 return 1;
589 return 0;
590}
591
592static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
593{
594 struct pl2303_private *priv = usb_get_serial_port_data(port);
595 unsigned long flags;
596 unsigned int prevstatus;
597 unsigned int status;
598 unsigned int changed;
599
600 spin_lock_irqsave(&priv->lock, flags);
601 prevstatus = priv->line_status;
602 spin_unlock_irqrestore(&priv->lock, flags);
603
604 while (1) {
605 interruptible_sleep_on(&priv->delta_msr_wait);
606 /* see if a signal did it */
607 if (signal_pending(current))
608 return -ERESTARTSYS;
609
610 spin_lock_irqsave(&priv->lock, flags);
611 status = priv->line_status;
612 spin_unlock_irqrestore(&priv->lock, flags);
613
614 changed = prevstatus ^ status;
615
616 if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
617 ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
618 ((arg & TIOCM_CD) && (changed & UART_DCD)) ||
619 ((arg & TIOCM_CTS) && (changed & UART_CTS))) {
620 return 0;
621 }
622 prevstatus = status;
623 }
624 /* NOTREACHED */
625 return 0;
626}
627
628static int pl2303_ioctl(struct tty_struct *tty,
629 unsigned int cmd, unsigned long arg)
630{
631 struct serial_struct ser;
632 struct usb_serial_port *port = tty->driver_data;
633 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
634
635 switch (cmd) {
636 case TIOCGSERIAL:
637 memset(&ser, 0, sizeof ser);
638 ser.type = PORT_16654;
639 ser.line = port->serial->minor;
640 ser.port = port->number;
641 ser.baud_base = 460800;
642
643 if (copy_to_user((void __user *)arg, &ser, sizeof ser))
644 return -EFAULT;
645
646 return 0;
647
648 case TIOCMIWAIT:
649 dbg("%s (%d) TIOCMIWAIT", __func__, port->number);
650 return wait_modem_info(port, arg);
651 default:
652 dbg("%s not supported = 0x%04x", __func__, cmd);
653 break;
654 }
655 return -ENOIOCTLCMD;
656}
657
658static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
659{
660 struct usb_serial_port *port = tty->driver_data;
661 struct usb_serial *serial = port->serial;
662 u16 state;
663 int result;
664
665 dbg("%s - port %d", __func__, port->number);
666
667 if (break_state == 0)
668 state = BREAK_OFF;
669 else
670 state = BREAK_ON;
671 dbg("%s - turning break %s", __func__,
672 state == BREAK_OFF ? "off" : "on");
673
674 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
675 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
676 0, NULL, 0, 100);
677 if (result)
678 dbg("%s - error sending break = %d", __func__, result);
679}
680
681static void pl2303_release(struct usb_serial *serial)
682{
683 int i;
684 struct pl2303_private *priv;
685
686 dbg("%s", __func__);
687
688 for (i = 0; i < serial->num_ports; ++i) {
689 priv = usb_get_serial_port_data(serial->port[i]);
690 kfree(priv);
691 }
692}
693
694static void pl2303_update_line_status(struct usb_serial_port *port,
695 unsigned char *data,
696 unsigned int actual_length)
697{
698
699 struct pl2303_private *priv = usb_get_serial_port_data(port);
700 struct tty_struct *tty;
701 unsigned long flags;
702 u8 status_idx = UART_STATE;
703 u8 length = UART_STATE + 1;
704 u8 prev_line_status;
705 u16 idv, idp;
706
707 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
708 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
709
710
711 if (idv == SIEMENS_VENDOR_ID) {
712 if (idp == SIEMENS_PRODUCT_ID_X65 ||
713 idp == SIEMENS_PRODUCT_ID_SX1 ||
714 idp == SIEMENS_PRODUCT_ID_X75) {
715
716 length = 1;
717 status_idx = 0;
718 }
719 }
720
721 if (actual_length < length)
722 return;
723
724 /* Save off the uart status for others to look at */
725 spin_lock_irqsave(&priv->lock, flags);
726 prev_line_status = priv->line_status;
727 priv->line_status = data[status_idx];
728 spin_unlock_irqrestore(&priv->lock, flags);
729 if (priv->line_status & UART_BREAK_ERROR)
730 usb_serial_handle_break(port);
731 wake_up_interruptible(&priv->delta_msr_wait);
732
733 tty = tty_port_tty_get(&port->port);
734 if (!tty)
735 return;
736 if ((priv->line_status ^ prev_line_status) & UART_DCD)
737 usb_serial_handle_dcd_change(port, tty,
738 priv->line_status & UART_DCD);
739 tty_kref_put(tty);
740}
741
742static void pl2303_read_int_callback(struct urb *urb)
743{
744 struct usb_serial_port *port = urb->context;
745 unsigned char *data = urb->transfer_buffer;
746 unsigned int actual_length = urb->actual_length;
747 int status = urb->status;
748 int retval;
749
750 dbg("%s (%d)", __func__, port->number);
751
752 switch (status) {
753 case 0:
754 /* success */
755 break;
756 case -ECONNRESET:
757 case -ENOENT:
758 case -ESHUTDOWN:
759 /* this urb is terminated, clean up */
760 dbg("%s - urb shutting down with status: %d", __func__,
761 status);
762 return;
763 default:
764 dbg("%s - nonzero urb status received: %d", __func__,
765 status);
766 goto exit;
767 }
768
769 usb_serial_debug_data(debug, &port->dev, __func__,
770 urb->actual_length, urb->transfer_buffer);
771
772 pl2303_update_line_status(port, data, actual_length);
773
774exit:
775 retval = usb_submit_urb(urb, GFP_ATOMIC);
776 if (retval)
777 dev_err(&urb->dev->dev,
778 "%s - usb_submit_urb failed with result %d\n",
779 __func__, retval);
780}
781
782static void pl2303_process_read_urb(struct urb *urb)
783{
784 struct usb_serial_port *port = urb->context;
785 struct pl2303_private *priv = usb_get_serial_port_data(port);
786 struct tty_struct *tty;
787 unsigned char *data = urb->transfer_buffer;
788 char tty_flag = TTY_NORMAL;
789 unsigned long flags;
790 u8 line_status;
791 int i;
792
793 /* update line status */
794 spin_lock_irqsave(&priv->lock, flags);
795 line_status = priv->line_status;
796 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
797 spin_unlock_irqrestore(&priv->lock, flags);
798 wake_up_interruptible(&priv->delta_msr_wait);
799
800 if (!urb->actual_length)
801 return;
802
803 tty = tty_port_tty_get(&port->port);
804 if (!tty)
805 return;
806
807 /* break takes precedence over parity, */
808 /* which takes precedence over framing errors */
809 if (line_status & UART_BREAK_ERROR)
810 tty_flag = TTY_BREAK;
811 else if (line_status & UART_PARITY_ERROR)
812 tty_flag = TTY_PARITY;
813 else if (line_status & UART_FRAME_ERROR)
814 tty_flag = TTY_FRAME;
815 dbg("%s - tty_flag = %d", __func__, tty_flag);
816
817 /* overrun is special, not associated with a char */
818 if (line_status & UART_OVERRUN_ERROR)
819 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
820
821 if (port->port.console && port->sysrq) {
822 for (i = 0; i < urb->actual_length; ++i)
823 if (!usb_serial_handle_sysrq_char(port, data[i]))
824 tty_insert_flip_char(tty, data[i], tty_flag);
825 } else {
826 tty_insert_flip_string_fixed_flag(tty, data, tty_flag,
827 urb->actual_length);
828 }
829
830 tty_flip_buffer_push(tty);
831 tty_kref_put(tty);
832}
833
834/* All of the device info needed for the PL2303 SIO serial converter */
835static struct usb_serial_driver pl2303_device = {
836 .driver = {
837 .owner = THIS_MODULE,
838 .name = "pl2303",
839 },
840 .id_table = id_table,
841 .usb_driver = &pl2303_driver,
842 .num_ports = 1,
843 .bulk_in_size = 256,
844 .bulk_out_size = 256,
845 .open = pl2303_open,
846 .close = pl2303_close,
847 .dtr_rts = pl2303_dtr_rts,
848 .carrier_raised = pl2303_carrier_raised,
849 .ioctl = pl2303_ioctl,
850 .break_ctl = pl2303_break_ctl,
851 .set_termios = pl2303_set_termios,
852 .tiocmget = pl2303_tiocmget,
853 .tiocmset = pl2303_tiocmset,
854 .process_read_urb = pl2303_process_read_urb,
855 .read_int_callback = pl2303_read_int_callback,
856 .attach = pl2303_startup,
857 .release = pl2303_release,
858};
859
860static int __init pl2303_init(void)
861{
862 int retval;
863
864 retval = usb_serial_register(&pl2303_device);
865 if (retval)
866 goto failed_usb_serial_register;
867 retval = usb_register(&pl2303_driver);
868 if (retval)
869 goto failed_usb_register;
870 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
871 return 0;
872failed_usb_register:
873 usb_serial_deregister(&pl2303_device);
874failed_usb_serial_register:
875 return retval;
876}
877
878static void __exit pl2303_exit(void)
879{
880 usb_deregister(&pl2303_driver);
881 usb_serial_deregister(&pl2303_device);
882}
883
884module_init(pl2303_init);
885module_exit(pl2303_exit);
886
887MODULE_DESCRIPTION(DRIVER_DESC);
888MODULE_LICENSE("GPL");
889
890module_param(debug, bool, S_IRUGO | S_IWUSR);
891MODULE_PARM_DESC(debug, "Debug enabled or not");
892
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Prolific PL2303 USB to serial adaptor driver
4 *
5 * Copyright (C) 2001-2007 Greg Kroah-Hartman (greg@kroah.com)
6 * Copyright (C) 2003 IBM Corp.
7 *
8 * Original driver for 2.2.x by anonymous
9 *
10 * See Documentation/usb/usb-serial.rst for more information on using this
11 * driver
12 */
13
14#include <linux/kernel.h>
15#include <linux/errno.h>
16#include <linux/slab.h>
17#include <linux/tty.h>
18#include <linux/tty_driver.h>
19#include <linux/tty_flip.h>
20#include <linux/serial.h>
21#include <linux/module.h>
22#include <linux/moduleparam.h>
23#include <linux/spinlock.h>
24#include <linux/uaccess.h>
25#include <linux/usb.h>
26#include <linux/usb/serial.h>
27#include <asm/unaligned.h>
28#include "pl2303.h"
29
30
31#define PL2303_QUIRK_UART_STATE_IDX0 BIT(0)
32#define PL2303_QUIRK_LEGACY BIT(1)
33#define PL2303_QUIRK_ENDPOINT_HACK BIT(2)
34
35static const struct usb_device_id id_table[] = {
36 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID),
37 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
38 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
39 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
40 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
41 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_CHILITAG) },
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(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_TB) },
50 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
51 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
52 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID),
53 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
54 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC485),
55 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
56 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC232B),
57 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
58 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID2) },
59 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
60 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
61 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
62 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
63 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) },
64 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
65 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
66 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
67 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
68 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
69 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
70 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
71 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
72 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
73 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
74 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
75 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75),
76 .driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
77 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81),
78 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
79 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
80 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
81 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
82 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
83 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) },
84 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) },
85 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) },
86 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) },
87 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) },
88 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID),
89 .driver_info = PL2303_QUIRK_ENDPOINT_HACK },
90 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
91 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
92 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
93 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
94 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
95 { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },
96 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
97 { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },
98 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
99 { USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) },
100 { USB_DEVICE(HP_VENDOR_ID, HP_LM920_PRODUCT_ID) },
101 { USB_DEVICE(HP_VENDOR_ID, HP_LM940_PRODUCT_ID) },
102 { USB_DEVICE(HP_VENDOR_ID, HP_TD620_PRODUCT_ID) },
103 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
104 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
105 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
106 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
107 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
108 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
109 { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
110 { } /* Terminating entry */
111};
112
113MODULE_DEVICE_TABLE(usb, id_table);
114
115#define SET_LINE_REQUEST_TYPE 0x21
116#define SET_LINE_REQUEST 0x20
117
118#define SET_CONTROL_REQUEST_TYPE 0x21
119#define SET_CONTROL_REQUEST 0x22
120#define CONTROL_DTR 0x01
121#define CONTROL_RTS 0x02
122
123#define BREAK_REQUEST_TYPE 0x21
124#define BREAK_REQUEST 0x23
125#define BREAK_ON 0xffff
126#define BREAK_OFF 0x0000
127
128#define GET_LINE_REQUEST_TYPE 0xa1
129#define GET_LINE_REQUEST 0x21
130
131#define VENDOR_WRITE_REQUEST_TYPE 0x40
132#define VENDOR_WRITE_REQUEST 0x01
133
134#define VENDOR_READ_REQUEST_TYPE 0xc0
135#define VENDOR_READ_REQUEST 0x01
136
137#define UART_STATE_INDEX 8
138#define UART_STATE_MSR_MASK 0x8b
139#define UART_STATE_TRANSIENT_MASK 0x74
140#define UART_DCD 0x01
141#define UART_DSR 0x02
142#define UART_BREAK_ERROR 0x04
143#define UART_RING 0x08
144#define UART_FRAME_ERROR 0x10
145#define UART_PARITY_ERROR 0x20
146#define UART_OVERRUN_ERROR 0x40
147#define UART_CTS 0x80
148
149#define PL2303_FLOWCTRL_MASK 0xf0
150
151static void pl2303_set_break(struct usb_serial_port *port, bool enable);
152
153enum pl2303_type {
154 TYPE_01, /* Type 0 and 1 (difference unknown) */
155 TYPE_HX, /* HX version of the pl2303 chip */
156 TYPE_COUNT
157};
158
159struct pl2303_type_data {
160 speed_t max_baud_rate;
161 unsigned long quirks;
162 unsigned int no_autoxonxoff:1;
163};
164
165struct pl2303_serial_private {
166 const struct pl2303_type_data *type;
167 unsigned long quirks;
168};
169
170struct pl2303_private {
171 spinlock_t lock;
172 u8 line_control;
173 u8 line_status;
174
175 u8 line_settings[7];
176};
177
178static const struct pl2303_type_data pl2303_type_data[TYPE_COUNT] = {
179 [TYPE_01] = {
180 .max_baud_rate = 1228800,
181 .quirks = PL2303_QUIRK_LEGACY,
182 .no_autoxonxoff = true,
183 },
184 [TYPE_HX] = {
185 .max_baud_rate = 12000000,
186 },
187};
188
189static int pl2303_vendor_read(struct usb_serial *serial, u16 value,
190 unsigned char buf[1])
191{
192 struct device *dev = &serial->interface->dev;
193 int res;
194
195 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
196 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
197 value, 0, buf, 1, 100);
198 if (res != 1) {
199 dev_err(dev, "%s - failed to read [%04x]: %d\n", __func__,
200 value, res);
201 if (res >= 0)
202 res = -EIO;
203
204 return res;
205 }
206
207 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, buf[0]);
208
209 return 0;
210}
211
212static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index)
213{
214 struct device *dev = &serial->interface->dev;
215 int res;
216
217 dev_dbg(dev, "%s - [%04x] = %02x\n", __func__, value, index);
218
219 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
220 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
221 value, index, NULL, 0, 100);
222 if (res) {
223 dev_err(dev, "%s - failed to write [%04x]: %d\n", __func__,
224 value, res);
225 return res;
226 }
227
228 return 0;
229}
230
231static int pl2303_update_reg(struct usb_serial *serial, u8 reg, u8 mask, u8 val)
232{
233 int ret = 0;
234 u8 *buf;
235
236 buf = kmalloc(1, GFP_KERNEL);
237 if (!buf)
238 return -ENOMEM;
239
240 ret = pl2303_vendor_read(serial, reg | 0x80, buf);
241 if (ret)
242 goto out_free;
243
244 *buf &= ~mask;
245 *buf |= val & mask;
246
247 ret = pl2303_vendor_write(serial, reg, *buf);
248out_free:
249 kfree(buf);
250
251 return ret;
252}
253
254static int pl2303_probe(struct usb_serial *serial,
255 const struct usb_device_id *id)
256{
257 usb_set_serial_data(serial, (void *)id->driver_info);
258
259 return 0;
260}
261
262/*
263 * Use interrupt endpoint from first interface if available.
264 *
265 * This is needed due to the looney way its endpoints are set up.
266 */
267static int pl2303_endpoint_hack(struct usb_serial *serial,
268 struct usb_serial_endpoints *epds)
269{
270 struct usb_interface *interface = serial->interface;
271 struct usb_device *dev = serial->dev;
272 struct device *ddev = &interface->dev;
273 struct usb_host_interface *iface_desc;
274 struct usb_endpoint_descriptor *endpoint;
275 unsigned int i;
276
277 if (interface == dev->actconfig->interface[0])
278 return 0;
279
280 /* check out the endpoints of the other interface */
281 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
282
283 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
284 endpoint = &iface_desc->endpoint[i].desc;
285
286 if (!usb_endpoint_is_int_in(endpoint))
287 continue;
288
289 dev_dbg(ddev, "found interrupt in on separate interface\n");
290 if (epds->num_interrupt_in < ARRAY_SIZE(epds->interrupt_in))
291 epds->interrupt_in[epds->num_interrupt_in++] = endpoint;
292 }
293
294 return 0;
295}
296
297static int pl2303_calc_num_ports(struct usb_serial *serial,
298 struct usb_serial_endpoints *epds)
299{
300 unsigned long quirks = (unsigned long)usb_get_serial_data(serial);
301 struct device *dev = &serial->interface->dev;
302 int ret;
303
304 if (quirks & PL2303_QUIRK_ENDPOINT_HACK) {
305 ret = pl2303_endpoint_hack(serial, epds);
306 if (ret)
307 return ret;
308 }
309
310 if (epds->num_interrupt_in < 1) {
311 dev_err(dev, "required interrupt-in endpoint missing\n");
312 return -ENODEV;
313 }
314
315 return 1;
316}
317
318static int pl2303_startup(struct usb_serial *serial)
319{
320 struct pl2303_serial_private *spriv;
321 enum pl2303_type type = TYPE_01;
322 unsigned char *buf;
323
324 spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
325 if (!spriv)
326 return -ENOMEM;
327
328 buf = kmalloc(1, GFP_KERNEL);
329 if (!buf) {
330 kfree(spriv);
331 return -ENOMEM;
332 }
333
334 if (serial->dev->descriptor.bDeviceClass == 0x02)
335 type = TYPE_01; /* type 0 */
336 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
337 type = TYPE_HX;
338 else if (serial->dev->descriptor.bDeviceClass == 0x00)
339 type = TYPE_01; /* type 1 */
340 else if (serial->dev->descriptor.bDeviceClass == 0xFF)
341 type = TYPE_01; /* type 1 */
342 dev_dbg(&serial->interface->dev, "device type: %d\n", type);
343
344 spriv->type = &pl2303_type_data[type];
345 spriv->quirks = (unsigned long)usb_get_serial_data(serial);
346 spriv->quirks |= spriv->type->quirks;
347
348 usb_set_serial_data(serial, spriv);
349
350 pl2303_vendor_read(serial, 0x8484, buf);
351 pl2303_vendor_write(serial, 0x0404, 0);
352 pl2303_vendor_read(serial, 0x8484, buf);
353 pl2303_vendor_read(serial, 0x8383, buf);
354 pl2303_vendor_read(serial, 0x8484, buf);
355 pl2303_vendor_write(serial, 0x0404, 1);
356 pl2303_vendor_read(serial, 0x8484, buf);
357 pl2303_vendor_read(serial, 0x8383, buf);
358 pl2303_vendor_write(serial, 0, 1);
359 pl2303_vendor_write(serial, 1, 0);
360 if (spriv->quirks & PL2303_QUIRK_LEGACY)
361 pl2303_vendor_write(serial, 2, 0x24);
362 else
363 pl2303_vendor_write(serial, 2, 0x44);
364
365 kfree(buf);
366
367 return 0;
368}
369
370static void pl2303_release(struct usb_serial *serial)
371{
372 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
373
374 kfree(spriv);
375}
376
377static int pl2303_port_probe(struct usb_serial_port *port)
378{
379 struct pl2303_private *priv;
380
381 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
382 if (!priv)
383 return -ENOMEM;
384
385 spin_lock_init(&priv->lock);
386
387 usb_set_serial_port_data(port, priv);
388
389 port->port.drain_delay = 256;
390
391 return 0;
392}
393
394static int pl2303_port_remove(struct usb_serial_port *port)
395{
396 struct pl2303_private *priv = usb_get_serial_port_data(port);
397
398 kfree(priv);
399
400 return 0;
401}
402
403static int pl2303_set_control_lines(struct usb_serial_port *port, u8 value)
404{
405 struct usb_device *dev = port->serial->dev;
406 int retval;
407
408 dev_dbg(&port->dev, "%s - %02x\n", __func__, value);
409
410 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
411 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
412 value, 0, NULL, 0, 100);
413 if (retval)
414 dev_err(&port->dev, "%s - failed: %d\n", __func__, retval);
415
416 return retval;
417}
418
419/*
420 * Returns the nearest supported baud rate that can be set directly without
421 * using divisors.
422 */
423static speed_t pl2303_get_supported_baud_rate(speed_t baud)
424{
425 static const speed_t baud_sup[] = {
426 75, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600,
427 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800,
428 614400, 921600, 1228800, 2457600, 3000000, 6000000
429 };
430
431 unsigned i;
432
433 for (i = 0; i < ARRAY_SIZE(baud_sup); ++i) {
434 if (baud_sup[i] > baud)
435 break;
436 }
437
438 if (i == ARRAY_SIZE(baud_sup))
439 baud = baud_sup[i - 1];
440 else if (i > 0 && (baud_sup[i] - baud) > (baud - baud_sup[i - 1]))
441 baud = baud_sup[i - 1];
442 else
443 baud = baud_sup[i];
444
445 return baud;
446}
447
448/*
449 * NOTE: If unsupported baud rates are set directly, the PL2303 seems to
450 * use 9600 baud.
451 */
452static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
453 speed_t baud)
454{
455 put_unaligned_le32(baud, buf);
456
457 return baud;
458}
459
460static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
461 speed_t baud)
462{
463 unsigned int baseline, mantissa, exponent;
464
465 /*
466 * Apparently the formula is:
467 * baudrate = 12M * 32 / (mantissa * 4^exponent)
468 * where
469 * mantissa = buf[8:0]
470 * exponent = buf[11:9]
471 */
472 baseline = 12000000 * 32;
473 mantissa = baseline / baud;
474 if (mantissa == 0)
475 mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
476 exponent = 0;
477 while (mantissa >= 512) {
478 if (exponent < 7) {
479 mantissa >>= 2; /* divide by 4 */
480 exponent++;
481 } else {
482 /* Exponent is maxed. Trim mantissa and leave. */
483 mantissa = 511;
484 break;
485 }
486 }
487
488 buf[3] = 0x80;
489 buf[2] = 0;
490 buf[1] = exponent << 1 | mantissa >> 8;
491 buf[0] = mantissa & 0xff;
492
493 /* Calculate and return the exact baud rate. */
494 baud = (baseline / mantissa) >> (exponent << 1);
495
496 return baud;
497}
498
499static void pl2303_encode_baud_rate(struct tty_struct *tty,
500 struct usb_serial_port *port,
501 u8 buf[4])
502{
503 struct usb_serial *serial = port->serial;
504 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
505 speed_t baud_sup;
506 speed_t baud;
507
508 baud = tty_get_baud_rate(tty);
509 dev_dbg(&port->dev, "baud requested = %u\n", baud);
510 if (!baud)
511 return;
512
513 if (spriv->type->max_baud_rate)
514 baud = min_t(speed_t, baud, spriv->type->max_baud_rate);
515 /*
516 * Use direct method for supported baud rates, otherwise use divisors.
517 */
518 baud_sup = pl2303_get_supported_baud_rate(baud);
519
520 if (baud == baud_sup)
521 baud = pl2303_encode_baud_rate_direct(buf, baud);
522 else
523 baud = pl2303_encode_baud_rate_divisor(buf, baud);
524
525 /* Save resulting baud rate */
526 tty_encode_baud_rate(tty, baud, baud);
527 dev_dbg(&port->dev, "baud set = %u\n", baud);
528}
529
530static int pl2303_get_line_request(struct usb_serial_port *port,
531 unsigned char buf[7])
532{
533 struct usb_device *udev = port->serial->dev;
534 int ret;
535
536 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
537 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
538 0, 0, buf, 7, 100);
539 if (ret != 7) {
540 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
541
542 if (ret >= 0)
543 ret = -EIO;
544
545 return ret;
546 }
547
548 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
549
550 return 0;
551}
552
553static int pl2303_set_line_request(struct usb_serial_port *port,
554 unsigned char buf[7])
555{
556 struct usb_device *udev = port->serial->dev;
557 int ret;
558
559 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
560 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
561 0, 0, buf, 7, 100);
562 if (ret < 0) {
563 dev_err(&port->dev, "%s - failed: %d\n", __func__, ret);
564 return ret;
565 }
566
567 dev_dbg(&port->dev, "%s - %7ph\n", __func__, buf);
568
569 return 0;
570}
571
572static bool pl2303_termios_change(const struct ktermios *a, const struct ktermios *b)
573{
574 bool ixon_change;
575
576 ixon_change = ((a->c_iflag ^ b->c_iflag) & (IXON | IXANY)) ||
577 a->c_cc[VSTART] != b->c_cc[VSTART] ||
578 a->c_cc[VSTOP] != b->c_cc[VSTOP];
579
580 return tty_termios_hw_change(a, b) || ixon_change;
581}
582
583static bool pl2303_enable_xonxoff(struct tty_struct *tty, const struct pl2303_type_data *type)
584{
585 if (!I_IXON(tty) || I_IXANY(tty))
586 return false;
587
588 if (START_CHAR(tty) != 0x11 || STOP_CHAR(tty) != 0x13)
589 return false;
590
591 if (type->no_autoxonxoff)
592 return false;
593
594 return true;
595}
596
597static void pl2303_set_termios(struct tty_struct *tty,
598 struct usb_serial_port *port, struct ktermios *old_termios)
599{
600 struct usb_serial *serial = port->serial;
601 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
602 struct pl2303_private *priv = usb_get_serial_port_data(port);
603 unsigned long flags;
604 unsigned char *buf;
605 int ret;
606 u8 control;
607
608 if (old_termios && !pl2303_termios_change(&tty->termios, old_termios))
609 return;
610
611 buf = kzalloc(7, GFP_KERNEL);
612 if (!buf) {
613 /* Report back no change occurred */
614 if (old_termios)
615 tty->termios = *old_termios;
616 return;
617 }
618
619 pl2303_get_line_request(port, buf);
620
621 switch (C_CSIZE(tty)) {
622 case CS5:
623 buf[6] = 5;
624 break;
625 case CS6:
626 buf[6] = 6;
627 break;
628 case CS7:
629 buf[6] = 7;
630 break;
631 default:
632 case CS8:
633 buf[6] = 8;
634 }
635 dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
636
637 /* For reference buf[0]:buf[3] baud rate value */
638 pl2303_encode_baud_rate(tty, port, &buf[0]);
639
640 /* For reference buf[4]=0 is 1 stop bits */
641 /* For reference buf[4]=1 is 1.5 stop bits */
642 /* For reference buf[4]=2 is 2 stop bits */
643 if (C_CSTOPB(tty)) {
644 /*
645 * NOTE: Comply with "real" UARTs / RS232:
646 * use 1.5 instead of 2 stop bits with 5 data bits
647 */
648 if (C_CSIZE(tty) == CS5) {
649 buf[4] = 1;
650 dev_dbg(&port->dev, "stop bits = 1.5\n");
651 } else {
652 buf[4] = 2;
653 dev_dbg(&port->dev, "stop bits = 2\n");
654 }
655 } else {
656 buf[4] = 0;
657 dev_dbg(&port->dev, "stop bits = 1\n");
658 }
659
660 if (C_PARENB(tty)) {
661 /* For reference buf[5]=0 is none parity */
662 /* For reference buf[5]=1 is odd parity */
663 /* For reference buf[5]=2 is even parity */
664 /* For reference buf[5]=3 is mark parity */
665 /* For reference buf[5]=4 is space parity */
666 if (C_PARODD(tty)) {
667 if (C_CMSPAR(tty)) {
668 buf[5] = 3;
669 dev_dbg(&port->dev, "parity = mark\n");
670 } else {
671 buf[5] = 1;
672 dev_dbg(&port->dev, "parity = odd\n");
673 }
674 } else {
675 if (C_CMSPAR(tty)) {
676 buf[5] = 4;
677 dev_dbg(&port->dev, "parity = space\n");
678 } else {
679 buf[5] = 2;
680 dev_dbg(&port->dev, "parity = even\n");
681 }
682 }
683 } else {
684 buf[5] = 0;
685 dev_dbg(&port->dev, "parity = none\n");
686 }
687
688 /*
689 * Some PL2303 are known to lose bytes if you change serial settings
690 * even to the same values as before. Thus we actually need to filter
691 * in this specific case.
692 *
693 * Note that the tty_termios_hw_change check above is not sufficient
694 * as a previously requested baud rate may differ from the one
695 * actually used (and stored in old_termios).
696 *
697 * NOTE: No additional locking needed for line_settings as it is
698 * only used in set_termios, which is serialised against itself.
699 */
700 if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
701 ret = pl2303_set_line_request(port, buf);
702 if (!ret)
703 memcpy(priv->line_settings, buf, 7);
704 }
705
706 /* change control lines if we are switching to or from B0 */
707 spin_lock_irqsave(&priv->lock, flags);
708 control = priv->line_control;
709 if (C_BAUD(tty) == B0)
710 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
711 else if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
712 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
713 if (control != priv->line_control) {
714 control = priv->line_control;
715 spin_unlock_irqrestore(&priv->lock, flags);
716 pl2303_set_control_lines(port, control);
717 } else {
718 spin_unlock_irqrestore(&priv->lock, flags);
719 }
720
721 if (C_CRTSCTS(tty)) {
722 if (spriv->quirks & PL2303_QUIRK_LEGACY)
723 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x40);
724 else
725 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x60);
726 } else if (pl2303_enable_xonxoff(tty, spriv->type)) {
727 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0xc0);
728 } else {
729 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0);
730 }
731
732 kfree(buf);
733}
734
735static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
736{
737 struct pl2303_private *priv = usb_get_serial_port_data(port);
738 unsigned long flags;
739 u8 control;
740
741 spin_lock_irqsave(&priv->lock, flags);
742 if (on)
743 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
744 else
745 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
746 control = priv->line_control;
747 spin_unlock_irqrestore(&priv->lock, flags);
748
749 pl2303_set_control_lines(port, control);
750}
751
752static void pl2303_close(struct usb_serial_port *port)
753{
754 usb_serial_generic_close(port);
755 usb_kill_urb(port->interrupt_in_urb);
756 pl2303_set_break(port, false);
757}
758
759static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
760{
761 struct usb_serial *serial = port->serial;
762 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
763 int result;
764
765 if (spriv->quirks & PL2303_QUIRK_LEGACY) {
766 usb_clear_halt(serial->dev, port->write_urb->pipe);
767 usb_clear_halt(serial->dev, port->read_urb->pipe);
768 } else {
769 /* reset upstream data pipes */
770 pl2303_vendor_write(serial, 8, 0);
771 pl2303_vendor_write(serial, 9, 0);
772 }
773
774 /* Setup termios */
775 if (tty)
776 pl2303_set_termios(tty, port, NULL);
777
778 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
779 if (result) {
780 dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
781 result);
782 return result;
783 }
784
785 result = usb_serial_generic_open(tty, port);
786 if (result) {
787 usb_kill_urb(port->interrupt_in_urb);
788 return result;
789 }
790
791 return 0;
792}
793
794static int pl2303_tiocmset(struct tty_struct *tty,
795 unsigned int set, unsigned int clear)
796{
797 struct usb_serial_port *port = tty->driver_data;
798 struct pl2303_private *priv = usb_get_serial_port_data(port);
799 unsigned long flags;
800 u8 control;
801 int ret;
802
803 spin_lock_irqsave(&priv->lock, flags);
804 if (set & TIOCM_RTS)
805 priv->line_control |= CONTROL_RTS;
806 if (set & TIOCM_DTR)
807 priv->line_control |= CONTROL_DTR;
808 if (clear & TIOCM_RTS)
809 priv->line_control &= ~CONTROL_RTS;
810 if (clear & TIOCM_DTR)
811 priv->line_control &= ~CONTROL_DTR;
812 control = priv->line_control;
813 spin_unlock_irqrestore(&priv->lock, flags);
814
815 ret = pl2303_set_control_lines(port, control);
816 if (ret)
817 return usb_translate_errors(ret);
818
819 return 0;
820}
821
822static int pl2303_tiocmget(struct tty_struct *tty)
823{
824 struct usb_serial_port *port = tty->driver_data;
825 struct pl2303_private *priv = usb_get_serial_port_data(port);
826 unsigned long flags;
827 unsigned int mcr;
828 unsigned int status;
829 unsigned int result;
830
831 spin_lock_irqsave(&priv->lock, flags);
832 mcr = priv->line_control;
833 status = priv->line_status;
834 spin_unlock_irqrestore(&priv->lock, flags);
835
836 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0)
837 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0)
838 | ((status & UART_CTS) ? TIOCM_CTS : 0)
839 | ((status & UART_DSR) ? TIOCM_DSR : 0)
840 | ((status & UART_RING) ? TIOCM_RI : 0)
841 | ((status & UART_DCD) ? TIOCM_CD : 0);
842
843 dev_dbg(&port->dev, "%s - result = %x\n", __func__, result);
844
845 return result;
846}
847
848static int pl2303_carrier_raised(struct usb_serial_port *port)
849{
850 struct pl2303_private *priv = usb_get_serial_port_data(port);
851
852 if (priv->line_status & UART_DCD)
853 return 1;
854
855 return 0;
856}
857
858static int pl2303_get_serial(struct tty_struct *tty,
859 struct serial_struct *ss)
860{
861 struct usb_serial_port *port = tty->driver_data;
862
863 ss->type = PORT_16654;
864 ss->line = port->minor;
865 ss->port = port->port_number;
866 ss->baud_base = 460800;
867 return 0;
868}
869
870static void pl2303_set_break(struct usb_serial_port *port, bool enable)
871{
872 struct usb_serial *serial = port->serial;
873 u16 state;
874 int result;
875
876 if (enable)
877 state = BREAK_ON;
878 else
879 state = BREAK_OFF;
880
881 dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
882 state == BREAK_OFF ? "off" : "on");
883
884 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
885 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
886 0, NULL, 0, 100);
887 if (result)
888 dev_err(&port->dev, "error sending break = %d\n", result);
889}
890
891static void pl2303_break_ctl(struct tty_struct *tty, int state)
892{
893 struct usb_serial_port *port = tty->driver_data;
894
895 pl2303_set_break(port, state);
896}
897
898static void pl2303_update_line_status(struct usb_serial_port *port,
899 unsigned char *data,
900 unsigned int actual_length)
901{
902 struct usb_serial *serial = port->serial;
903 struct pl2303_serial_private *spriv = usb_get_serial_data(serial);
904 struct pl2303_private *priv = usb_get_serial_port_data(port);
905 struct tty_struct *tty;
906 unsigned long flags;
907 unsigned int status_idx = UART_STATE_INDEX;
908 u8 status;
909 u8 delta;
910
911 if (spriv->quirks & PL2303_QUIRK_UART_STATE_IDX0)
912 status_idx = 0;
913
914 if (actual_length < status_idx + 1)
915 return;
916
917 status = data[status_idx];
918
919 /* Save off the uart status for others to look at */
920 spin_lock_irqsave(&priv->lock, flags);
921 delta = priv->line_status ^ status;
922 priv->line_status = status;
923 spin_unlock_irqrestore(&priv->lock, flags);
924
925 if (status & UART_BREAK_ERROR)
926 usb_serial_handle_break(port);
927
928 if (delta & UART_STATE_MSR_MASK) {
929 if (delta & UART_CTS)
930 port->icount.cts++;
931 if (delta & UART_DSR)
932 port->icount.dsr++;
933 if (delta & UART_RING)
934 port->icount.rng++;
935 if (delta & UART_DCD) {
936 port->icount.dcd++;
937 tty = tty_port_tty_get(&port->port);
938 if (tty) {
939 usb_serial_handle_dcd_change(port, tty,
940 status & UART_DCD);
941 tty_kref_put(tty);
942 }
943 }
944
945 wake_up_interruptible(&port->port.delta_msr_wait);
946 }
947}
948
949static void pl2303_read_int_callback(struct urb *urb)
950{
951 struct usb_serial_port *port = urb->context;
952 unsigned char *data = urb->transfer_buffer;
953 unsigned int actual_length = urb->actual_length;
954 int status = urb->status;
955 int retval;
956
957 switch (status) {
958 case 0:
959 /* success */
960 break;
961 case -ECONNRESET:
962 case -ENOENT:
963 case -ESHUTDOWN:
964 /* this urb is terminated, clean up */
965 dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
966 __func__, status);
967 return;
968 default:
969 dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
970 __func__, status);
971 goto exit;
972 }
973
974 usb_serial_debug_data(&port->dev, __func__,
975 urb->actual_length, urb->transfer_buffer);
976
977 pl2303_update_line_status(port, data, actual_length);
978
979exit:
980 retval = usb_submit_urb(urb, GFP_ATOMIC);
981 if (retval) {
982 dev_err(&port->dev,
983 "%s - usb_submit_urb failed with result %d\n",
984 __func__, retval);
985 }
986}
987
988static void pl2303_process_read_urb(struct urb *urb)
989{
990 struct usb_serial_port *port = urb->context;
991 struct pl2303_private *priv = usb_get_serial_port_data(port);
992 unsigned char *data = urb->transfer_buffer;
993 char tty_flag = TTY_NORMAL;
994 unsigned long flags;
995 u8 line_status;
996 int i;
997
998 /* update line status */
999 spin_lock_irqsave(&priv->lock, flags);
1000 line_status = priv->line_status;
1001 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1002 spin_unlock_irqrestore(&priv->lock, flags);
1003
1004 if (!urb->actual_length)
1005 return;
1006
1007 /*
1008 * Break takes precedence over parity, which takes precedence over
1009 * framing errors.
1010 */
1011 if (line_status & UART_BREAK_ERROR)
1012 tty_flag = TTY_BREAK;
1013 else if (line_status & UART_PARITY_ERROR)
1014 tty_flag = TTY_PARITY;
1015 else if (line_status & UART_FRAME_ERROR)
1016 tty_flag = TTY_FRAME;
1017
1018 if (tty_flag != TTY_NORMAL)
1019 dev_dbg(&port->dev, "%s - tty_flag = %d\n", __func__,
1020 tty_flag);
1021 /* overrun is special, not associated with a char */
1022 if (line_status & UART_OVERRUN_ERROR)
1023 tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
1024
1025 if (port->port.console && port->sysrq) {
1026 for (i = 0; i < urb->actual_length; ++i)
1027 if (!usb_serial_handle_sysrq_char(port, data[i]))
1028 tty_insert_flip_char(&port->port, data[i],
1029 tty_flag);
1030 } else {
1031 tty_insert_flip_string_fixed_flag(&port->port, data, tty_flag,
1032 urb->actual_length);
1033 }
1034
1035 tty_flip_buffer_push(&port->port);
1036}
1037
1038static struct usb_serial_driver pl2303_device = {
1039 .driver = {
1040 .owner = THIS_MODULE,
1041 .name = "pl2303",
1042 },
1043 .id_table = id_table,
1044 .num_bulk_in = 1,
1045 .num_bulk_out = 1,
1046 .num_interrupt_in = 0, /* see pl2303_calc_num_ports */
1047 .bulk_in_size = 256,
1048 .bulk_out_size = 256,
1049 .open = pl2303_open,
1050 .close = pl2303_close,
1051 .dtr_rts = pl2303_dtr_rts,
1052 .carrier_raised = pl2303_carrier_raised,
1053 .get_serial = pl2303_get_serial,
1054 .break_ctl = pl2303_break_ctl,
1055 .set_termios = pl2303_set_termios,
1056 .tiocmget = pl2303_tiocmget,
1057 .tiocmset = pl2303_tiocmset,
1058 .tiocmiwait = usb_serial_generic_tiocmiwait,
1059 .process_read_urb = pl2303_process_read_urb,
1060 .read_int_callback = pl2303_read_int_callback,
1061 .probe = pl2303_probe,
1062 .calc_num_ports = pl2303_calc_num_ports,
1063 .attach = pl2303_startup,
1064 .release = pl2303_release,
1065 .port_probe = pl2303_port_probe,
1066 .port_remove = pl2303_port_remove,
1067};
1068
1069static struct usb_serial_driver * const serial_drivers[] = {
1070 &pl2303_device, NULL
1071};
1072
1073module_usb_serial_driver(serial_drivers, id_table);
1074
1075MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");
1076MODULE_LICENSE("GPL v2");