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