USB: option: support new huawei devices
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / usb / serial / keyspan_pda.c
CommitLineData
1da177e4
LT
1/*
2 * USB Keyspan PDA / Xircom / Entregra Converter driver
3 *
4 * Copyright (C) 1999 - 2001 Greg Kroah-Hartman <greg@kroah.com>
5 * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
6 * Copyright (C) 2000 Al Borchers <borchers@steinerpoint.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
9e70f319
AC
13 * See Documentation/usb/usb-serial.txt for more information on using this
14 * driver
1da177e4
LT
15 */
16
17
1da177e4
LT
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/module.h>
26#include <linux/spinlock.h>
27#include <linux/workqueue.h>
9e70f319 28#include <linux/uaccess.h>
1da177e4 29#include <linux/usb.h>
a969888c 30#include <linux/usb/serial.h>
cc183e2a 31#include <linux/usb/ezusb.h>
1da177e4 32
1da177e4
LT
33/* make a simple define to handle if we are compiling keyspan_pda or xircom support */
34#if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE)
35 #define KEYSPAN
36#else
37 #undef KEYSPAN
38#endif
39#if defined(CONFIG_USB_SERIAL_XIRCOM) || defined(CONFIG_USB_SERIAL_XIRCOM_MODULE)
40 #define XIRCOM
41#else
42 #undef XIRCOM
43#endif
44
1da177e4
LT
45#define DRIVER_AUTHOR "Brian Warner <warner@lothar.com>"
46#define DRIVER_DESC "USB Keyspan PDA Converter driver"
47
48struct keyspan_pda_private {
49 int tx_room;
50 int tx_throttled;
51 struct work_struct wakeup_work;
52 struct work_struct unthrottle_work;
c4028958
DH
53 struct usb_serial *serial;
54 struct usb_serial_port *port;
1da177e4
LT
55};
56
57
58#define KEYSPAN_VENDOR_ID 0x06cd
59#define KEYSPAN_PDA_FAKE_ID 0x0103
60#define KEYSPAN_PDA_ID 0x0104 /* no clue */
61
62/* For Xircom PGSDB9 and older Entregra version of the same device */
63#define XIRCOM_VENDOR_ID 0x085a
64#define XIRCOM_FAKE_ID 0x8027
65#define ENTREGRA_VENDOR_ID 0x1645
66#define ENTREGRA_FAKE_ID 0x8093
67
7d40d7e8 68static const struct usb_device_id id_table_combined[] = {
1da177e4
LT
69#ifdef KEYSPAN
70 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_FAKE_ID) },
71#endif
72#ifdef XIRCOM
73 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
74 { USB_DEVICE(ENTREGRA_VENDOR_ID, ENTREGRA_FAKE_ID) },
75#endif
76 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
77 { } /* Terminating entry */
78};
79
9e70f319 80MODULE_DEVICE_TABLE(usb, id_table_combined);
1da177e4 81
7d40d7e8 82static const struct usb_device_id id_table_std[] = {
1da177e4
LT
83 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
84 { } /* Terminating entry */
85};
86
87#ifdef KEYSPAN
7d40d7e8 88static const struct usb_device_id id_table_fake[] = {
1da177e4
LT
89 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_FAKE_ID) },
90 { } /* Terminating entry */
91};
92#endif
93
94#ifdef XIRCOM
7d40d7e8 95static const struct usb_device_id id_table_fake_xircom[] = {
9e70f319
AC
96 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
97 { USB_DEVICE(ENTREGRA_VENDOR_ID, ENTREGRA_FAKE_ID) },
98 { }
1da177e4
LT
99};
100#endif
101
c4028958 102static void keyspan_pda_wakeup_write(struct work_struct *work)
1da177e4 103{
c4028958
DH
104 struct keyspan_pda_private *priv =
105 container_of(work, struct keyspan_pda_private, wakeup_work);
106 struct usb_serial_port *port = priv->port;
6aad04f2
JS
107
108 tty_port_tty_wakeup(&port->port);
1da177e4
LT
109}
110
c4028958 111static void keyspan_pda_request_unthrottle(struct work_struct *work)
1da177e4 112{
c4028958
DH
113 struct keyspan_pda_private *priv =
114 container_of(work, struct keyspan_pda_private, unthrottle_work);
115 struct usb_serial *serial = priv->serial;
1da177e4
LT
116 int result;
117
1da177e4
LT
118 /* ask the device to tell us when the tx buffer becomes
119 sufficiently empty */
9e70f319 120 result = usb_control_msg(serial->dev,
1da177e4
LT
121 usb_sndctrlpipe(serial->dev, 0),
122 7, /* request_unthrottle */
123 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
124 | USB_DIR_OUT,
125 16, /* value: threshold */
126 0, /* index */
127 NULL,
128 0,
129 2000);
130 if (result < 0)
826575fc
GKH
131 dev_dbg(&serial->dev->dev, "%s - error %d from usb_control_msg\n",
132 __func__, result);
1da177e4
LT
133}
134
135
9e70f319 136static void keyspan_pda_rx_interrupt(struct urb *urb)
1da177e4 137{
cdc97792 138 struct usb_serial_port *port = urb->context;
1da177e4 139 unsigned char *data = urb->transfer_buffer;
23189aee
GKH
140 int retval;
141 int status = urb->status;
1da177e4
LT
142 struct keyspan_pda_private *priv;
143 priv = usb_get_serial_port_data(port);
144
23189aee 145 switch (status) {
1da177e4
LT
146 case 0:
147 /* success */
148 break;
149 case -ECONNRESET:
150 case -ENOENT:
151 case -ESHUTDOWN:
152 /* this urb is terminated, clean up */
826575fc 153 dev_dbg(&urb->dev->dev, "%s - urb shutting down with status: %d\n", __func__, status);
f7d7aedf 154 return;
1da177e4 155 default:
826575fc 156 dev_dbg(&urb->dev->dev, "%s - nonzero urb status received: %d\n", __func__, status);
1da177e4
LT
157 goto exit;
158 }
159
9e70f319 160 /* see if the message is data or a status interrupt */
1da177e4
LT
161 switch (data[0]) {
162 case 0:
f7d7aedf 163 /* rest of message is rx data */
2e124b4a 164 if (urb->actual_length) {
05c7cd39 165 tty_insert_flip_string(&port->port, data + 1,
8dd03a5b 166 urb->actual_length - 1);
2e124b4a 167 tty_flip_buffer_push(&port->port);
1da177e4
LT
168 }
169 break;
170 case 1:
171 /* status interrupt */
826575fc 172 dev_dbg(&port->dev, "rx int, d1=%d, d2=%d\n", data[1], data[2]);
1da177e4
LT
173 switch (data[1]) {
174 case 1: /* modemline change */
175 break;
176 case 2: /* tx unthrottle interrupt */
177 priv->tx_throttled = 0;
178 /* queue up a wakeup at scheduler time */
179 schedule_work(&priv->wakeup_work);
180 break;
181 default:
182 break;
183 }
184 break;
185 default:
186 break;
187 }
188
189exit:
9e70f319 190 retval = usb_submit_urb(urb, GFP_ATOMIC);
23189aee 191 if (retval)
4a90f09b
AC
192 dev_err(&port->dev,
193 "%s - usb_submit_urb failed with result %d",
194 __func__, retval);
1da177e4
LT
195}
196
197
95da310e 198static void keyspan_pda_rx_throttle(struct tty_struct *tty)
1da177e4
LT
199{
200 /* stop receiving characters. We just turn off the URB request, and
201 let chars pile up in the device. If we're doing hardware
202 flowcontrol, the device will signal the other end when its buffer
203 fills up. If we're doing XON/XOFF, this would be a good time to
204 send an XOFF, although it might make sense to foist that off
205 upon the device too. */
95da310e 206 struct usb_serial_port *port = tty->driver_data;
5542cf79 207
1da177e4
LT
208 usb_kill_urb(port->interrupt_in_urb);
209}
210
211
95da310e 212static void keyspan_pda_rx_unthrottle(struct tty_struct *tty)
1da177e4 213{
95da310e 214 struct usb_serial_port *port = tty->driver_data;
1da177e4 215 /* just restart the receive interrupt URB */
5542cf79 216
63832515 217 if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL))
826575fc 218 dev_dbg(&port->dev, "usb_submit_urb(read urb) failed\n");
1da177e4
LT
219}
220
221
9e70f319 222static speed_t keyspan_pda_setbaud(struct usb_serial *serial, speed_t baud)
1da177e4
LT
223{
224 int rc;
225 int bindex;
226
9e70f319
AC
227 switch (baud) {
228 case 110:
229 bindex = 0;
230 break;
231 case 300:
232 bindex = 1;
233 break;
234 case 1200:
235 bindex = 2;
236 break;
237 case 2400:
238 bindex = 3;
239 break;
240 case 4800:
241 bindex = 4;
242 break;
243 case 9600:
244 bindex = 5;
245 break;
246 case 19200:
247 bindex = 6;
248 break;
249 case 38400:
250 bindex = 7;
251 break;
252 case 57600:
253 bindex = 8;
254 break;
255 case 115200:
256 bindex = 9;
257 break;
258 default:
259 bindex = 5; /* Default to 9600 */
260 baud = 9600;
1da177e4
LT
261 }
262
263 /* rather than figure out how to sleep while waiting for this
264 to complete, I just use the "legacy" API. */
265 rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
266 0, /* set baud */
9e70f319 267 USB_TYPE_VENDOR
1da177e4
LT
268 | USB_RECIP_INTERFACE
269 | USB_DIR_OUT, /* type */
270 bindex, /* value */
271 0, /* index */
272 NULL, /* &data */
273 0, /* size */
274 2000); /* timeout */
e7806e36
AC
275 if (rc < 0)
276 return 0;
277 return baud;
1da177e4
LT
278}
279
280
95da310e 281static void keyspan_pda_break_ctl(struct tty_struct *tty, int break_state)
1da177e4 282{
95da310e 283 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
284 struct usb_serial *serial = port->serial;
285 int value;
286 int result;
287
288 if (break_state == -1)
289 value = 1; /* start break */
290 else
291 value = 0; /* clear break */
292 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
9e70f319
AC
293 4, /* set break */
294 USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT,
295 value, 0, NULL, 0, 2000);
1da177e4 296 if (result < 0)
826575fc
GKH
297 dev_dbg(&port->dev, "%s - error %d from usb_control_msg\n",
298 __func__, result);
1da177e4
LT
299 /* there is something funky about this.. the TCSBRK that 'cu' performs
300 ought to translate into a break_ctl(-1),break_ctl(0) pair HZ/4
301 seconds apart, but it feels like the break sent isn't as long as it
302 is on /dev/ttyS0 */
303}
304
305
95da310e
AC
306static void keyspan_pda_set_termios(struct tty_struct *tty,
307 struct usb_serial_port *port, struct ktermios *old_termios)
1da177e4
LT
308{
309 struct usb_serial *serial = port->serial;
e7806e36 310 speed_t speed;
1da177e4
LT
311
312 /* cflag specifies lots of stuff: number of stop bits, parity, number
313 of data bits, baud. What can the device actually handle?:
314 CSTOPB (1 stop bit or 2)
315 PARENB (parity)
316 CSIZE (5bit .. 8bit)
317 There is minimal hw support for parity (a PSW bit seems to hold the
318 parity of whatever is in the accumulator). The UART either deals
319 with 10 bits (start, 8 data, stop) or 11 bits (start, 8 data,
320 1 special, stop). So, with firmware changes, we could do:
321 8N1: 10 bit
322 8N2: 11 bit, extra bit always (mark?)
323 8[EOMS]1: 11 bit, extra bit is parity
324 7[EOMS]1: 10 bit, b0/b7 is parity
325 7[EOMS]2: 11 bit, b0/b7 is parity, extra bit always (mark?)
326
adc8d746 327 HW flow control is dictated by the tty->termios.c_cflags & CRTSCTS
1da177e4
LT
328 bit.
329
330 For now, just do baud. */
331
95da310e 332 speed = tty_get_baud_rate(tty);
e7806e36
AC
333 speed = keyspan_pda_setbaud(serial, speed);
334
335 if (speed == 0) {
826575fc 336 dev_dbg(&port->dev, "can't handle requested baud rate\n");
e7806e36
AC
337 /* It hasn't changed so.. */
338 speed = tty_termios_baud_rate(old_termios);
1da177e4 339 }
e7806e36
AC
340 /* Only speed can change so copy the old h/w parameters
341 then encode the new speed */
adc8d746 342 tty_termios_copy_hw(&tty->termios, old_termios);
95da310e 343 tty_encode_baud_rate(tty, speed, speed);
1da177e4
LT
344}
345
346
347/* modem control pins: DTR and RTS are outputs and can be controlled.
348 DCD, RI, DSR, CTS are inputs and can be read. All outputs can also be
349 read. The byte passed is: DTR(b7) DCD RI DSR CTS RTS(b2) unused unused */
350
351static int keyspan_pda_get_modem_info(struct usb_serial *serial,
352 unsigned char *value)
353{
354 int rc;
ca65d256
JH
355 u8 *data;
356
357 data = kmalloc(1, GFP_KERNEL);
358 if (!data)
359 return -ENOMEM;
360
1da177e4
LT
361 rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
362 3, /* get pins */
363 USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN,
ca65d256 364 0, 0, data, 1, 2000);
3b36a8fd 365 if (rc >= 0)
ca65d256
JH
366 *value = *data;
367
368 kfree(data);
1da177e4
LT
369 return rc;
370}
371
372
373static int keyspan_pda_set_modem_info(struct usb_serial *serial,
374 unsigned char value)
375{
376 int rc;
377 rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
378 3, /* set pins */
379 USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_OUT,
380 value, 0, NULL, 0, 2000);
381 return rc;
382}
383
60b33c13 384static int keyspan_pda_tiocmget(struct tty_struct *tty)
1da177e4 385{
95da310e 386 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
387 struct usb_serial *serial = port->serial;
388 int rc;
389 unsigned char status;
390 int value;
391
392 rc = keyspan_pda_get_modem_info(serial, &status);
393 if (rc < 0)
394 return rc;
395 value =
396 ((status & (1<<7)) ? TIOCM_DTR : 0) |
397 ((status & (1<<6)) ? TIOCM_CAR : 0) |
398 ((status & (1<<5)) ? TIOCM_RNG : 0) |
399 ((status & (1<<4)) ? TIOCM_DSR : 0) |
400 ((status & (1<<3)) ? TIOCM_CTS : 0) |
401 ((status & (1<<2)) ? TIOCM_RTS : 0);
402 return value;
403}
404
20b9d177 405static int keyspan_pda_tiocmset(struct tty_struct *tty,
1da177e4
LT
406 unsigned int set, unsigned int clear)
407{
95da310e 408 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
409 struct usb_serial *serial = port->serial;
410 int rc;
411 unsigned char status;
412
413 rc = keyspan_pda_get_modem_info(serial, &status);
414 if (rc < 0)
415 return rc;
416
417 if (set & TIOCM_RTS)
418 status |= (1<<2);
419 if (set & TIOCM_DTR)
420 status |= (1<<7);
421
422 if (clear & TIOCM_RTS)
423 status &= ~(1<<2);
424 if (clear & TIOCM_DTR)
425 status &= ~(1<<7);
426 rc = keyspan_pda_set_modem_info(serial, status);
427 return rc;
428}
429
95da310e
AC
430static int keyspan_pda_write(struct tty_struct *tty,
431 struct usb_serial_port *port, const unsigned char *buf, int count)
1da177e4
LT
432{
433 struct usb_serial *serial = port->serial;
434 int request_unthrottle = 0;
435 int rc = 0;
436 struct keyspan_pda_private *priv;
437
438 priv = usb_get_serial_port_data(port);
439 /* guess how much room is left in the device's ring buffer, and if we
440 want to send more than that, check first, updating our notion of
441 what is left. If our write will result in no room left, ask the
442 device to give us an interrupt when the room available rises above
443 a threshold, and hold off all writers (eventually, those using
444 select() or poll() too) until we receive that unthrottle interrupt.
445 Block if we can't write anything at all, otherwise write as much as
446 we can. */
1da177e4 447 if (count == 0) {
826575fc 448 dev_dbg(&port->dev, "write request of 0 bytes\n");
9e70f319 449 return 0;
1da177e4
LT
450 }
451
452 /* we might block because of:
453 the TX urb is in-flight (wait until it completes)
454 the device is full (wait until it says there is room)
455 */
e81ee637 456 spin_lock_bh(&port->lock);
da280e34 457 if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled) {
e81ee637 458 spin_unlock_bh(&port->lock);
507ca9bc 459 return 0;
1da177e4 460 }
da280e34 461 clear_bit(0, &port->write_urbs_free);
e81ee637 462 spin_unlock_bh(&port->lock);
1da177e4
LT
463
464 /* At this point the URB is in our control, nobody else can submit it
465 again (the only sudden transition was the one from EINPROGRESS to
466 finished). Also, the tx process is not throttled. So we are
467 ready to write. */
468
469 count = (count > port->bulk_out_size) ? port->bulk_out_size : count;
470
471 /* Check if we might overrun the Tx buffer. If so, ask the
472 device how much room it really has. This is done only on
473 scheduler time, since usb_control_msg() sleeps. */
474 if (count > priv->tx_room && !in_interrupt()) {
ca65d256
JH
475 u8 *room;
476
477 room = kmalloc(1, GFP_KERNEL);
478 if (!room) {
479 rc = -ENOMEM;
480 goto exit;
481 }
482
9e70f319 483 rc = usb_control_msg(serial->dev,
1da177e4
LT
484 usb_rcvctrlpipe(serial->dev, 0),
485 6, /* write_room */
486 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
487 | USB_DIR_IN,
488 0, /* value: 0 means "remaining room" */
489 0, /* index */
ca65d256 490 room,
1da177e4
LT
491 1,
492 2000);
ca65d256 493 if (rc > 0) {
826575fc 494 dev_dbg(&port->dev, "roomquery says %d\n", *room);
ca65d256
JH
495 priv->tx_room = *room;
496 }
497 kfree(room);
1da177e4 498 if (rc < 0) {
826575fc 499 dev_dbg(&port->dev, "roomquery failed\n");
1da177e4
LT
500 goto exit;
501 }
502 if (rc == 0) {
826575fc 503 dev_dbg(&port->dev, "roomquery returned 0 bytes\n");
1da177e4
LT
504 rc = -EIO; /* device didn't return any data */
505 goto exit;
506 }
1da177e4
LT
507 }
508 if (count > priv->tx_room) {
509 /* we're about to completely fill the Tx buffer, so
510 we'll be throttled afterwards. */
511 count = priv->tx_room;
512 request_unthrottle = 1;
513 }
514
515 if (count) {
516 /* now transfer data */
9e70f319 517 memcpy(port->write_urb->transfer_buffer, buf, count);
1da177e4
LT
518 /* send the data out the bulk port */
519 port->write_urb->transfer_buffer_length = count;
507ca9bc 520
1da177e4
LT
521 priv->tx_room -= count;
522
1da177e4
LT
523 rc = usb_submit_urb(port->write_urb, GFP_ATOMIC);
524 if (rc) {
826575fc 525 dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed\n");
1da177e4
LT
526 goto exit;
527 }
9e70f319 528 } else {
1da177e4
LT
529 /* There wasn't any room left, so we are throttled until
530 the buffer empties a bit */
531 request_unthrottle = 1;
532 }
533
534 if (request_unthrottle) {
535 priv->tx_throttled = 1; /* block writers */
536 schedule_work(&priv->unthrottle_work);
537 }
538
539 rc = count;
540exit:
507ca9bc 541 if (rc < 0)
da280e34 542 set_bit(0, &port->write_urbs_free);
1da177e4
LT
543 return rc;
544}
545
546
9e70f319 547static void keyspan_pda_write_bulk_callback(struct urb *urb)
1da177e4 548{
cdc97792 549 struct usb_serial_port *port = urb->context;
1da177e4
LT
550 struct keyspan_pda_private *priv;
551
da280e34 552 set_bit(0, &port->write_urbs_free);
1da177e4
LT
553 priv = usb_get_serial_port_data(port);
554
555 /* queue up a wakeup at scheduler time */
556 schedule_work(&priv->wakeup_work);
557}
558
559
95da310e 560static int keyspan_pda_write_room(struct tty_struct *tty)
1da177e4 561{
95da310e 562 struct usb_serial_port *port = tty->driver_data;
1da177e4 563 struct keyspan_pda_private *priv;
1da177e4 564 priv = usb_get_serial_port_data(port);
1da177e4
LT
565 /* used by n_tty.c for processing of tabs and such. Giving it our
566 conservative guess is probably good enough, but needs testing by
567 running a console through the device. */
9e70f319 568 return priv->tx_room;
1da177e4
LT
569}
570
571
95da310e 572static int keyspan_pda_chars_in_buffer(struct tty_struct *tty)
1da177e4 573{
95da310e 574 struct usb_serial_port *port = tty->driver_data;
1da177e4 575 struct keyspan_pda_private *priv;
a5b6f60c
AC
576 unsigned long flags;
577 int ret = 0;
507ca9bc 578
1da177e4 579 priv = usb_get_serial_port_data(port);
507ca9bc 580
1da177e4
LT
581 /* when throttled, return at least WAKEUP_CHARS to tell select() (via
582 n_tty.c:normal_poll() ) that we're not writeable. */
a5b6f60c
AC
583
584 spin_lock_irqsave(&port->lock, flags);
da280e34 585 if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled)
a5b6f60c
AC
586 ret = 256;
587 spin_unlock_irqrestore(&port->lock, flags);
588 return ret;
1da177e4
LT
589}
590
591
335f8514
AC
592static void keyspan_pda_dtr_rts(struct usb_serial_port *port, int on)
593{
594 struct usb_serial *serial = port->serial;
595
d7f08452
JH
596 if (on)
597 keyspan_pda_set_modem_info(serial, (1 << 7) | (1 << 2));
598 else
599 keyspan_pda_set_modem_info(serial, 0);
335f8514
AC
600}
601
335f8514 602
95da310e 603static int keyspan_pda_open(struct tty_struct *tty,
a509a7e4 604 struct usb_serial_port *port)
1da177e4
LT
605{
606 struct usb_serial *serial = port->serial;
ca65d256 607 u8 *room;
1da177e4
LT
608 int rc = 0;
609 struct keyspan_pda_private *priv;
610
611 /* find out how much room is in the Tx ring */
ca65d256
JH
612 room = kmalloc(1, GFP_KERNEL);
613 if (!room)
614 return -ENOMEM;
615
1da177e4
LT
616 rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
617 6, /* write_room */
618 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
619 | USB_DIR_IN,
620 0, /* value */
621 0, /* index */
ca65d256 622 room,
1da177e4
LT
623 1,
624 2000);
625 if (rc < 0) {
826575fc 626 dev_dbg(&port->dev, "%s - roomquery failed\n", __func__);
1da177e4
LT
627 goto error;
628 }
629 if (rc == 0) {
826575fc 630 dev_dbg(&port->dev, "%s - roomquery returned 0 bytes\n", __func__);
1da177e4
LT
631 rc = -EIO;
632 goto error;
633 }
634 priv = usb_get_serial_port_data(port);
ca65d256
JH
635 priv->tx_room = *room;
636 priv->tx_throttled = *room ? 0 : 1;
1da177e4 637
1da177e4 638 /*Start reading from the device*/
1da177e4
LT
639 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
640 if (rc) {
826575fc 641 dev_dbg(&port->dev, "%s - usb_submit_urb(read int) failed\n", __func__);
1da177e4
LT
642 goto error;
643 }
1da177e4 644error:
ca65d256 645 kfree(room);
1da177e4
LT
646 return rc;
647}
335f8514 648static void keyspan_pda_close(struct usb_serial_port *port)
1da177e4 649{
75d22b32
JH
650 usb_kill_urb(port->write_urb);
651 usb_kill_urb(port->interrupt_in_urb);
1da177e4
LT
652}
653
654
655/* download the firmware to a "fake" device (pre-renumeration) */
9e70f319 656static int keyspan_pda_fake_startup(struct usb_serial *serial)
1da177e4
LT
657{
658 int response;
3edbf98b 659 const char *fw_name;
1da177e4
LT
660
661 /* download the firmware here ... */
cc183e2a 662 response = ezusb_fx1_set_reset(serial->dev, 1);
1da177e4 663
3edbf98b 664 if (0) { ; }
1da177e4 665#ifdef KEYSPAN
3edbf98b
DW
666 else if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
667 fw_name = "keyspan_pda/keyspan_pda.fw";
1da177e4
LT
668#endif
669#ifdef XIRCOM
3edbf98b
DW
670 else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
671 (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
672 fw_name = "keyspan_pda/xircom_pgs.fw";
1da177e4 673#endif
3edbf98b 674 else {
194343d9
GKH
675 dev_err(&serial->dev->dev, "%s: unknown vendor, aborting.\n",
676 __func__);
1da177e4
LT
677 return -ENODEV;
678 }
8d733e26
RB
679
680 if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) {
194343d9
GKH
681 dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
682 fw_name);
3edbf98b
DW
683 return -ENOENT;
684 }
8d733e26
RB
685
686 /* after downloading firmware Renumeration will occur in a
687 moment and the new device will bind to the real driver */
1da177e4
LT
688
689 /* we want this device to fail to have a driver assigned to it. */
9e70f319 690 return 1;
1da177e4
LT
691}
692
e6c4ef98
BH
693#ifdef KEYSPAN
694MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
695#endif
696#ifdef XIRCOM
697MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
698#endif
699
94ab71ce 700static int keyspan_pda_port_probe(struct usb_serial_port *port)
1da177e4
LT
701{
702
703 struct keyspan_pda_private *priv;
704
1da177e4
LT
705 priv = kmalloc(sizeof(struct keyspan_pda_private), GFP_KERNEL);
706 if (!priv)
94ab71ce
JH
707 return -ENOMEM;
708
c4028958
DH
709 INIT_WORK(&priv->wakeup_work, keyspan_pda_wakeup_write);
710 INIT_WORK(&priv->unthrottle_work, keyspan_pda_request_unthrottle);
94ab71ce
JH
711 priv->serial = port->serial;
712 priv->port = port;
713
714 usb_set_serial_port_data(port, priv);
715
9e70f319 716 return 0;
1da177e4
LT
717}
718
94ab71ce 719static int keyspan_pda_port_remove(struct usb_serial_port *port)
1da177e4 720{
94ab71ce
JH
721 struct keyspan_pda_private *priv;
722
723 priv = usb_get_serial_port_data(port);
724 kfree(priv);
725
726 return 0;
1da177e4
LT
727}
728
729#ifdef KEYSPAN
ea65370d 730static struct usb_serial_driver keyspan_pda_fake_device = {
18fcac35
GKH
731 .driver = {
732 .owner = THIS_MODULE,
269bda1c 733 .name = "keyspan_pda_pre",
18fcac35 734 },
269bda1c 735 .description = "Keyspan PDA - (prerenumeration)",
1da177e4 736 .id_table = id_table_fake,
1da177e4
LT
737 .num_ports = 1,
738 .attach = keyspan_pda_fake_startup,
739};
740#endif
741
742#ifdef XIRCOM
ea65370d 743static struct usb_serial_driver xircom_pgs_fake_device = {
18fcac35
GKH
744 .driver = {
745 .owner = THIS_MODULE,
269bda1c 746 .name = "xircom_no_firm",
18fcac35 747 },
269bda1c 748 .description = "Xircom / Entregra PGS - (prerenumeration)",
1da177e4 749 .id_table = id_table_fake_xircom,
1da177e4
LT
750 .num_ports = 1,
751 .attach = keyspan_pda_fake_startup,
752};
753#endif
754
ea65370d 755static struct usb_serial_driver keyspan_pda_device = {
18fcac35
GKH
756 .driver = {
757 .owner = THIS_MODULE,
269bda1c 758 .name = "keyspan_pda",
18fcac35 759 },
269bda1c 760 .description = "Keyspan PDA",
1da177e4 761 .id_table = id_table_std,
1da177e4 762 .num_ports = 1,
335f8514 763 .dtr_rts = keyspan_pda_dtr_rts,
1da177e4
LT
764 .open = keyspan_pda_open,
765 .close = keyspan_pda_close,
766 .write = keyspan_pda_write,
767 .write_room = keyspan_pda_write_room,
768 .write_bulk_callback = keyspan_pda_write_bulk_callback,
769 .read_int_callback = keyspan_pda_rx_interrupt,
770 .chars_in_buffer = keyspan_pda_chars_in_buffer,
771 .throttle = keyspan_pda_rx_throttle,
772 .unthrottle = keyspan_pda_rx_unthrottle,
1da177e4
LT
773 .set_termios = keyspan_pda_set_termios,
774 .break_ctl = keyspan_pda_break_ctl,
775 .tiocmget = keyspan_pda_tiocmget,
776 .tiocmset = keyspan_pda_tiocmset,
94ab71ce
JH
777 .port_probe = keyspan_pda_port_probe,
778 .port_remove = keyspan_pda_port_remove,
1da177e4
LT
779};
780
8c49fc99
GKH
781static struct usb_serial_driver * const serial_drivers[] = {
782 &keyspan_pda_device,
1da177e4 783#ifdef KEYSPAN
8c49fc99 784 &keyspan_pda_fake_device,
1da177e4
LT
785#endif
786#ifdef XIRCOM
8c49fc99 787 &xircom_pgs_fake_device,
1da177e4 788#endif
8c49fc99
GKH
789 NULL
790};
1da177e4 791
68e24113 792module_usb_serial_driver(serial_drivers, id_table_combined);
1da177e4 793
9e70f319
AC
794MODULE_AUTHOR(DRIVER_AUTHOR);
795MODULE_DESCRIPTION(DRIVER_DESC);
1da177e4 796MODULE_LICENSE("GPL");