aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r--drivers/usb/serial/ChangeLog.history730
-rw-r--r--drivers/usb/serial/belkin_sa.c43
-rw-r--r--drivers/usb/serial/ch341.c3
-rw-r--r--drivers/usb/serial/cp210x.c59
-rw-r--r--drivers/usb/serial/cyberjack.c33
-rw-r--r--drivers/usb/serial/cypress_m8.c29
-rw-r--r--drivers/usb/serial/digi_acceleport.c227
-rw-r--r--drivers/usb/serial/ftdi_sio.c4
-rw-r--r--drivers/usb/serial/garmin_gps.c9
-rw-r--r--drivers/usb/serial/generic.c83
-rw-r--r--drivers/usb/serial/io_edgeport.c3
-rw-r--r--drivers/usb/serial/io_ti.c28
-rw-r--r--drivers/usb/serial/ipaq.c34
-rw-r--r--drivers/usb/serial/ir-usb.c32
-rw-r--r--drivers/usb/serial/iuu_phoenix.c3
-rw-r--r--drivers/usb/serial/keyspan.c90
-rw-r--r--drivers/usb/serial/keyspan_pda.c66
-rw-r--r--drivers/usb/serial/kobil_sct.c25
-rw-r--r--drivers/usb/serial/mct_u232.c46
-rw-r--r--drivers/usb/serial/mos7720.c18
-rw-r--r--drivers/usb/serial/mos7840.c4
-rw-r--r--drivers/usb/serial/omninet.c51
-rw-r--r--drivers/usb/serial/opticon.c1
-rw-r--r--drivers/usb/serial/option.c5
-rw-r--r--drivers/usb/serial/oti6858.c23
-rw-r--r--drivers/usb/serial/pl2303.c17
-rw-r--r--drivers/usb/serial/sierra.c1
-rw-r--r--drivers/usb/serial/symbolserial.c1
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c13
-rw-r--r--drivers/usb/serial/usb-serial.c98
-rw-r--r--drivers/usb/serial/usb_debug.c13
-rw-r--r--drivers/usb/serial/whiteheat.c58
32 files changed, 197 insertions, 1653 deletions
diff --git a/drivers/usb/serial/ChangeLog.history b/drivers/usb/serial/ChangeLog.history
deleted file mode 100644
index f13fd488ebec..000000000000
--- a/drivers/usb/serial/ChangeLog.history
+++ /dev/null
@@ -1,730 +0,0 @@
1This is the contents of some of the drivers/usb/serial/ files that had old
2changelog comments. They were quite old, and out of date, and we don't keep
3them anymore, so I've put them here, away from the source files, in case
4people still care to see them.
5
6- Greg Kroah-Hartman <greg@kroah.com> October 20, 2005
7
8-----------------------------------------------------------------------
9usb-serial.h Change Log comments:
10
11 (03/26/2002) gkh
12 removed the port->tty check from port_paranoia_check() due to serial
13 consoles not having a tty device assigned to them.
14
15 (12/03/2001) gkh
16 removed active from the port structure.
17 added documentation to the usb_serial_device_type structure
18
19 (10/10/2001) gkh
20 added vendor and product to serial structure. Needed to determine device
21 owner when the device is disconnected.
22
23 (05/30/2001) gkh
24 added sem to port structure and removed port_lock
25
26 (10/05/2000) gkh
27 Added interrupt_in_endpointAddress and bulk_in_endpointAddress to help
28 fix bug with urb->dev not being set properly, now that the usb core
29 needs it.
30
31 (09/11/2000) gkh
32 Added usb_serial_debug_data function to help get rid of #DEBUG in the
33 drivers.
34
35 (08/28/2000) gkh
36 Added port_lock to port structure.
37
38 (08/08/2000) gkh
39 Added open_count to port structure.
40
41 (07/23/2000) gkh
42 Added bulk_out_endpointAddress to port structure.
43
44 (07/19/2000) gkh, pberger, and borchers
45 Modifications to allow usb-serial drivers to be modules.
46
47-----------------------------------------------------------------------
48usb-serial.c Change Log comments:
49
50 (12/10/2002) gkh
51 Split the ports off into their own struct device, and added a
52 usb-serial bus driver.
53
54 (11/19/2002) gkh
55 removed a few #ifdefs for the generic code and cleaned up the failure
56 logic in initialization.
57
58 (10/02/2002) gkh
59 moved the console code to console.c and out of this file.
60
61 (06/05/2002) gkh
62 moved location of startup() call in serial_probe() until after all
63 of the port information and endpoints are initialized. This makes
64 things easier for some drivers.
65
66 (04/10/2002) gkh
67 added serial_read_proc function which creates a
68 /proc/tty/driver/usb-serial file.
69
70 (03/27/2002) gkh
71 Got USB serial console code working properly and merged into the main
72 version of the tree. Thanks to Randy Dunlap for the initial version
73 of this code, and for pushing me to finish it up.
74 The USB serial console works with any usb serial driver device.
75
76 (03/21/2002) gkh
77 Moved all manipulation of port->open_count into the core. Now the
78 individual driver's open and close functions are called only when the
79 first open() and last close() is called. Making the drivers a bit
80 smaller and simpler.
81 Fixed a bug if a driver didn't have the owner field set.
82
83 (02/26/2002) gkh
84 Moved all locking into the main serial_* functions, instead of having
85 the individual drivers have to grab the port semaphore. This should
86 reduce races.
87 Reworked the MOD_INC logic a bit to always increment and decrement, even
88 if the generic driver is being used.
89
90 (10/10/2001) gkh
91 usb_serial_disconnect() now sets the serial->dev pointer is to NULL to
92 help prevent child drivers from accessing the device since it is now
93 gone.
94
95 (09/13/2001) gkh
96 Moved generic driver initialize after we have registered with the USB
97 core. Thanks to Randy Dunlap for pointing this problem out.
98
99 (07/03/2001) gkh
100 Fixed module paramater size. Thanks to John Brockmeyer for the pointer.
101 Fixed vendor and product getting defined through the MODULE_PARM macro
102 if the Generic driver wasn't compiled in.
103 Fixed problem with generic_shutdown() not being called for drivers that
104 don't have a shutdown() function.
105
106 (06/06/2001) gkh
107 added evil hack that is needed for the prolific pl2303 device due to the
108 crazy way its endpoints are set up.
109
110 (05/30/2001) gkh
111 switched from using spinlock to a semaphore, which fixes lots of problems.
112
113 (04/08/2001) gb
114 Identify version on module load.
115
116 2001_02_05 gkh
117 Fixed buffer overflows bug with the generic serial driver. Thanks to
118 Todd Squires <squirest@ct0.com> for fixing this.
119
120 (01/10/2001) gkh
121 Fixed bug where the generic serial adaptor grabbed _any_ device that was
122 offered to it.
123
124 (12/12/2000) gkh
125 Removed MOD_INC and MOD_DEC from poll and disconnect functions, and
126 moved them to the serial_open and serial_close functions.
127 Also fixed bug with there not being a MOD_DEC for the generic driver
128 (thanks to Gary Brubaker for finding this.)
129
130 (11/29/2000) gkh
131 Small NULL pointer initialization cleanup which saves a bit of disk image
132
133 (11/01/2000) Adam J. Richter
134 instead of using idVendor/idProduct pairs, usb serial drivers
135 now identify their hardware interest with usb_device_id tables,
136 which they usually have anyhow for use with MODULE_DEVICE_TABLE.
137
138 (10/05/2000) gkh
139 Fixed bug with urb->dev not being set properly, now that the usb
140 core needs it.
141
142 (09/11/2000) gkh
143 Removed DEBUG #ifdefs with call to usb_serial_debug_data
144
145 (08/28/2000) gkh
146 Added port_lock to port structure.
147 Added locks for SMP safeness to generic driver
148 Fixed the ability to open a generic device's port more than once.
149
150 (07/23/2000) gkh
151 Added bulk_out_endpointAddress to port structure.
152
153 (07/19/2000) gkh, pberger, and borchers
154 Modifications to allow usb-serial drivers to be modules.
155
156 (07/03/2000) gkh
157 Added more debugging to serial_ioctl call
158
159 (06/25/2000) gkh
160 Changed generic_write_bulk_callback to not call wake_up_interruptible
161 directly, but to have port_softint do it at a safer time.
162
163 (06/23/2000) gkh
164 Cleaned up debugging statements in a quest to find UHCI timeout bug.
165
166 (05/22/2000) gkh
167 Changed the makefile, enabling the big CONFIG_USB_SERIAL_SOMTHING to be
168 removed from the individual device source files.
169
170 (05/03/2000) gkh
171 Added the Digi Acceleport driver from Al Borchers and Peter Berger.
172
173 (05/02/2000) gkh
174 Changed devfs and tty register code to work properly now. This was based on
175 the ACM driver changes by Vojtech Pavlik.
176
177 (04/27/2000) Ryan VanderBijl
178 Put calls to *_paranoia_checks into one function.
179
180 (04/23/2000) gkh
181 Fixed bug that Randy Dunlap found for Generic devices with no bulk out ports.
182 Moved when the startup code printed out the devices that are supported.
183
184 (04/19/2000) gkh
185 Added driver for ZyXEL omni.net lcd plus ISDN TA
186 Made startup info message specify which drivers were compiled in.
187
188 (04/03/2000) gkh
189 Changed the probe process to remove the module unload races.
190 Changed where the tty layer gets initialized to have devfs work nicer.
191 Added initial devfs support.
192
193 (03/26/2000) gkh
194 Split driver up into device specific pieces.
195
196 (03/19/2000) gkh
197 Fixed oops that could happen when device was removed while a program
198 was talking to the device.
199 Removed the static urbs and now all urbs are created and destroyed
200 dynamically.
201 Reworked the internal interface. Now everything is based on the
202 usb_serial_port structure instead of the larger usb_serial structure.
203 This fixes the bug that a multiport device could not have more than
204 one port open at one time.
205
206 (03/17/2000) gkh
207 Added config option for debugging messages.
208 Added patch for keyspan pda from Brian Warner.
209
210 (03/06/2000) gkh
211 Added the keyspan pda code from Brian Warner <warner@lothar.com>
212 Moved a bunch of the port specific stuff into its own structure. This
213 is in anticipation of the true multiport devices (there's a bug if you
214 try to access more than one port of any multiport device right now)
215
216 (02/21/2000) gkh
217 Made it so that any serial devices only have to specify which functions
218 they want to overload from the generic function calls (great,
219 inheritance in C, in a driver, just what I wanted...)
220 Added support for set_termios and ioctl function calls. No drivers take
221 advantage of this yet.
222 Removed the #ifdef MODULE, now there is no module specific code.
223 Cleaned up a few comments in usb-serial.h that were wrong (thanks again
224 to Miles Lott).
225 Small fix to get_free_serial.
226
227 (02/14/2000) gkh
228 Removed the Belkin and Peracom functionality from the driver due to
229 the lack of support from the vendor, and me not wanting people to
230 accidenatly buy the device, expecting it to work with Linux.
231 Added read_bulk_callback and write_bulk_callback to the type structure
232 for the needs of the FTDI and WhiteHEAT driver.
233 Changed all reverences to FTDI to FTDI_SIO at the request of Bill
234 Ryder.
235 Changed the output urb size back to the max endpoint size to make
236 the ftdi_sio driver have it easier, and due to the fact that it didn't
237 really increase the speed any.
238
239 (02/11/2000) gkh
240 Added VISOR_FUNCTION_CONSOLE to the visor startup function. This was a
241 patch from Miles Lott (milos@insync.net).
242 Fixed bug with not restoring the minor range that a device grabs, if
243 the startup function fails (thanks Miles for finding this).
244
245 (02/05/2000) gkh
246 Added initial framework for the Keyspan PDA serial converter so that
247 Brian Warner has a place to put his code.
248 Made the ezusb specific functions generic enough that different
249 devices can use them (whiteheat and keyspan_pda both need them).
250 Split out a whole bunch of structure and other stuff to a separate
251 usb-serial.h file.
252 Made the Visor connection messages a little more understandable, now
253 that Miles Lott (milos@insync.net) has gotten the Generic channel to
254 work. Also made them always show up in the log file.
255
256 (01/25/2000) gkh
257 Added initial framework for FTDI serial converter so that Bill Ryder
258 has a place to put his code.
259 Added the vendor specific info from Handspring. Now we can print out
260 informational debug messages as well as understand what is happening.
261
262 (01/23/2000) gkh
263 Fixed problem of crash when trying to open a port that didn't have a
264 device assigned to it. Made the minor node finding a little smarter,
265 now it looks to find a continuous space for the new device.
266
267 (01/21/2000) gkh
268 Fixed bug in visor_startup with patch from Miles Lott (milos@insync.net)
269 Fixed get_serial_by_minor which was all messed up for multi port
270 devices. Fixed multi port problem for generic devices. Now the number
271 of ports is determined by the number of bulk out endpoints for the
272 generic device.
273
274 (01/19/2000) gkh
275 Removed lots of cruft that was around from the old (pre urb) driver
276 interface.
277 Made the serial_table dynamic. This should save lots of memory when
278 the number of minor nodes goes up to 256.
279 Added initial support for devices that have more than one port.
280 Added more debugging comments for the Visor, and added a needed
281 set_configuration call.
282
283 (01/17/2000) gkh
284 Fixed the WhiteHEAT firmware (my processing tool had a bug)
285 and added new debug loader firmware for it.
286 Removed the put_char function as it isn't really needed.
287 Added visor startup commands as found by the Win98 dump.
288
289 (01/13/2000) gkh
290 Fixed the vendor id for the generic driver to the one I meant it to be.
291
292 (01/12/2000) gkh
293 Forget the version numbering...that's pretty useless...
294 Made the driver able to be compiled so that the user can select which
295 converter they want to use. This allows people who only want the Visor
296 support to not pay the memory size price of the WhiteHEAT.
297 Fixed bug where the generic driver (idVendor=0000 and idProduct=0000)
298 grabbed the root hub. Not good.
299
300 version 0.4.0 (01/10/2000) gkh
301 Added whiteheat.h containing the firmware for the ConnectTech WhiteHEAT
302 device. Added startup function to allow firmware to be downloaded to
303 a device if it needs to be.
304 Added firmware download logic to the WhiteHEAT device.
305 Started to add #defines to split up the different drivers for potential
306 configuration option.
307
308 version 0.3.1 (12/30/99) gkh
309 Fixed problems with urb for bulk out.
310 Added initial support for multiple sets of endpoints. This enables
311 the Handspring Visor to be attached successfully. Only the first
312 bulk in / bulk out endpoint pair is being used right now.
313
314 version 0.3.0 (12/27/99) gkh
315 Added initial support for the Handspring Visor based on a patch from
316 Miles Lott (milos@sneety.insync.net)
317 Cleaned up the code a bunch and converted over to using urbs only.
318
319 version 0.2.3 (12/21/99) gkh
320 Added initial support for the Connect Tech WhiteHEAT converter.
321 Incremented the number of ports in expectation of getting the
322 WhiteHEAT to work properly (4 ports per connection).
323 Added notification on insertion and removal of what port the
324 device is/was connected to (and what kind of device it was).
325
326 version 0.2.2 (12/16/99) gkh
327 Changed major number to the new allocated number. We're legal now!
328
329 version 0.2.1 (12/14/99) gkh
330 Fixed bug that happens when device node is opened when there isn't a
331 device attached to it. Thanks to marek@webdesign.no for noticing this.
332
333 version 0.2.0 (11/10/99) gkh
334 Split up internals to make it easier to add different types of serial
335 converters to the code.
336 Added a "generic" driver that gets it's vendor and product id
337 from when the module is loaded. Thanks to David E. Nelson (dnelson@jump.net)
338 for the idea and sample code (from the usb scanner driver.)
339 Cleared up any licensing questions by releasing it under the GNU GPL.
340
341 version 0.1.2 (10/25/99) gkh
342 Fixed bug in detecting device.
343
344 version 0.1.1 (10/05/99) gkh
345 Changed the major number to not conflict with anything else.
346
347 version 0.1 (09/28/99) gkh
348 Can recognize the two different devices and start up a read from
349 device when asked to. Writes also work. No control signals yet, this
350 all is vendor specific data (i.e. no spec), also no control for
351 different baud rates or other bit settings.
352 Currently we are using the same devid as the acm driver. This needs
353 to change.
354
355-----------------------------------------------------------------------
356visor.c Change Log comments:
357
358 (06/03/2003) Judd Montgomery <judd at jpilot.org>
359 Added support for module parameter options for untested/unknown
360 devices.
361
362 (03/09/2003) gkh
363 Added support for the Sony Clie NZ90V device. Thanks to Martin Brachtl
364 <brachtl@redgrep.cz> for the information.
365
366 (03/05/2003) gkh
367 Think Treo support is now working.
368
369 (04/03/2002) gkh
370 Added support for the Sony OS 4.1 devices. Thanks to Hiroyuki ARAKI
371 <hiro@zob.ne.jp> for the information.
372
373 (03/27/2002) gkh
374 Removed assumptions that port->tty was always valid (is not true
375 for usb serial console devices.)
376
377 (03/23/2002) gkh
378 Added support for the Palm i705 device, thanks to Thomas Riemer
379 <tom@netmech.com> for the information.
380
381 (03/21/2002) gkh
382 Added support for the Palm m130 device, thanks to Udo Eisenbarth
383 <udo.eisenbarth@web.de> for the information.
384
385 (02/27/2002) gkh
386 Reworked the urb handling logic. We have no more pool, but dynamically
387 allocate the urb and the transfer buffer on the fly. In testing this
388 does not incure any measurable overhead. This also relies on the fact
389 that we have proper reference counting logic for urbs.
390
391 (02/21/2002) SilaS
392 Added initial support for the Palm m515 devices.
393
394 (02/14/2002) gkh
395 Added support for the Clie S-360 device.
396
397 (12/18/2001) gkh
398 Added better Clie support for 3.5 devices. Thanks to Geoffrey Levand
399 for the patch.
400
401 (11/11/2001) gkh
402 Added support for the m125 devices, and added check to prevent oopses
403 for Clié devices that lie about the number of ports they have.
404
405 (08/30/2001) gkh
406 Added support for the Clie devices, both the 3.5 and 4.0 os versions.
407 Many thanks to Daniel Burke, and Bryan Payne for helping with this.
408
409 (08/23/2001) gkh
410 fixed a few potential bugs pointed out by Oliver Neukum.
411
412 (05/30/2001) gkh
413 switched from using spinlock to a semaphore, which fixes lots of problems.
414
415 (05/28/2000) gkh
416 Added initial support for the Palm m500 and Palm m505 devices.
417
418 (04/08/2001) gb
419 Identify version on module load.
420
421 (01/21/2000) gkh
422 Added write_room and chars_in_buffer, as they were previously using the
423 generic driver versions which is all wrong now that we are using an urb
424 pool. Thanks to Wolfgang Grandegger for pointing this out to me.
425 Removed count assignment in the write function, which was not needed anymore
426 either. Thanks to Al Borchers for pointing this out.
427
428 (12/12/2000) gkh
429 Moved MOD_DEC to end of visor_close to be nicer, as the final write
430 message can sleep.
431
432 (11/12/2000) gkh
433 Fixed bug with data being dropped on the floor by forcing tty->low_latency
434 to be on. Hopefully this fixes the OHCI issue!
435
436 (11/01/2000) Adam J. Richter
437 usb_device_id table support
438
439 (10/05/2000) gkh
440 Fixed bug with urb->dev not being set properly, now that the usb
441 core needs it.
442
443 (09/11/2000) gkh
444 Got rid of always calling kmalloc for every urb we wrote out to the
445 device.
446 Added visor_read_callback so we can keep track of bytes in and out for
447 those people who like to know the speed of their device.
448 Removed DEBUG #ifdefs with call to usb_serial_debug_data
449
450 (09/06/2000) gkh
451 Fixed oops in visor_exit. Need to uncomment usb_unlink_urb call _after_
452 the host controller drivers set urb->dev = NULL when the urb is finished.
453
454 (08/28/2000) gkh
455 Added locks for SMP safeness.
456
457 (08/08/2000) gkh
458 Fixed endian problem in visor_startup.
459 Fixed MOD_INC and MOD_DEC logic and the ability to open a port more
460 than once.
461
462 (07/23/2000) gkh
463 Added pool of write urbs to speed up transfers to the visor.
464
465 (07/19/2000) gkh
466 Added module_init and module_exit functions to handle the fact that this
467 driver is a loadable module now.
468
469 (07/03/2000) gkh
470 Added visor_set_ioctl and visor_set_termios functions (they don't do much
471 of anything, but are good for debugging.)
472
473 (06/25/2000) gkh
474 Fixed bug in visor_unthrottle that should help with the disconnect in PPP
475 bug that people have been reporting.
476
477 (06/23/2000) gkh
478 Cleaned up debugging statements in a quest to find UHCI timeout bug.
479
480 (04/27/2000) Ryan VanderBijl
481 Fixed memory leak in visor_close
482
483 (03/26/2000) gkh
484 Split driver up into device specific pieces.
485
486-----------------------------------------------------------------------
487pl2303.c Change Log comments:
488
489 2002_Mar_26 gkh
490 allowed driver to work properly if there is no tty assigned to a port
491 (this happens for serial console devices.)
492
493 2001_Oct_06 gkh
494 Added RTS and DTR line control. Thanks to joe@bndlg.de for parts of it.
495
496 2001_Sep_19 gkh
497 Added break support.
498
499 2001_Aug_30 gkh
500 fixed oops in write_bulk_callback.
501
502 2001_Aug_28 gkh
503 reworked buffer logic to be like other usb-serial drivers. Hopefully
504 removing some reported problems.
505
506 2001_Jun_06 gkh
507 finished porting to 2.4 format.
508
509
510-----------------------------------------------------------------------
511io_edgeport.c Change Log comments:
512
513 2003_04_03 al borchers
514 - fixed a bug (that shows up with dosemu) where the tty struct is
515 used in a callback after it has been freed
516
517 2.3 2002_03_08 greg kroah-hartman
518 - fixed bug when multiple devices were attached at the same time.
519
520 2.2 2001_11_14 greg kroah-hartman
521 - fixed bug in edge_close that kept the port from being used more
522 than once.
523 - fixed memory leak on device removal.
524 - fixed potential double free of memory when command urb submitting
525 failed.
526 - other small cleanups when the device is removed
527
528 2.1 2001_07_09 greg kroah-hartman
529 - added support for TIOCMBIS and TIOCMBIC.
530
531 (04/08/2001) gb
532 - Identify version on module load.
533
534 2.0 2001_03_05 greg kroah-hartman
535 - reworked entire driver to fit properly in with the other usb-serial
536 drivers. Occasional oopses still happen, but it's a good start.
537
538 1.2.3 (02/23/2001) greg kroah-hartman
539 - changed device table to work properly for 2.4.x final format.
540 - fixed problem with dropping data at high data rates.
541
542 1.2.2 (11/27/2000) greg kroah-hartman
543 - cleaned up more NTisms.
544 - Added device table for 2.4.0-test11
545
546 1.2.1 (11/08/2000) greg kroah-hartman
547 - Started to clean up NTisms.
548 - Fixed problem with dev field of urb for kernels >= 2.4.0-test9
549
550 1.2 (10/17/2000) David Iacovelli
551 Remove all EPIC code and GPL source
552 Fix RELEVANT_IFLAG macro to include flow control
553 changes port configuration changes.
554 Fix redefinition of SERIAL_MAGIC
555 Change all timeout values to 5 seconds
556 Tried to fix the UHCI multiple urb submission, but failed miserably.
557 it seems to work fine with OHCI.
558 ( Greg take a look at the #if 0 at end of WriteCmdUsb() we must
559 find a way to work arount this UHCI bug )
560
561 1.1 (10/11/2000) David Iacovelli
562 Fix XON/XOFF flow control to support both IXON and IXOFF
563
564 0.9.27 (06/30/2000) David Iacovelli
565 Added transmit queue and now allocate urb for command writes.
566
567 0.9.26 (06/29/2000) David Iacovelli
568 Add support for 80251 based edgeport
569
570 0.9.25 (06/27/2000) David Iacovelli
571 Do not close the port if it has multiple opens.
572
573 0.9.24 (05/26/2000) David Iacovelli
574 Add IOCTLs to support RXTX and JAVA POS
575 and first cut at running BlackBox Demo
576
577 0.9.23 (05/24/2000) David Iacovelli
578 Add IOCTLs to support RXTX and JAVA POS
579
580 0.9.22 (05/23/2000) David Iacovelli
581 fixed bug in enumeration. If epconfig turns on mapping by
582 path after a device is already plugged in, we now update
583 the mapping correctly
584
585 0.9.21 (05/16/2000) David Iacovelli
586 Added BlockUntilChaseResp() to also wait for txcredits
587 Updated the way we allocate and handle write URBs
588 Add debug code to dump buffers
589
590 0.9.20 (05/01/2000) David Iacovelli
591 change driver to use usb/tts/
592
593 0.9.19 (05/01/2000) David Iacovelli
594 Update code to compile if DEBUG is off
595
596 0.9.18 (04/28/2000) David Iacovelli
597 cleanup and test tty_register with devfs
598
599 0.9.17 (04/27/2000) greg kroah-hartman
600 changed tty_register around to be like the way it
601 was before, but now it works properly with devfs.
602
603 0.9.16 (04/26/2000) david iacovelli
604 Fixed bug in GetProductInfo()
605
606 0.9.15 (04/25/2000) david iacovelli
607 Updated enumeration
608
609 0.9.14 (04/24/2000) david iacovelli
610 Removed all config/status IOCTLS and
611 converted to using /proc/edgeport
612 still playing with devfs
613
614 0.9.13 (04/24/2000) david iacovelli
615 Removed configuration based on ttyUSB0
616 Added support for configuration using /prod/edgeport
617 first attempt at using devfs (not working yet!)
618 Added IOCTL to GetProductInfo()
619 Added support for custom baud rates
620 Add support for random port numbers
621
622 0.9.12 (04/18/2000) david iacovelli
623 added additional configuration IOCTLs
624 use ttyUSB0 for configuration
625
626 0.9.11 (04/17/2000) greg kroah-hartman
627 fixed module initialization race conditions.
628 made all urbs dynamically allocated.
629 made driver devfs compatible. now it only registers the tty device
630 when the device is actually plugged in.
631
632 0.9.10 (04/13/2000) greg kroah-hartman
633 added proc interface framework.
634
635 0.9.9 (04/13/2000) david iacovelli
636 added enumeration code and ioctls to configure the device
637
638 0.9.8 (04/12/2000) david iacovelli
639 Change interrupt read start when device is plugged in
640 and stop when device is removed
641 process interrupt reads when all ports are closed
642 (keep value of rxBytesAvail consistent with the edgeport)
643 set the USB_BULK_QUEUE flag so that we can shove a bunch
644 of urbs at once down the pipe
645
646 0.9.7 (04/10/2000) david iacovelli
647 start to add enumeration code.
648 generate serial number for epic devices
649 add support for kdb
650
651 0.9.6 (03/30/2000) david iacovelli
652 add IOCTL to get string, manufacture, and boot descriptors
653
654 0.9.5 (03/14/2000) greg kroah-hartman
655 more error checking added to SerialOpen to try to fix UHCI open problem
656
657 0.9.4 (03/09/2000) greg kroah-hartman
658 added more error checking to handle oops when data is hanging
659 around and tty is abruptly closed.
660
661 0.9.3 (03/09/2000) david iacovelli
662 Add epic support for xon/xoff chars
663 play with performance
664
665 0.9.2 (03/08/2000) greg kroah-hartman
666 changed most "info" calls to "dbg"
667 implemented flow control properly in the termios call
668
669 0.9.1 (03/08/2000) david iacovelli
670 added EPIC support
671 enabled bootloader update
672
673 0.9 (03/08/2000) greg kroah-hartman
674 Release to IO networks.
675 Integrated changes that David made
676 made getting urbs for writing SMP safe
677
678 0.8 (03/07/2000) greg kroah-hartman
679 Release to IO networks.
680 Fixed problems that were seen in code by David.
681 Now both Edgeport/4 and Edgeport/2 works properly.
682 Changed most of the functions to use port instead of serial.
683
684 0.7 (02/27/2000) greg kroah-hartman
685 Milestone 3 release.
686 Release to IO Networks
687 ioctl for waiting on line change implemented.
688 ioctl for getting statistics implemented.
689 multiport support working.
690 lsr and msr registers are now handled properly.
691 change break now hooked up and working.
692 support for all known Edgeport devices.
693
694 0.6 (02/22/2000) greg kroah-hartman
695 Release to IO networks.
696 CHASE is implemented correctly when port is closed.
697 SerialOpen now blocks correctly until port is fully opened.
698
699 0.5 (02/20/2000) greg kroah-hartman
700 Release to IO networks.
701 Known problems:
702 modem status register changes are not sent on to the user
703 CHASE is not implemented when the port is closed.
704
705 0.4 (02/16/2000) greg kroah-hartman
706 Second cut at the CeBit demo.
707 Doesn't leak memory on every write to the port
708 Still small leaks on startup.
709 Added support for Edgeport/2 and Edgeport/8
710
711 0.3 (02/15/2000) greg kroah-hartman
712 CeBit demo release.
713 Force the line settings to 4800, 8, 1, e for the demo.
714 Warning! This version leaks memory like crazy!
715
716 0.2 (01/30/2000) greg kroah-hartman
717 Milestone 1 release.
718 Device is found by USB subsystem, enumerated, firmware is downloaded
719 and the descriptors are printed to the debug log, config is set, and
720 green light starts to blink. Open port works, and data can be sent
721 and received at the default settings of the UART. Loopback connector
722 and debug log confirms this.
723
724 0.1 (01/23/2000) greg kroah-hartman
725 Initial release to help IO Networks try to set up their test system.
726 Edgeport4 is recognized, firmware is downloaded, config is set so
727 device blinks green light every 3 sec. Port is bound, but opening,
728 closing, and sending data do not work properly.
729
730
diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index d6921fa1403c..f9f29b289f2f 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -20,50 +20,7 @@
20 * TODO: 20 * TODO:
21 * -- Add true modem contol line query capability. Currently we track the 21 * -- Add true modem contol line query capability. Currently we track the
22 * states reported by the interrupt and the states we request. 22 * states reported by the interrupt and the states we request.
23 * -- Add error reporting back to application for UART error conditions.
24 * Just point me at how to implement this and I'll do it. I've put the
25 * framework in, but haven't analyzed the "tty_flip" interface yet.
26 * -- Add support for flush commands 23 * -- Add support for flush commands
27 * -- Add everything that is missing :)
28 *
29 * 27-Nov-2001 gkh
30 * compressed all the differnent device entries into 1.
31 *
32 * 30-May-2001 gkh
33 * switched from using spinlock to a semaphore, which fixes lots of
34 * problems.
35 *
36 * 08-Apr-2001 gb
37 * - Identify version on module load.
38 *
39 * 12-Mar-2001 gkh
40 * - Added support for the GoHubs GO-COM232 device which is the same as the
41 * Peracom device.
42 *
43 * 06-Nov-2000 gkh
44 * - Added support for the old Belkin and Peracom devices.
45 * - Made the port able to be opened multiple times.
46 * - Added some defaults incase the line settings are things these devices
47 * can't support.
48 *
49 * 18-Oct-2000 William Greathouse
50 * Released into the wild (linux-usb-devel)
51 *
52 * 17-Oct-2000 William Greathouse
53 * Add code to recognize firmware version and set hardware flow control
54 * appropriately. Belkin states that firmware prior to 3.05 does not
55 * operate correctly in hardware handshake mode. I have verified this
56 * on firmware 2.05 -- for both RTS and DTR input flow control, the control
57 * line is not reset. The test performed by the Belkin Win* driver is
58 * to enable hardware flow control for firmware 2.06 or greater and
59 * for 1.00 or prior. I am only enabling for 2.06 or greater.
60 *
61 * 12-Oct-2000 William Greathouse
62 * First cut at supporting Belkin USB Serial Adapter F5U103
63 * I did not have a copy of the original work to support this
64 * adapter, so pardon any stupid mistakes. All of the information
65 * I am using to write this driver was acquired by using a modified
66 * UsbSnoop on Windows2000 and from examining the other USB drivers.
67 */ 24 */
68 25
69#include <linux/kernel.h> 26#include <linux/kernel.h>
diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index 6ae1c0688b5e..0e77511060c0 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -335,13 +335,12 @@ static int ch341_open(struct tty_struct *tty, struct usb_serial_port *port)
335 goto out; 335 goto out;
336 336
337 dbg("%s - submitting interrupt urb", __func__); 337 dbg("%s - submitting interrupt urb", __func__);
338 port->interrupt_in_urb->dev = serial->dev;
339 r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 338 r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
340 if (r) { 339 if (r) {
341 dev_err(&port->dev, "%s - failed submitting interrupt urb," 340 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
342 " error %d\n", __func__, r); 341 " error %d\n", __func__, r);
343 ch341_close(port); 342 ch341_close(port);
344 return -EPROTO; 343 goto out;
345 } 344 }
346 345
347 r = usb_serial_generic_open(tty, port); 346 r = usb_serial_generic_open(tty, port);
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index fd67cc53545b..adfe660ed008 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -92,6 +92,7 @@ static const struct usb_device_id id_table[] = {
92 { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */ 92 { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */
93 { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */ 93 { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
94 { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */ 94 { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
95 { USB_DEVICE(0x10C4, 0x81A9) }, /* Multiplex RC Interface */
95 { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */ 96 { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */
96 { USB_DEVICE(0x10C4, 0x81AD) }, /* INSYS USB Modem */ 97 { USB_DEVICE(0x10C4, 0x81AD) }, /* INSYS USB Modem */
97 { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */ 98 { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
@@ -280,7 +281,10 @@ static int cp210x_get_config(struct usb_serial_port *port, u8 request,
280 dbg("%s - Unable to send config request, " 281 dbg("%s - Unable to send config request, "
281 "request=0x%x size=%d result=%d\n", 282 "request=0x%x size=%d result=%d\n",
282 __func__, request, size, result); 283 __func__, request, size, result);
283 return -EPROTO; 284 if (result > 0)
285 result = -EPROTO;
286
287 return result;
284 } 288 }
285 289
286 return 0; 290 return 0;
@@ -331,7 +335,10 @@ static int cp210x_set_config(struct usb_serial_port *port, u8 request,
331 dbg("%s - Unable to send request, " 335 dbg("%s - Unable to send request, "
332 "request=0x%x size=%d result=%d\n", 336 "request=0x%x size=%d result=%d\n",
333 __func__, request, size, result); 337 __func__, request, size, result);
334 return -EPROTO; 338 if (result > 0)
339 result = -EPROTO;
340
341 return result;
335 } 342 }
336 343
337 return 0; 344 return 0;
@@ -395,10 +402,11 @@ static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
395 402
396 dbg("%s - port %d", __func__, port->number); 403 dbg("%s - port %d", __func__, port->number);
397 404
398 if (cp210x_set_config_single(port, CP210X_IFC_ENABLE, UART_ENABLE)) { 405 result = cp210x_set_config_single(port, CP210X_IFC_ENABLE,
399 dev_err(&port->dev, "%s - Unable to enable UART\n", 406 UART_ENABLE);
400 __func__); 407 if (result) {
401 return -EPROTO; 408 dev_err(&port->dev, "%s - Unable to enable UART\n", __func__);
409 return result;
402 } 410 }
403 411
404 result = usb_serial_generic_open(tty, port); 412 result = usb_serial_generic_open(tty, port);
@@ -520,18 +528,13 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
520 cflag |= PARENB; 528 cflag |= PARENB;
521 break; 529 break;
522 case BITS_PARITY_MARK: 530 case BITS_PARITY_MARK:
523 dbg("%s - parity = MARK (not supported, disabling parity)", 531 dbg("%s - parity = MARK", __func__);
524 __func__); 532 cflag |= (PARENB|PARODD|CMSPAR);
525 cflag &= ~PARENB;
526 bits &= ~BITS_PARITY_MASK;
527 cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2);
528 break; 533 break;
529 case BITS_PARITY_SPACE: 534 case BITS_PARITY_SPACE:
530 dbg("%s - parity = SPACE (not supported, disabling parity)", 535 dbg("%s - parity = SPACE", __func__);
531 __func__); 536 cflag &= ~PARODD;
532 cflag &= ~PARENB; 537 cflag |= (PARENB|CMSPAR);
533 bits &= ~BITS_PARITY_MASK;
534 cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2);
535 break; 538 break;
536 default: 539 default:
537 dbg("%s - Unknown parity mode, disabling parity", __func__); 540 dbg("%s - Unknown parity mode, disabling parity", __func__);
@@ -588,7 +591,6 @@ static void cp210x_set_termios(struct tty_struct *tty,
588 if (!tty) 591 if (!tty)
589 return; 592 return;
590 593
591 tty->termios->c_cflag &= ~CMSPAR;
592 cflag = tty->termios->c_cflag; 594 cflag = tty->termios->c_cflag;
593 old_cflag = old_termios->c_cflag; 595 old_cflag = old_termios->c_cflag;
594 baud = cp210x_quantise_baudrate(tty_get_baud_rate(tty)); 596 baud = cp210x_quantise_baudrate(tty_get_baud_rate(tty));
@@ -643,16 +645,27 @@ static void cp210x_set_termios(struct tty_struct *tty,
643 "not supported by device\n"); 645 "not supported by device\n");
644 } 646 }
645 647
646 if ((cflag & (PARENB|PARODD)) != (old_cflag & (PARENB|PARODD))) { 648 if ((cflag & (PARENB|PARODD|CMSPAR)) !=
649 (old_cflag & (PARENB|PARODD|CMSPAR))) {
647 cp210x_get_config(port, CP210X_GET_LINE_CTL, &bits, 2); 650 cp210x_get_config(port, CP210X_GET_LINE_CTL, &bits, 2);
648 bits &= ~BITS_PARITY_MASK; 651 bits &= ~BITS_PARITY_MASK;
649 if (cflag & PARENB) { 652 if (cflag & PARENB) {
650 if (cflag & PARODD) { 653 if (cflag & CMSPAR) {
651 bits |= BITS_PARITY_ODD; 654 if (cflag & PARODD) {
652 dbg("%s - parity = ODD", __func__); 655 bits |= BITS_PARITY_MARK;
656 dbg("%s - parity = MARK", __func__);
657 } else {
658 bits |= BITS_PARITY_SPACE;
659 dbg("%s - parity = SPACE", __func__);
660 }
653 } else { 661 } else {
654 bits |= BITS_PARITY_EVEN; 662 if (cflag & PARODD) {
655 dbg("%s - parity = EVEN", __func__); 663 bits |= BITS_PARITY_ODD;
664 dbg("%s - parity = ODD", __func__);
665 } else {
666 bits |= BITS_PARITY_EVEN;
667 dbg("%s - parity = EVEN", __func__);
668 }
656 } 669 }
657 } 670 }
658 if (cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2)) 671 if (cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2))
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index f744ab7a3b19..98bf83349838 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -138,7 +138,6 @@ static int cyberjack_startup(struct usb_serial *serial)
138 138
139 for (i = 0; i < serial->num_ports; ++i) { 139 for (i = 0; i < serial->num_ports; ++i) {
140 int result; 140 int result;
141 serial->port[i]->interrupt_in_urb->dev = serial->dev;
142 result = usb_submit_urb(serial->port[i]->interrupt_in_urb, 141 result = usb_submit_urb(serial->port[i]->interrupt_in_urb,
143 GFP_KERNEL); 142 GFP_KERNEL);
144 if (result) 143 if (result)
@@ -208,7 +207,6 @@ static void cyberjack_close(struct usb_serial_port *port)
208static int cyberjack_write(struct tty_struct *tty, 207static int cyberjack_write(struct tty_struct *tty,
209 struct usb_serial_port *port, const unsigned char *buf, int count) 208 struct usb_serial_port *port, const unsigned char *buf, int count)
210{ 209{
211 struct usb_serial *serial = port->serial;
212 struct cyberjack_private *priv = usb_get_serial_port_data(port); 210 struct cyberjack_private *priv = usb_get_serial_port_data(port);
213 unsigned long flags; 211 unsigned long flags;
214 int result; 212 int result;
@@ -221,22 +219,18 @@ static int cyberjack_write(struct tty_struct *tty,
221 return 0; 219 return 0;
222 } 220 }
223 221
224 spin_lock_bh(&port->lock); 222 if (!test_and_clear_bit(0, &port->write_urbs_free)) {
225 if (port->write_urb_busy) {
226 spin_unlock_bh(&port->lock);
227 dbg("%s - already writing", __func__); 223 dbg("%s - already writing", __func__);
228 return 0; 224 return 0;
229 } 225 }
230 port->write_urb_busy = 1;
231 spin_unlock_bh(&port->lock);
232 226
233 spin_lock_irqsave(&priv->lock, flags); 227 spin_lock_irqsave(&priv->lock, flags);
234 228
235 if (count+priv->wrfilled > sizeof(priv->wrbuf)) { 229 if (count+priv->wrfilled > sizeof(priv->wrbuf)) {
236 /* To much data for buffer. Reset buffer. */ 230 /* To much data for buffer. Reset buffer. */
237 priv->wrfilled = 0; 231 priv->wrfilled = 0;
238 port->write_urb_busy = 0;
239 spin_unlock_irqrestore(&priv->lock, flags); 232 spin_unlock_irqrestore(&priv->lock, flags);
233 set_bit(0, &port->write_urbs_free);
240 return 0; 234 return 0;
241 } 235 }
242 236
@@ -265,13 +259,7 @@ static int cyberjack_write(struct tty_struct *tty,
265 priv->wrsent = length; 259 priv->wrsent = length;
266 260
267 /* set up our urb */ 261 /* set up our urb */
268 usb_fill_bulk_urb(port->write_urb, serial->dev, 262 port->write_urb->transfer_buffer_length = length;
269 usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
270 port->write_urb->transfer_buffer, length,
271 ((serial->type->write_bulk_callback) ?
272 serial->type->write_bulk_callback :
273 cyberjack_write_bulk_callback),
274 port);
275 263
276 /* send the data out the bulk port */ 264 /* send the data out the bulk port */
277 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 265 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
@@ -283,7 +271,7 @@ static int cyberjack_write(struct tty_struct *tty,
283 priv->wrfilled = 0; 271 priv->wrfilled = 0;
284 priv->wrsent = 0; 272 priv->wrsent = 0;
285 spin_unlock_irqrestore(&priv->lock, flags); 273 spin_unlock_irqrestore(&priv->lock, flags);
286 port->write_urb_busy = 0; 274 set_bit(0, &port->write_urbs_free);
287 return 0; 275 return 0;
288 } 276 }
289 277
@@ -351,7 +339,6 @@ static void cyberjack_read_int_callback(struct urb *urb)
351 spin_unlock(&priv->lock); 339 spin_unlock(&priv->lock);
352 340
353 if (!old_rdtodo) { 341 if (!old_rdtodo) {
354 port->read_urb->dev = port->serial->dev;
355 result = usb_submit_urb(port->read_urb, GFP_ATOMIC); 342 result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
356 if (result) 343 if (result)
357 dev_err(&port->dev, "%s - failed resubmitting " 344 dev_err(&port->dev, "%s - failed resubmitting "
@@ -362,7 +349,6 @@ static void cyberjack_read_int_callback(struct urb *urb)
362 } 349 }
363 350
364resubmit: 351resubmit:
365 port->interrupt_in_urb->dev = port->serial->dev;
366 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); 352 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
367 if (result) 353 if (result)
368 dev_err(&port->dev, "usb_submit_urb(read int) failed\n"); 354 dev_err(&port->dev, "usb_submit_urb(read int) failed\n");
@@ -415,7 +401,6 @@ static void cyberjack_read_bulk_callback(struct urb *urb)
415 401
416 /* Continue to read if we have still urbs to do. */ 402 /* Continue to read if we have still urbs to do. */
417 if (todo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/) { 403 if (todo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/) {
418 port->read_urb->dev = port->serial->dev;
419 result = usb_submit_urb(port->read_urb, GFP_ATOMIC); 404 result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
420 if (result) 405 if (result)
421 dev_err(&port->dev, "%s - failed resubmitting read " 406 dev_err(&port->dev, "%s - failed resubmitting read "
@@ -432,7 +417,7 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
432 417
433 dbg("%s - port %d", __func__, port->number); 418 dbg("%s - port %d", __func__, port->number);
434 419
435 port->write_urb_busy = 0; 420 set_bit(0, &port->write_urbs_free);
436 if (status) { 421 if (status) {
437 dbg("%s - nonzero write bulk status received: %d", 422 dbg("%s - nonzero write bulk status received: %d",
438 __func__, status); 423 __func__, status);
@@ -455,13 +440,7 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
455 priv->wrsent += length; 440 priv->wrsent += length;
456 441
457 /* set up our urb */ 442 /* set up our urb */
458 usb_fill_bulk_urb(port->write_urb, port->serial->dev, 443 port->write_urb->transfer_buffer_length = length;
459 usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress),
460 port->write_urb->transfer_buffer, length,
461 ((port->serial->type->write_bulk_callback) ?
462 port->serial->type->write_bulk_callback :
463 cyberjack_write_bulk_callback),
464 port);
465 444
466 /* send the data out the bulk port */ 445 /* send the data out the bulk port */
467 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 446 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index d9906eb9d16a..07680d6b792b 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -16,32 +16,6 @@
16 * 16 *
17 * See http://geocities.com/i0xox0i for information on this driver and the 17 * See http://geocities.com/i0xox0i for information on this driver and the
18 * earthmate usb device. 18 * earthmate usb device.
19 *
20 * Lonnie Mendez <dignome@gmail.com>
21 * 4-29-2005
22 * Fixed problem where setting or retreiving the serial config would fail
23 * with EPIPE. Removed CRTS toggling so the driver behaves more like
24 * other usbserial adapters. Issued new interval of 1ms instead of the
25 * default 10ms. As a result, transfer speed has been substantially
26 * increased from avg. 850bps to avg. 3300bps. initial termios has also
27 * been modified. Cleaned up code and formatting issues so it is more
28 * readable. Replaced the C++ style comments.
29 *
30 * Lonnie Mendez <dignome@gmail.com>
31 * 12-15-2004
32 * Incorporated write buffering from pl2303 driver. Fixed bug with line
33 * handling so both lines are raised in cypress_open. (was dropping rts)
34 * Various code cleanups made as well along with other misc bug fixes.
35 *
36 * Lonnie Mendez <dignome@gmail.com>
37 * 04-10-2004
38 * Driver modified to support dynamic line settings. Various improvements
39 * and features.
40 *
41 * Neil Whelchel
42 * 10-2003
43 * Driver first released.
44 *
45 */ 19 */
46 20
47/* Thanks to Neil Whelchel for writing the first cypress m8 implementation 21/* Thanks to Neil Whelchel for writing the first cypress m8 implementation
@@ -1162,8 +1136,6 @@ static void cypress_unthrottle(struct tty_struct *tty)
1162 return; 1136 return;
1163 1137
1164 if (actually_throttled) { 1138 if (actually_throttled) {
1165 port->interrupt_in_urb->dev = port->serial->dev;
1166
1167 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 1139 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
1168 if (result) { 1140 if (result) {
1169 dev_err(&port->dev, "%s - failed submitting read urb, " 1141 dev_err(&port->dev, "%s - failed submitting read urb, "
@@ -1352,7 +1324,6 @@ static void cypress_write_int_callback(struct urb *urb)
1352 dbg("%s - nonzero write bulk status received: %d", 1324 dbg("%s - nonzero write bulk status received: %d",
1353 __func__, status); 1325 __func__, status);
1354 port->interrupt_out_urb->transfer_buffer_length = 1; 1326 port->interrupt_out_urb->transfer_buffer_length = 1;
1355 port->interrupt_out_urb->dev = port->serial->dev;
1356 result = usb_submit_urb(port->interrupt_out_urb, GFP_ATOMIC); 1327 result = usb_submit_urb(port->interrupt_out_urb, GFP_ATOMIC);
1357 if (!result) 1328 if (!result)
1358 return; 1329 return;
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
index e92cbefc0f88..6d26a77d0f2a 100644
--- a/drivers/usb/serial/digi_acceleport.c
+++ b/drivers/usb/serial/digi_acceleport.c
@@ -13,222 +13,6 @@
13* 13*
14* Peter Berger (pberger@brimson.com) 14* Peter Berger (pberger@brimson.com)
15* Al Borchers (borchers@steinerpoint.com) 15* Al Borchers (borchers@steinerpoint.com)
16*
17* (12/03/2001) gkh
18* switched to using port->port.count instead of private version.
19* Removed port->active
20*
21* (04/08/2001) gb
22* Identify version on module load.
23*
24* (11/01/2000) Adam J. Richter
25* usb_device_id table support
26*
27* (11/01/2000) pberger and borchers
28* -- Turned off the USB_DISABLE_SPD flag for write bulk urbs--it caused
29* USB 4 ports to hang on startup.
30* -- Serialized access to write urbs by adding the dp_write_urb_in_use
31* flag; otherwise, the driver caused SMP system hangs. Watching the
32* urb status is not sufficient.
33*
34* (10/05/2000) gkh
35* -- Fixed bug with urb->dev not being set properly, now that the usb
36* core needs it.
37*
38* (8/8/2000) pberger and borchers
39* -- Fixed close so that
40* - it can timeout while waiting for transmit idle, if needed;
41* - it ignores interrupts when flushing the port, turning
42* of modem signalling, and so on;
43* - it waits for the flush to really complete before returning.
44* -- Read_bulk_callback and write_bulk_callback check for a closed
45* port before using the tty struct or writing to the port.
46* -- The two changes above fix the oops caused by interrupted closes.
47* -- Added interruptible args to write_oob_command and set_modem_signals
48* and added a timeout arg to transmit_idle; needed for fixes to
49* close.
50* -- Added code for rx_throttle and rx_unthrottle so that input flow
51* control works.
52* -- Added code to set overrun, parity, framing, and break errors
53* (untested).
54* -- Set USB_DISABLE_SPD flag for write bulk urbs, so no 0 length
55* bulk writes are done. These hung the Digi USB device. The
56* 0 length bulk writes were a new feature of usb-uhci added in
57* the 2.4.0-test6 kernels.
58* -- Fixed mod inc race in open; do mod inc before sleeping to wait
59* for a close to finish.
60*
61* (7/31/2000) pberger
62* -- Fixed bugs with hardware handshaking:
63* - Added code to set/clear tty->hw_stopped in digi_read_oob_callback()
64* and digi_set_termios()
65* -- Added code in digi_set_termios() to
66* - add conditional in code handling transition from B0 to only
67* set RTS if RTS/CTS flow control is either not in use or if
68* the port is not currently throttled.
69* - handle turning off CRTSCTS.
70*
71* (7/30/2000) borchers
72* -- Added support for more than one Digi USB device by moving
73* globals to a private structure in the pointed to from the
74* usb_serial structure.
75* -- Moved the modem change and transmit idle wait queues into
76* the port private structure, so each port has its own queue
77* rather than sharing global queues.
78* -- Added support for break signals.
79*
80* (7/25/2000) pberger
81* -- Added USB-2 support. Note: the USB-2 supports 3 devices: two
82* serial and a parallel port. The parallel port is implemented
83* as a serial-to-parallel converter. That is, the driver actually
84* presents all three USB-2 interfaces as serial ports, but the third
85* one physically connects to a parallel device. Thus, for example,
86* one could plug a parallel printer into the USB-2's third port,
87* but from the kernel's (and userland's) point of view what's
88* actually out there is a serial device.
89*
90* (7/15/2000) borchers
91* -- Fixed race in open when a close is in progress.
92* -- Keep count of opens and dec the module use count for each
93* outstanding open when shutdown is called (on disconnect).
94* -- Fixed sanity checks in read_bulk_callback and write_bulk_callback
95* so pointers are checked before use.
96* -- Split read bulk callback into in band and out of band
97* callbacks, and no longer restart read chains if there is
98* a status error or a sanity error. This fixed the seg
99* faults and other errors we used to get on disconnect.
100* -- Port->active is once again a flag as usb-serial intended it
101* to be, not a count. Since it was only a char it would
102* have been limited to 256 simultaneous opens. Now the open
103* count is kept in the port private structure in dp_open_count.
104* -- Added code for modularization of the digi_acceleport driver.
105*
106* (6/27/2000) pberger and borchers
107* -- Zeroed out sync field in the wakeup_task before first use;
108* otherwise the uninitialized value might prevent the task from
109* being scheduled.
110* -- Initialized ret value to 0 in write_bulk_callback, otherwise
111* the uninitialized value could cause a spurious debugging message.
112*
113* (6/22/2000) pberger and borchers
114* -- Made cond_wait_... inline--apparently on SPARC the flags arg
115* to spin_lock_irqsave cannot be passed to another function
116* to call spin_unlock_irqrestore. Thanks to Pauline Middelink.
117* -- In digi_set_modem_signals the inner nested spin locks use just
118* spin_lock() rather than spin_lock_irqsave(). The old code
119* mistakenly left interrupts off. Thanks to Pauline Middelink.
120* -- copy_from_user (which can sleep) is no longer called while a
121* spinlock is held. We copy to a local buffer before getting
122* the spinlock--don't like the extra copy but the code is simpler.
123* -- Printk and dbg are no longer called while a spin lock is held.
124*
125* (6/4/2000) pberger and borchers
126* -- Replaced separate calls to spin_unlock_irqrestore and
127* interruptible_sleep_on_timeout with a new function
128* cond_wait_interruptible_timeout_irqrestore. This eliminates
129* the race condition where the wake up could happen after
130* the unlock and before the sleep.
131* -- Close now waits for output to drain.
132* -- Open waits until any close in progress is finished.
133* -- All out of band responses are now processed, not just the
134* first in a USB packet.
135* -- Fixed a bug that prevented the driver from working when the
136* first Digi port was not the first USB serial port--the driver
137* was mistakenly using the external USB serial port number to
138* try to index into its internal ports.
139* -- Fixed an SMP bug -- write_bulk_callback is called directly from
140* an interrupt, so spin_lock_irqsave/spin_unlock_irqrestore are
141* needed for locks outside write_bulk_callback that are also
142* acquired by write_bulk_callback to prevent deadlocks.
143* -- Fixed support for select() by making digi_chars_in_buffer()
144* return 256 when -EINPROGRESS is set, as the line discipline
145* code in n_tty.c expects.
146* -- Fixed an include file ordering problem that prevented debugging
147* messages from working.
148* -- Fixed an intermittent timeout problem that caused writes to
149* sometimes get stuck on some machines on some kernels. It turns
150* out in these circumstances write_chan() (in n_tty.c) was
151* asleep waiting for our wakeup call. Even though we call
152* wake_up_interruptible() in digi_write_bulk_callback(), there is
153* a race condition that could cause the wakeup to fail: if our
154* wake_up_interruptible() call occurs between the time that our
155* driver write routine finishes and write_chan() sets current->state
156* to TASK_INTERRUPTIBLE, the effect of our wakeup setting the state
157* to TASK_RUNNING will be lost and write_chan's subsequent call to
158* schedule() will never return (unless it catches a signal).
159* This race condition occurs because write_bulk_callback() (and thus
160* the wakeup) are called asynchronously from an interrupt, rather than
161* from the scheduler. We can avoid the race by calling the wakeup
162* from the scheduler queue and that's our fix: Now, at the end of
163* write_bulk_callback() we queue up a wakeup call on the scheduler
164* task queue. We still also invoke the wakeup directly since that
165* squeezes a bit more performance out of the driver, and any lost
166* race conditions will get cleaned up at the next scheduler run.
167*
168* NOTE: The problem also goes away if you comment out
169* the two code lines in write_chan() where current->state
170* is set to TASK_RUNNING just before calling driver.write() and to
171* TASK_INTERRUPTIBLE immediately afterwards. This is why the
172* problem did not show up with the 2.2 kernels -- they do not
173* include that code.
174*
175* (5/16/2000) pberger and borchers
176* -- Added timeouts to sleeps, to defend against lost wake ups.
177* -- Handle transition to/from B0 baud rate in digi_set_termios.
178*
179* (5/13/2000) pberger and borchers
180* -- All commands now sent on out of band port, using
181* digi_write_oob_command.
182* -- Get modem control signals whenever they change, support TIOCMGET/
183* SET/BIS/BIC ioctls.
184* -- digi_set_termios now supports parity, word size, stop bits, and
185* receive enable.
186* -- Cleaned up open and close, use digi_set_termios and
187* digi_write_oob_command to set port parameters.
188* -- Added digi_startup_device to start read chains on all ports.
189* -- Write buffer is only used when count==1, to be sure put_char can
190* write a char (unless the buffer is full).
191*
192* (5/10/2000) pberger and borchers
193* -- Added MOD_INC_USE_COUNT/MOD_DEC_USE_COUNT calls on open/close.
194* -- Fixed problem where the first incoming character is lost on
195* port opens after the first close on that port. Now we keep
196* the read_urb chain open until shutdown.
197* -- Added more port conditioning calls in digi_open and digi_close.
198* -- Convert port->active to a use count so that we can deal with multiple
199* opens and closes properly.
200* -- Fixed some problems with the locking code.
201*
202* (5/3/2000) pberger and borchers
203* -- First alpha version of the driver--many known limitations and bugs.
204*
205*
206* Locking and SMP
207*
208* - Each port, including the out-of-band port, has a lock used to
209* serialize all access to the port's private structure.
210* - The port lock is also used to serialize all writes and access to
211* the port's URB.
212* - The port lock is also used for the port write_wait condition
213* variable. Holding the port lock will prevent a wake up on the
214* port's write_wait; this can be used with cond_wait_... to be sure
215* the wake up is not lost in a race when dropping the lock and
216* sleeping waiting for the wakeup.
217* - digi_write() does not sleep, since it is sometimes called on
218* interrupt time.
219* - digi_write_bulk_callback() and digi_read_bulk_callback() are
220* called directly from interrupts. Hence spin_lock_irqsave()
221* and spin_unlock_irqrestore() are used in the rest of the code
222* for any locks they acquire.
223* - digi_write_bulk_callback() gets the port lock before waking up
224* processes sleeping on the port write_wait. It also schedules
225* wake ups so they happen from the scheduler, because the tty
226* system can miss wake ups from interrupts.
227* - All sleeps use a timeout of DIGI_RETRY_TIMEOUT before looping to
228* recheck the condition they are sleeping on. This is defensive,
229* in case a wake up is lost.
230* - Following Documentation/DocBook/kernel-locking.tmpl no spin locks
231* are held when calling copy_to/from_user or printk.
232*/ 16*/
233 17
234#include <linux/kernel.h> 18#include <linux/kernel.h>
@@ -654,7 +438,6 @@ static int digi_write_oob_command(struct usb_serial_port *port,
654 len &= ~3; 438 len &= ~3;
655 memcpy(oob_port->write_urb->transfer_buffer, buf, len); 439 memcpy(oob_port->write_urb->transfer_buffer, buf, len);
656 oob_port->write_urb->transfer_buffer_length = len; 440 oob_port->write_urb->transfer_buffer_length = len;
657 oob_port->write_urb->dev = port->serial->dev;
658 ret = usb_submit_urb(oob_port->write_urb, GFP_ATOMIC); 441 ret = usb_submit_urb(oob_port->write_urb, GFP_ATOMIC);
659 if (ret == 0) { 442 if (ret == 0) {
660 oob_priv->dp_write_urb_in_use = 1; 443 oob_priv->dp_write_urb_in_use = 1;
@@ -732,7 +515,6 @@ static int digi_write_inb_command(struct usb_serial_port *port,
732 memcpy(data, buf, len); 515 memcpy(data, buf, len);
733 port->write_urb->transfer_buffer_length = len; 516 port->write_urb->transfer_buffer_length = len;
734 } 517 }
735 port->write_urb->dev = port->serial->dev;
736 518
737 ret = usb_submit_urb(port->write_urb, GFP_ATOMIC); 519 ret = usb_submit_urb(port->write_urb, GFP_ATOMIC);
738 if (ret == 0) { 520 if (ret == 0) {
@@ -803,7 +585,6 @@ static int digi_set_modem_signals(struct usb_serial_port *port,
803 data[7] = 0; 585 data[7] = 0;
804 586
805 oob_port->write_urb->transfer_buffer_length = 8; 587 oob_port->write_urb->transfer_buffer_length = 8;
806 oob_port->write_urb->dev = port->serial->dev;
807 588
808 ret = usb_submit_urb(oob_port->write_urb, GFP_ATOMIC); 589 ret = usb_submit_urb(oob_port->write_urb, GFP_ATOMIC);
809 if (ret == 0) { 590 if (ret == 0) {
@@ -899,10 +680,8 @@ static void digi_rx_unthrottle(struct tty_struct *tty)
899 spin_lock_irqsave(&priv->dp_port_lock, flags); 680 spin_lock_irqsave(&priv->dp_port_lock, flags);
900 681
901 /* restart read chain */ 682 /* restart read chain */
902 if (priv->dp_throttle_restart) { 683 if (priv->dp_throttle_restart)
903 port->read_urb->dev = port->serial->dev;
904 ret = usb_submit_urb(port->read_urb, GFP_ATOMIC); 684 ret = usb_submit_urb(port->read_urb, GFP_ATOMIC);
905 }
906 685
907 /* turn throttle off */ 686 /* turn throttle off */
908 priv->dp_throttled = 0; 687 priv->dp_throttled = 0;
@@ -1195,7 +974,6 @@ static int digi_write(struct tty_struct *tty, struct usb_serial_port *port,
1195 } 974 }
1196 975
1197 port->write_urb->transfer_buffer_length = data_len+2; 976 port->write_urb->transfer_buffer_length = data_len+2;
1198 port->write_urb->dev = port->serial->dev;
1199 977
1200 *data++ = DIGI_CMD_SEND_DATA; 978 *data++ = DIGI_CMD_SEND_DATA;
1201 *data++ = data_len; 979 *data++ = data_len;
@@ -1271,7 +1049,6 @@ static void digi_write_bulk_callback(struct urb *urb)
1271 = (unsigned char)priv->dp_out_buf_len; 1049 = (unsigned char)priv->dp_out_buf_len;
1272 port->write_urb->transfer_buffer_length = 1050 port->write_urb->transfer_buffer_length =
1273 priv->dp_out_buf_len + 2; 1051 priv->dp_out_buf_len + 2;
1274 port->write_urb->dev = serial->dev;
1275 memcpy(port->write_urb->transfer_buffer + 2, priv->dp_out_buf, 1052 memcpy(port->write_urb->transfer_buffer + 2, priv->dp_out_buf,
1276 priv->dp_out_buf_len); 1053 priv->dp_out_buf_len);
1277 ret = usb_submit_urb(port->write_urb, GFP_ATOMIC); 1054 ret = usb_submit_urb(port->write_urb, GFP_ATOMIC);
@@ -1473,7 +1250,6 @@ static int digi_startup_device(struct usb_serial *serial)
1473 /* set USB_DISABLE_SPD flag for write bulk urbs */ 1250 /* set USB_DISABLE_SPD flag for write bulk urbs */
1474 for (i = 0; i < serial->type->num_ports + 1; i++) { 1251 for (i = 0; i < serial->type->num_ports + 1; i++) {
1475 port = serial->port[i]; 1252 port = serial->port[i];
1476 port->write_urb->dev = port->serial->dev;
1477 ret = usb_submit_urb(port->read_urb, GFP_KERNEL); 1253 ret = usb_submit_urb(port->read_urb, GFP_KERNEL);
1478 if (ret != 0) { 1254 if (ret != 0) {
1479 dev_err(&port->dev, 1255 dev_err(&port->dev,
@@ -1616,7 +1392,6 @@ static void digi_read_bulk_callback(struct urb *urb)
1616 } 1392 }
1617 1393
1618 /* continue read */ 1394 /* continue read */
1619 urb->dev = port->serial->dev;
1620 ret = usb_submit_urb(urb, GFP_ATOMIC); 1395 ret = usb_submit_urb(urb, GFP_ATOMIC);
1621 if (ret != 0 && ret != -EPERM) { 1396 if (ret != 0 && ret != -EPERM) {
1622 dev_err(&port->dev, 1397 dev_err(&port->dev,
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index ff3db5d056a5..c290df97108e 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -2105,6 +2105,9 @@ static void ftdi_set_termios(struct tty_struct *tty,
2105 2105
2106 cflag = termios->c_cflag; 2106 cflag = termios->c_cflag;
2107 2107
2108 if (old_termios == 0)
2109 goto no_skip;
2110
2108 if (old_termios->c_cflag == termios->c_cflag 2111 if (old_termios->c_cflag == termios->c_cflag
2109 && old_termios->c_ispeed == termios->c_ispeed 2112 && old_termios->c_ispeed == termios->c_ispeed
2110 && old_termios->c_ospeed == termios->c_ospeed) 2113 && old_termios->c_ospeed == termios->c_ospeed)
@@ -2118,6 +2121,7 @@ static void ftdi_set_termios(struct tty_struct *tty,
2118 (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB))) 2121 (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)))
2119 goto no_data_parity_stop_changes; 2122 goto no_data_parity_stop_changes;
2120 2123
2124no_skip:
2121 /* Set number of data bits, parity, stop bits */ 2125 /* Set number of data bits, parity, stop bits */
2122 2126
2123 urb_value = 0; 2127 urb_value = 0;
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
index 1a49ca9c8ea5..bf12565f8e87 100644
--- a/drivers/usb/serial/garmin_gps.c
+++ b/drivers/usb/serial/garmin_gps.c
@@ -901,7 +901,6 @@ static int garmin_init_session(struct usb_serial_port *port)
901 usb_kill_urb(port->interrupt_in_urb); 901 usb_kill_urb(port->interrupt_in_urb);
902 902
903 dbg("%s - adding interrupt input", __func__); 903 dbg("%s - adding interrupt input", __func__);
904 port->interrupt_in_urb->dev = serial->dev;
905 status = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 904 status = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
906 if (status) 905 if (status)
907 dev_err(&serial->dev->dev, 906 dev_err(&serial->dev->dev,
@@ -1277,7 +1276,6 @@ static void garmin_read_int_callback(struct urb *urb)
1277 unsigned long flags; 1276 unsigned long flags;
1278 int retval; 1277 int retval;
1279 struct usb_serial_port *port = urb->context; 1278 struct usb_serial_port *port = urb->context;
1280 struct usb_serial *serial = port->serial;
1281 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); 1279 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
1282 unsigned char *data = urb->transfer_buffer; 1280 unsigned char *data = urb->transfer_buffer;
1283 int status = urb->status; 1281 int status = urb->status;
@@ -1311,12 +1309,6 @@ static void garmin_read_int_callback(struct urb *urb)
1311 if (0 == (garmin_data_p->flags & FLAGS_BULK_IN_ACTIVE)) { 1309 if (0 == (garmin_data_p->flags & FLAGS_BULK_IN_ACTIVE)) {
1312 1310
1313 /* bulk data available */ 1311 /* bulk data available */
1314 usb_fill_bulk_urb(port->read_urb, serial->dev,
1315 usb_rcvbulkpipe(serial->dev,
1316 port->bulk_in_endpointAddress),
1317 port->read_urb->transfer_buffer,
1318 port->read_urb->transfer_buffer_length,
1319 garmin_read_bulk_callback, port);
1320 retval = usb_submit_urb(port->read_urb, GFP_ATOMIC); 1312 retval = usb_submit_urb(port->read_urb, GFP_ATOMIC);
1321 if (retval) { 1313 if (retval) {
1322 dev_err(&port->dev, 1314 dev_err(&port->dev,
@@ -1353,7 +1345,6 @@ static void garmin_read_int_callback(struct urb *urb)
1353 1345
1354 garmin_read_process(garmin_data_p, data, urb->actual_length, 0); 1346 garmin_read_process(garmin_data_p, data, urb->actual_length, 0);
1355 1347
1356 port->interrupt_in_urb->dev = port->serial->dev;
1357 retval = usb_submit_urb(urb, GFP_ATOMIC); 1348 retval = usb_submit_urb(urb, GFP_ATOMIC);
1358 if (retval) 1349 if (retval)
1359 dev_err(&urb->dev->dev, 1350 dev_err(&urb->dev->dev,
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index e4db5ad2bc55..f7403576f99f 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * USB Serial Converter Generic functions 2 * USB Serial Converter Generic functions
3 * 3 *
4 * Copyright (C) 2010 Johan Hovold (jhovold@gmail.com) 4 * Copyright (C) 2010 - 2011 Johan Hovold (jhovold@gmail.com)
5 * Copyright (C) 1999 - 2002 Greg Kroah-Hartman (greg@kroah.com) 5 * Copyright (C) 1999 - 2002 Greg Kroah-Hartman (greg@kroah.com)
6 * 6 *
7 * This program is free software; you can redistribute it and/or 7 * This program is free software; you can redistribute it and/or
@@ -132,7 +132,7 @@ int usb_serial_generic_open(struct tty_struct *tty, struct usb_serial_port *port
132 132
133 /* if we have a bulk endpoint, start reading from it */ 133 /* if we have a bulk endpoint, start reading from it */
134 if (port->bulk_in_size) 134 if (port->bulk_in_size)
135 result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL); 135 result = usb_serial_generic_submit_read_urbs(port, GFP_KERNEL);
136 136
137 return result; 137 return result;
138} 138}
@@ -157,8 +157,10 @@ static void generic_cleanup(struct usb_serial_port *port)
157 kfifo_reset_out(&port->write_fifo); 157 kfifo_reset_out(&port->write_fifo);
158 spin_unlock_irqrestore(&port->lock, flags); 158 spin_unlock_irqrestore(&port->lock, flags);
159 } 159 }
160 if (port->bulk_in_size) 160 if (port->bulk_in_size) {
161 usb_kill_urb(port->read_urb); 161 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
162 usb_kill_urb(port->read_urbs[i]);
163 }
162 } 164 }
163} 165}
164 166
@@ -308,19 +310,52 @@ int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
308 return chars; 310 return chars;
309} 311}
310 312
311int usb_serial_generic_submit_read_urb(struct usb_serial_port *port, 313static int usb_serial_generic_submit_read_urb(struct usb_serial_port *port,
314 int index, gfp_t mem_flags)
315{
316 int res;
317
318 if (!test_and_clear_bit(index, &port->read_urbs_free))
319 return 0;
320
321 dbg("%s - port %d, urb %d\n", __func__, port->number, index);
322
323 res = usb_submit_urb(port->read_urbs[index], mem_flags);
324 if (res) {
325 if (res != -EPERM) {
326 dev_err(&port->dev,
327 "%s - usb_submit_urb failed: %d\n",
328 __func__, res);
329 }
330 set_bit(index, &port->read_urbs_free);
331 return res;
332 }
333
334 return 0;
335}
336
337int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,
312 gfp_t mem_flags) 338 gfp_t mem_flags)
313{ 339{
314 int result; 340 int res;
341 int i;
315 342
316 result = usb_submit_urb(port->read_urb, mem_flags); 343 dbg("%s - port %d", __func__, port->number);
317 if (result && result != -EPERM) { 344
318 dev_err(&port->dev, "%s - error submitting urb: %d\n", 345 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
319 __func__, result); 346 res = usb_serial_generic_submit_read_urb(port, i, mem_flags);
347 if (res)
348 goto err;
320 } 349 }
321 return result; 350
351 return 0;
352err:
353 for (; i >= 0; --i)
354 usb_kill_urb(port->read_urbs[i]);
355
356 return res;
322} 357}
323EXPORT_SYMBOL_GPL(usb_serial_generic_submit_read_urb); 358EXPORT_SYMBOL_GPL(usb_serial_generic_submit_read_urbs);
324 359
325void usb_serial_generic_process_read_urb(struct urb *urb) 360void usb_serial_generic_process_read_urb(struct urb *urb)
326{ 361{
@@ -356,14 +391,19 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb)
356{ 391{
357 struct usb_serial_port *port = urb->context; 392 struct usb_serial_port *port = urb->context;
358 unsigned char *data = urb->transfer_buffer; 393 unsigned char *data = urb->transfer_buffer;
359 int status = urb->status;
360 unsigned long flags; 394 unsigned long flags;
395 int i;
361 396
362 dbg("%s - port %d", __func__, port->number); 397 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
398 if (urb == port->read_urbs[i])
399 break;
400 }
401 set_bit(i, &port->read_urbs_free);
363 402
364 if (unlikely(status != 0)) { 403 dbg("%s - port %d, urb %d, len %d\n", __func__, port->number, i,
365 dbg("%s - nonzero read bulk status received: %d", 404 urb->actual_length);
366 __func__, status); 405 if (urb->status) {
406 dbg("%s - non-zero urb status: %d\n", __func__, urb->status);
367 return; 407 return;
368 } 408 }
369 409
@@ -376,7 +416,7 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb)
376 port->throttled = port->throttle_req; 416 port->throttled = port->throttle_req;
377 if (!port->throttled) { 417 if (!port->throttled) {
378 spin_unlock_irqrestore(&port->lock, flags); 418 spin_unlock_irqrestore(&port->lock, flags);
379 usb_serial_generic_submit_read_urb(port, GFP_ATOMIC); 419 usb_serial_generic_submit_read_urb(port, i, GFP_ATOMIC);
380 } else 420 } else
381 spin_unlock_irqrestore(&port->lock, flags); 421 spin_unlock_irqrestore(&port->lock, flags);
382} 422}
@@ -443,7 +483,7 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty)
443 spin_unlock_irq(&port->lock); 483 spin_unlock_irq(&port->lock);
444 484
445 if (was_throttled) 485 if (was_throttled)
446 usb_serial_generic_submit_read_urb(port, GFP_KERNEL); 486 usb_serial_generic_submit_read_urbs(port, GFP_KERNEL);
447} 487}
448EXPORT_SYMBOL_GPL(usb_serial_generic_unthrottle); 488EXPORT_SYMBOL_GPL(usb_serial_generic_unthrottle);
449 489
@@ -509,8 +549,9 @@ int usb_serial_generic_resume(struct usb_serial *serial)
509 if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) 549 if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags))
510 continue; 550 continue;
511 551
512 if (port->read_urb) { 552 if (port->bulk_in_size) {
513 r = usb_submit_urb(port->read_urb, GFP_NOIO); 553 r = usb_serial_generic_submit_read_urbs(port,
554 GFP_NOIO);
514 if (r < 0) 555 if (r < 0)
515 c++; 556 c++;
516 } 557 }
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index 2ee807523f53..abd2ee2b2f99 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -610,7 +610,6 @@ static void edge_interrupt_callback(struct urb *urb)
610 610
611 /* we have pending bytes on the 611 /* we have pending bytes on the
612 bulk in pipe, send a request */ 612 bulk in pipe, send a request */
613 edge_serial->read_urb->dev = edge_serial->serial->dev;
614 result = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC); 613 result = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
615 if (result) { 614 if (result) {
616 dev_err(&edge_serial->serial->dev->dev, "%s - usb_submit_urb(read bulk) failed with result = %d\n", __func__, result); 615 dev_err(&edge_serial->serial->dev->dev, "%s - usb_submit_urb(read bulk) failed with result = %d\n", __func__, result);
@@ -711,7 +710,6 @@ static void edge_bulk_in_callback(struct urb *urb)
711 /* check to see if there's any more data for us to read */ 710 /* check to see if there's any more data for us to read */
712 if (edge_serial->rxBytesAvail > 0) { 711 if (edge_serial->rxBytesAvail > 0) {
713 dbg("%s - posting a read", __func__); 712 dbg("%s - posting a read", __func__);
714 edge_serial->read_urb->dev = edge_serial->serial->dev;
715 retval = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC); 713 retval = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
716 if (retval) { 714 if (retval) {
717 dev_err(&urb->dev->dev, 715 dev_err(&urb->dev->dev,
@@ -1330,7 +1328,6 @@ static void send_more_port_data(struct edgeport_serial *edge_serial,
1330 edge_port->txCredits -= count; 1328 edge_port->txCredits -= count;
1331 edge_port->icount.tx += count; 1329 edge_port->icount.tx += count;
1332 1330
1333 urb->dev = edge_serial->serial->dev;
1334 status = usb_submit_urb(urb, GFP_ATOMIC); 1331 status = usb_submit_urb(urb, GFP_ATOMIC);
1335 if (status) { 1332 if (status) {
1336 /* something went wrong */ 1333 /* something went wrong */
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 0aac00afb5c8..e44d375edaad 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -15,13 +15,6 @@
15 * For questions or problems with this driver, contact Inside Out 15 * For questions or problems with this driver, contact Inside Out
16 * Networks technical support, or Peter Berger <pberger@brimson.com>, 16 * Networks technical support, or Peter Berger <pberger@brimson.com>,
17 * or Al Borchers <alborchers@steinerpoint.com>. 17 * or Al Borchers <alborchers@steinerpoint.com>.
18 *
19 * Version history:
20 *
21 * July 11, 2002 Removed 4 port device structure since all TI UMP
22 * chips have only 2 ports
23 * David Iacovelli (davidi@ionetworks.com)
24 *
25 */ 18 */
26 19
27#include <linux/kernel.h> 20#include <linux/kernel.h>
@@ -1777,12 +1770,11 @@ static void edge_bulk_in_callback(struct urb *urb)
1777exit: 1770exit:
1778 /* continue read unless stopped */ 1771 /* continue read unless stopped */
1779 spin_lock(&edge_port->ep_lock); 1772 spin_lock(&edge_port->ep_lock);
1780 if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING) { 1773 if (edge_port->ep_read_urb_state == EDGE_READ_URB_RUNNING)
1781 urb->dev = edge_port->port->serial->dev;
1782 retval = usb_submit_urb(urb, GFP_ATOMIC); 1774 retval = usb_submit_urb(urb, GFP_ATOMIC);
1783 } else if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPING) { 1775 else if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPING)
1784 edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPED; 1776 edge_port->ep_read_urb_state = EDGE_READ_URB_STOPPED;
1785 } 1777
1786 spin_unlock(&edge_port->ep_lock); 1778 spin_unlock(&edge_port->ep_lock);
1787 if (retval) 1779 if (retval)
1788 dev_err(&urb->dev->dev, 1780 dev_err(&urb->dev->dev,
@@ -1959,9 +1951,7 @@ static int edge_open(struct tty_struct *tty, struct usb_serial_port *port)
1959 status = -EINVAL; 1951 status = -EINVAL;
1960 goto release_es_lock; 1952 goto release_es_lock;
1961 } 1953 }
1962 urb->complete = edge_interrupt_callback;
1963 urb->context = edge_serial; 1954 urb->context = edge_serial;
1964 urb->dev = dev;
1965 status = usb_submit_urb(urb, GFP_KERNEL); 1955 status = usb_submit_urb(urb, GFP_KERNEL);
1966 if (status) { 1956 if (status) {
1967 dev_err(&port->dev, 1957 dev_err(&port->dev,
@@ -1987,9 +1977,7 @@ static int edge_open(struct tty_struct *tty, struct usb_serial_port *port)
1987 goto unlink_int_urb; 1977 goto unlink_int_urb;
1988 } 1978 }
1989 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING; 1979 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING;
1990 urb->complete = edge_bulk_in_callback;
1991 urb->context = edge_port; 1980 urb->context = edge_port;
1992 urb->dev = dev;
1993 status = usb_submit_urb(urb, GFP_KERNEL); 1981 status = usb_submit_urb(urb, GFP_KERNEL);
1994 if (status) { 1982 if (status) {
1995 dev_err(&port->dev, 1983 dev_err(&port->dev,
@@ -2118,12 +2106,7 @@ static void edge_send(struct tty_struct *tty)
2118 port->write_urb->transfer_buffer); 2106 port->write_urb->transfer_buffer);
2119 2107
2120 /* set up our urb */ 2108 /* set up our urb */
2121 usb_fill_bulk_urb(port->write_urb, port->serial->dev, 2109 port->write_urb->transfer_buffer_length = count;
2122 usb_sndbulkpipe(port->serial->dev,
2123 port->bulk_out_endpointAddress),
2124 port->write_urb->transfer_buffer, count,
2125 edge_bulk_out_callback,
2126 port);
2127 2110
2128 /* send the data out the bulk port */ 2111 /* send the data out the bulk port */
2129 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 2112 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
@@ -2267,9 +2250,6 @@ static int restart_read(struct edgeport_port *edge_port)
2267 2250
2268 if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPED) { 2251 if (edge_port->ep_read_urb_state == EDGE_READ_URB_STOPPED) {
2269 urb = edge_port->port->read_urb; 2252 urb = edge_port->port->read_urb;
2270 urb->complete = edge_bulk_in_callback;
2271 urb->context = edge_port;
2272 urb->dev = edge_port->port->serial->dev;
2273 status = usb_submit_urb(urb, GFP_ATOMIC); 2253 status = usb_submit_urb(urb, GFP_ATOMIC);
2274 } 2254 }
2275 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING; 2255 edge_port->ep_read_urb_state = EDGE_READ_URB_RUNNING;
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index 4735931b4c7b..36f5cbe90485 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -8,40 +8,6 @@
8 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or 9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version. 10 * (at your option) any later version.
11 *
12 * (12/12/2002) ganesh
13 * Added support for practically all devices supported by ActiveSync
14 * on Windows. Thanks to Wes Cilldhaire <billybobjoehenrybob@hotmail.com>.
15 *
16 * (26/11/2002) ganesh
17 * Added insmod options to specify product and vendor id.
18 * Use modprobe ipaq vendor=0xfoo product=0xbar
19 *
20 * (26/7/2002) ganesh
21 * Fixed up broken error handling in ipaq_open. Retry the "kickstart"
22 * packet much harder - this drastically reduces connection failures.
23 *
24 * (30/4/2002) ganesh
25 * Added support for the Casio EM500. Completely untested. Thanks
26 * to info from Nathan <wfilardo@fuse.net>
27 *
28 * (19/3/2002) ganesh
29 * Don't submit urbs while holding spinlocks. Not strictly necessary
30 * in 2.5.x.
31 *
32 * (8/3/2002) ganesh
33 * The ipaq sometimes emits a '\0' before the CLIENT string. At this
34 * point of time, the ppp ldisc is not yet attached to the tty, so
35 * n_tty echoes "^ " to the ipaq, which messes up the chat. In 2.5.6-pre2
36 * this causes a panic because echo_char() tries to sleep in interrupt
37 * context.
38 * The fix is to tell the upper layers that this is a raw device so that
39 * echoing is suppressed. Thanks to Lyle Lindholm for a detailed bug
40 * report.
41 *
42 * (25/2/2002) ganesh
43 * Added support for the HP Jornada 548 and 568. Completely untested.
44 * Thanks to info from Heath Robinson and Arieh Davidoff.
45 */ 11 */
46 12
47#include <linux/kernel.h> 13#include <linux/kernel.h>
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
index ccbce4066d04..0c537da0d3cd 100644
--- a/drivers/usb/serial/ir-usb.c
+++ b/drivers/usb/serial/ir-usb.c
@@ -22,38 +22,6 @@
22 * 22 *
23 * See Documentation/usb/usb-serial.txt for more information on using this 23 * See Documentation/usb/usb-serial.txt for more information on using this
24 * driver 24 * driver
25 *
26 * 2008_Jun_02 Felipe Balbi <me@felipebalbi.com>
27 * Introduced common header to be used also in USB Gadget Framework.
28 * Still needs some other style fixes.
29 *
30 * 2007_Jun_21 Alan Cox <alan@lxorguk.ukuu.org.uk>
31 * Minimal cleanups for some of the driver problens and tty layer abuse.
32 * Still needs fixing to allow multiple dongles.
33 *
34 * 2002_Mar_07 greg kh
35 * moved some needed structures and #define values from the
36 * net/irda/irda-usb.h file into our file, as we don't want to depend on
37 * that codebase compiling correctly :)
38 *
39 * 2002_Jan_14 gb
40 * Added module parameter to force specific number of XBOFs.
41 * Added ir_xbof_change().
42 * Reorganized read_bulk_callback error handling.
43 * Switched from FILL_BULK_URB() to usb_fill_bulk_urb().
44 *
45 * 2001_Nov_08 greg kh
46 * Changed the irda_usb_find_class_desc() function based on comments and
47 * code from Martin Diehl.
48 *
49 * 2001_Nov_01 greg kh
50 * Added support for more IrDA USB devices.
51 * Added support for zero packet. Added buffer override paramater, so
52 * users can transfer larger packets at once if they wish. Both patches
53 * came from Dag Brattli <dag@obexcode.com>.
54 *
55 * 2001_Oct_07 greg kh
56 * initial version released.
57 */ 25 */
58 26
59#include <linux/kernel.h> 27#include <linux/kernel.h>
diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
index 6aca631a407a..64d0ffd4440b 100644
--- a/drivers/usb/serial/iuu_phoenix.c
+++ b/drivers/usb/serial/iuu_phoenix.c
@@ -1168,15 +1168,14 @@ static int iuu_open(struct tty_struct *tty, struct usb_serial_port *port)
1168 port->write_urb->transfer_buffer, 1, 1168 port->write_urb->transfer_buffer, 1,
1169 read_rxcmd_callback, port); 1169 read_rxcmd_callback, port);
1170 result = usb_submit_urb(port->write_urb, GFP_KERNEL); 1170 result = usb_submit_urb(port->write_urb, GFP_KERNEL);
1171
1172 if (result) { 1171 if (result) {
1173 dev_err(&port->dev, "%s - failed submitting read urb," 1172 dev_err(&port->dev, "%s - failed submitting read urb,"
1174 " error %d\n", __func__, result); 1173 " error %d\n", __func__, result);
1175 iuu_close(port); 1174 iuu_close(port);
1176 return -EPROTO;
1177 } else { 1175 } else {
1178 dbg("%s - rxcmd OK", __func__); 1176 dbg("%s - rxcmd OK", __func__);
1179 } 1177 }
1178
1180 return result; 1179 return result;
1181} 1180}
1182 1181
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index a442352d7b61..bc8dc203e818 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -25,73 +25,6 @@
25 25
26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting 26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting
27 staff in their work on open source projects. 27 staff in their work on open source projects.
28
29 Change History
30
31 2003sep04 LPM (Keyspan) add support for new single port product USA19HS.
32 Improve setup message handling for all devices.
33
34 Wed Feb 19 22:00:00 PST 2003 (Jeffrey S. Laing <keyspan@jsl.com>)
35 Merged the current (1/31/03) Keyspan code with the current (2.4.21-pre4)
36 Linux source tree. The Linux tree lacked support for the 49WLC and
37 others. The Keyspan patches didn't work with the current kernel.
38
39 2003jan30 LPM add support for the 49WLC and MPR
40
41 Wed Apr 25 12:00:00 PST 2002 (Keyspan)
42 Started with Hugh Blemings' code dated Jan 17, 2002. All adapters
43 now supported (including QI and QW). Modified port open, port
44 close, and send setup() logic to fix various data and endpoint
45 synchronization bugs and device LED status bugs. Changed keyspan_
46 write_room() to accurately return transmit buffer availability.
47 Changed forwardingLength from 1 to 16 for all adapters.
48
49 Fri Oct 12 16:45:00 EST 2001
50 Preliminary USA-19QI and USA-28 support (both test OK for me, YMMV)
51
52 Wed Apr 25 12:00:00 PST 2002 (Keyspan)
53 Started with Hugh Blemings' code dated Jan 17, 2002. All adapters
54 now supported (including QI and QW). Modified port open, port
55 close, and send setup() logic to fix various data and endpoint
56 synchronization bugs and device LED status bugs. Changed keyspan_
57 write_room() to accurately return transmit buffer availability.
58 Changed forwardingLength from 1 to 16 for all adapters.
59
60 Fri Oct 12 16:45:00 EST 2001
61 Preliminary USA-19QI and USA-28 support (both test OK for me, YMMV)
62
63 Mon Oct 8 14:29:00 EST 2001 hugh
64 Fixed bug that prevented mulitport devices operating correctly
65 if they weren't the first unit attached.
66
67 Sat Oct 6 12:31:21 EST 2001 hugh
68 Added support for USA-28XA and -28XB, misc cleanups, break support
69 for usa26 based models thanks to David Gibson.
70
71 Thu May 31 11:56:42 PDT 2001 gkh
72 switched from using spinlock to a semaphore
73
74 (04/08/2001) gb
75 Identify version on module load.
76
77 (11/01/2000) Adam J. Richter
78 usb_device_id table support.
79
80 Tue Oct 10 23:15:33 EST 2000 Hugh
81 Merged Paul's changes with my USA-49W mods. Work in progress
82 still...
83
84 Wed Jul 19 14:00:42 EST 2000 gkh
85 Added module_init and module_exit functions to handle the fact that
86 this driver is a loadable module now.
87
88 Tue Jul 18 16:14:52 EST 2000 Hugh
89 Basic character input/output for USA-19 now mostly works,
90 fixed at 9600 baud for the moment.
91
92 Sat Jul 8 11:11:48 EST 2000 Hugh
93 First public release - nothing works except the firmware upload.
94 Tested on PPC and x86 architectures, seems to behave...
95*/ 28*/
96 29
97 30
@@ -397,7 +330,6 @@ static int keyspan_write(struct tty_struct *tty,
397 /* send the data out the bulk port */ 330 /* send the data out the bulk port */
398 this_urb->transfer_buffer_length = todo + dataOffset; 331 this_urb->transfer_buffer_length = todo + dataOffset;
399 332
400 this_urb->dev = port->serial->dev;
401 err = usb_submit_urb(this_urb, GFP_ATOMIC); 333 err = usb_submit_urb(this_urb, GFP_ATOMIC);
402 if (err != 0) 334 if (err != 0)
403 dbg("usb_submit_urb(write bulk) failed (%d)", err); 335 dbg("usb_submit_urb(write bulk) failed (%d)", err);
@@ -463,7 +395,6 @@ static void usa26_indat_callback(struct urb *urb)
463 tty_kref_put(tty); 395 tty_kref_put(tty);
464 396
465 /* Resubmit urb so we continue receiving */ 397 /* Resubmit urb so we continue receiving */
466 urb->dev = port->serial->dev;
467 err = usb_submit_urb(urb, GFP_ATOMIC); 398 err = usb_submit_urb(urb, GFP_ATOMIC);
468 if (err != 0) 399 if (err != 0)
469 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 400 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -559,7 +490,6 @@ static void usa26_instat_callback(struct urb *urb)
559 } 490 }
560 491
561 /* Resubmit urb so we continue receiving */ 492 /* Resubmit urb so we continue receiving */
562 urb->dev = serial->dev;
563 err = usb_submit_urb(urb, GFP_ATOMIC); 493 err = usb_submit_urb(urb, GFP_ATOMIC);
564 if (err != 0) 494 if (err != 0)
565 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 495 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -609,7 +539,6 @@ static void usa28_indat_callback(struct urb *urb)
609 tty_kref_put(tty); 539 tty_kref_put(tty);
610 540
611 /* Resubmit urb so we continue receiving */ 541 /* Resubmit urb so we continue receiving */
612 urb->dev = port->serial->dev;
613 err = usb_submit_urb(urb, GFP_ATOMIC); 542 err = usb_submit_urb(urb, GFP_ATOMIC);
614 if (err != 0) 543 if (err != 0)
615 dbg("%s - resubmit read urb failed. (%d)", 544 dbg("%s - resubmit read urb failed. (%d)",
@@ -694,7 +623,6 @@ static void usa28_instat_callback(struct urb *urb)
694 } 623 }
695 624
696 /* Resubmit urb so we continue receiving */ 625 /* Resubmit urb so we continue receiving */
697 urb->dev = serial->dev;
698 err = usb_submit_urb(urb, GFP_ATOMIC); 626 err = usb_submit_urb(urb, GFP_ATOMIC);
699 if (err != 0) 627 if (err != 0)
700 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 628 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -789,8 +717,6 @@ static void usa49_instat_callback(struct urb *urb)
789 } 717 }
790 718
791 /* Resubmit urb so we continue receiving */ 719 /* Resubmit urb so we continue receiving */
792 urb->dev = serial->dev;
793
794 err = usb_submit_urb(urb, GFP_ATOMIC); 720 err = usb_submit_urb(urb, GFP_ATOMIC);
795 if (err != 0) 721 if (err != 0)
796 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 722 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -848,7 +774,6 @@ static void usa49_indat_callback(struct urb *urb)
848 tty_kref_put(tty); 774 tty_kref_put(tty);
849 775
850 /* Resubmit urb so we continue receiving */ 776 /* Resubmit urb so we continue receiving */
851 urb->dev = port->serial->dev;
852 err = usb_submit_urb(urb, GFP_ATOMIC); 777 err = usb_submit_urb(urb, GFP_ATOMIC);
853 if (err != 0) 778 if (err != 0)
854 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 779 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -919,8 +844,6 @@ static void usa49wg_indat_callback(struct urb *urb)
919 } 844 }
920 845
921 /* Resubmit urb so we continue receiving */ 846 /* Resubmit urb so we continue receiving */
922 urb->dev = serial->dev;
923
924 err = usb_submit_urb(urb, GFP_ATOMIC); 847 err = usb_submit_urb(urb, GFP_ATOMIC);
925 if (err != 0) 848 if (err != 0)
926 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 849 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -996,7 +919,6 @@ static void usa90_indat_callback(struct urb *urb)
996 } 919 }
997 920
998 /* Resubmit urb so we continue receiving */ 921 /* Resubmit urb so we continue receiving */
999 urb->dev = port->serial->dev;
1000 err = usb_submit_urb(urb, GFP_ATOMIC); 922 err = usb_submit_urb(urb, GFP_ATOMIC);
1001 if (err != 0) 923 if (err != 0)
1002 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 924 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -1047,7 +969,6 @@ static void usa90_instat_callback(struct urb *urb)
1047 } 969 }
1048 970
1049 /* Resubmit urb so we continue receiving */ 971 /* Resubmit urb so we continue receiving */
1050 urb->dev = serial->dev;
1051 err = usb_submit_urb(urb, GFP_ATOMIC); 972 err = usb_submit_urb(urb, GFP_ATOMIC);
1052 if (err != 0) 973 if (err != 0)
1053 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 974 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -1123,7 +1044,6 @@ static void usa67_instat_callback(struct urb *urb)
1123 } 1044 }
1124 1045
1125 /* Resubmit urb so we continue receiving */ 1046 /* Resubmit urb so we continue receiving */
1126 urb->dev = serial->dev;
1127 err = usb_submit_urb(urb, GFP_ATOMIC); 1047 err = usb_submit_urb(urb, GFP_ATOMIC);
1128 if (err != 0) 1048 if (err != 0)
1129 dbg("%s - resubmit read urb failed. (%d)", __func__, err); 1049 dbg("%s - resubmit read urb failed. (%d)", __func__, err);
@@ -1223,7 +1143,6 @@ static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
1223 urb = p_priv->in_urbs[i]; 1143 urb = p_priv->in_urbs[i];
1224 if (urb == NULL) 1144 if (urb == NULL)
1225 continue; 1145 continue;
1226 urb->dev = serial->dev;
1227 1146
1228 /* make sure endpoint data toggle is synchronized 1147 /* make sure endpoint data toggle is synchronized
1229 with the device */ 1148 with the device */
@@ -1239,7 +1158,6 @@ static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port)
1239 urb = p_priv->out_urbs[i]; 1158 urb = p_priv->out_urbs[i];
1240 if (urb == NULL) 1159 if (urb == NULL)
1241 continue; 1160 continue;
1242 urb->dev = serial->dev;
1243 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), 1161 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1244 usb_pipeout(urb->pipe), 0); */ 1162 usb_pipeout(urb->pipe), 0); */
1245 } 1163 }
@@ -1956,7 +1874,6 @@ static int keyspan_usa26_send_setup(struct usb_serial *serial,
1956 /* send the data out the device on control endpoint */ 1874 /* send the data out the device on control endpoint */
1957 this_urb->transfer_buffer_length = sizeof(msg); 1875 this_urb->transfer_buffer_length = sizeof(msg);
1958 1876
1959 this_urb->dev = serial->dev;
1960 err = usb_submit_urb(this_urb, GFP_ATOMIC); 1877 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1961 if (err != 0) 1878 if (err != 0)
1962 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err); 1879 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
@@ -2084,7 +2001,6 @@ static int keyspan_usa28_send_setup(struct usb_serial *serial,
2084 /* send the data out the device on control endpoint */ 2001 /* send the data out the device on control endpoint */
2085 this_urb->transfer_buffer_length = sizeof(msg); 2002 this_urb->transfer_buffer_length = sizeof(msg);
2086 2003
2087 this_urb->dev = serial->dev;
2088 err = usb_submit_urb(this_urb, GFP_ATOMIC); 2004 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2089 if (err != 0) 2005 if (err != 0)
2090 dbg("%s - usb_submit_urb(setup) failed", __func__); 2006 dbg("%s - usb_submit_urb(setup) failed", __func__);
@@ -2271,8 +2187,6 @@ static int keyspan_usa49_send_setup(struct usb_serial *serial,
2271 2187
2272 /* send the data out the device on control endpoint */ 2188 /* send the data out the device on control endpoint */
2273 this_urb->transfer_buffer_length = sizeof(msg); 2189 this_urb->transfer_buffer_length = sizeof(msg);
2274
2275 this_urb->dev = serial->dev;
2276 } 2190 }
2277 err = usb_submit_urb(this_urb, GFP_ATOMIC); 2191 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2278 if (err != 0) 2192 if (err != 0)
@@ -2415,7 +2329,6 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
2415 /* send the data out the device on control endpoint */ 2329 /* send the data out the device on control endpoint */
2416 this_urb->transfer_buffer_length = sizeof(msg); 2330 this_urb->transfer_buffer_length = sizeof(msg);
2417 2331
2418 this_urb->dev = serial->dev;
2419 err = usb_submit_urb(this_urb, GFP_ATOMIC); 2332 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2420 if (err != 0) 2333 if (err != 0)
2421 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err); 2334 dbg("%s - usb_submit_urb(setup) failed (%d)", __func__, err);
@@ -2561,7 +2474,6 @@ static int keyspan_usa67_send_setup(struct usb_serial *serial,
2561 2474
2562 /* send the data out the device on control endpoint */ 2475 /* send the data out the device on control endpoint */
2563 this_urb->transfer_buffer_length = sizeof(msg); 2476 this_urb->transfer_buffer_length = sizeof(msg);
2564 this_urb->dev = serial->dev;
2565 2477
2566 err = usb_submit_urb(this_urb, GFP_ATOMIC); 2478 err = usb_submit_urb(this_urb, GFP_ATOMIC);
2567 if (err != 0) 2479 if (err != 0)
@@ -2650,14 +2562,12 @@ static int keyspan_startup(struct usb_serial *serial)
2650 keyspan_setup_urbs(serial); 2562 keyspan_setup_urbs(serial);
2651 2563
2652 if (s_priv->instat_urb != NULL) { 2564 if (s_priv->instat_urb != NULL) {
2653 s_priv->instat_urb->dev = serial->dev;
2654 err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL); 2565 err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL);
2655 if (err != 0) 2566 if (err != 0)
2656 dbg("%s - submit instat urb failed %d", __func__, 2567 dbg("%s - submit instat urb failed %d", __func__,
2657 err); 2568 err);
2658 } 2569 }
2659 if (s_priv->indat_urb != NULL) { 2570 if (s_priv->indat_urb != NULL) {
2660 s_priv->indat_urb->dev = serial->dev;
2661 err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL); 2571 err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL);
2662 if (err != 0) 2572 if (err != 0)
2663 dbg("%s - submit indat urb failed %d", __func__, 2573 dbg("%s - submit indat urb failed %d", __func__,
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index d5c0c6ab4966..a40615674a68 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -12,59 +12,6 @@
12 * 12 *
13 * See Documentation/usb/usb-serial.txt for more information on using this 13 * See Documentation/usb/usb-serial.txt for more information on using this
14 * driver 14 * driver
15 *
16 * (09/07/2001) gkh
17 * cleaned up the Xircom support. Added ids for Entregra device which is
18 * the same as the Xircom device. Enabled the code to be compiled for
19 * either Xircom or Keyspan devices.
20 *
21 * (08/11/2001) Cristian M. Craciunescu
22 * support for Xircom PGSDB9
23 *
24 * (05/31/2001) gkh
25 * switched from using spinlock to a semaphore, which fixes lots of
26 * problems.
27 *
28 * (04/08/2001) gb
29 * Identify version on module load.
30 *
31 * (11/01/2000) Adam J. Richter
32 * usb_device_id table support
33 *
34 * (10/05/2000) gkh
35 * Fixed bug with urb->dev not being set properly, now that the usb
36 * core needs it.
37 *
38 * (08/28/2000) gkh
39 * Added locks for SMP safeness.
40 * Fixed MOD_INC and MOD_DEC logic and the ability to open a port more
41 * than once.
42 *
43 * (07/20/2000) borchers
44 * - keyspan_pda_write no longer sleeps if it is called on interrupt time;
45 * PPP and the line discipline with stty echo on can call write on
46 * interrupt time and this would cause an oops if write slept
47 * - if keyspan_pda_write is in an interrupt, it will not call
48 * usb_control_msg (which sleeps) to query the room in the device
49 * buffer, it simply uses the current room value it has
50 * - if the urb is busy or if it is throttled keyspan_pda_write just
51 * returns 0, rather than sleeping to wait for this to change; the
52 * write_chan code in n_tty.c will sleep if needed before calling
53 * keyspan_pda_write again
54 * - if the device needs to be unthrottled, write now queues up the
55 * call to usb_control_msg (which sleeps) to unthrottle the device
56 * - the wakeups from keyspan_pda_write_bulk_callback are queued rather
57 * than done directly from the callback to avoid the race in write_chan
58 * - keyspan_pda_chars_in_buffer also indicates its buffer is full if the
59 * urb status is -EINPROGRESS, meaning it cannot write at the moment
60 *
61 * (07/19/2000) gkh
62 * Added module_init and module_exit functions to handle the fact that this
63 * driver is a loadable module now.
64 *
65 * (03/26/2000) gkh
66 * Split driver up into device specific pieces.
67 *
68 */ 15 */
69 16
70 17
@@ -290,7 +237,6 @@ static void keyspan_pda_rx_unthrottle(struct tty_struct *tty)
290 struct usb_serial_port *port = tty->driver_data; 237 struct usb_serial_port *port = tty->driver_data;
291 /* just restart the receive interrupt URB */ 238 /* just restart the receive interrupt URB */
292 dbg("keyspan_pda_rx_unthrottle port %d", port->number); 239 dbg("keyspan_pda_rx_unthrottle port %d", port->number);
293 port->interrupt_in_urb->dev = port->serial->dev;
294 if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL)) 240 if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL))
295 dbg(" usb_submit_urb(read urb) failed"); 241 dbg(" usb_submit_urb(read urb) failed");
296} 242}
@@ -532,11 +478,11 @@ static int keyspan_pda_write(struct tty_struct *tty,
532 the device is full (wait until it says there is room) 478 the device is full (wait until it says there is room)
533 */ 479 */
534 spin_lock_bh(&port->lock); 480 spin_lock_bh(&port->lock);
535 if (port->write_urb_busy || priv->tx_throttled) { 481 if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled) {
536 spin_unlock_bh(&port->lock); 482 spin_unlock_bh(&port->lock);
537 return 0; 483 return 0;
538 } 484 }
539 port->write_urb_busy = 1; 485 clear_bit(0, &port->write_urbs_free);
540 spin_unlock_bh(&port->lock); 486 spin_unlock_bh(&port->lock);
541 487
542 /* At this point the URB is in our control, nobody else can submit it 488 /* At this point the URB is in our control, nobody else can submit it
@@ -598,7 +544,6 @@ static int keyspan_pda_write(struct tty_struct *tty,
598 544
599 priv->tx_room -= count; 545 priv->tx_room -= count;
600 546
601 port->write_urb->dev = port->serial->dev;
602 rc = usb_submit_urb(port->write_urb, GFP_ATOMIC); 547 rc = usb_submit_urb(port->write_urb, GFP_ATOMIC);
603 if (rc) { 548 if (rc) {
604 dbg(" usb_submit_urb(write bulk) failed"); 549 dbg(" usb_submit_urb(write bulk) failed");
@@ -618,7 +563,7 @@ static int keyspan_pda_write(struct tty_struct *tty,
618 rc = count; 563 rc = count;
619exit: 564exit:
620 if (rc < 0) 565 if (rc < 0)
621 port->write_urb_busy = 0; 566 set_bit(0, &port->write_urbs_free);
622 return rc; 567 return rc;
623} 568}
624 569
@@ -628,7 +573,7 @@ static void keyspan_pda_write_bulk_callback(struct urb *urb)
628 struct usb_serial_port *port = urb->context; 573 struct usb_serial_port *port = urb->context;
629 struct keyspan_pda_private *priv; 574 struct keyspan_pda_private *priv;
630 575
631 port->write_urb_busy = 0; 576 set_bit(0, &port->write_urbs_free);
632 priv = usb_get_serial_port_data(port); 577 priv = usb_get_serial_port_data(port);
633 578
634 /* queue up a wakeup at scheduler time */ 579 /* queue up a wakeup at scheduler time */
@@ -661,7 +606,7 @@ static int keyspan_pda_chars_in_buffer(struct tty_struct *tty)
661 n_tty.c:normal_poll() ) that we're not writeable. */ 606 n_tty.c:normal_poll() ) that we're not writeable. */
662 607
663 spin_lock_irqsave(&port->lock, flags); 608 spin_lock_irqsave(&port->lock, flags);
664 if (port->write_urb_busy || priv->tx_throttled) 609 if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled)
665 ret = 256; 610 ret = 256;
666 spin_unlock_irqrestore(&port->lock, flags); 611 spin_unlock_irqrestore(&port->lock, flags);
667 return ret; 612 return ret;
@@ -717,7 +662,6 @@ static int keyspan_pda_open(struct tty_struct *tty,
717 priv->tx_throttled = *room ? 0 : 1; 662 priv->tx_throttled = *room ? 0 : 1;
718 663
719 /*Start reading from the device*/ 664 /*Start reading from the device*/
720 port->interrupt_in_urb->dev = serial->dev;
721 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 665 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
722 if (rc) { 666 if (rc) {
723 dbg("%s - usb_submit_urb(read int) failed", __func__); 667 dbg("%s - usb_submit_urb(read int) failed", __func__);
diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
index ddd146300ddb..5d3beeeb5fd9 100644
--- a/drivers/usb/serial/kobil_sct.c
+++ b/drivers/usb/serial/kobil_sct.c
@@ -20,18 +20,6 @@
20 * 20 *
21 * Supported readers: USB TWIN, KAAN Standard Plus and SecOVID Reader Plus 21 * Supported readers: USB TWIN, KAAN Standard Plus and SecOVID Reader Plus
22 * (Adapter K), B1 Professional and KAAN Professional (Adapter B) 22 * (Adapter K), B1 Professional and KAAN Professional (Adapter B)
23 *
24 * (21/05/2004) tw
25 * Fix bug with P'n'P readers
26 *
27 * (28/05/2003) tw
28 * Add support for KAAN SIM
29 *
30 * (12/09/2002) tw
31 * Adapted to 2.5.
32 *
33 * (11/08/2002) tw
34 * Initial version.
35 */ 23 */
36 24
37 25
@@ -231,9 +219,6 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
231 dbg("%s - port %d", __func__, port->number); 219 dbg("%s - port %d", __func__, port->number);
232 priv = usb_get_serial_port_data(port); 220 priv = usb_get_serial_port_data(port);
233 221
234 /* someone sets the dev to 0 if the close method has been called */
235 port->interrupt_in_urb->dev = port->serial->dev;
236
237 /* allocate memory for transfer buffer */ 222 /* allocate memory for transfer buffer */
238 transfer_buffer = kzalloc(transfer_buffer_length, GFP_KERNEL); 223 transfer_buffer = kzalloc(transfer_buffer_length, GFP_KERNEL);
239 if (!transfer_buffer) 224 if (!transfer_buffer)
@@ -393,8 +378,6 @@ static void kobil_read_int_callback(struct urb *urb)
393 tty_flip_buffer_push(tty); 378 tty_flip_buffer_push(tty);
394 } 379 }
395 tty_kref_put(tty); 380 tty_kref_put(tty);
396 /* someone sets the dev to 0 if the close method has been called */
397 port->interrupt_in_urb->dev = port->serial->dev;
398 381
399 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); 382 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
400 dbg("%s - port %d Send read URB returns: %i", 383 dbg("%s - port %d Send read URB returns: %i",
@@ -475,17 +458,9 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
475 priv->filled = 0; 458 priv->filled = 0;
476 priv->cur_pos = 0; 459 priv->cur_pos = 0;
477 460
478 /* someone sets the dev to 0 if the close method
479 has been called */
480 port->interrupt_in_urb->dev = port->serial->dev;
481
482 /* start reading (except TWIN and KAAN SIM) */ 461 /* start reading (except TWIN and KAAN SIM) */
483 if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID || 462 if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
484 priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) { 463 priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
485 /* someone sets the dev to 0 if the close method has
486 been called */
487 port->interrupt_in_urb->dev = port->serial->dev;
488
489 result = usb_submit_urb(port->interrupt_in_urb, 464 result = usb_submit_urb(port->interrupt_in_urb,
490 GFP_NOIO); 465 GFP_NOIO);
491 dbg("%s - port %d Send read URB returns: %i", 466 dbg("%s - port %d Send read URB returns: %i",
diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
index ba0d28727ccb..a975bb80303f 100644
--- a/drivers/usb/serial/mct_u232.c
+++ b/drivers/usb/serial/mct_u232.c
@@ -19,50 +19,6 @@
19 * DTR/RTS signal handling may be incomplete or incorrect. I have mainly 19 * DTR/RTS signal handling may be incomplete or incorrect. I have mainly
20 * implemented what I have seen with SniffUSB or found in belkin_sa.c. 20 * implemented what I have seen with SniffUSB or found in belkin_sa.c.
21 * For further TODOs check also belkin_sa.c. 21 * For further TODOs check also belkin_sa.c.
22 *
23 * TEST STATUS:
24 * Basic tests have been performed with minicom/zmodem transfers and
25 * modem dialing under Linux 2.4.0-test10 (for me it works fine).
26 *
27 * 04-Nov-2003 Bill Marr <marr at flex dot com>
28 * - Mimic Windows driver by sending 2 USB 'device request' messages
29 * following normal 'baud rate change' message. This allows data to be
30 * transmitted to RS-232 devices which don't assert the 'CTS' signal.
31 *
32 * 10-Nov-2001 Wolfgang Grandegger
33 * - Fixed an endianess problem with the baudrate selection for PowerPC.
34 *
35 * 06-Dec-2001 Martin Hamilton <martinh@gnu.org>
36 * - Added support for the Belkin F5U109 DB9 adaptor
37 *
38 * 30-May-2001 Greg Kroah-Hartman
39 * - switched from using spinlock to a semaphore, which fixes lots of
40 * problems.
41 *
42 * 04-May-2001 Stelian Pop
43 * - Set the maximum bulk output size for Sitecom U232-P25 model to 16 bytes
44 * instead of the device reported 32 (using 32 bytes causes many data
45 * loss, Windows driver uses 16 too).
46 *
47 * 02-May-2001 Stelian Pop
48 * - Fixed the baud calculation for Sitecom U232-P25 model
49 *
50 * 08-Apr-2001 gb
51 * - Identify version on module load.
52 *
53 * 06-Jan-2001 Cornel Ciocirlan
54 * - Added support for Sitecom U232-P25 model (Product Id 0x0230)
55 * - Added support for D-Link DU-H3SP USB BAY (Product Id 0x0200)
56 *
57 * 29-Nov-2000 Greg Kroah-Hartman
58 * - Added device id table to fit with 2.4.0-test11 structure.
59 * - took out DEAL_WITH_TWO_INT_IN_ENDPOINTS #define as it's not needed
60 * (lots of things will change if/when the usb-serial core changes to
61 * handle these issues.
62 *
63 * 27-Nov-2000 Wolfgang Grandegge
64 * A version for kernel 2.4.0-test10 released to the Linux community
65 * (via linux-usb-devel).
66 */ 22 */
67 23
68#include <linux/kernel.h> 24#include <linux/kernel.h>
@@ -526,7 +482,6 @@ static int mct_u232_open(struct tty_struct *tty, struct usb_serial_port *port)
526 mct_u232_msr_to_state(&priv->control_state, priv->last_msr); 482 mct_u232_msr_to_state(&priv->control_state, priv->last_msr);
527 spin_unlock_irqrestore(&priv->lock, flags); 483 spin_unlock_irqrestore(&priv->lock, flags);
528 484
529 port->read_urb->dev = port->serial->dev;
530 retval = usb_submit_urb(port->read_urb, GFP_KERNEL); 485 retval = usb_submit_urb(port->read_urb, GFP_KERNEL);
531 if (retval) { 486 if (retval) {
532 dev_err(&port->dev, 487 dev_err(&port->dev,
@@ -535,7 +490,6 @@ static int mct_u232_open(struct tty_struct *tty, struct usb_serial_port *port)
535 goto error; 490 goto error;
536 } 491 }
537 492
538 port->interrupt_in_urb->dev = port->serial->dev;
539 retval = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 493 retval = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
540 if (retval) { 494 if (retval) {
541 usb_kill_urb(port->read_urb); 495 usb_kill_urb(port->read_urb);
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
index 3524a105d042..19d112f51b97 100644
--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -939,14 +939,7 @@ static void mos7720_bulk_in_callback(struct urb *urb)
939 } 939 }
940 tty_kref_put(tty); 940 tty_kref_put(tty);
941 941
942 if (!port->read_urb) {
943 dbg("URB KILLED !!!");
944 return;
945 }
946
947 if (port->read_urb->status != -EINPROGRESS) { 942 if (port->read_urb->status != -EINPROGRESS) {
948 port->read_urb->dev = port->serial->dev;
949
950 retval = usb_submit_urb(port->read_urb, GFP_ATOMIC); 943 retval = usb_submit_urb(port->read_urb, GFP_ATOMIC);
951 if (retval) 944 if (retval)
952 dbg("usb_submit_urb(read bulk) failed, retval = %d", 945 dbg("usb_submit_urb(read bulk) failed, retval = %d",
@@ -1014,7 +1007,6 @@ static int mos77xx_calc_num_ports(struct usb_serial *serial)
1014static int mos7720_open(struct tty_struct *tty, struct usb_serial_port *port) 1007static int mos7720_open(struct tty_struct *tty, struct usb_serial_port *port)
1015{ 1008{
1016 struct usb_serial *serial; 1009 struct usb_serial *serial;
1017 struct usb_serial_port *port0;
1018 struct urb *urb; 1010 struct urb *urb;
1019 struct moschip_port *mos7720_port; 1011 struct moschip_port *mos7720_port;
1020 int response; 1012 int response;
@@ -1029,8 +1021,6 @@ static int mos7720_open(struct tty_struct *tty, struct usb_serial_port *port)
1029 if (mos7720_port == NULL) 1021 if (mos7720_port == NULL)
1030 return -ENODEV; 1022 return -ENODEV;
1031 1023
1032 port0 = serial->port[0];
1033
1034 usb_clear_halt(serial->dev, port->write_urb->pipe); 1024 usb_clear_halt(serial->dev, port->write_urb->pipe);
1035 usb_clear_halt(serial->dev, port->read_urb->pipe); 1025 usb_clear_halt(serial->dev, port->read_urb->pipe);
1036 1026
@@ -1735,8 +1725,6 @@ static void change_port_settings(struct tty_struct *tty,
1735 write_mos_reg(serial, port_number, IER, 0x0c); 1725 write_mos_reg(serial, port_number, IER, 0x0c);
1736 1726
1737 if (port->read_urb->status != -EINPROGRESS) { 1727 if (port->read_urb->status != -EINPROGRESS) {
1738 port->read_urb->dev = serial->dev;
1739
1740 status = usb_submit_urb(port->read_urb, GFP_ATOMIC); 1728 status = usb_submit_urb(port->read_urb, GFP_ATOMIC);
1741 if (status) 1729 if (status)
1742 dbg("usb_submit_urb(read bulk) failed, status = %d", 1730 dbg("usb_submit_urb(read bulk) failed, status = %d",
@@ -1786,13 +1774,7 @@ static void mos7720_set_termios(struct tty_struct *tty,
1786 /* change the port settings to the new ones specified */ 1774 /* change the port settings to the new ones specified */
1787 change_port_settings(tty, mos7720_port, old_termios); 1775 change_port_settings(tty, mos7720_port, old_termios);
1788 1776
1789 if (!port->read_urb) {
1790 dbg("%s", "URB KILLED !!!!!");
1791 return;
1792 }
1793
1794 if (port->read_urb->status != -EINPROGRESS) { 1777 if (port->read_urb->status != -EINPROGRESS) {
1795 port->read_urb->dev = serial->dev;
1796 status = usb_submit_urb(port->read_urb, GFP_ATOMIC); 1778 status = usb_submit_urb(port->read_urb, GFP_ATOMIC);
1797 if (status) 1779 if (status)
1798 dbg("usb_submit_urb(read bulk) failed, status = %d", 1780 dbg("usb_submit_urb(read bulk) failed, status = %d",
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
index c72abd524983..55cfd6265b98 100644
--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -792,8 +792,6 @@ static void mos7840_bulk_in_callback(struct urb *urb)
792 } 792 }
793 793
794 794
795 mos7840_port->read_urb->dev = serial->dev;
796
797 mos7840_port->read_urb_busy = true; 795 mos7840_port->read_urb_busy = true;
798 retval = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC); 796 retval = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC);
799 797
@@ -2058,7 +2056,6 @@ static void mos7840_change_port_settings(struct tty_struct *tty,
2058 mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); 2056 mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data);
2059 2057
2060 if (mos7840_port->read_urb_busy == false) { 2058 if (mos7840_port->read_urb_busy == false) {
2061 mos7840_port->read_urb->dev = serial->dev;
2062 mos7840_port->read_urb_busy = true; 2059 mos7840_port->read_urb_busy = true;
2063 status = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC); 2060 status = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC);
2064 if (status) { 2061 if (status) {
@@ -2130,7 +2127,6 @@ static void mos7840_set_termios(struct tty_struct *tty,
2130 } 2127 }
2131 2128
2132 if (mos7840_port->read_urb_busy == false) { 2129 if (mos7840_port->read_urb_busy == false) {
2133 mos7840_port->read_urb->dev = serial->dev;
2134 mos7840_port->read_urb_busy = true; 2130 mos7840_port->read_urb_busy = true;
2135 status = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC); 2131 status = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC);
2136 if (status) { 2132 if (status) {
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index 60f38d5e64fc..45a8c55881d3 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -9,31 +9,6 @@
9 * driver 9 * driver
10 * 10 *
11 * Please report both successes and troubles to the author at omninet@kroah.com 11 * Please report both successes and troubles to the author at omninet@kroah.com
12 *
13 * (05/30/2001) gkh
14 * switched from using spinlock to a semaphore, which fixes lots of
15 * problems.
16 *
17 * (04/08/2001) gb
18 * Identify version on module load.
19 *
20 * (11/01/2000) Adam J. Richter
21 * usb_device_id table support
22 *
23 * (10/05/2000) gkh
24 * Fixed bug with urb->dev not being set properly, now that the usb
25 * core needs it.
26 *
27 * (08/28/2000) gkh
28 * Added locks for SMP safeness.
29 * Fixed MOD_INC and MOD_DEC logic and the ability to open a port more
30 * than once.
31 * Fixed potential race in omninet_write_bulk_callback
32 *
33 * (07/19/2000) gkh
34 * Added module_init and module_exit functions to handle the fact that this
35 * driver is a loadable module now.
36 *
37 */ 12 */
38 13
39#include <linux/kernel.h> 14#include <linux/kernel.h>
@@ -44,7 +19,6 @@
44#include <linux/tty_driver.h> 19#include <linux/tty_driver.h>
45#include <linux/tty_flip.h> 20#include <linux/tty_flip.h>
46#include <linux/module.h> 21#include <linux/module.h>
47#include <linux/spinlock.h>
48#include <linux/uaccess.h> 22#include <linux/uaccess.h>
49#include <linux/usb.h> 23#include <linux/usb.h>
50#include <linux/usb/serial.h> 24#include <linux/usb/serial.h>
@@ -174,12 +148,6 @@ static int omninet_open(struct tty_struct *tty, struct usb_serial_port *port)
174 tty_port_tty_set(&wport->port, tty); 148 tty_port_tty_set(&wport->port, tty);
175 149
176 /* Start reading from the device */ 150 /* Start reading from the device */
177 usb_fill_bulk_urb(port->read_urb, serial->dev,
178 usb_rcvbulkpipe(serial->dev,
179 port->bulk_in_endpointAddress),
180 port->read_urb->transfer_buffer,
181 port->read_urb->transfer_buffer_length,
182 omninet_read_bulk_callback, port);
183 result = usb_submit_urb(port->read_urb, GFP_KERNEL); 151 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
184 if (result) 152 if (result)
185 dev_err(&port->dev, 153 dev_err(&port->dev,
@@ -236,11 +204,6 @@ static void omninet_read_bulk_callback(struct urb *urb)
236 } 204 }
237 205
238 /* Continue trying to always read */ 206 /* Continue trying to always read */
239 usb_fill_bulk_urb(urb, port->serial->dev,
240 usb_rcvbulkpipe(port->serial->dev,
241 port->bulk_in_endpointAddress),
242 urb->transfer_buffer, urb->transfer_buffer_length,
243 omninet_read_bulk_callback, port);
244 result = usb_submit_urb(urb, GFP_ATOMIC); 207 result = usb_submit_urb(urb, GFP_ATOMIC);
245 if (result) 208 if (result)
246 dev_err(&port->dev, 209 dev_err(&port->dev,
@@ -267,14 +230,10 @@ static int omninet_write(struct tty_struct *tty, struct usb_serial_port *port,
267 return 0; 230 return 0;
268 } 231 }
269 232
270 spin_lock_bh(&wport->lock); 233 if (!test_and_clear_bit(0, &port->write_urbs_free)) {
271 if (wport->write_urb_busy) {
272 spin_unlock_bh(&wport->lock);
273 dbg("%s - already writing", __func__); 234 dbg("%s - already writing", __func__);
274 return 0; 235 return 0;
275 } 236 }
276 wport->write_urb_busy = 1;
277 spin_unlock_bh(&wport->lock);
278 237
279 count = (count > OMNINET_BULKOUTSIZE) ? OMNINET_BULKOUTSIZE : count; 238 count = (count > OMNINET_BULKOUTSIZE) ? OMNINET_BULKOUTSIZE : count;
280 239
@@ -292,10 +251,9 @@ static int omninet_write(struct tty_struct *tty, struct usb_serial_port *port,
292 /* send the data out the bulk port, always 64 bytes */ 251 /* send the data out the bulk port, always 64 bytes */
293 wport->write_urb->transfer_buffer_length = 64; 252 wport->write_urb->transfer_buffer_length = 64;
294 253
295 wport->write_urb->dev = serial->dev;
296 result = usb_submit_urb(wport->write_urb, GFP_ATOMIC); 254 result = usb_submit_urb(wport->write_urb, GFP_ATOMIC);
297 if (result) { 255 if (result) {
298 wport->write_urb_busy = 0; 256 set_bit(0, &wport->write_urbs_free);
299 dev_err(&port->dev, 257 dev_err(&port->dev,
300 "%s - failed submitting write urb, error %d\n", 258 "%s - failed submitting write urb, error %d\n",
301 __func__, result); 259 __func__, result);
@@ -314,8 +272,7 @@ static int omninet_write_room(struct tty_struct *tty)
314 272
315 int room = 0; /* Default: no room */ 273 int room = 0; /* Default: no room */
316 274
317 /* FIXME: no consistent locking for write_urb_busy */ 275 if (test_bit(0, &wport->write_urbs_free))
318 if (wport->write_urb_busy)
319 room = wport->bulk_out_size - OMNINET_HEADERLEN; 276 room = wport->bulk_out_size - OMNINET_HEADERLEN;
320 277
321 dbg("%s - returns %d", __func__, room); 278 dbg("%s - returns %d", __func__, room);
@@ -332,7 +289,7 @@ static void omninet_write_bulk_callback(struct urb *urb)
332 289
333 dbg("%s - port %0x", __func__, port->number); 290 dbg("%s - port %0x", __func__, port->number);
334 291
335 port->write_urb_busy = 0; 292 set_bit(0, &port->write_urbs_free);
336 if (status) { 293 if (status) {
337 dbg("%s - nonzero write bulk status received: %d", 294 dbg("%s - nonzero write bulk status received: %d",
338 __func__, status); 295 __func__, status);
diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c
index c248a9147439..691f57a9d712 100644
--- a/drivers/usb/serial/opticon.c
+++ b/drivers/usb/serial/opticon.c
@@ -384,7 +384,6 @@ static void opticon_unthrottle(struct tty_struct *tty)
384 priv->actually_throttled = false; 384 priv->actually_throttled = false;
385 spin_unlock_irqrestore(&priv->lock, flags); 385 spin_unlock_irqrestore(&priv->lock, flags);
386 386
387 priv->bulk_read_urb->dev = port->serial->dev;
388 if (was_throttled) { 387 if (was_throttled) {
389 result = usb_submit_urb(priv->bulk_read_urb, GFP_ATOMIC); 388 result = usb_submit_urb(priv->bulk_read_urb, GFP_ATOMIC);
390 if (result) 389 if (result)
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 6dd64534fad0..c96b6b6509fb 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -476,6 +476,10 @@ static void option_instat_callback(struct urb *urb);
476#define VIETTEL_VENDOR_ID 0x2262 476#define VIETTEL_VENDOR_ID 0x2262
477#define VIETTEL_PRODUCT_VT1000 0x0002 477#define VIETTEL_PRODUCT_VT1000 0x0002
478 478
479/* ZD Incorporated */
480#define ZD_VENDOR_ID 0x0685
481#define ZD_PRODUCT_7000 0x7000
482
479/* some devices interfaces need special handling due to a number of reasons */ 483/* some devices interfaces need special handling due to a number of reasons */
480enum option_blacklist_reason { 484enum option_blacklist_reason {
481 OPTION_BLACKLIST_NONE = 0, 485 OPTION_BLACKLIST_NONE = 0,
@@ -1178,6 +1182,7 @@ static const struct usb_device_id option_ids[] = {
1178 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU528) }, 1182 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU528) },
1179 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) }, 1183 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) },
1180 { USB_DEVICE_AND_INTERFACE_INFO(VIETTEL_VENDOR_ID, VIETTEL_PRODUCT_VT1000, 0xff, 0xff, 0xff) }, 1184 { USB_DEVICE_AND_INTERFACE_INFO(VIETTEL_VENDOR_ID, VIETTEL_PRODUCT_VT1000, 0xff, 0xff, 0xff) },
1185 { USB_DEVICE_AND_INTERFACE_INFO(ZD_VENDOR_ID, ZD_PRODUCT_7000, 0xff, 0xff, 0xff) },
1181 { } /* Terminating entry */ 1186 { } /* Terminating entry */
1182}; 1187};
1183MODULE_DEVICE_TABLE(usb, option_ids); 1188MODULE_DEVICE_TABLE(usb, option_ids);
diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c
index 4c29e6c2bda7..2161d1c3c089 100644
--- a/drivers/usb/serial/oti6858.c
+++ b/drivers/usb/serial/oti6858.c
@@ -264,7 +264,6 @@ static void setup_line(struct work_struct *work)
264 spin_unlock_irqrestore(&priv->lock, flags); 264 spin_unlock_irqrestore(&priv->lock, flags);
265 265
266 dbg("%s(): submitting interrupt urb", __func__); 266 dbg("%s(): submitting interrupt urb", __func__);
267 port->interrupt_in_urb->dev = port->serial->dev;
268 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 267 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
269 if (result != 0) { 268 if (result != 0) {
270 dev_err(&port->dev, "%s(): usb_submit_urb() failed" 269 dev_err(&port->dev, "%s(): usb_submit_urb() failed"
@@ -321,7 +320,6 @@ static void send_data(struct work_struct *work)
321 priv->flags.write_urb_in_use = 0; 320 priv->flags.write_urb_in_use = 0;
322 321
323 dbg("%s(): submitting interrupt urb", __func__); 322 dbg("%s(): submitting interrupt urb", __func__);
324 port->interrupt_in_urb->dev = port->serial->dev;
325 result = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO); 323 result = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO);
326 if (result != 0) { 324 if (result != 0) {
327 dev_err(&port->dev, "%s(): usb_submit_urb() failed" 325 dev_err(&port->dev, "%s(): usb_submit_urb() failed"
@@ -334,7 +332,6 @@ static void send_data(struct work_struct *work)
334 port->write_urb->transfer_buffer, 332 port->write_urb->transfer_buffer,
335 count, &port->lock); 333 count, &port->lock);
336 port->write_urb->transfer_buffer_length = count; 334 port->write_urb->transfer_buffer_length = count;
337 port->write_urb->dev = port->serial->dev;
338 result = usb_submit_urb(port->write_urb, GFP_NOIO); 335 result = usb_submit_urb(port->write_urb, GFP_NOIO);
339 if (result != 0) { 336 if (result != 0) {
340 dev_err(&port->dev, "%s(): usb_submit_urb() failed" 337 dev_err(&port->dev, "%s(): usb_submit_urb() failed"
@@ -583,13 +580,12 @@ static int oti6858_open(struct tty_struct *tty, struct usb_serial_port *port)
583 kfree(buf); 580 kfree(buf);
584 581
585 dbg("%s(): submitting interrupt urb", __func__); 582 dbg("%s(): submitting interrupt urb", __func__);
586 port->interrupt_in_urb->dev = serial->dev;
587 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 583 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
588 if (result != 0) { 584 if (result != 0) {
589 dev_err(&port->dev, "%s(): usb_submit_urb() failed" 585 dev_err(&port->dev, "%s(): usb_submit_urb() failed"
590 " with error %d\n", __func__, result); 586 " with error %d\n", __func__, result);
591 oti6858_close(port); 587 oti6858_close(port);
592 return -EPROTO; 588 return result;
593 } 589 }
594 590
595 /* setup termios */ 591 /* setup termios */
@@ -837,7 +833,6 @@ static void oti6858_read_int_callback(struct urb *urb)
837 if (can_recv) { 833 if (can_recv) {
838 int result; 834 int result;
839 835
840 port->read_urb->dev = port->serial->dev;
841 result = usb_submit_urb(port->read_urb, GFP_ATOMIC); 836 result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
842 if (result != 0) { 837 if (result != 0) {
843 priv->flags.read_urb_in_use = 0; 838 priv->flags.read_urb_in_use = 0;
@@ -866,7 +861,6 @@ static void oti6858_read_int_callback(struct urb *urb)
866 int result; 861 int result;
867 862
868/* dbg("%s(): submitting interrupt urb", __func__); */ 863/* dbg("%s(): submitting interrupt urb", __func__); */
869 urb->dev = port->serial->dev;
870 result = usb_submit_urb(urb, GFP_ATOMIC); 864 result = usb_submit_urb(urb, GFP_ATOMIC);
871 if (result != 0) { 865 if (result != 0) {
872 dev_err(&urb->dev->dev, 866 dev_err(&urb->dev->dev,
@@ -894,18 +888,6 @@ static void oti6858_read_bulk_callback(struct urb *urb)
894 spin_unlock_irqrestore(&priv->lock, flags); 888 spin_unlock_irqrestore(&priv->lock, flags);
895 889
896 if (status != 0) { 890 if (status != 0) {
897 /*
898 if (status == -EPROTO) {
899 * PL2303 mysteriously fails with -EPROTO reschedule
900 the read *
901 dbg("%s - caught -EPROTO, resubmitting the urb",
902 __func__);
903 result = usb_submit_urb(urb, GFP_ATOMIC);
904 if (result)
905 dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __func__, result);
906 return;
907 }
908 */
909 dbg("%s(): unable to handle the error, exiting", __func__); 891 dbg("%s(): unable to handle the error, exiting", __func__);
910 return; 892 return;
911 } 893 }
@@ -918,7 +900,6 @@ static void oti6858_read_bulk_callback(struct urb *urb)
918 tty_kref_put(tty); 900 tty_kref_put(tty);
919 901
920 /* schedule the interrupt urb */ 902 /* schedule the interrupt urb */
921 port->interrupt_in_urb->dev = port->serial->dev;
922 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); 903 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
923 if (result != 0 && result != -EPERM) { 904 if (result != 0 && result != -EPERM) {
924 dev_err(&port->dev, "%s(): usb_submit_urb() failed," 905 dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
@@ -955,7 +936,6 @@ static void oti6858_write_bulk_callback(struct urb *urb)
955 dbg("%s(): overflow in write", __func__); 936 dbg("%s(): overflow in write", __func__);
956 937
957 port->write_urb->transfer_buffer_length = 1; 938 port->write_urb->transfer_buffer_length = 1;
958 port->write_urb->dev = port->serial->dev;
959 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 939 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
960 if (result) { 940 if (result) {
961 dev_err(&port->dev, "%s(): usb_submit_urb() failed," 941 dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
@@ -968,7 +948,6 @@ static void oti6858_write_bulk_callback(struct urb *urb)
968 priv->flags.write_urb_in_use = 0; 948 priv->flags.write_urb_in_use = 0;
969 949
970 /* schedule the interrupt urb if we are still open */ 950 /* schedule the interrupt urb if we are still open */
971 port->interrupt_in_urb->dev = port->serial->dev;
972 dbg("%s(): submitting interrupt urb", __func__); 951 dbg("%s(): submitting interrupt urb", __func__);
973 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC); 952 result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
974 if (result != 0) { 953 if (result != 0) {
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index fc2d66f7f4eb..329295615d06 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -502,21 +502,20 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
502 if (tty) 502 if (tty)
503 pl2303_set_termios(tty, port, &tmp_termios); 503 pl2303_set_termios(tty, port, &tmp_termios);
504 504
505 dbg("%s - submitting read urb", __func__);
506 result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL);
507 if (result) {
508 pl2303_close(port);
509 return -EPROTO;
510 }
511
512 dbg("%s - submitting interrupt urb", __func__); 505 dbg("%s - submitting interrupt urb", __func__);
513 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 506 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
514 if (result) { 507 if (result) {
515 dev_err(&port->dev, "%s - failed submitting interrupt urb," 508 dev_err(&port->dev, "%s - failed submitting interrupt urb,"
516 " error %d\n", __func__, result); 509 " error %d\n", __func__, result);
517 pl2303_close(port); 510 return result;
518 return -EPROTO;
519 } 511 }
512
513 result = usb_serial_generic_open(tty, port);
514 if (result) {
515 usb_kill_urb(port->interrupt_in_urb);
516 return result;
517 }
518
520 port->port.drain_delay = 256; 519 port->port.drain_delay = 256;
521 return 0; 520 return 0;
522} 521}
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index b18179bda0d8..f2485429172f 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -681,7 +681,6 @@ static void sierra_instat_callback(struct urb *urb)
681 /* Resubmit urb so we continue receiving IRQ data */ 681 /* Resubmit urb so we continue receiving IRQ data */
682 if (status != -ESHUTDOWN && status != -ENOENT) { 682 if (status != -ESHUTDOWN && status != -ENOENT) {
683 usb_mark_last_busy(serial->dev); 683 usb_mark_last_busy(serial->dev);
684 urb->dev = serial->dev;
685 err = usb_submit_urb(urb, GFP_ATOMIC); 684 err = usb_submit_urb(urb, GFP_ATOMIC);
686 if (err && err != -EPERM) 685 if (err && err != -EPERM)
687 dev_err(&port->dev, "%s: resubmit intr urb " 686 dev_err(&port->dev, "%s: resubmit intr urb "
diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c
index 7096f799b071..c70cc012d03f 100644
--- a/drivers/usb/serial/symbolserial.c
+++ b/drivers/usb/serial/symbolserial.c
@@ -182,7 +182,6 @@ static void symbol_unthrottle(struct tty_struct *tty)
182 priv->actually_throttled = false; 182 priv->actually_throttled = false;
183 spin_unlock_irq(&priv->lock); 183 spin_unlock_irq(&priv->lock);
184 184
185 priv->int_urb->dev = port->serial->dev;
186 if (was_throttled) { 185 if (was_throttled) {
187 result = usb_submit_urb(priv->int_urb, GFP_KERNEL); 186 result = usb_submit_urb(priv->int_urb, GFP_KERNEL);
188 if (result) 187 if (result)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index ea8445689c85..4af21f46096e 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -535,9 +535,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
535 status = -EINVAL; 535 status = -EINVAL;
536 goto release_lock; 536 goto release_lock;
537 } 537 }
538 urb->complete = ti_interrupt_callback;
539 urb->context = tdev; 538 urb->context = tdev;
540 urb->dev = dev;
541 status = usb_submit_urb(urb, GFP_KERNEL); 539 status = usb_submit_urb(urb, GFP_KERNEL);
542 if (status) { 540 if (status) {
543 dev_err(&port->dev, 541 dev_err(&port->dev,
@@ -619,9 +617,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
619 goto unlink_int_urb; 617 goto unlink_int_urb;
620 } 618 }
621 tport->tp_read_urb_state = TI_READ_URB_RUNNING; 619 tport->tp_read_urb_state = TI_READ_URB_RUNNING;
622 urb->complete = ti_bulk_in_callback;
623 urb->context = tport; 620 urb->context = tport;
624 urb->dev = dev;
625 status = usb_submit_urb(urb, GFP_KERNEL); 621 status = usb_submit_urb(urb, GFP_KERNEL);
626 if (status) { 622 if (status) {
627 dev_err(&port->dev, "%s - submit read urb failed, %d\n", 623 dev_err(&port->dev, "%s - submit read urb failed, %d\n",
@@ -1236,12 +1232,11 @@ static void ti_bulk_in_callback(struct urb *urb)
1236exit: 1232exit:
1237 /* continue to read unless stopping */ 1233 /* continue to read unless stopping */
1238 spin_lock(&tport->tp_lock); 1234 spin_lock(&tport->tp_lock);
1239 if (tport->tp_read_urb_state == TI_READ_URB_RUNNING) { 1235 if (tport->tp_read_urb_state == TI_READ_URB_RUNNING)
1240 urb->dev = port->serial->dev;
1241 retval = usb_submit_urb(urb, GFP_ATOMIC); 1236 retval = usb_submit_urb(urb, GFP_ATOMIC);
1242 } else if (tport->tp_read_urb_state == TI_READ_URB_STOPPING) { 1237 else if (tport->tp_read_urb_state == TI_READ_URB_STOPPING)
1243 tport->tp_read_urb_state = TI_READ_URB_STOPPED; 1238 tport->tp_read_urb_state = TI_READ_URB_STOPPED;
1244 } 1239
1245 spin_unlock(&tport->tp_lock); 1240 spin_unlock(&tport->tp_lock);
1246 if (retval) 1241 if (retval)
1247 dev_err(dev, "%s - resubmit read urb failed, %d\n", 1242 dev_err(dev, "%s - resubmit read urb failed, %d\n",
@@ -1574,9 +1569,7 @@ static int ti_restart_read(struct ti_port *tport, struct tty_struct *tty)
1574 tport->tp_read_urb_state = TI_READ_URB_RUNNING; 1569 tport->tp_read_urb_state = TI_READ_URB_RUNNING;
1575 urb = tport->tp_port->read_urb; 1570 urb = tport->tp_port->read_urb;
1576 spin_unlock_irqrestore(&tport->tp_lock, flags); 1571 spin_unlock_irqrestore(&tport->tp_lock, flags);
1577 urb->complete = ti_bulk_in_callback;
1578 urb->context = tport; 1572 urb->context = tport;
1579 urb->dev = tport->tp_port->serial->dev;
1580 status = usb_submit_urb(urb, GFP_KERNEL); 1573 status = usb_submit_urb(urb, GFP_KERNEL);
1581 } else { 1574 } else {
1582 tport->tp_read_urb_state = TI_READ_URB_RUNNING; 1575 tport->tp_read_urb_state = TI_READ_URB_RUNNING;
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index cc274fdf2627..ce6c1a65a544 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -50,7 +50,7 @@ static struct usb_driver usb_serial_driver = {
50 .disconnect = usb_serial_disconnect, 50 .disconnect = usb_serial_disconnect,
51 .suspend = usb_serial_suspend, 51 .suspend = usb_serial_suspend,
52 .resume = usb_serial_resume, 52 .resume = usb_serial_resume,
53 .no_dynamic_id = 1, 53 .no_dynamic_id = 1,
54 .supports_autosuspend = 1, 54 .supports_autosuspend = 1,
55}; 55};
56 56
@@ -260,6 +260,10 @@ static int serial_activate(struct tty_port *tport, struct tty_struct *tty)
260 else 260 else
261 retval = port->serial->type->open(tty, port); 261 retval = port->serial->type->open(tty, port);
262 mutex_unlock(&serial->disc_mutex); 262 mutex_unlock(&serial->disc_mutex);
263
264 if (retval < 0)
265 retval = usb_translate_errors(retval);
266
263 return retval; 267 return retval;
264} 268}
265 269
@@ -360,7 +364,8 @@ static int serial_write(struct tty_struct *tty, const unsigned char *buf,
360 364
361 /* pass on to the driver specific version of this function */ 365 /* pass on to the driver specific version of this function */
362 retval = port->serial->type->write(tty, port, buf, count); 366 retval = port->serial->type->write(tty, port, buf, count);
363 367 if (retval < 0)
368 retval = usb_translate_errors(retval);
364exit: 369exit:
365 return retval; 370 return retval;
366} 371}
@@ -562,8 +567,8 @@ static void kill_traffic(struct usb_serial_port *port)
562{ 567{
563 int i; 568 int i;
564 569
565 usb_kill_urb(port->read_urb); 570 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
566 usb_kill_urb(port->write_urb); 571 usb_kill_urb(port->read_urbs[i]);
567 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) 572 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
568 usb_kill_urb(port->write_urbs[i]); 573 usb_kill_urb(port->write_urbs[i]);
569 /* 574 /*
@@ -595,17 +600,17 @@ static void port_release(struct device *dev)
595 kill_traffic(port); 600 kill_traffic(port);
596 cancel_work_sync(&port->work); 601 cancel_work_sync(&port->work);
597 602
598 usb_free_urb(port->read_urb);
599 usb_free_urb(port->write_urb);
600 usb_free_urb(port->interrupt_in_urb); 603 usb_free_urb(port->interrupt_in_urb);
601 usb_free_urb(port->interrupt_out_urb); 604 usb_free_urb(port->interrupt_out_urb);
605 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
606 usb_free_urb(port->read_urbs[i]);
607 kfree(port->bulk_in_buffers[i]);
608 }
602 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) { 609 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) {
603 usb_free_urb(port->write_urbs[i]); 610 usb_free_urb(port->write_urbs[i]);
604 kfree(port->bulk_out_buffers[i]); 611 kfree(port->bulk_out_buffers[i]);
605 } 612 }
606 kfifo_free(&port->write_fifo); 613 kfifo_free(&port->write_fifo);
607 kfree(port->bulk_in_buffer);
608 kfree(port->bulk_out_buffer);
609 kfree(port->interrupt_in_buffer); 614 kfree(port->interrupt_in_buffer);
610 kfree(port->interrupt_out_buffer); 615 kfree(port->interrupt_out_buffer);
611 kfree(port); 616 kfree(port);
@@ -686,16 +691,18 @@ static int serial_carrier_raised(struct tty_port *port)
686{ 691{
687 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); 692 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
688 struct usb_serial_driver *drv = p->serial->type; 693 struct usb_serial_driver *drv = p->serial->type;
694
689 if (drv->carrier_raised) 695 if (drv->carrier_raised)
690 return drv->carrier_raised(p); 696 return drv->carrier_raised(p);
691 /* No carrier control - don't block */ 697 /* No carrier control - don't block */
692 return 1; 698 return 1;
693} 699}
694 700
695static void serial_dtr_rts(struct tty_port *port, int on) 701static void serial_dtr_rts(struct tty_port *port, int on)
696{ 702{
697 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); 703 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
698 struct usb_serial_driver *drv = p->serial->type; 704 struct usb_serial_driver *drv = p->serial->type;
705
699 if (drv->dtr_rts) 706 if (drv->dtr_rts)
700 drv->dtr_rts(p, on); 707 drv->dtr_rts(p, on);
701} 708}
@@ -724,6 +731,7 @@ int usb_serial_probe(struct usb_interface *interface,
724 unsigned int minor; 731 unsigned int minor;
725 int buffer_size; 732 int buffer_size;
726 int i; 733 int i;
734 int j;
727 int num_interrupt_in = 0; 735 int num_interrupt_in = 0;
728 int num_interrupt_out = 0; 736 int num_interrupt_out = 0;
729 int num_bulk_in = 0; 737 int num_bulk_in = 0;
@@ -906,38 +914,41 @@ int usb_serial_probe(struct usb_interface *interface,
906 for (i = 0; i < num_bulk_in; ++i) { 914 for (i = 0; i < num_bulk_in; ++i) {
907 endpoint = bulk_in_endpoint[i]; 915 endpoint = bulk_in_endpoint[i];
908 port = serial->port[i]; 916 port = serial->port[i];
909 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
910 if (!port->read_urb) {
911 dev_err(&interface->dev, "No free urbs available\n");
912 goto probe_error;
913 }
914 buffer_size = max_t(int, serial->type->bulk_in_size, 917 buffer_size = max_t(int, serial->type->bulk_in_size,
915 usb_endpoint_maxp(endpoint)); 918 usb_endpoint_maxp(endpoint));
916 port->bulk_in_size = buffer_size; 919 port->bulk_in_size = buffer_size;
917 port->bulk_in_endpointAddress = endpoint->bEndpointAddress; 920 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
918 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); 921
919 if (!port->bulk_in_buffer) { 922 for (j = 0; j < ARRAY_SIZE(port->read_urbs); ++j) {
920 dev_err(&interface->dev, 923 set_bit(j, &port->read_urbs_free);
924 port->read_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
925 if (!port->read_urbs[j]) {
926 dev_err(&interface->dev,
927 "No free urbs available\n");
928 goto probe_error;
929 }
930 port->bulk_in_buffers[j] = kmalloc(buffer_size,
931 GFP_KERNEL);
932 if (!port->bulk_in_buffers[j]) {
933 dev_err(&interface->dev,
921 "Couldn't allocate bulk_in_buffer\n"); 934 "Couldn't allocate bulk_in_buffer\n");
922 goto probe_error; 935 goto probe_error;
923 } 936 }
924 usb_fill_bulk_urb(port->read_urb, dev, 937 usb_fill_bulk_urb(port->read_urbs[j], dev,
925 usb_rcvbulkpipe(dev, 938 usb_rcvbulkpipe(dev,
926 endpoint->bEndpointAddress), 939 endpoint->bEndpointAddress),
927 port->bulk_in_buffer, buffer_size, 940 port->bulk_in_buffers[j], buffer_size,
928 serial->type->read_bulk_callback, port); 941 serial->type->read_bulk_callback,
942 port);
943 }
944
945 port->read_urb = port->read_urbs[0];
946 port->bulk_in_buffer = port->bulk_in_buffers[0];
929 } 947 }
930 948
931 for (i = 0; i < num_bulk_out; ++i) { 949 for (i = 0; i < num_bulk_out; ++i) {
932 int j;
933
934 endpoint = bulk_out_endpoint[i]; 950 endpoint = bulk_out_endpoint[i];
935 port = serial->port[i]; 951 port = serial->port[i];
936 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
937 if (!port->write_urb) {
938 dev_err(&interface->dev, "No free urbs available\n");
939 goto probe_error;
940 }
941 if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL)) 952 if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
942 goto probe_error; 953 goto probe_error;
943 buffer_size = serial->type->bulk_out_size; 954 buffer_size = serial->type->bulk_out_size;
@@ -945,17 +956,7 @@ int usb_serial_probe(struct usb_interface *interface,
945 buffer_size = usb_endpoint_maxp(endpoint); 956 buffer_size = usb_endpoint_maxp(endpoint);
946 port->bulk_out_size = buffer_size; 957 port->bulk_out_size = buffer_size;
947 port->bulk_out_endpointAddress = endpoint->bEndpointAddress; 958 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
948 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL); 959
949 if (!port->bulk_out_buffer) {
950 dev_err(&interface->dev,
951 "Couldn't allocate bulk_out_buffer\n");
952 goto probe_error;
953 }
954 usb_fill_bulk_urb(port->write_urb, dev,
955 usb_sndbulkpipe(dev,
956 endpoint->bEndpointAddress),
957 port->bulk_out_buffer, buffer_size,
958 serial->type->write_bulk_callback, port);
959 for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) { 960 for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) {
960 set_bit(j, &port->write_urbs_free); 961 set_bit(j, &port->write_urbs_free);
961 port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL); 962 port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
@@ -978,6 +979,9 @@ int usb_serial_probe(struct usb_interface *interface,
978 serial->type->write_bulk_callback, 979 serial->type->write_bulk_callback,
979 port); 980 port);
980 } 981 }
982
983 port->write_urb = port->write_urbs[0];
984 port->bulk_out_buffer = port->bulk_out_buffers[0];
981 } 985 }
982 986
983 if (serial->type->read_int_callback) { 987 if (serial->type->read_int_callback) {
@@ -1196,7 +1200,7 @@ static const struct tty_operations serial_ops = {
1196 .open = serial_open, 1200 .open = serial_open,
1197 .close = serial_close, 1201 .close = serial_close,
1198 .write = serial_write, 1202 .write = serial_write,
1199 .hangup = serial_hangup, 1203 .hangup = serial_hangup,
1200 .write_room = serial_write_room, 1204 .write_room = serial_write_room,
1201 .ioctl = serial_ioctl, 1205 .ioctl = serial_ioctl,
1202 .set_termios = serial_set_termios, 1206 .set_termios = serial_set_termios,
@@ -1206,9 +1210,9 @@ static const struct tty_operations serial_ops = {
1206 .chars_in_buffer = serial_chars_in_buffer, 1210 .chars_in_buffer = serial_chars_in_buffer,
1207 .tiocmget = serial_tiocmget, 1211 .tiocmget = serial_tiocmget,
1208 .tiocmset = serial_tiocmset, 1212 .tiocmset = serial_tiocmset,
1209 .get_icount = serial_get_icount, 1213 .get_icount = serial_get_icount,
1210 .cleanup = serial_cleanup, 1214 .cleanup = serial_cleanup,
1211 .install = serial_install, 1215 .install = serial_install,
1212 .proc_fops = &serial_proc_fops, 1216 .proc_fops = &serial_proc_fops,
1213}; 1217};
1214 1218
@@ -1237,7 +1241,7 @@ static int __init usb_serial_init(void)
1237 1241
1238 usb_serial_tty_driver->owner = THIS_MODULE; 1242 usb_serial_tty_driver->owner = THIS_MODULE;
1239 usb_serial_tty_driver->driver_name = "usbserial"; 1243 usb_serial_tty_driver->driver_name = "usbserial";
1240 usb_serial_tty_driver->name = "ttyUSB"; 1244 usb_serial_tty_driver->name = "ttyUSB";
1241 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR; 1245 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1242 usb_serial_tty_driver->minor_start = 0; 1246 usb_serial_tty_driver->minor_start = 0;
1243 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; 1247 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
@@ -1336,7 +1340,6 @@ static void fixup_generic(struct usb_serial_driver *device)
1336 1340
1337int usb_serial_register(struct usb_serial_driver *driver) 1341int usb_serial_register(struct usb_serial_driver *driver)
1338{ 1342{
1339 /* must be called with BKL held */
1340 int retval; 1343 int retval;
1341 1344
1342 if (usb_disabled()) 1345 if (usb_disabled())
@@ -1374,7 +1377,6 @@ EXPORT_SYMBOL_GPL(usb_serial_register);
1374 1377
1375void usb_serial_deregister(struct usb_serial_driver *device) 1378void usb_serial_deregister(struct usb_serial_driver *device)
1376{ 1379{
1377 /* must be called with BKL held */
1378 printk(KERN_INFO "USB Serial deregistering driver %s\n", 1380 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1379 device->description); 1381 device->description);
1380 mutex_lock(&table_lock); 1382 mutex_lock(&table_lock);
diff --git a/drivers/usb/serial/usb_debug.c b/drivers/usb/serial/usb_debug.c
index 95a82148ee81..9b632e753210 100644
--- a/drivers/usb/serial/usb_debug.c
+++ b/drivers/usb/serial/usb_debug.c
@@ -40,7 +40,7 @@ static struct usb_driver debug_driver = {
40 .probe = usb_serial_probe, 40 .probe = usb_serial_probe,
41 .disconnect = usb_serial_disconnect, 41 .disconnect = usb_serial_disconnect,
42 .id_table = id_table, 42 .id_table = id_table,
43 .no_dynamic_id = 1, 43 .no_dynamic_id = 1,
44}; 44};
45 45
46/* This HW really does not support a serial break, so one will be 46/* This HW really does not support a serial break, so one will be
@@ -54,19 +54,18 @@ static void usb_debug_break_ctl(struct tty_struct *tty, int break_state)
54 usb_serial_generic_write(tty, port, USB_DEBUG_BRK, USB_DEBUG_BRK_SIZE); 54 usb_serial_generic_write(tty, port, USB_DEBUG_BRK, USB_DEBUG_BRK_SIZE);
55} 55}
56 56
57static void usb_debug_read_bulk_callback(struct urb *urb) 57static void usb_debug_process_read_urb(struct urb *urb)
58{ 58{
59 struct usb_serial_port *port = urb->context; 59 struct usb_serial_port *port = urb->context;
60 60
61 if (urb->actual_length == USB_DEBUG_BRK_SIZE && 61 if (urb->actual_length == USB_DEBUG_BRK_SIZE &&
62 memcmp(urb->transfer_buffer, USB_DEBUG_BRK, 62 memcmp(urb->transfer_buffer, USB_DEBUG_BRK,
63 USB_DEBUG_BRK_SIZE) == 0) { 63 USB_DEBUG_BRK_SIZE) == 0) {
64 usb_serial_handle_break(port); 64 usb_serial_handle_break(port);
65 usb_serial_generic_submit_read_urb(port, GFP_ATOMIC);
66 return; 65 return;
67 } 66 }
68 67
69 usb_serial_generic_read_bulk_callback(urb); 68 usb_serial_generic_process_read_urb(urb);
70} 69}
71 70
72static struct usb_serial_driver debug_device = { 71static struct usb_serial_driver debug_device = {
@@ -79,7 +78,7 @@ static struct usb_serial_driver debug_device = {
79 .num_ports = 1, 78 .num_ports = 1,
80 .bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE, 79 .bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE,
81 .break_ctl = usb_debug_break_ctl, 80 .break_ctl = usb_debug_break_ctl,
82 .read_bulk_callback = usb_debug_read_bulk_callback, 81 .process_read_urb = usb_debug_process_read_urb,
83}; 82};
84 83
85static int __init debug_init(void) 84static int __init debug_init(void)
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index 5b073bcc807b..11af903cb09f 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -14,57 +14,6 @@
14 * 14 *
15 * See Documentation/usb/usb-serial.txt for more information on using this 15 * See Documentation/usb/usb-serial.txt for more information on using this
16 * driver 16 * driver
17 *
18 * (10/09/2002) Stuart MacDonald (stuartm@connecttech.com)
19 * Upgrade to full working driver
20 *
21 * (05/30/2001) gkh
22 * switched from using spinlock to a semaphore, which fixes lots of
23 * problems.
24 *
25 * (04/08/2001) gb
26 * Identify version on module load.
27 *
28 * 2001_Mar_19 gkh
29 * Fixed MOD_INC and MOD_DEC logic, the ability to open a port more
30 * than once, and the got the proper usb_device_id table entries so
31 * the driver works again.
32 *
33 * (11/01/2000) Adam J. Richter
34 * usb_device_id table support
35 *
36 * (10/05/2000) gkh
37 * Fixed bug with urb->dev not being set properly, now that the usb
38 * core needs it.
39 *
40 * (10/03/2000) smd
41 * firmware is improved to guard against crap sent to device
42 * firmware now replies CMD_FAILURE on bad things
43 * read_callback fix you provided for private info struct
44 * command_finished now indicates success or fail
45 * setup_port struct now packed to avoid gcc padding
46 * firmware uses 1 based port numbering, driver now handles that
47 *
48 * (09/11/2000) gkh
49 * Removed DEBUG #ifdefs with call to usb_serial_debug_data
50 *
51 * (07/19/2000) gkh
52 * Added module_init and module_exit functions to handle the fact that this
53 * driver is a loadable module now.
54 * Fixed bug with port->minor that was found by Al Borchers
55 *
56 * (07/04/2000) gkh
57 * Added support for port settings. Baud rate can now be changed. Line
58 * signals are not transferred to and from the tty layer yet, but things
59 * seem to be working well now.
60 *
61 * (05/04/2000) gkh
62 * First cut at open and close commands. Data can flow through the ports at
63 * default speeds now.
64 *
65 * (03/26/2000) gkh
66 * Split driver up into device specific pieces.
67 *
68 */ 17 */
69 18
70#include <linux/kernel.h> 19#include <linux/kernel.h>
@@ -753,7 +702,6 @@ static void whiteheat_close(struct usb_serial_port *port)
753static int whiteheat_write(struct tty_struct *tty, 702static int whiteheat_write(struct tty_struct *tty,
754 struct usb_serial_port *port, const unsigned char *buf, int count) 703 struct usb_serial_port *port, const unsigned char *buf, int count)
755{ 704{
756 struct usb_serial *serial = port->serial;
757 struct whiteheat_private *info = usb_get_serial_port_data(port); 705 struct whiteheat_private *info = usb_get_serial_port_data(port);
758 struct whiteheat_urb_wrap *wrap; 706 struct whiteheat_urb_wrap *wrap;
759 struct urb *urb; 707 struct urb *urb;
@@ -789,7 +737,6 @@ static int whiteheat_write(struct tty_struct *tty,
789 usb_serial_debug_data(debug, &port->dev, 737 usb_serial_debug_data(debug, &port->dev,
790 __func__, bytes, urb->transfer_buffer); 738 __func__, bytes, urb->transfer_buffer);
791 739
792 urb->dev = serial->dev;
793 urb->transfer_buffer_length = bytes; 740 urb->transfer_buffer_length = bytes;
794 result = usb_submit_urb(urb, GFP_ATOMIC); 741 result = usb_submit_urb(urb, GFP_ATOMIC);
795 if (result) { 742 if (result) {
@@ -1035,7 +982,6 @@ static void command_port_read_callback(struct urb *urb)
1035 dbg("%s - bad reply from firmware", __func__); 982 dbg("%s - bad reply from firmware", __func__);
1036 983
1037 /* Continue trying to always read */ 984 /* Continue trying to always read */
1038 command_port->read_urb->dev = command_port->serial->dev;
1039 result = usb_submit_urb(command_port->read_urb, GFP_ATOMIC); 985 result = usb_submit_urb(command_port->read_urb, GFP_ATOMIC);
1040 if (result) 986 if (result)
1041 dbg("%s - failed resubmitting read urb, error %d", 987 dbg("%s - failed resubmitting read urb, error %d",
@@ -1141,7 +1087,6 @@ static int firm_send_command(struct usb_serial_port *port, __u8 command,
1141 transfer_buffer[0] = command; 1087 transfer_buffer[0] = command;
1142 memcpy(&transfer_buffer[1], data, datasize); 1088 memcpy(&transfer_buffer[1], data, datasize);
1143 command_port->write_urb->transfer_buffer_length = datasize + 1; 1089 command_port->write_urb->transfer_buffer_length = datasize + 1;
1144 command_port->write_urb->dev = port->serial->dev;
1145 retval = usb_submit_urb(command_port->write_urb, GFP_NOIO); 1090 retval = usb_submit_urb(command_port->write_urb, GFP_NOIO);
1146 if (retval) { 1091 if (retval) {
1147 dbg("%s - submit urb failed", __func__); 1092 dbg("%s - submit urb failed", __func__);
@@ -1362,7 +1307,6 @@ static int start_command_port(struct usb_serial *serial)
1362 /* Work around HCD bugs */ 1307 /* Work around HCD bugs */
1363 usb_clear_halt(serial->dev, command_port->read_urb->pipe); 1308 usb_clear_halt(serial->dev, command_port->read_urb->pipe);
1364 1309
1365 command_port->read_urb->dev = serial->dev;
1366 retval = usb_submit_urb(command_port->read_urb, GFP_KERNEL); 1310 retval = usb_submit_urb(command_port->read_urb, GFP_KERNEL);
1367 if (retval) { 1311 if (retval) {
1368 dev_err(&serial->dev->dev, 1312 dev_err(&serial->dev->dev,
@@ -1410,7 +1354,6 @@ static int start_port_read(struct usb_serial_port *port)
1410 list_del(tmp); 1354 list_del(tmp);
1411 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list); 1355 wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
1412 urb = wrap->urb; 1356 urb = wrap->urb;
1413 urb->dev = port->serial->dev;
1414 spin_unlock_irqrestore(&info->lock, flags); 1357 spin_unlock_irqrestore(&info->lock, flags);
1415 retval = usb_submit_urb(urb, GFP_KERNEL); 1358 retval = usb_submit_urb(urb, GFP_KERNEL);
1416 if (retval) { 1359 if (retval) {
@@ -1490,7 +1433,6 @@ static void rx_data_softint(struct work_struct *work)
1490 sent += tty_insert_flip_string(tty, 1433 sent += tty_insert_flip_string(tty,
1491 urb->transfer_buffer, urb->actual_length); 1434 urb->transfer_buffer, urb->actual_length);
1492 1435
1493 urb->dev = port->serial->dev;
1494 result = usb_submit_urb(urb, GFP_ATOMIC); 1436 result = usb_submit_urb(urb, GFP_ATOMIC);
1495 if (result) { 1437 if (result) {
1496 dev_err(&port->dev, 1438 dev_err(&port->dev,