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