Merge 3.9-rc3 into tty-next
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / usb / serial / quatech2.c
1 /*
2  * usb-serial driver for Quatech USB 2 devices
3  *
4  * Copyright (C) 2012 Bill Pemberton (wfp5p@virginia.edu)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License version 2
8  * as published by the Free Software Foundation.
9  *
10  *
11  *  These devices all have only 1 bulk in and 1 bulk out that is shared
12  *  for all serial ports.
13  *
14  */
15
16 #include <asm/unaligned.h>
17 #include <linux/errno.h>
18 #include <linux/init.h>
19 #include <linux/slab.h>
20 #include <linux/tty.h>
21 #include <linux/tty_driver.h>
22 #include <linux/tty_flip.h>
23 #include <linux/module.h>
24 #include <linux/serial.h>
25 #include <linux/usb.h>
26 #include <linux/usb/serial.h>
27 #include <linux/serial_reg.h>
28 #include <linux/uaccess.h>
29
30 /* default urb timeout for usb operations */
31 #define QT2_USB_TIMEOUT USB_CTRL_SET_TIMEOUT
32
33 #define QT_OPEN_CLOSE_CHANNEL       0xca
34 #define QT_SET_GET_DEVICE           0xc2
35 #define QT_SET_GET_REGISTER         0xc0
36 #define QT_GET_SET_PREBUF_TRIG_LVL  0xcc
37 #define QT_SET_ATF                  0xcd
38 #define QT_TRANSFER_IN              0xc0
39 #define QT_HW_FLOW_CONTROL_MASK     0xc5
40 #define QT_SW_FLOW_CONTROL_MASK     0xc6
41 #define QT2_BREAK_CONTROL           0xc8
42 #define QT2_GET_SET_UART            0xc1
43 #define QT2_FLUSH_DEVICE            0xc4
44 #define QT2_GET_SET_QMCR            0xe1
45 #define QT2_QMCR_RS232              0x40
46 #define QT2_QMCR_RS422              0x10
47
48 #define  SERIAL_CRTSCTS ((UART_MCR_RTS << 8) | UART_MSR_CTS)
49
50 #define  SERIAL_EVEN_PARITY         (UART_LCR_PARITY | UART_LCR_EPAR)
51
52 /* status bytes for the device */
53 #define QT2_CONTROL_BYTE    0x1b
54 #define QT2_LINE_STATUS     0x00  /* following 1 byte is line status */
55 #define QT2_MODEM_STATUS    0x01  /* following 1 byte is modem status */
56 #define QT2_XMIT_HOLD       0x02  /* following 2 bytes are ?? */
57 #define QT2_CHANGE_PORT     0x03  /* following 1 byte is port to change to */
58 #define QT2_REC_FLUSH       0x04  /* no following info */
59 #define QT2_XMIT_FLUSH      0x05  /* no following info */
60 #define QT2_CONTROL_ESCAPE  0xff  /* pass through previous 2 control bytes */
61
62 #define  MAX_BAUD_RATE              921600
63 #define  DEFAULT_BAUD_RATE          9600
64
65 #define QT2_WRITE_BUFFER_SIZE   512  /* size of write buffer */
66 #define QT2_WRITE_CONTROL_SIZE  5    /* control bytes used for a write */
67
68 #define DRIVER_DESC "Quatech 2nd gen USB to Serial Driver"
69
70 #define USB_VENDOR_ID_QUATECH   0x061d
71 #define QUATECH_SSU2_100        0xC120  /* RS232 single port */
72 #define QUATECH_DSU2_100        0xC140  /* RS232 dual port */
73 #define QUATECH_DSU2_400        0xC150  /* RS232/422/485 dual port */
74 #define QUATECH_QSU2_100        0xC160  /* RS232 four port */
75 #define QUATECH_QSU2_400        0xC170  /* RS232/422/485 four port */
76 #define QUATECH_ESU2_100        0xC1A0  /* RS232 eight port */
77 #define QUATECH_ESU2_400        0xC180  /* RS232/422/485 eight port */
78
79 struct qt2_device_detail {
80         int product_id;
81         int num_ports;
82 };
83
84 #define QT_DETAILS(prod, ports) \
85         .product_id = (prod),   \
86         .num_ports = (ports)
87
88 static const struct qt2_device_detail qt2_device_details[] = {
89         {QT_DETAILS(QUATECH_SSU2_100, 1)},
90         {QT_DETAILS(QUATECH_DSU2_400, 2)},
91         {QT_DETAILS(QUATECH_DSU2_100, 2)},
92         {QT_DETAILS(QUATECH_QSU2_400, 4)},
93         {QT_DETAILS(QUATECH_QSU2_100, 4)},
94         {QT_DETAILS(QUATECH_ESU2_400, 8)},
95         {QT_DETAILS(QUATECH_ESU2_100, 8)},
96         {QT_DETAILS(0, 0)}      /* Terminating entry */
97 };
98
99 static const struct usb_device_id id_table[] = {
100         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU2_100)},
101         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_100)},
102         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_400)},
103         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_100)},
104         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_400)},
105         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_100)},
106         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_400)},
107         {}                      /* Terminating entry */
108 };
109 MODULE_DEVICE_TABLE(usb, id_table);
110
111 struct qt2_serial_private {
112         unsigned char current_port;  /* current port for incoming data */
113
114         struct urb      *read_urb;   /* shared among all ports */
115         char            read_buffer[512];
116 };
117
118 struct qt2_port_private {
119         u8   device_port;
120
121         spinlock_t urb_lock;
122         bool       urb_in_use;
123         struct urb *write_urb;
124         char       write_buffer[QT2_WRITE_BUFFER_SIZE];
125
126         spinlock_t  lock;
127         u8          shadowLSR;
128         u8          shadowMSR;
129
130         wait_queue_head_t   delta_msr_wait; /* Used for TIOCMIWAIT */
131         struct async_icount icount;
132
133         struct usb_serial_port *port;
134 };
135
136 static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch);
137 static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch);
138 static void qt2_write_bulk_callback(struct urb *urb);
139 static void qt2_read_bulk_callback(struct urb *urb);
140
141 static void qt2_release(struct usb_serial *serial)
142 {
143         struct qt2_serial_private *serial_priv;
144
145         serial_priv = usb_get_serial_data(serial);
146
147         usb_free_urb(serial_priv->read_urb);
148         kfree(serial_priv);
149 }
150
151 static inline int calc_baud_divisor(int baudrate)
152 {
153         int divisor, rem;
154
155         divisor = MAX_BAUD_RATE / baudrate;
156         rem = MAX_BAUD_RATE % baudrate;
157         /* Round to nearest divisor */
158         if (((rem * 2) >= baudrate) && (baudrate != 110))
159                 divisor++;
160
161         return divisor;
162 }
163
164 static inline int qt2_set_port_config(struct usb_device *dev,
165                                       unsigned char port_number,
166                                       u16 baudrate, u16 lcr)
167 {
168         int divisor = calc_baud_divisor(baudrate);
169         u16 index = ((u16) (lcr << 8) | (u16) (port_number));
170
171         return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
172                                QT2_GET_SET_UART, 0x40,
173                                divisor, index, NULL, 0, QT2_USB_TIMEOUT);
174 }
175
176 static inline int qt2_control_msg(struct usb_device *dev,
177                                   u8 request, u16 data, u16 index)
178 {
179         return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
180                                request, 0x40, data, index,
181                                NULL, 0, QT2_USB_TIMEOUT);
182 }
183
184 static inline int qt2_setdevice(struct usb_device *dev, u8 *data)
185 {
186         u16 x = ((u16) (data[1] << 8) | (u16) (data[0]));
187
188         return qt2_control_msg(dev, QT_SET_GET_DEVICE, x, 0);
189 }
190
191
192 static inline int qt2_getdevice(struct usb_device *dev, u8 *data)
193 {
194         return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
195                                QT_SET_GET_DEVICE, 0xc0, 0, 0,
196                                data, 3, QT2_USB_TIMEOUT);
197 }
198
199 static inline int qt2_getregister(struct usb_device *dev,
200                                   u8 uart,
201                                   u8 reg,
202                                   u8 *data)
203 {
204         return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
205                                QT_SET_GET_REGISTER, 0xc0, reg,
206                                uart, data, sizeof(*data), QT2_USB_TIMEOUT);
207
208 }
209
210 static inline int qt2_setregister(struct usb_device *dev,
211                                   u8 uart, u8 reg, u16 data)
212 {
213         u16 value = (data << 8) | reg;
214
215         return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
216                                QT_SET_GET_REGISTER, 0x40, value, uart,
217                                NULL, 0, QT2_USB_TIMEOUT);
218 }
219
220 static inline int update_mctrl(struct qt2_port_private *port_priv,
221                                unsigned int set, unsigned int clear)
222 {
223         struct usb_serial_port *port = port_priv->port;
224         struct usb_device *dev = port->serial->dev;
225         unsigned urb_value;
226         int status;
227
228         if (((set | clear) & (TIOCM_DTR | TIOCM_RTS)) == 0) {
229                 dev_dbg(&port->dev,
230                         "update_mctrl - DTR|RTS not being set|cleared\n");
231                 return 0;       /* no change */
232         }
233
234         clear &= ~set;  /* 'set' takes precedence over 'clear' */
235         urb_value = 0;
236         if (set & TIOCM_DTR)
237                 urb_value |= UART_MCR_DTR;
238         if (set & TIOCM_RTS)
239                 urb_value |= UART_MCR_RTS;
240
241         status = qt2_setregister(dev, port_priv->device_port, UART_MCR,
242                                  urb_value);
243         if (status < 0)
244                 dev_err(&port->dev,
245                         "update_mctrl - Error from MODEM_CTRL urb: %i\n",
246                         status);
247         return status;
248 }
249
250 static int qt2_calc_num_ports(struct usb_serial *serial)
251 {
252         struct qt2_device_detail d;
253         int i;
254
255         for (i = 0; d = qt2_device_details[i], d.product_id != 0; i++) {
256                 if (d.product_id == le16_to_cpu(serial->dev->descriptor.idProduct))
257                         return d.num_ports;
258         }
259
260         /* we didn't recognize the device */
261         dev_err(&serial->dev->dev,
262                  "don't know the number of ports, assuming 1\n");
263
264         return 1;
265 }
266
267 static void qt2_set_termios(struct tty_struct *tty,
268                             struct usb_serial_port *port,
269                             struct ktermios *old_termios)
270 {
271         struct usb_device *dev = port->serial->dev;
272         struct qt2_port_private *port_priv;
273         struct ktermios *termios = &tty->termios;
274         u16 baud;
275         unsigned int cflag = termios->c_cflag;
276         u16 new_lcr = 0;
277         int status;
278
279         port_priv = usb_get_serial_port_data(port);
280
281         if (cflag & PARENB) {
282                 if (cflag & PARODD)
283                         new_lcr |= UART_LCR_PARITY;
284                 else
285                         new_lcr |= SERIAL_EVEN_PARITY;
286         }
287
288         switch (cflag & CSIZE) {
289         case CS5:
290                 new_lcr |= UART_LCR_WLEN5;
291                 break;
292         case CS6:
293                 new_lcr |= UART_LCR_WLEN6;
294                 break;
295         case CS7:
296                 new_lcr |= UART_LCR_WLEN7;
297                 break;
298         default:
299         case CS8:
300                 new_lcr |= UART_LCR_WLEN8;
301                 break;
302         }
303
304         baud = tty_get_baud_rate(tty);
305         if (!baud)
306                 baud = 9600;
307
308         status = qt2_set_port_config(dev, port_priv->device_port, baud,
309                                      new_lcr);
310         if (status < 0)
311                 dev_err(&port->dev, "%s - qt2_set_port_config failed: %i\n",
312                         __func__, status);
313
314         if (cflag & CRTSCTS)
315                 status = qt2_control_msg(dev, QT_HW_FLOW_CONTROL_MASK,
316                                          SERIAL_CRTSCTS,
317                                          port_priv->device_port);
318         else
319                 status = qt2_control_msg(dev, QT_HW_FLOW_CONTROL_MASK,
320                                          0, port_priv->device_port);
321         if (status < 0)
322                 dev_err(&port->dev, "%s - set HW flow control failed: %i\n",
323                         __func__, status);
324
325         if (I_IXOFF(tty) || I_IXON(tty)) {
326                 u16 x = ((u16) (START_CHAR(tty) << 8) | (u16) (STOP_CHAR(tty)));
327
328                 status = qt2_control_msg(dev, QT_SW_FLOW_CONTROL_MASK,
329                                          x, port_priv->device_port);
330         } else
331                 status = qt2_control_msg(dev, QT_SW_FLOW_CONTROL_MASK,
332                                          0, port_priv->device_port);
333
334         if (status < 0)
335                 dev_err(&port->dev, "%s - set SW flow control failed: %i\n",
336                         __func__, status);
337
338 }
339
340 static int qt2_open(struct tty_struct *tty, struct usb_serial_port *port)
341 {
342         struct usb_serial *serial;
343         struct qt2_port_private *port_priv;
344         u8 *data;
345         u16 device_port;
346         int status;
347         unsigned long flags;
348
349         device_port = (u16) (port->number - port->serial->minor);
350
351         serial = port->serial;
352
353         port_priv = usb_get_serial_port_data(port);
354
355         /* set the port to RS232 mode */
356         status = qt2_control_msg(serial->dev, QT2_GET_SET_QMCR,
357                                  QT2_QMCR_RS232, device_port);
358         if (status < 0) {
359                 dev_err(&port->dev,
360                         "%s failed to set RS232 mode for port %i error %i\n",
361                         __func__, device_port, status);
362                 return status;
363         }
364
365         data = kzalloc(2, GFP_KERNEL);
366         if (!data)
367                 return -ENOMEM;
368
369         /* open the port */
370         status = usb_control_msg(serial->dev,
371                                  usb_rcvctrlpipe(serial->dev, 0),
372                                  QT_OPEN_CLOSE_CHANNEL,
373                                  0xc0, 0,
374                                  device_port, data, 2, QT2_USB_TIMEOUT);
375
376         if (status < 0) {
377                 dev_err(&port->dev, "%s - open port failed %i", __func__,
378                         status);
379                 kfree(data);
380                 return status;
381         }
382
383         spin_lock_irqsave(&port_priv->lock, flags);
384         port_priv->shadowLSR = data[0];
385         port_priv->shadowMSR = data[1];
386         spin_unlock_irqrestore(&port_priv->lock, flags);
387
388         kfree(data);
389
390         /* set to default speed and 8bit word size */
391         status = qt2_set_port_config(serial->dev, device_port,
392                                      DEFAULT_BAUD_RATE, UART_LCR_WLEN8);
393         if (status < 0) {
394                 dev_err(&port->dev,
395                         "%s - initial setup failed for port %i (%i)\n",
396                         __func__, port->number, device_port);
397                 return status;
398         }
399
400         port_priv->device_port = (u8) device_port;
401
402         if (tty)
403                 qt2_set_termios(tty, port, &tty->termios);
404
405         return 0;
406
407 }
408
409 static void qt2_close(struct usb_serial_port *port)
410 {
411         struct usb_serial *serial;
412         struct qt2_port_private *port_priv;
413         unsigned long flags;
414         int i;
415
416         serial = port->serial;
417         port_priv = usb_get_serial_port_data(port);
418
419         spin_lock_irqsave(&port_priv->urb_lock, flags);
420         usb_kill_urb(port_priv->write_urb);
421         port_priv->urb_in_use = false;
422         spin_unlock_irqrestore(&port_priv->urb_lock, flags);
423
424         mutex_lock(&port->serial->disc_mutex);
425         if (port->serial->disconnected) {
426                 mutex_unlock(&port->serial->disc_mutex);
427                 return;
428         }
429
430         /* flush the port transmit buffer */
431         i = usb_control_msg(serial->dev,
432                             usb_rcvctrlpipe(serial->dev, 0),
433                             QT2_FLUSH_DEVICE, 0x40, 1,
434                             port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
435
436         if (i < 0)
437                 dev_err(&port->dev, "%s - transmit buffer flush failed: %i\n",
438                         __func__, i);
439
440         /* flush the port receive buffer */
441         i = usb_control_msg(serial->dev,
442                             usb_rcvctrlpipe(serial->dev, 0),
443                             QT2_FLUSH_DEVICE, 0x40, 0,
444                             port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
445
446         if (i < 0)
447                 dev_err(&port->dev, "%s - receive buffer flush failed: %i\n",
448                         __func__, i);
449
450         /* close the port */
451         i = usb_control_msg(serial->dev,
452                             usb_sndctrlpipe(serial->dev, 0),
453                             QT_OPEN_CLOSE_CHANNEL,
454                             0x40, 0,
455                             port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
456
457         if (i < 0)
458                 dev_err(&port->dev, "%s - close port failed %i\n",
459                         __func__, i);
460
461         mutex_unlock(&port->serial->disc_mutex);
462 }
463
464 static void qt2_disconnect(struct usb_serial *serial)
465 {
466         struct qt2_serial_private *serial_priv = usb_get_serial_data(serial);
467
468         usb_kill_urb(serial_priv->read_urb);
469 }
470
471 static int get_serial_info(struct usb_serial_port *port,
472                            struct serial_struct __user *retinfo)
473 {
474         struct serial_struct tmp;
475
476         if (!retinfo)
477                 return -EFAULT;
478
479         memset(&tmp, 0, sizeof(tmp));
480         tmp.line                = port->serial->minor;
481         tmp.port                = 0;
482         tmp.irq                 = 0;
483         tmp.flags               = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
484         tmp.xmit_fifo_size      = port->bulk_out_size;
485         tmp.baud_base           = 9600;
486         tmp.close_delay         = 5*HZ;
487         tmp.closing_wait        = 30*HZ;
488
489         if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
490                 return -EFAULT;
491         return 0;
492 }
493
494 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
495 {
496         struct qt2_port_private *priv = usb_get_serial_port_data(port);
497         struct async_icount prev, cur;
498         unsigned long flags;
499
500         spin_lock_irqsave(&priv->lock, flags);
501         prev = priv->icount;
502         spin_unlock_irqrestore(&priv->lock, flags);
503
504         while (1) {
505                 wait_event_interruptible(priv->delta_msr_wait,
506                                          ((priv->icount.rng != prev.rng) ||
507                                           (priv->icount.dsr != prev.dsr) ||
508                                           (priv->icount.dcd != prev.dcd) ||
509                                           (priv->icount.cts != prev.cts)));
510
511                 if (signal_pending(current))
512                         return -ERESTARTSYS;
513
514                 spin_lock_irqsave(&priv->lock, flags);
515                 cur = priv->icount;
516                 spin_unlock_irqrestore(&priv->lock, flags);
517
518                 if ((prev.rng == cur.rng) &&
519                     (prev.dsr == cur.dsr) &&
520                     (prev.dcd == cur.dcd) &&
521                     (prev.cts == cur.cts))
522                         return -EIO;
523
524                 if ((arg & TIOCM_RNG && (prev.rng != cur.rng)) ||
525                     (arg & TIOCM_DSR && (prev.dsr != cur.dsr)) ||
526                     (arg & TIOCM_CD && (prev.dcd != cur.dcd)) ||
527                     (arg & TIOCM_CTS && (prev.cts != cur.cts)))
528                         return 0;
529         }
530         return 0;
531 }
532
533 static int qt2_get_icount(struct tty_struct *tty,
534                           struct serial_icounter_struct *icount)
535 {
536         struct usb_serial_port *port = tty->driver_data;
537         struct qt2_port_private *priv = usb_get_serial_port_data(port);
538         struct async_icount cnow = priv->icount;
539
540         icount->cts = cnow.cts;
541         icount->dsr = cnow.dsr;
542         icount->rng = cnow.rng;
543         icount->dcd = cnow.dcd;
544         icount->rx = cnow.rx;
545         icount->tx = cnow.tx;
546         icount->frame = cnow.frame;
547         icount->overrun = cnow.overrun;
548         icount->parity = cnow.parity;
549         icount->brk = cnow.brk;
550         icount->buf_overrun = cnow.buf_overrun;
551
552         return 0;
553 }
554
555 static int qt2_ioctl(struct tty_struct *tty,
556                      unsigned int cmd, unsigned long arg)
557 {
558         struct usb_serial_port *port = tty->driver_data;
559
560         switch (cmd) {
561         case TIOCGSERIAL:
562                 return get_serial_info(port,
563                                        (struct serial_struct __user *)arg);
564
565         case TIOCMIWAIT:
566                 return wait_modem_info(port, arg);
567
568         default:
569                 break;
570         }
571
572         return -ENOIOCTLCMD;
573 }
574
575 static void qt2_process_status(struct usb_serial_port *port, unsigned char *ch)
576 {
577         switch (*ch) {
578         case QT2_LINE_STATUS:
579                 qt2_update_lsr(port, ch + 1);
580                 break;
581         case QT2_MODEM_STATUS:
582                 qt2_update_msr(port, ch + 1);
583                 break;
584         }
585 }
586
587 /* not needed, kept to document functionality */
588 static void qt2_process_xmit_empty(struct usb_serial_port *port,
589                                    unsigned char *ch)
590 {
591         int bytes_written;
592
593         bytes_written = (int)(*ch) + (int)(*(ch + 1) << 4);
594 }
595
596 /* not needed, kept to document functionality */
597 static void qt2_process_flush(struct usb_serial_port *port, unsigned char *ch)
598 {
599         return;
600 }
601
602 void qt2_process_read_urb(struct urb *urb)
603 {
604         struct usb_serial *serial;
605         struct qt2_serial_private *serial_priv;
606         struct usb_serial_port *port;
607         struct qt2_port_private *port_priv;
608         bool escapeflag;
609         unsigned char *ch;
610         int i;
611         unsigned char newport;
612         int len = urb->actual_length;
613
614         if (!len)
615                 return;
616
617         ch = urb->transfer_buffer;
618         serial = urb->context;
619         serial_priv = usb_get_serial_data(serial);
620         port = serial->port[serial_priv->current_port];
621         port_priv = usb_get_serial_port_data(port);
622
623         for (i = 0; i < urb->actual_length; i++) {
624                 ch = (unsigned char *)urb->transfer_buffer + i;
625                 if ((i <= (len - 3)) &&
626                     (*ch == QT2_CONTROL_BYTE) &&
627                     (*(ch + 1) == QT2_CONTROL_BYTE)) {
628                         escapeflag = false;
629                         switch (*(ch + 2)) {
630                         case QT2_LINE_STATUS:
631                         case QT2_MODEM_STATUS:
632                                 if (i > (len - 4)) {
633                                         dev_warn(&port->dev,
634                                                  "%s - status message too short\n",
635                                                 __func__);
636                                         break;
637                                 }
638                                 qt2_process_status(port, ch + 2);
639                                 i += 3;
640                                 escapeflag = true;
641                                 break;
642                         case QT2_XMIT_HOLD:
643                                 if (i > (len - 5)) {
644                                         dev_warn(&port->dev,
645                                                  "%s - xmit_empty message too short\n",
646                                                  __func__);
647                                         break;
648                                 }
649                                 qt2_process_xmit_empty(port, ch + 3);
650                                 i += 4;
651                                 escapeflag = true;
652                                 break;
653                         case QT2_CHANGE_PORT:
654                                 if (i > (len - 4)) {
655                                         dev_warn(&port->dev,
656                                                  "%s - change_port message too short\n",
657                                                  __func__);
658                                         break;
659                                 }
660
661                                 if (port_priv->is_open)
662                                         tty_flip_buffer_push(&port->port);
663
664                                 newport = *(ch + 3);
665
666                                 if (newport > serial->num_ports) {
667                                         dev_err(&port->dev,
668                                                 "%s - port change to invalid port: %i\n",
669                                                 __func__, newport);
670                                         break;
671                                 }
672
673                                 serial_priv->current_port = newport;
674                                 port = serial->port[serial_priv->current_port];
675                                 port_priv = usb_get_serial_port_data(port);
676                                 i += 3;
677                                 escapeflag = true;
678                                 break;
679                         case QT2_REC_FLUSH:
680                         case QT2_XMIT_FLUSH:
681                                 qt2_process_flush(port, ch + 2);
682                                 i += 2;
683                                 escapeflag = true;
684                                 break;
685                         case QT2_CONTROL_ESCAPE:
686                                 tty_buffer_request_room(&port->port, 2);
687                                 tty_insert_flip_string(&port->port, ch, 2);
688                                 i += 2;
689                                 escapeflag = true;
690                                 break;
691                         default:
692                                 dev_warn(&port->dev,
693                                          "%s - unsupported command %i\n",
694                                          __func__, *(ch + 2));
695                                 break;
696                         }
697                         if (escapeflag)
698                                 continue;
699                 }
700
701                 tty_buffer_request_room(&port->port, 1);
702                 tty_insert_flip_string(&port->port, ch, 1);
703         }
704
705         if (port_priv->is_open)
706                 tty_flip_buffer_push(&port->port);
707 }
708
709 static void qt2_write_bulk_callback(struct urb *urb)
710 {
711         struct usb_serial_port *port;
712         struct qt2_port_private *port_priv;
713
714         port = urb->context;
715         port_priv = usb_get_serial_port_data(port);
716
717         spin_lock(&port_priv->urb_lock);
718
719         port_priv->urb_in_use = false;
720         usb_serial_port_softint(port);
721
722         spin_unlock(&port_priv->urb_lock);
723
724 }
725
726 static void qt2_read_bulk_callback(struct urb *urb)
727 {
728         struct usb_serial *serial = urb->context;
729         int status;
730
731         if (urb->status) {
732                 dev_warn(&serial->dev->dev,
733                          "%s - non-zero urb status: %i\n", __func__,
734                          urb->status);
735                 return;
736         }
737
738         qt2_process_read_urb(urb);
739
740         status = usb_submit_urb(urb, GFP_ATOMIC);
741         if (status != 0)
742                 dev_err(&serial->dev->dev,
743                         "%s - resubmit read urb failed: %i\n",
744                         __func__, status);
745 }
746
747 static int qt2_setup_urbs(struct usb_serial *serial)
748 {
749         struct usb_serial_port *port0;
750         struct qt2_serial_private *serial_priv;
751         int status;
752
753         port0 = serial->port[0];
754
755         serial_priv = usb_get_serial_data(serial);
756         serial_priv->read_urb = usb_alloc_urb(0, GFP_KERNEL);
757         if (!serial_priv->read_urb) {
758                 dev_err(&serial->dev->dev, "No free urbs available\n");
759                 return -ENOMEM;
760         }
761
762         usb_fill_bulk_urb(serial_priv->read_urb, serial->dev,
763                           usb_rcvbulkpipe(serial->dev,
764                                           port0->bulk_in_endpointAddress),
765                           serial_priv->read_buffer,
766                           sizeof(serial_priv->read_buffer),
767                           qt2_read_bulk_callback, serial);
768
769         status = usb_submit_urb(serial_priv->read_urb, GFP_KERNEL);
770         if (status != 0) {
771                 dev_err(&serial->dev->dev,
772                         "%s - submit read urb failed %i\n", __func__, status);
773                 usb_free_urb(serial_priv->read_urb);
774                 return status;
775         }
776
777         return 0;
778 }
779
780 static int qt2_attach(struct usb_serial *serial)
781 {
782         struct qt2_serial_private *serial_priv;
783         int status;
784
785         /* power on unit */
786         status = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
787                                  0xc2, 0x40, 0x8000, 0, NULL, 0,
788                                  QT2_USB_TIMEOUT);
789         if (status < 0) {
790                 dev_err(&serial->dev->dev,
791                         "%s - failed to power on unit: %i\n", __func__, status);
792                 return status;
793         }
794
795         serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
796         if (!serial_priv) {
797                 dev_err(&serial->dev->dev, "%s - Out of memory\n", __func__);
798                 return -ENOMEM;
799         }
800
801         usb_set_serial_data(serial, serial_priv);
802
803         status = qt2_setup_urbs(serial);
804         if (status != 0)
805                 goto attach_failed;
806
807         return 0;
808
809 attach_failed:
810         kfree(serial_priv);
811         return status;
812 }
813
814 static int qt2_port_probe(struct usb_serial_port *port)
815 {
816         struct usb_serial *serial = port->serial;
817         struct qt2_port_private *port_priv;
818         u8 bEndpointAddress;
819
820         port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
821         if (!port_priv)
822                 return -ENOMEM;
823
824         spin_lock_init(&port_priv->lock);
825         spin_lock_init(&port_priv->urb_lock);
826         init_waitqueue_head(&port_priv->delta_msr_wait);
827         port_priv->port = port;
828
829         port_priv->write_urb = usb_alloc_urb(0, GFP_KERNEL);
830         if (!port_priv->write_urb) {
831                 kfree(port_priv);
832                 return -ENOMEM;
833         }
834         bEndpointAddress = serial->port[0]->bulk_out_endpointAddress;
835         usb_fill_bulk_urb(port_priv->write_urb, serial->dev,
836                                 usb_sndbulkpipe(serial->dev, bEndpointAddress),
837                                 port_priv->write_buffer,
838                                 sizeof(port_priv->write_buffer),
839                                 qt2_write_bulk_callback, port);
840
841         usb_set_serial_port_data(port, port_priv);
842
843         return 0;
844 }
845
846 static int qt2_port_remove(struct usb_serial_port *port)
847 {
848         struct qt2_port_private *port_priv;
849
850         port_priv = usb_get_serial_port_data(port);
851         usb_free_urb(port_priv->write_urb);
852         kfree(port_priv);
853
854         return 0;
855 }
856
857 static int qt2_tiocmget(struct tty_struct *tty)
858 {
859         struct usb_serial_port *port = tty->driver_data;
860         struct usb_device *dev = port->serial->dev;
861         struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
862         u8 *d;
863         int r;
864
865         d = kzalloc(2, GFP_KERNEL);
866         if (!d)
867                 return -ENOMEM;
868
869         r = qt2_getregister(dev, port_priv->device_port, UART_MCR, d);
870         if (r < 0)
871                 goto mget_out;
872
873         r = qt2_getregister(dev, port_priv->device_port, UART_MSR, d + 1);
874         if (r < 0)
875                 goto mget_out;
876
877         r = (d[0] & UART_MCR_DTR ? TIOCM_DTR : 0) |
878             (d[0] & UART_MCR_RTS ? TIOCM_RTS : 0) |
879             (d[1] & UART_MSR_CTS ? TIOCM_CTS : 0) |
880             (d[1] & UART_MSR_DCD ? TIOCM_CAR : 0) |
881             (d[1] & UART_MSR_RI ? TIOCM_RI : 0) |
882             (d[1] & UART_MSR_DSR ? TIOCM_DSR : 0);
883
884 mget_out:
885         kfree(d);
886         return r;
887 }
888
889 static int qt2_tiocmset(struct tty_struct *tty,
890                         unsigned int set, unsigned int clear)
891 {
892         struct qt2_port_private *port_priv;
893
894         port_priv = usb_get_serial_port_data(tty->driver_data);
895         return update_mctrl(port_priv, set, clear);
896 }
897
898 static void qt2_break_ctl(struct tty_struct *tty, int break_state)
899 {
900         struct usb_serial_port *port = tty->driver_data;
901         struct qt2_port_private *port_priv;
902         int status;
903         u16 val;
904
905         port_priv = usb_get_serial_port_data(port);
906
907         val = (break_state == -1) ? 1 : 0;
908
909         status = qt2_control_msg(port->serial->dev, QT2_BREAK_CONTROL,
910                                  val, port_priv->device_port);
911         if (status < 0)
912                 dev_warn(&port->dev,
913                          "%s - failed to send control message: %i\n", __func__,
914                          status);
915 }
916
917
918
919 static void qt2_dtr_rts(struct usb_serial_port *port, int on)
920 {
921         struct usb_device *dev = port->serial->dev;
922         struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
923
924         /* Disable flow control */
925         if (!on) {
926                 if (qt2_setregister(dev, port_priv->device_port,
927                                            UART_MCR, 0) < 0)
928                         dev_warn(&port->dev, "error from flowcontrol urb\n");
929         }
930         /* drop RTS and DTR */
931         if (on)
932                 update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0);
933         else
934                 update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS);
935 }
936
937 static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch)
938 {
939         struct qt2_port_private *port_priv;
940         u8 newMSR = (u8) *ch;
941         unsigned long flags;
942
943         port_priv = usb_get_serial_port_data(port);
944
945         spin_lock_irqsave(&port_priv->lock, flags);
946         port_priv->shadowMSR = newMSR;
947         spin_unlock_irqrestore(&port_priv->lock, flags);
948
949         if (newMSR & UART_MSR_ANY_DELTA) {
950                 /* update input line counters */
951                 if (newMSR & UART_MSR_DCTS)
952                         port_priv->icount.cts++;
953
954                 if (newMSR & UART_MSR_DDSR)
955                         port_priv->icount.dsr++;
956
957                 if (newMSR & UART_MSR_DDCD)
958                         port_priv->icount.dcd++;
959
960                 if (newMSR & UART_MSR_TERI)
961                         port_priv->icount.rng++;
962
963                 wake_up_interruptible(&port_priv->delta_msr_wait);
964         }
965 }
966
967 static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch)
968 {
969         struct qt2_port_private *port_priv;
970         struct async_icount *icount;
971         unsigned long flags;
972         u8 newLSR = (u8) *ch;
973
974         port_priv = usb_get_serial_port_data(port);
975
976         if (newLSR & UART_LSR_BI)
977                 newLSR &= (u8) (UART_LSR_OE | UART_LSR_BI);
978
979         spin_lock_irqsave(&port_priv->lock, flags);
980         port_priv->shadowLSR = newLSR;
981         spin_unlock_irqrestore(&port_priv->lock, flags);
982
983         icount = &port_priv->icount;
984
985         if (newLSR & UART_LSR_BRK_ERROR_BITS) {
986
987                 if (newLSR & UART_LSR_BI)
988                         icount->brk++;
989
990                 if (newLSR & UART_LSR_OE)
991                         icount->overrun++;
992
993                 if (newLSR & UART_LSR_PE)
994                         icount->parity++;
995
996                 if (newLSR & UART_LSR_FE)
997                         icount->frame++;
998         }
999
1000 }
1001
1002 static int qt2_write_room(struct tty_struct *tty)
1003 {
1004         struct usb_serial_port *port = tty->driver_data;
1005         struct qt2_port_private *port_priv;
1006         unsigned long flags = 0;
1007         int r;
1008
1009         port_priv = usb_get_serial_port_data(port);
1010
1011         spin_lock_irqsave(&port_priv->urb_lock, flags);
1012
1013         if (port_priv->urb_in_use)
1014                 r = 0;
1015         else
1016                 r = QT2_WRITE_BUFFER_SIZE - QT2_WRITE_CONTROL_SIZE;
1017
1018         spin_unlock_irqrestore(&port_priv->urb_lock, flags);
1019
1020         return r;
1021 }
1022
1023 static int qt2_write(struct tty_struct *tty,
1024                      struct usb_serial_port *port,
1025                      const unsigned char *buf, int count)
1026 {
1027         struct qt2_port_private *port_priv;
1028         struct urb *write_urb;
1029         unsigned char *data;
1030         unsigned long flags;
1031         int status;
1032         int bytes_out = 0;
1033
1034         port_priv = usb_get_serial_port_data(port);
1035
1036         if (port_priv->write_urb == NULL) {
1037                 dev_err(&port->dev, "%s - no output urb\n", __func__);
1038                 return 0;
1039         }
1040         write_urb = port_priv->write_urb;
1041
1042         count = min(count, QT2_WRITE_BUFFER_SIZE - QT2_WRITE_CONTROL_SIZE);
1043
1044         data = write_urb->transfer_buffer;
1045         spin_lock_irqsave(&port_priv->urb_lock, flags);
1046         if (port_priv->urb_in_use == true) {
1047                 dev_err(&port->dev, "qt2_write - urb is in use\n");
1048                 goto write_out;
1049         }
1050
1051         *data++ = QT2_CONTROL_BYTE;
1052         *data++ = QT2_CONTROL_BYTE;
1053         *data++ = port_priv->device_port;
1054         put_unaligned_le16(count, data);
1055         data += 2;
1056         memcpy(data, buf, count);
1057
1058         write_urb->transfer_buffer_length = count + QT2_WRITE_CONTROL_SIZE;
1059
1060         status = usb_submit_urb(write_urb, GFP_ATOMIC);
1061         if (status == 0) {
1062                 port_priv->urb_in_use = true;
1063                 bytes_out += count;
1064         }
1065
1066 write_out:
1067         spin_unlock_irqrestore(&port_priv->urb_lock, flags);
1068         return bytes_out;
1069 }
1070
1071
1072 static struct usb_serial_driver qt2_device = {
1073         .driver = {
1074                 .owner = THIS_MODULE,
1075                 .name = "quatech-serial",
1076         },
1077         .description         = DRIVER_DESC,
1078         .id_table            = id_table,
1079         .open                = qt2_open,
1080         .close               = qt2_close,
1081         .write               = qt2_write,
1082         .write_room          = qt2_write_room,
1083         .calc_num_ports      = qt2_calc_num_ports,
1084         .attach              = qt2_attach,
1085         .release             = qt2_release,
1086         .disconnect          = qt2_disconnect,
1087         .port_probe          = qt2_port_probe,
1088         .port_remove         = qt2_port_remove,
1089         .dtr_rts             = qt2_dtr_rts,
1090         .break_ctl           = qt2_break_ctl,
1091         .tiocmget            = qt2_tiocmget,
1092         .tiocmset            = qt2_tiocmset,
1093         .get_icount          = qt2_get_icount,
1094         .ioctl               = qt2_ioctl,
1095         .set_termios         = qt2_set_termios,
1096 };
1097
1098 static struct usb_serial_driver *const serial_drivers[] = {
1099         &qt2_device, NULL
1100 };
1101
1102 module_usb_serial_driver(serial_drivers, id_table);
1103
1104 MODULE_DESCRIPTION(DRIVER_DESC);
1105 MODULE_LICENSE("GPL");