aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r--drivers/usb/serial/belkin_sa.c3
-rw-r--r--drivers/usb/serial/cypress_m8.c5
-rw-r--r--drivers/usb/serial/digi_acceleport.c10
-rw-r--r--drivers/usb/serial/empeg.c6
-rw-r--r--drivers/usb/serial/ftdi_sio.c10
-rw-r--r--drivers/usb/serial/io_edgeport.c24
-rw-r--r--drivers/usb/serial/io_ti.c5
-rw-r--r--drivers/usb/serial/kl5kusb105.c3
-rw-r--r--drivers/usb/serial/omninet.c5
-rw-r--r--drivers/usb/serial/pl2303.c55
-rw-r--r--drivers/usb/serial/pl2303.h3
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c3
-rw-r--r--drivers/usb/serial/visor.c6
-rw-r--r--drivers/usb/serial/visor.h4
14 files changed, 78 insertions, 64 deletions
diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index 86994d117c44..abb1b2c543bb 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -202,8 +202,7 @@ static void belkin_sa_shutdown (struct usb_serial *serial)
202 for (i=0; i < serial->num_ports; ++i) { 202 for (i=0; i < serial->num_ports; ++i) {
203 /* My special items, the standard routines free my urbs */ 203 /* My special items, the standard routines free my urbs */
204 priv = usb_get_serial_port_data(serial->port[i]); 204 priv = usb_get_serial_port_data(serial->port[i]);
205 if (priv) 205 kfree(priv);
206 kfree(priv);
207 } 206 }
208} 207}
209 208
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index db8f472d9e3f..d165f42d560d 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -1340,9 +1340,8 @@ static struct cypress_buf *cypress_buf_alloc(unsigned int size)
1340 1340
1341static void cypress_buf_free(struct cypress_buf *cb) 1341static void cypress_buf_free(struct cypress_buf *cb)
1342{ 1342{
1343 if (cb != NULL) { 1343 if (cb) {
1344 if (cb->buf_buf != NULL) 1344 kfree(cb->buf_buf);
1345 kfree(cb->buf_buf);
1346 kfree(cb); 1345 kfree(cb);
1347 } 1346 }
1348} 1347}
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
index 25f92788a6d4..a19a47f6cf12 100644
--- a/drivers/usb/serial/digi_acceleport.c
+++ b/drivers/usb/serial/digi_acceleport.c
@@ -568,6 +568,9 @@ static struct usb_serial_device_type digi_acceleport_4_device = {
568* and the sleep. In other words, spin_unlock_irqrestore and 568* and the sleep. In other words, spin_unlock_irqrestore and
569* interruptible_sleep_on_timeout are "atomic" with respect to 569* interruptible_sleep_on_timeout are "atomic" with respect to
570* wake ups. This is used to implement condition variables. 570* wake ups. This is used to implement condition variables.
571*
572* interruptible_sleep_on_timeout is deprecated and has been replaced
573* with the equivalent code.
571*/ 574*/
572 575
573static inline long cond_wait_interruptible_timeout_irqrestore( 576static inline long cond_wait_interruptible_timeout_irqrestore(
@@ -576,13 +579,12 @@ static inline long cond_wait_interruptible_timeout_irqrestore(
576{ 579{
577 DEFINE_WAIT(wait); 580 DEFINE_WAIT(wait);
578 581
579 prepare_to_wait(q, &wait, TASK_UNINTERRUPTIBLE); 582 prepare_to_wait(q, &wait, TASK_INTERRUPTIBLE);
580 spin_unlock_irqrestore(lock, flags); 583 spin_unlock_irqrestore(lock, flags);
581 timeout = schedule_timeout(timeout); 584 timeout = schedule_timeout(timeout);
582 finish_wait(q, &wait); 585 finish_wait(q, &wait);
583 586
584 return timeout; 587 return timeout;
585
586} 588}
587 589
588 590
@@ -1596,7 +1598,7 @@ dbg( "digi_close: TOP: port=%d, open_count=%d", priv->dp_port_num, port->open_co
1596 dbg( "digi_close: write oob failed, ret=%d", ret ); 1598 dbg( "digi_close: write oob failed, ret=%d", ret );
1597 1599
1598 /* wait for final commands on oob port to complete */ 1600 /* wait for final commands on oob port to complete */
1599 prepare_to_wait(&priv->dp_flush_wait, &wait, TASK_UNINTERRUPTIBLE); 1601 prepare_to_wait(&priv->dp_flush_wait, &wait, TASK_INTERRUPTIBLE);
1600 schedule_timeout(DIGI_CLOSE_TIMEOUT); 1602 schedule_timeout(DIGI_CLOSE_TIMEOUT);
1601 finish_wait(&priv->dp_flush_wait, &wait); 1603 finish_wait(&priv->dp_flush_wait, &wait);
1602 1604
@@ -1995,7 +1997,7 @@ opcode, line, status, val );
1995 1997
1996 } else if( opcode == DIGI_CMD_IFLUSH_FIFO ) { 1998 } else if( opcode == DIGI_CMD_IFLUSH_FIFO ) {
1997 1999
1998 wake_up( &priv->dp_flush_wait ); 2000 wake_up_interruptible( &priv->dp_flush_wait );
1999 2001
2000 } 2002 }
2001 2003
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
index 4d46394f351b..8d562ab454a8 100644
--- a/drivers/usb/serial/empeg.c
+++ b/drivers/usb/serial/empeg.c
@@ -550,8 +550,7 @@ failed_usb_register:
550failed_usb_serial_register: 550failed_usb_serial_register:
551 for (i = 0; i < NUM_URBS; ++i) { 551 for (i = 0; i < NUM_URBS; ++i) {
552 if (write_urb_pool[i]) { 552 if (write_urb_pool[i]) {
553 if (write_urb_pool[i]->transfer_buffer) 553 kfree(write_urb_pool[i]->transfer_buffer);
554 kfree(write_urb_pool[i]->transfer_buffer);
555 usb_free_urb(write_urb_pool[i]); 554 usb_free_urb(write_urb_pool[i]);
556 } 555 }
557 } 556 }
@@ -575,8 +574,7 @@ static void __exit empeg_exit (void)
575 * the host controllers get fixed to set urb->dev = NULL after 574 * the host controllers get fixed to set urb->dev = NULL after
576 * the urb is finished. Otherwise this call oopses. */ 575 * the urb is finished. Otherwise this call oopses. */
577 /* usb_kill_urb(write_urb_pool[i]); */ 576 /* usb_kill_urb(write_urb_pool[i]); */
578 if (write_urb_pool[i]->transfer_buffer) 577 kfree(write_urb_pool[i]->transfer_buffer);
579 kfree(write_urb_pool[i]->transfer_buffer);
580 usb_free_urb (write_urb_pool[i]); 578 usb_free_urb (write_urb_pool[i]);
581 } 579 }
582 } 580 }
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 4afd905fe2fe..4c788c767a97 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -1347,9 +1347,7 @@ static int ftdi_common_startup (struct usb_serial *serial)
1347 priv->flags = ASYNC_LOW_LATENCY; 1347 priv->flags = ASYNC_LOW_LATENCY;
1348 1348
1349 /* Increase the size of read buffers */ 1349 /* Increase the size of read buffers */
1350 if (port->bulk_in_buffer) { 1350 kfree(port->bulk_in_buffer);
1351 kfree (port->bulk_in_buffer);
1352 }
1353 port->bulk_in_buffer = kmalloc (BUFSZ, GFP_KERNEL); 1351 port->bulk_in_buffer = kmalloc (BUFSZ, GFP_KERNEL);
1354 if (!port->bulk_in_buffer) { 1352 if (!port->bulk_in_buffer) {
1355 kfree (priv); 1353 kfree (priv);
@@ -1365,10 +1363,8 @@ static int ftdi_common_startup (struct usb_serial *serial)
1365 usb_free_urb (port->write_urb); 1363 usb_free_urb (port->write_urb);
1366 port->write_urb = NULL; 1364 port->write_urb = NULL;
1367 } 1365 }
1368 if (port->bulk_out_buffer) { 1366 kfree(port->bulk_out_buffer);
1369 kfree (port->bulk_out_buffer); 1367 port->bulk_out_buffer = NULL;
1370 port->bulk_out_buffer = NULL;
1371 }
1372 1368
1373 usb_set_serial_port_data(serial->port[0], priv); 1369 usb_set_serial_port_data(serial->port[0], priv);
1374 1370
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index e35b5adcd5fe..04bfe279d763 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -951,9 +951,7 @@ static void edge_bulk_out_cmd_callback (struct urb *urb, struct pt_regs *regs)
951 951
952 952
953 /* clean up the transfer buffer */ 953 /* clean up the transfer buffer */
954 if (urb->transfer_buffer != NULL) { 954 kfree(urb->transfer_buffer);
955 kfree(urb->transfer_buffer);
956 }
957 955
958 /* Free the command urb */ 956 /* Free the command urb */
959 usb_free_urb (urb); 957 usb_free_urb (urb);
@@ -1266,16 +1264,12 @@ static void edge_close (struct usb_serial_port *port, struct file * filp)
1266 1264
1267 if (edge_port->write_urb) { 1265 if (edge_port->write_urb) {
1268 /* if this urb had a transfer buffer already (old transfer) free it */ 1266 /* if this urb had a transfer buffer already (old transfer) free it */
1269 if (edge_port->write_urb->transfer_buffer != NULL) { 1267 kfree(edge_port->write_urb->transfer_buffer);
1270 kfree(edge_port->write_urb->transfer_buffer); 1268 usb_free_urb(edge_port->write_urb);
1271 }
1272 usb_free_urb (edge_port->write_urb);
1273 edge_port->write_urb = NULL; 1269 edge_port->write_urb = NULL;
1274 } 1270 }
1275 if (edge_port->txfifo.fifo) { 1271 kfree(edge_port->txfifo.fifo);
1276 kfree(edge_port->txfifo.fifo); 1272 edge_port->txfifo.fifo = NULL;
1277 edge_port->txfifo.fifo = NULL;
1278 }
1279 1273
1280 dbg("%s exited", __FUNCTION__); 1274 dbg("%s exited", __FUNCTION__);
1281} 1275}
@@ -1419,11 +1413,9 @@ static void send_more_port_data(struct edgeport_serial *edge_serial, struct edge
1419 // get a pointer to the write_urb 1413 // get a pointer to the write_urb
1420 urb = edge_port->write_urb; 1414 urb = edge_port->write_urb;
1421 1415
1422 /* if this urb had a transfer buffer already (old transfer) free it */ 1416 /* make sure transfer buffer is freed */
1423 if (urb->transfer_buffer != NULL) { 1417 kfree(urb->transfer_buffer);
1424 kfree(urb->transfer_buffer); 1418 urb->transfer_buffer = NULL;
1425 urb->transfer_buffer = NULL;
1426 }
1427 1419
1428 /* build the data header for the buffer and port that we are about to send out */ 1420 /* build the data header for the buffer and port that we are about to send out */
1429 count = fifo->count; 1421 count = fifo->count;
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 6c96fdaec36e..ebf9967f7c86 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -2845,9 +2845,8 @@ static struct edge_buf *edge_buf_alloc(unsigned int size)
2845 2845
2846void edge_buf_free(struct edge_buf *eb) 2846void edge_buf_free(struct edge_buf *eb)
2847{ 2847{
2848 if (eb != NULL) { 2848 if (eb) {
2849 if (eb->buf_buf != NULL) 2849 kfree(eb->buf_buf);
2850 kfree(eb->buf_buf);
2851 kfree(eb); 2850 kfree(eb);
2852 } 2851 }
2853} 2852}
diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
index 49c602a0b4df..a11e829e38c8 100644
--- a/drivers/usb/serial/kl5kusb105.c
+++ b/drivers/usb/serial/kl5kusb105.c
@@ -341,8 +341,7 @@ static void klsi_105_shutdown (struct usb_serial *serial)
341 * finished. Otherwise this call 341 * finished. Otherwise this call
342 * oopses. */ 342 * oopses. */
343 /* usb_kill_urb(write_urbs[j]); */ 343 /* usb_kill_urb(write_urbs[j]); */
344 if (write_urbs[j]->transfer_buffer) 344 kfree(write_urbs[j]->transfer_buffer);
345 kfree(write_urbs[j]->transfer_buffer);
346 usb_free_urb (write_urbs[j]); 345 usb_free_urb (write_urbs[j]);
347 } 346 }
348 } 347 }
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index a1cba4b5fa23..b5f2c06d4f3e 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -178,7 +178,6 @@ static void omninet_close (struct usb_serial_port *port, struct file * filp)
178{ 178{
179 struct usb_serial *serial = port->serial; 179 struct usb_serial *serial = port->serial;
180 struct usb_serial_port *wport; 180 struct usb_serial_port *wport;
181 struct omninet_data *od;
182 181
183 dbg("%s - port %d", __FUNCTION__, port->number); 182 dbg("%s - port %d", __FUNCTION__, port->number);
184 183
@@ -186,9 +185,7 @@ static void omninet_close (struct usb_serial_port *port, struct file * filp)
186 usb_kill_urb(wport->write_urb); 185 usb_kill_urb(wport->write_urb);
187 usb_kill_urb(port->read_urb); 186 usb_kill_urb(port->read_urb);
188 187
189 od = usb_get_serial_port_data(port); 188 kfree(usb_get_serial_port_data(port));
190 if (od)
191 kfree(od);
192} 189}
193 190
194 191
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 3368d2b0412d..7eab5d4cf3a8 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -94,6 +94,7 @@ static struct usb_device_id id_table [] = {
94 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) }, 94 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
95 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) }, 95 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
96 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, 96 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
97 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
97 { } /* Terminating entry */ 98 { } /* Terminating entry */
98}; 99};
99 100
@@ -677,6 +678,9 @@ static int pl2303_tiocmset (struct usb_serial_port *port, struct file *file,
677 unsigned long flags; 678 unsigned long flags;
678 u8 control; 679 u8 control;
679 680
681 if (!usb_get_intfdata(port->serial->interface))
682 return -ENODEV;
683
680 spin_lock_irqsave (&priv->lock, flags); 684 spin_lock_irqsave (&priv->lock, flags);
681 if (set & TIOCM_RTS) 685 if (set & TIOCM_RTS)
682 priv->line_control |= CONTROL_RTS; 686 priv->line_control |= CONTROL_RTS;
@@ -702,6 +706,9 @@ static int pl2303_tiocmget (struct usb_serial_port *port, struct file *file)
702 706
703 dbg("%s (%d)", __FUNCTION__, port->number); 707 dbg("%s (%d)", __FUNCTION__, port->number);
704 708
709 if (!usb_get_intfdata(port->serial->interface))
710 return -ENODEV;
711
705 spin_lock_irqsave (&priv->lock, flags); 712 spin_lock_irqsave (&priv->lock, flags);
706 mcr = priv->line_control; 713 mcr = priv->line_control;
707 status = priv->line_status; 714 status = priv->line_status;
@@ -811,15 +818,40 @@ static void pl2303_shutdown (struct usb_serial *serial)
811 } 818 }
812} 819}
813 820
821static void pl2303_update_line_status(struct usb_serial_port *port,
822 unsigned char *data,
823 unsigned int actual_length)
824{
825
826 struct pl2303_private *priv = usb_get_serial_port_data(port);
827 unsigned long flags;
828 u8 status_idx = UART_STATE;
829 u8 length = UART_STATE;
830
831 if ((le16_to_cpu(port->serial->dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
832 (le16_to_cpu(port->serial->dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_X65)) {
833 length = 1;
834 status_idx = 0;
835 }
836
837 if (actual_length < length)
838 goto exit;
839
840 /* Save off the uart status for others to look at */
841 spin_lock_irqsave(&priv->lock, flags);
842 priv->line_status = data[status_idx];
843 spin_unlock_irqrestore(&priv->lock, flags);
844
845exit:
846 return;
847}
814 848
815static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs) 849static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs)
816{ 850{
817 struct usb_serial_port *port = (struct usb_serial_port *) urb->context; 851 struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
818 struct pl2303_private *priv = usb_get_serial_port_data(port);
819 unsigned char *data = urb->transfer_buffer; 852 unsigned char *data = urb->transfer_buffer;
820 unsigned long flags; 853 unsigned int actual_length = urb->actual_length;
821 int status; 854 int status;
822 u8 uart_state;
823 855
824 dbg("%s (%d)", __FUNCTION__, port->number); 856 dbg("%s (%d)", __FUNCTION__, port->number);
825 857
@@ -838,19 +870,9 @@ static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs)
838 goto exit; 870 goto exit;
839 } 871 }
840 872
841
842 usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, urb->transfer_buffer); 873 usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
874 pl2303_update_line_status(port, data, actual_length);
843 875
844 if (urb->actual_length < UART_STATE)
845 goto exit;
846
847 /* Save off the uart status for others to look at */
848 uart_state = data[UART_STATE];
849 spin_lock_irqsave(&priv->lock, flags);
850 uart_state |= (priv->line_status & UART_STATE_TRANSIENT_MASK);
851 priv->line_status = uart_state;
852 spin_unlock_irqrestore(&priv->lock, flags);
853
854exit: 876exit:
855 status = usb_submit_urb (urb, GFP_ATOMIC); 877 status = usb_submit_urb (urb, GFP_ATOMIC);
856 if (status) 878 if (status)
@@ -1022,9 +1044,8 @@ static struct pl2303_buf *pl2303_buf_alloc(unsigned int size)
1022 1044
1023static void pl2303_buf_free(struct pl2303_buf *pb) 1045static void pl2303_buf_free(struct pl2303_buf *pb)
1024{ 1046{
1025 if (pb != NULL) { 1047 if (pb) {
1026 if (pb->buf_buf != NULL) 1048 kfree(pb->buf_buf);
1027 kfree(pb->buf_buf);
1028 kfree(pb); 1049 kfree(pb);
1029 } 1050 }
1030} 1051}
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
index 6c1b4712dc2f..b734c4003c5a 100644
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -55,3 +55,6 @@
55 55
56#define SIEMENS_VENDOR_ID 0x11f5 56#define SIEMENS_VENDOR_ID 0x11f5
57#define SIEMENS_PRODUCT_ID_X65 0x0003 57#define SIEMENS_PRODUCT_ID_X65 0x0003
58
59#define SYNTECH_VENDOR_ID 0x0745
60#define SYNTECH_PRODUCT_ID 0x0001
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 98054876cca2..59c88de3e7ae 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -517,8 +517,7 @@ static void ti_shutdown(struct usb_serial *serial)
517 } 517 }
518 } 518 }
519 519
520 if (tdev) 520 kfree(tdev);
521 kfree(tdev);
522 usb_set_serial_data(serial, NULL); 521 usb_set_serial_data(serial, NULL);
523} 522}
524 523
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index 69d313e98fad..31c57adcb623 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -215,6 +215,8 @@ static struct usb_device_id id_table [] = {
215 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 215 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
216 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_T_ID), 216 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_T_ID),
217 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 217 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
218 { USB_DEVICE(PALM_VENDOR_ID, PALM_TREO_650),
219 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
218 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID), 220 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID),
219 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 221 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
220 { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID), 222 { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID),
@@ -237,6 +239,8 @@ static struct usb_device_id id_table [] = {
237 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 239 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
238 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID), 240 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID),
239 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 241 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
242 { USB_DEVICE(TAPWAVE_VENDOR_ID, TAPWAVE_ZODIAC_ID),
243 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
240 { USB_DEVICE(GARMIN_VENDOR_ID, GARMIN_IQUE_3600_ID), 244 { USB_DEVICE(GARMIN_VENDOR_ID, GARMIN_IQUE_3600_ID),
241 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 245 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
242 { USB_DEVICE(ACEECA_VENDOR_ID, ACEECA_MEZ1000_ID), 246 { USB_DEVICE(ACEECA_VENDOR_ID, ACEECA_MEZ1000_ID),
@@ -273,6 +277,7 @@ static struct usb_device_id id_table_combined [] = {
273 { USB_DEVICE(PALM_VENDOR_ID, PALM_M125_ID) }, 277 { USB_DEVICE(PALM_VENDOR_ID, PALM_M125_ID) },
274 { USB_DEVICE(PALM_VENDOR_ID, PALM_M130_ID) }, 278 { USB_DEVICE(PALM_VENDOR_ID, PALM_M130_ID) },
275 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_T_ID) }, 279 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_T_ID) },
280 { USB_DEVICE(PALM_VENDOR_ID, PALM_TREO_650) },
276 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID) }, 281 { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID) },
277 { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID) }, 282 { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID) },
278 { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE_ID) }, 283 { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE_ID) },
@@ -286,6 +291,7 @@ static struct usb_device_id id_table_combined [] = {
286 { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_TJ25_ID) }, 291 { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_TJ25_ID) },
287 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID) }, 292 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID) },
288 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID) }, 293 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID) },
294 { USB_DEVICE(TAPWAVE_VENDOR_ID, TAPWAVE_ZODIAC_ID) },
289 { USB_DEVICE(GARMIN_VENDOR_ID, GARMIN_IQUE_3600_ID) }, 295 { USB_DEVICE(GARMIN_VENDOR_ID, GARMIN_IQUE_3600_ID) },
290 { USB_DEVICE(ACEECA_VENDOR_ID, ACEECA_MEZ1000_ID) }, 296 { USB_DEVICE(ACEECA_VENDOR_ID, ACEECA_MEZ1000_ID) },
291 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_7135_ID) }, 297 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_7135_ID) },
diff --git a/drivers/usb/serial/visor.h b/drivers/usb/serial/visor.h
index a2fa2c61a009..b84d1cb4c693 100644
--- a/drivers/usb/serial/visor.h
+++ b/drivers/usb/serial/visor.h
@@ -30,6 +30,7 @@
30#define PALM_M125_ID 0x0040 30#define PALM_M125_ID 0x0040
31#define PALM_M130_ID 0x0050 31#define PALM_M130_ID 0x0050
32#define PALM_TUNGSTEN_T_ID 0x0060 32#define PALM_TUNGSTEN_T_ID 0x0060
33#define PALM_TREO_650 0x0061
33#define PALM_TUNGSTEN_Z_ID 0x0031 34#define PALM_TUNGSTEN_Z_ID 0x0031
34#define PALM_ZIRE31_ID 0x0061 35#define PALM_ZIRE31_ID 0x0061
35#define PALM_ZIRE_ID 0x0070 36#define PALM_ZIRE_ID 0x0070
@@ -49,6 +50,9 @@
49#define SAMSUNG_SCH_I330_ID 0x8001 50#define SAMSUNG_SCH_I330_ID 0x8001
50#define SAMSUNG_SPH_I500_ID 0x6601 51#define SAMSUNG_SPH_I500_ID 0x6601
51 52
53#define TAPWAVE_VENDOR_ID 0x12EF
54#define TAPWAVE_ZODIAC_ID 0x0100
55
52#define GARMIN_VENDOR_ID 0x091E 56#define GARMIN_VENDOR_ID 0x091E
53#define GARMIN_IQUE_3600_ID 0x0004 57#define GARMIN_IQUE_3600_ID 0x0004
54 58