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 bool debug;
40 
41 #define PL2303_CLOSING_WAIT	(30*HZ)
42 
43 static 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(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
95 	{ }					/* Terminating entry */
96 };
97 
98 MODULE_DEVICE_TABLE(usb, id_table);
99 
100 static 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 
145 enum 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 
151 struct 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 
pl2303_vendor_read(__u16 value,__u16 index,struct usb_serial * serial,unsigned char * buf)159 static 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 
pl2303_vendor_write(__u16 value,__u16 index,struct usb_serial * serial)170 static 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 
pl2303_startup(struct usb_serial * serial)181 static 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 
230 cleanup:
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 
set_control_lines(struct usb_device * dev,u8 value)240 static 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 
pl2303_set_termios(struct tty_struct * tty,struct usb_serial_port * port,struct ktermios * old_termios)251 static 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 			buf[0] = tmp;
364 		}
365 	}
366 
367 	/* For reference buf[4]=0 is 1 stop bits */
368 	/* For reference buf[4]=1 is 1.5 stop bits */
369 	/* For reference buf[4]=2 is 2 stop bits */
370 	if (cflag & CSTOPB) {
371 		/* NOTE: Comply with "real" UARTs / RS232:
372 		 *       use 1.5 instead of 2 stop bits with 5 data bits
373 		 */
374 		if ((cflag & CSIZE) == CS5) {
375 			buf[4] = 1;
376 			dbg("%s - stop bits = 1.5", __func__);
377 		} else {
378 			buf[4] = 2;
379 			dbg("%s - stop bits = 2", __func__);
380 		}
381 	} else {
382 		buf[4] = 0;
383 		dbg("%s - stop bits = 1", __func__);
384 	}
385 
386 	if (cflag & PARENB) {
387 		/* For reference buf[5]=0 is none parity */
388 		/* For reference buf[5]=1 is odd parity */
389 		/* For reference buf[5]=2 is even parity */
390 		/* For reference buf[5]=3 is mark parity */
391 		/* For reference buf[5]=4 is space parity */
392 		if (cflag & PARODD) {
393 			if (cflag & CMSPAR) {
394 				buf[5] = 3;
395 				dbg("%s - parity = mark", __func__);
396 			} else {
397 				buf[5] = 1;
398 				dbg("%s - parity = odd", __func__);
399 			}
400 		} else {
401 			if (cflag & CMSPAR) {
402 				buf[5] = 4;
403 				dbg("%s - parity = space", __func__);
404 			} else {
405 				buf[5] = 2;
406 				dbg("%s - parity = even", __func__);
407 			}
408 		}
409 	} else {
410 		buf[5] = 0;
411 		dbg("%s - parity = none", __func__);
412 	}
413 
414 	i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
415 			    SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
416 			    0, 0, buf, 7, 100);
417 	dbg("0x21:0x20:0:0  %d", i);
418 
419 	/* change control lines if we are switching to or from B0 */
420 	spin_lock_irqsave(&priv->lock, flags);
421 	control = priv->line_control;
422 	if ((cflag & CBAUD) == B0)
423 		priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
424 	else
425 		priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
426 	if (control != priv->line_control) {
427 		control = priv->line_control;
428 		spin_unlock_irqrestore(&priv->lock, flags);
429 		set_control_lines(serial->dev, control);
430 	} else {
431 		spin_unlock_irqrestore(&priv->lock, flags);
432 	}
433 
434 	buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0;
435 
436 	i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
437 			    GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE,
438 			    0, 0, buf, 7, 100);
439 	dbg("0xa1:0x21:0:0  %d - %x %x %x %x %x %x %x", i,
440 	     buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
441 
442 	if (cflag & CRTSCTS) {
443 		if (priv->type == HX)
444 			pl2303_vendor_write(0x0, 0x61, serial);
445 		else
446 			pl2303_vendor_write(0x0, 0x41, serial);
447 	} else {
448 		pl2303_vendor_write(0x0, 0x0, serial);
449 	}
450 
451 	/* Save resulting baud rate */
452 	if (baud)
453 		tty_encode_baud_rate(tty, baud, baud);
454 
455 	kfree(buf);
456 }
457 
pl2303_dtr_rts(struct usb_serial_port * port,int on)458 static void pl2303_dtr_rts(struct usb_serial_port *port, int on)
459 {
460 	struct pl2303_private *priv = usb_get_serial_port_data(port);
461 	unsigned long flags;
462 	u8 control;
463 
464 	spin_lock_irqsave(&priv->lock, flags);
465 	/* Change DTR and RTS */
466 	if (on)
467 		priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
468 	else
469 		priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
470 	control = priv->line_control;
471 	spin_unlock_irqrestore(&priv->lock, flags);
472 	set_control_lines(port->serial->dev, control);
473 }
474 
pl2303_close(struct usb_serial_port * port)475 static void pl2303_close(struct usb_serial_port *port)
476 {
477 	dbg("%s - port %d", __func__, port->number);
478 
479 	usb_serial_generic_close(port);
480 	usb_kill_urb(port->interrupt_in_urb);
481 }
482 
pl2303_open(struct tty_struct * tty,struct usb_serial_port * port)483 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
484 {
485 	struct ktermios tmp_termios;
486 	struct usb_serial *serial = port->serial;
487 	struct pl2303_private *priv = usb_get_serial_port_data(port);
488 	int result;
489 
490 	dbg("%s -  port %d", __func__, port->number);
491 
492 	if (priv->type != HX) {
493 		usb_clear_halt(serial->dev, port->write_urb->pipe);
494 		usb_clear_halt(serial->dev, port->read_urb->pipe);
495 	} else {
496 		/* reset upstream data pipes */
497 		pl2303_vendor_write(8, 0, serial);
498 		pl2303_vendor_write(9, 0, serial);
499 	}
500 
501 	/* Setup termios */
502 	if (tty)
503 		pl2303_set_termios(tty, port, &tmp_termios);
504 
505 	dbg("%s - submitting interrupt urb", __func__);
506 	result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
507 	if (result) {
508 		dev_err(&port->dev, "%s - failed submitting interrupt urb,"
509 			" error %d\n", __func__, result);
510 		return result;
511 	}
512 
513 	result = usb_serial_generic_open(tty, port);
514 	if (result) {
515 		usb_kill_urb(port->interrupt_in_urb);
516 		return result;
517 	}
518 
519 	port->port.drain_delay = 256;
520 	return 0;
521 }
522 
pl2303_tiocmset(struct tty_struct * tty,unsigned int set,unsigned int clear)523 static int pl2303_tiocmset(struct tty_struct *tty,
524 			   unsigned int set, unsigned int clear)
525 {
526 	struct usb_serial_port *port = tty->driver_data;
527 	struct pl2303_private *priv = usb_get_serial_port_data(port);
528 	unsigned long flags;
529 	u8 control;
530 
531 	if (!usb_get_intfdata(port->serial->interface))
532 		return -ENODEV;
533 
534 	spin_lock_irqsave(&priv->lock, flags);
535 	if (set & TIOCM_RTS)
536 		priv->line_control |= CONTROL_RTS;
537 	if (set & TIOCM_DTR)
538 		priv->line_control |= CONTROL_DTR;
539 	if (clear & TIOCM_RTS)
540 		priv->line_control &= ~CONTROL_RTS;
541 	if (clear & TIOCM_DTR)
542 		priv->line_control &= ~CONTROL_DTR;
543 	control = priv->line_control;
544 	spin_unlock_irqrestore(&priv->lock, flags);
545 
546 	return set_control_lines(port->serial->dev, control);
547 }
548 
pl2303_tiocmget(struct tty_struct * tty)549 static int pl2303_tiocmget(struct tty_struct *tty)
550 {
551 	struct usb_serial_port *port = tty->driver_data;
552 	struct pl2303_private *priv = usb_get_serial_port_data(port);
553 	unsigned long flags;
554 	unsigned int mcr;
555 	unsigned int status;
556 	unsigned int result;
557 
558 	dbg("%s (%d)", __func__, port->number);
559 
560 	if (!usb_get_intfdata(port->serial->interface))
561 		return -ENODEV;
562 
563 	spin_lock_irqsave(&priv->lock, flags);
564 	mcr = priv->line_control;
565 	status = priv->line_status;
566 	spin_unlock_irqrestore(&priv->lock, flags);
567 
568 	result = ((mcr & CONTROL_DTR)		? TIOCM_DTR : 0)
569 		  | ((mcr & CONTROL_RTS)	? TIOCM_RTS : 0)
570 		  | ((status & UART_CTS)	? TIOCM_CTS : 0)
571 		  | ((status & UART_DSR)	? TIOCM_DSR : 0)
572 		  | ((status & UART_RING)	? TIOCM_RI  : 0)
573 		  | ((status & UART_DCD)	? TIOCM_CD  : 0);
574 
575 	dbg("%s - result = %x", __func__, result);
576 
577 	return result;
578 }
579 
pl2303_carrier_raised(struct usb_serial_port * port)580 static int pl2303_carrier_raised(struct usb_serial_port *port)
581 {
582 	struct pl2303_private *priv = usb_get_serial_port_data(port);
583 	if (priv->line_status & UART_DCD)
584 		return 1;
585 	return 0;
586 }
587 
wait_modem_info(struct usb_serial_port * port,unsigned int arg)588 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
589 {
590 	struct pl2303_private *priv = usb_get_serial_port_data(port);
591 	unsigned long flags;
592 	unsigned int prevstatus;
593 	unsigned int status;
594 	unsigned int changed;
595 
596 	spin_lock_irqsave(&priv->lock, flags);
597 	prevstatus = priv->line_status;
598 	spin_unlock_irqrestore(&priv->lock, flags);
599 
600 	while (1) {
601 		interruptible_sleep_on(&priv->delta_msr_wait);
602 		/* see if a signal did it */
603 		if (signal_pending(current))
604 			return -ERESTARTSYS;
605 
606 		spin_lock_irqsave(&priv->lock, flags);
607 		status = priv->line_status;
608 		spin_unlock_irqrestore(&priv->lock, flags);
609 
610 		changed = prevstatus ^ status;
611 
612 		if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
613 		    ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
614 		    ((arg & TIOCM_CD)  && (changed & UART_DCD)) ||
615 		    ((arg & TIOCM_CTS) && (changed & UART_CTS))) {
616 			return 0;
617 		}
618 		prevstatus = status;
619 	}
620 	/* NOTREACHED */
621 	return 0;
622 }
623 
pl2303_ioctl(struct tty_struct * tty,unsigned int cmd,unsigned long arg)624 static int pl2303_ioctl(struct tty_struct *tty,
625 			unsigned int cmd, unsigned long arg)
626 {
627 	struct serial_struct ser;
628 	struct usb_serial_port *port = tty->driver_data;
629 	dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd);
630 
631 	switch (cmd) {
632 	case TIOCGSERIAL:
633 		memset(&ser, 0, sizeof ser);
634 		ser.type = PORT_16654;
635 		ser.line = port->serial->minor;
636 		ser.port = port->number;
637 		ser.baud_base = 460800;
638 
639 		if (copy_to_user((void __user *)arg, &ser, sizeof ser))
640 			return -EFAULT;
641 
642 		return 0;
643 
644 	case TIOCMIWAIT:
645 		dbg("%s (%d) TIOCMIWAIT", __func__,  port->number);
646 		return wait_modem_info(port, arg);
647 	default:
648 		dbg("%s not supported = 0x%04x", __func__, cmd);
649 		break;
650 	}
651 	return -ENOIOCTLCMD;
652 }
653 
pl2303_break_ctl(struct tty_struct * tty,int break_state)654 static void pl2303_break_ctl(struct tty_struct *tty, int break_state)
655 {
656 	struct usb_serial_port *port = tty->driver_data;
657 	struct usb_serial *serial = port->serial;
658 	u16 state;
659 	int result;
660 
661 	dbg("%s - port %d", __func__, port->number);
662 
663 	if (break_state == 0)
664 		state = BREAK_OFF;
665 	else
666 		state = BREAK_ON;
667 	dbg("%s - turning break %s", __func__,
668 			state == BREAK_OFF ? "off" : "on");
669 
670 	result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
671 				 BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
672 				 0, NULL, 0, 100);
673 	if (result)
674 		dbg("%s - error sending break = %d", __func__, result);
675 }
676 
pl2303_release(struct usb_serial * serial)677 static void pl2303_release(struct usb_serial *serial)
678 {
679 	int i;
680 	struct pl2303_private *priv;
681 
682 	dbg("%s", __func__);
683 
684 	for (i = 0; i < serial->num_ports; ++i) {
685 		priv = usb_get_serial_port_data(serial->port[i]);
686 		kfree(priv);
687 	}
688 }
689 
pl2303_update_line_status(struct usb_serial_port * port,unsigned char * data,unsigned int actual_length)690 static void pl2303_update_line_status(struct usb_serial_port *port,
691 				      unsigned char *data,
692 				      unsigned int actual_length)
693 {
694 
695 	struct pl2303_private *priv = usb_get_serial_port_data(port);
696 	struct tty_struct *tty;
697 	unsigned long flags;
698 	u8 status_idx = UART_STATE;
699 	u8 length = UART_STATE + 1;
700 	u8 prev_line_status;
701 	u16 idv, idp;
702 
703 	idv = le16_to_cpu(port->serial->dev->descriptor.idVendor);
704 	idp = le16_to_cpu(port->serial->dev->descriptor.idProduct);
705 
706 
707 	if (idv == SIEMENS_VENDOR_ID) {
708 		if (idp == SIEMENS_PRODUCT_ID_X65 ||
709 		    idp == SIEMENS_PRODUCT_ID_SX1 ||
710 		    idp == SIEMENS_PRODUCT_ID_X75) {
711 
712 			length = 1;
713 			status_idx = 0;
714 		}
715 	}
716 
717 	if (actual_length < length)
718 		return;
719 
720 	/* Save off the uart status for others to look at */
721 	spin_lock_irqsave(&priv->lock, flags);
722 	prev_line_status = priv->line_status;
723 	priv->line_status = data[status_idx];
724 	spin_unlock_irqrestore(&priv->lock, flags);
725 	if (priv->line_status & UART_BREAK_ERROR)
726 		usb_serial_handle_break(port);
727 	wake_up_interruptible(&priv->delta_msr_wait);
728 
729 	tty = tty_port_tty_get(&port->port);
730 	if (!tty)
731 		return;
732 	if ((priv->line_status ^ prev_line_status) & UART_DCD)
733 		usb_serial_handle_dcd_change(port, tty,
734 				priv->line_status & UART_DCD);
735 	tty_kref_put(tty);
736 }
737 
pl2303_read_int_callback(struct urb * urb)738 static void pl2303_read_int_callback(struct urb *urb)
739 {
740 	struct usb_serial_port *port =  urb->context;
741 	unsigned char *data = urb->transfer_buffer;
742 	unsigned int actual_length = urb->actual_length;
743 	int status = urb->status;
744 	int retval;
745 
746 	dbg("%s (%d)", __func__, port->number);
747 
748 	switch (status) {
749 	case 0:
750 		/* success */
751 		break;
752 	case -ECONNRESET:
753 	case -ENOENT:
754 	case -ESHUTDOWN:
755 		/* this urb is terminated, clean up */
756 		dbg("%s - urb shutting down with status: %d", __func__,
757 		    status);
758 		return;
759 	default:
760 		dbg("%s - nonzero urb status received: %d", __func__,
761 		    status);
762 		goto exit;
763 	}
764 
765 	usb_serial_debug_data(debug, &port->dev, __func__,
766 			      urb->actual_length, urb->transfer_buffer);
767 
768 	pl2303_update_line_status(port, data, actual_length);
769 
770 exit:
771 	retval = usb_submit_urb(urb, GFP_ATOMIC);
772 	if (retval)
773 		dev_err(&urb->dev->dev,
774 			"%s - usb_submit_urb failed with result %d\n",
775 			__func__, retval);
776 }
777 
pl2303_process_read_urb(struct urb * urb)778 static void pl2303_process_read_urb(struct urb *urb)
779 {
780 	struct usb_serial_port *port = urb->context;
781 	struct pl2303_private *priv = usb_get_serial_port_data(port);
782 	struct tty_struct *tty;
783 	unsigned char *data = urb->transfer_buffer;
784 	char tty_flag = TTY_NORMAL;
785 	unsigned long flags;
786 	u8 line_status;
787 	int i;
788 
789 	/* update line status */
790 	spin_lock_irqsave(&priv->lock, flags);
791 	line_status = priv->line_status;
792 	priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
793 	spin_unlock_irqrestore(&priv->lock, flags);
794 	wake_up_interruptible(&priv->delta_msr_wait);
795 
796 	if (!urb->actual_length)
797 		return;
798 
799 	tty = tty_port_tty_get(&port->port);
800 	if (!tty)
801 		return;
802 
803 	/* break takes precedence over parity, */
804 	/* which takes precedence over framing errors */
805 	if (line_status & UART_BREAK_ERROR)
806 		tty_flag = TTY_BREAK;
807 	else if (line_status & UART_PARITY_ERROR)
808 		tty_flag = TTY_PARITY;
809 	else if (line_status & UART_FRAME_ERROR)
810 		tty_flag = TTY_FRAME;
811 	dbg("%s - tty_flag = %d", __func__, tty_flag);
812 
813 	/* overrun is special, not associated with a char */
814 	if (line_status & UART_OVERRUN_ERROR)
815 		tty_insert_flip_char(tty, 0, TTY_OVERRUN);
816 
817 	if (port->port.console && port->sysrq) {
818 		for (i = 0; i < urb->actual_length; ++i)
819 			if (!usb_serial_handle_sysrq_char(port, data[i]))
820 				tty_insert_flip_char(tty, data[i], tty_flag);
821 	} else {
822 		tty_insert_flip_string_fixed_flag(tty, data, tty_flag,
823 							urb->actual_length);
824 	}
825 
826 	tty_flip_buffer_push(tty);
827 	tty_kref_put(tty);
828 }
829 
830 /* All of the device info needed for the PL2303 SIO serial converter */
831 static struct usb_serial_driver pl2303_device = {
832 	.driver = {
833 		.owner =	THIS_MODULE,
834 		.name =		"pl2303",
835 	},
836 	.id_table =		id_table,
837 	.usb_driver = 		&pl2303_driver,
838 	.num_ports =		1,
839 	.bulk_in_size =		256,
840 	.bulk_out_size =	256,
841 	.open =			pl2303_open,
842 	.close =		pl2303_close,
843 	.dtr_rts = 		pl2303_dtr_rts,
844 	.carrier_raised =	pl2303_carrier_raised,
845 	.ioctl =		pl2303_ioctl,
846 	.break_ctl =		pl2303_break_ctl,
847 	.set_termios =		pl2303_set_termios,
848 	.tiocmget =		pl2303_tiocmget,
849 	.tiocmset =		pl2303_tiocmset,
850 	.process_read_urb =	pl2303_process_read_urb,
851 	.read_int_callback =	pl2303_read_int_callback,
852 	.attach =		pl2303_startup,
853 	.release =		pl2303_release,
854 };
855 
pl2303_init(void)856 static int __init pl2303_init(void)
857 {
858 	int retval;
859 
860 	retval = usb_serial_register(&pl2303_device);
861 	if (retval)
862 		goto failed_usb_serial_register;
863 	retval = usb_register(&pl2303_driver);
864 	if (retval)
865 		goto failed_usb_register;
866 	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
867 	return 0;
868 failed_usb_register:
869 	usb_serial_deregister(&pl2303_device);
870 failed_usb_serial_register:
871 	return retval;
872 }
873 
pl2303_exit(void)874 static void __exit pl2303_exit(void)
875 {
876 	usb_deregister(&pl2303_driver);
877 	usb_serial_deregister(&pl2303_device);
878 }
879 
880 module_init(pl2303_init);
881 module_exit(pl2303_exit);
882 
883 MODULE_DESCRIPTION(DRIVER_DESC);
884 MODULE_LICENSE("GPL");
885 
886 module_param(debug, bool, S_IRUGO | S_IWUSR);
887 MODULE_PARM_DESC(debug, "Debug enabled or not");
888 
889