Linux Audio

Check our new training course

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