more changes on original files
[linux-2.4.git] / drivers / usb / scanner.c
1 /* -*- linux-c -*- */
2
3 /* 
4  * Driver for USB Scanners (linux-2.4)
5  *
6  * Copyright (C) 1999, 2000, 2001, 2002 David E. Nelson
7  * Copyright (C) 2002, 2003 Henning Meier-Geinitz
8  *
9  * Portions may be copyright Brad Keryan and Michael Gee.
10  *
11  * Previously maintained by Brian Beattie
12  *
13  * Current maintainer: Henning Meier-Geinitz <henning@meier-geinitz.de>
14  * 
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License as
17  * published by the Free Software Foundation; either version 2 of the
18  * License, or (at your option) any later version.
19  *
20  * This program is distributed in the hope that it will be useful, but
21  * WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23  * General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with this program; if not, write to the Free Software
27  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28  *
29  * Originally based upon mouse.c (Brad Keryan) and printer.c (Michael Gee).
30  *
31  * History
32  *
33  *  0.1  8/31/1999
34  *
35  *    Developed/tested using linux-2.3.15 with minor ohci.c changes to
36  *    support short packes during bulk xfer mode.  Some testing was
37  *    done with ohci-hcd but the performace was low.  Very limited
38  *    testing was performed with uhci but I was unable to get it to
39  *    work.  Initial relase to the linux-usb development effort.
40  *
41  *
42  *  0.2  10/16/1999
43  *
44  *    - Device can't be opened unless a scanner is plugged into the USB.
45  *    - Finally settled on a reasonable value for the I/O buffer's.
46  *    - Cleaned up write_scanner()
47  *    - Disabled read/write stats
48  *    - A little more code cleanup
49  *
50  *
51  *  0.3  10/18/1999
52  *
53  *    - Device registration changed to reflect new device
54  *      allocation/registration for linux-2.3.22+.
55  *    - Adopted David Brownell's <david-b@pacbell.net> technique for 
56  *      assigning bulk endpoints.
57  *    - Removed unnessesary #include's
58  *    - Scanner model now reported via syslog INFO after being detected 
59  *      *and* configured.
60  *    - Added user specified vendor:product USB ID's which can be passed 
61  *      as module parameters.
62  *
63  *
64  *  0.3.1
65  *
66  *    - Applied patches for linux-2.3.25.
67  *    - Error number reporting changed to reflect negative return codes.
68  *
69  *
70  *  0.3.2
71  *
72  *    - Applied patches for linux-2.3.26 to scanner_init().
73  *    - Debug read/write stats now report values as signed decimal.
74  *
75  *
76  *  0.3.3
77  *
78  *    - Updated the bulk_msg() calls to usb usb_bulk_msg().
79  *    - Added a small delay in the write_scanner() method to aid in
80  *      avoiding NULL data reads on HP scanners.  We'll see how this works.
81  *    - Return values from usb_bulk_msg() now ignore positive values for
82  *      use with the ohci driver.
83  *    - Added conditional debugging instead of commenting/uncommenting
84  *      all over the place.
85  *    - kfree()'d the pointer after using usb_string() as documented in
86  *      linux-usb-api.txt.
87  *    - Added usb_set_configuration().  It got lost in version 0.3 -- ack!
88  *    - Added the HP 5200C USB Vendor/Product ID's.
89  *
90  *
91  *  0.3.4  1/23/2000
92  *
93  *    - Added Greg K-H's <greg@kroah.com> patch for better handling of 
94  *      Product/Vendor detection.
95  *    - The driver now autoconfigures its endpoints including interrupt
96  *      endpoints if one is detected.  The concept was originally based
97  *      upon David Brownell's method.
98  *    - Added some Seiko/Epson ID's. Thanks to Karl Heinz 
99  *      Kremer <khk@khk.net>.
100  *    - Added some preliminary ioctl() calls for the PV8630 which is used
101  *      by the HP4200. The ioctl()'s still have to be registered. Thanks 
102  *      to Adrian Perez Jorge <adrianpj@easynews.com>.
103  *    - Moved/migrated stuff to scanner.h
104  *    - Removed the usb_set_configuration() since this is handled by
105  *      the usb_new_device() routine in usb.c.
106  *    - Added the HP 3300C.  Thanks to Bruce Tenison.
107  *    - Changed user specified vendor/product id so that root hub doesn't
108  *      get falsely attached to. Thanks to Greg K-H.
109  *    - Added some Mustek ID's. Thanks to Gernot Hoyler 
110  *      <Dr.Hoyler@t-online.de>.
111  *    - Modified the usb_string() reporting.  See kfree() comment above.
112  *    - Added Umax Astra 2000U. Thanks to Doug Alcorn <doug@lathi.net>.
113  *    - Updated the printk()'s to use the info/warn/dbg macros.
114  *    - Updated usb_bulk_msg() argument types to fix gcc warnings.
115  *
116  *
117  *  0.4  2/4/2000
118  *
119  *    - Removed usb_string() from probe_scanner since the core now does a
120  *      good job of reporting what was connnected.  
121  *    - Finally, simultaneous multiple device attachment!
122  *    - Fixed some potential memory freeing issues should memory allocation
123  *      fail in probe_scanner();
124  *    - Some fixes to disconnect_scanner().
125  *    - Added interrupt endpoint support.
126  *    - Added Agfa SnapScan Touch. Thanks to Jan Van den Bergh
127  *      <jan.vandenbergh@cs.kuleuven.ac.be>.
128  *    - Added Umax 1220U ID's. Thanks to Maciek Klimkowski
129  *      <mac@nexus.carleton.ca>.
130  *    - Fixed bug in write_scanner(). The buffer was not being properly
131  *      updated for writes larger than OBUF_SIZE. Thanks to Henrik 
132  *      Johansson <henrikjo@post.utfors.se> for identifying it.
133  *    - Added Microtek X6 ID's. Thanks to Oliver Neukum
134  *      <Oliver.Neukum@lrz.uni-muenchen.de>.
135  *
136  * 
137  *  0.4.1  2/15/2000
138  *  
139  *    - Fixed 'count' bug in read_scanner(). Thanks to Henrik
140  *      Johansson <henrikjo@post.utfors.se> for identifying it.  Amazing
141  *      it has worked this long.
142  *    - Fixed '>=' bug in both read/write_scanner methods.
143  *    - Cleaned up both read/write_scanner() methods so that they are 
144  *      a little more readable.
145  *    - Added a lot of Microtek ID's.  Thanks to Adrian Perez Jorge.
146  *    - Adopted the __initcall().
147  *    - Added #include <linux/init.h> to scanner.h for __initcall().
148  *    - Added one liner in irq_scanner() to keep gcc from complaining 
149  *      about an unused variable (data) if debugging was disabled
150  *      in scanner.c.
151  *    - Increased the timeout parameter in read_scanner() to 120 Secs.
152  *
153  *
154  *  0.4.2  3/23/2000
155  *
156  *    - Added Umax 1236U ID.  Thanks to Philipp Baer <ph_baer@npw.net>.
157  *    - Added Primax, ReadyScan, Visioneer, Colorado, and Genius ID's.
158  *      Thanks to Adrian Perez Jorge <adrianpj@easynews.com>.
159  *    - Fixed error number reported for non-existant devices.  Thanks to
160  *      Spyridon Papadimitriou <Spyridon_Papadimitriou@gs91.sp.cs.cmu.edu>.
161  *    - Added Acer Prisascan 620U ID's.  Thanks to Joao <joey@knoware.nl>.
162  *    - Replaced __initcall() with module_init()/module_exit(). Updates
163  *      from patch-2.3.48.
164  *    - Replaced file_operations structure with new syntax.  Updates
165  *      from patch-2.3.49.
166  *    - Changed #include "usb.h" to #include <linux/usb.h>
167  *    - Added #define SCN_IOCTL to exclude development areas 
168  *      since 2.4.x is about to be released. This mainly affects the 
169  *      ioctl() stuff.  See scanner.h for more details.
170  *    - Changed the return value for signal_pending() from -ERESTARTSYS to
171  *      -EINTR.
172  *
173  *
174  * 0.4.3  4/30/2000
175  *
176  *    - Added Umax Astra 2200 ID.  Thanks to Flynn Marquardt 
177  *      <flynn@isr.uni-stuttgart.de>.
178  *    - Added iVina 1200U ID. Thanks to Dyson Lin <dyson@avision.com.tw>.
179  *    - Added access time update for the device file courtesy of Paul
180  *      Mackerras <paulus@samba.org>.  This allows a user space daemon
181  *      to turn the lamp off for a Umax 1220U scanner after a prescribed
182  *      time.
183  *    - Fixed HP S20 ID's.  Thanks to Ruud Linders <rlinders@xs4all.nl>.
184  *    - Added Acer ScanPrisa 620U ID. Thanks to Oliver
185  *      Schwartz <Oliver.Schwartz@gmx.de> via sane-devel mail list.
186  *    - Fixed bug in read_scanner for copy_to_user() function.  The returned
187  *      value should be 'partial' not 'this_read'.
188  *    - Fixed bug in read_scanner. 'count' should be decremented 
189  *      by 'this_read' and not by 'partial'.  This resulted in twice as many
190  *      calls to read_scanner() for small amounts of data and possibly
191  *      unexpected returns of '0'.  Thanks to Karl Heinz 
192  *      Kremer <khk@khk.net> and Alain Knaff <Alain.Knaff@ltnb.lu>
193  *      for discovering this.
194  *    - Integrated Randy Dunlap's <randy.dunlap@intel.com> patch for a
195  *      scanner lookup/ident table. Thanks Randy.
196  *    - Documentation updates.
197  *    - Added wait queues to read_scanner().
198  *
199  *
200  * 0.4.3.1
201  *
202  *    - Fixed HP S20 ID's...again..sigh.  Thanks to Ruud
203  *      Linders <rlinders@xs4all.nl>.
204  *
205  * 0.4.4
206  *    - Added addtional Mustek ID's (BearPaw 1200, 600 CU, 1200 USB,
207  *      and 1200 UB.  Thanks to Henning Meier-Geinitz <henningmg@gmx.de>.
208  *    - Added the Vuego Scan Brisa 340U ID's.  Apparently this scanner is
209  *      marketed by Acer Peripherals as a cheap 300 dpi model. Thanks to
210  *      David Gundersen <gundersd@paradise.net.nz>.
211  *    - Added the Epson Expression1600 ID's. Thanks to Karl Heinz
212  *      Kremer <khk@khk.net>.
213  *
214  * 0.4.5  2/28/2001
215  *    - Added Mustek ID's (BearPaw 2400, 1200 CU Plus, BearPaw 1200F).
216  *      Thanks to Henning Meier-Geinitz <henningmg@gmx.de>.
217  *    - Added read_timeout module parameter to override RD_NAK_TIMEOUT
218  *      when read()'ing from devices.
219  *    - Stalled pipes are now checked and cleared with
220  *      usb_clear_halt() for the read_scanner() function. This should
221  *      address the "funky result: -32" error messages.
222  *    - Removed Microtek scanner ID's.  Microtek scanners are now
223  *      supported via the drivers/usb/microtek.c driver.
224  *    - Added scanner specific read timeout's.
225  *    - Return status errors are NEGATIVE!!!  This should address the
226  *      "funky result: -110" error messages.
227  *    - Replaced USB_ST_TIMEOUT with ETIMEDOUT.
228  *    - rd_nak was still defined in MODULE_PARM.  It's been updated with
229  *      read_timeout.  Thanks to Mark W. Webb <markwebb@adelphia.net> for
230  *      reporting this bug.
231  *    - Added Epson Perfection 1640SU and 1640SU Photo.  Thanks to
232  *      Jean-Luc <f5ibh@db0bm.ampr.org> and Manuel
233  *      Pelayo <Manuel.Pelayo@sesips.org>. Reported to work fine by Manuel.
234  *
235  * 0.4.6  9/27/2001
236  *    - Added IOCTL's to report back scanner USB ID's.  Thanks to
237  *      Karl Heinz <khk@lynx.phpwebhosting.com>
238  *    - Added Umax Astra 2100U ID's.  Thanks to Ron
239  *      Wellsted <ron@wellsted.org.uk>.
240  *      and Manuel Pelayo <Manuel.Pelayo@sesips.org>.
241  *    - Added HP 3400 ID's. Thanks to Harald Hannelius <harald@iki.fi>
242  *      and Bertrik Sikken <bertrik@zonnet.nl>.  Reported to work at
243  *      htpp://home.zonnet.nl/bertrik/hp3300c/hp3300c.htm.
244  *    - Added Minolta Dimage Scan Dual II ID's.  Thanks to Jose Paulo
245  *      Moitinho de Almeida <moitinho@civil.ist.utl.pt>
246  *    - Confirmed addition for SnapScan E20.  Thanks to Steffen Hübner
247  *      <hueb_s@gmx.de>.
248  *    - Added Lifetec LT9385 ID's.  Thanks to Van Bruwaene Kris
249  *      <krvbr@yahoo.co.uk>
250  *    - Added Agfa SnapScan e26 ID's.  Reported to work with SANE
251  *      1.0.5.  Thanks to Falk Sauer <falk@mgnkatze.franken.de>.
252  *    - Added HP 4300 ID's.  Thanks to Stefan Schlosser
253  *      <castla@grmmbl.org>.
254  *    - Added Relisis Episode ID's.  Thanks to Manfred
255  *      Morgner <odb-devel@gmx.net>.
256  *    - Added many Acer ID's. Thanks to Oliver
257  *      Schwartz <Oliver.Schwartz@gmx.de>.
258  *    - Added Snapscan e40 ID's.  Thanks to Oliver
259  *      Schwartz <Oliver.Schwartz@gmx.de>.
260  *    - Thanks to Oliver Neukum <Oliver.Neukum@lrz.uni-muenchen.de>
261  *      for helping with races.
262  *    - Added Epson Perfection 1650 ID's. Thanks to Karl Heinz
263  *      Kremer <khk@khk.net>.
264  *    - Added Epson Perfection 2450 ID's (aka GT-9700 for the Japanese
265  *      market).  Thanks to Karl Heinz Kremer <khk@khk.net>.
266  *    - Added Mustek 600 USB ID's.  Thanks to Marcus
267  *      Alanen <maalanen@ra.abo.fi>.
268  *    - Added Acer ScanPrisa 1240UT ID's.  Thanks to Morgan
269  *      Collins <sirmorcant@morcant.org>.
270  *    - Incorporated devfs patches!! Thanks to Tom Rini
271  *      <trini@kernel.crashing.org>, Pavel Roskin <proski@gnu.org>,
272  *      Greg KH <greg@kroah.com>, Yves Duret <yduret@mandrakesoft.com>,
273  *      Flavio Stanchina <flavio.stanchina@tin.it>.
274  *    - Removed Minolta ScanImage II.  This scanner uses USB SCSI.  Thanks
275  *      to Oliver Neukum <Oliver.Neukum@lrz.uni-muenchen.de> for pointing
276  *      this out.
277  *    - Added additional SMP locking.  Thanks to David Brownell and 
278  *      Oliver Neukum for their help.
279  *    - Added version reporting - reports for both module load and modinfo
280  *    - Started path to hopefully straighten/clean out ioctl()'s.
281  *    - Users are now notified to consult the Documentation/usb/scanner.txt
282  *      for common error messages rather than the maintainer.
283  *
284  * 0.4.7  11/28/2001
285  *    - Fixed typo in Documentation/scanner.txt.  Thanks to
286  *      Karel <karel.vervaeke@pandora.be> for pointing it out.
287  *    - Added ID's for a Memorex 6136u. Thanks to Álvaro Gaspar de
288  *      Valenzuela" <agaspard@utsi.edu>.
289  *    - Added ID's for Agfa e25.  Thanks to Heinrich 
290  *      Rust <Heinrich.Rust@gmx.de>.  Also reported to work with
291  *      Linux and SANE (?).
292  *    - Added Canon FB620U, D646U, and 1220U ID's.  Thanks to Paul
293  *      Rensing <Paul_Rensing@StanfordAlumni.org>.  For more info
294  *      on Linux support for these models, contact 
295  *      salvestrini@users.sourceforge.net.
296  *    - Added Plustek OpticPro UT12, OpticPro U24, KYE/Genius
297  *      ColorPage-HR6 V2 ID's in addition to many "Unknown" models
298  *      under those vendors.  Thanks to
299  *      Jaeger, Gerhard" <g.jaeger@earthling.net>.  These scanner are
300  *      apparently based upon the LM983x IC's.
301  *    - Applied Frank's patch that addressed some locking and module
302  *      referencing counts.  Thanks to both
303  *      Frank Zago <fzago@greshamstorage.com> and
304  *      Oliver Neukum <520047054719-0001@t-online.de> for reviewing/testing.
305  *
306  * 0.4.8  5/30/2002
307  *    - Added Mustek BearPaw 2400 TA.  Thanks to Sergey
308  *      Vlasov <vsu@mivlgu.murom.ru>.
309  *    - Added Mustek 1200UB Plus and Mustek BearPaw 1200 CU ID's.  These use
310  *      the Grandtech GT-6801 chip. Thanks to Henning
311  *      Meier-Geinitz <henning@meier-geinitz.de>.
312  *    - Increased Epson timeout to 60 secs as requested from 
313  *      Karl Heinz Kremer <khk@khk.net>.
314  *    - Changed maintainership from David E. Nelson to Brian
315  *      Beattie <beattie@beattie-home.net>.
316  *
317  * 0.4.9  12/19/2002
318  *    - Added vendor/product ids for Nikon, Mustek, Plustek, Genius, Epson,
319  *      Canon, Umax, Hewlett-Packard, Benq, Agfa, Minolta scanners.
320  *      Thanks to Dieter Faulbaum <faulbaum@mail.bessy.de>, Stian Jordet
321  *      <liste@jordet.nu>, "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>,
322  *      "Jaeger, Gerhard" <gerhard@gjaeger.de>, Ira Childress 
323  *      <ichildress@mn.rr.com>, Till Kamppeter <till.kamppeter@gmx.net>,
324  *      Ed Hamrick <EdHamrick@aol.com>, Oliver Schwartz
325  *      <Oliver.Schwartz@gmx.de> and everyone else who sent ids.
326  *    - Some Benq, Genius and Plustek ids are identified now.
327  *    - Don't clutter syslog with "Unable to access minor data" messages.
328  *    - Accept scanners with only one bulk (in) endpoint (thanks to Sergey
329  *      Vlasov <vsu@mivlgu.murom.ru>).
330  *    - Accept devices with more than one interface. Only use interfaces that
331  *      look like belonging to scanners.
332  *    - Use altsetting[0], not altsetting[ifnum].
333  *    - Add locking to ioctl_scanner(). Thanks to Oliver Neukum
334  *      <oliver@neukum.name>.
335  *
336  * 0.4.10  01/07/2003
337  *    - Added vendor/product ids for Artec, Canon, Compaq, Epson, HP, Microtek 
338  *      and Visioneer scanners. Thanks to William Lam <wklam@triad.rr.com>,
339  *      Till Kamppeter <till.kamppeter@gmx.net> and others for all the ids.
340  *    - Cleaned up list of vendor/product ids.
341  *    - Print ids and device number when a device was detected.
342  *    - Don't print errors when the device is busy.
343  *    - Added vendor/product ids for Visioneer scanners.
344  *    - Print information about user-supplied ids only once at startup instead
345  *      of everytime any USB device is plugged in.
346  *    - Removed PV8630 ioctls. Use the standard ioctls instead.
347  *    - Made endpoint detection more generic. Basically, only one bulk-in 
348  *      endpoint is required, everything else is optional.
349  *    - Move the scanner ioctls to usb_scanner_ioctl.h to allow access by archs
350  *      that need it (by Greg KH).
351  *    - New maintainer: Henning Meier-Geinitz.
352  *    - Print ids and device number when a device was detected.
353  *    - Don't print errors when the device is busy.
354  *      
355  * 0.4.11  2003-02-25
356  *    - Added vendor/product ids for Artec, Avision, Brother, Canon, Compaq,
357  *      Fujitsu, Hewlett-Packard, Lexmark, LG Electronics, Medion, Microtek,
358  *      Primax, Prolink,  Plustek, SYSCAN, Trust and UMAX scanners.
359  *
360  * 0.4.12  2003-04-16
361  *    - Fixed endpoint detection. The endpoints were numbered from 1 to n but
362  *      that assumption is not correct in all cases.
363  *
364  *
365  * 0.4.13  2003-06-14
366  *    - Added vendor/product ids for Genius, Hewlett-Packard, Microtek, 
367  *      Mustek, Pacific Image Electronics, Plustek, and Visioneer scanners.
368  *      Fixed names of some other scanners.
369  *
370  * 0.4.14  2003-07-15
371  *    - Added vendor/product ids for Avision, Canon, HP, Microtek and Relisys
372  *      scanners.
373  *    - When checking if all minors are used don't read beyond p_scn_table
374  *      (Sergey Vlasov).
375  *    - Kfree the scn structure only after disconnect AND close have occured and
376  *      check for scn->present.  This avoids crashing when someone writes (reads) to 
377  *      the device while it's already disconnected but still open. Patch from
378  *      Sergey Vlasov.
379  *    - Clean up irq urb when not enough memory is available (Sergey Vlasov).
380  *
381  * 0.4.15  2003-10-03
382  *    - Added vendor/product ids for Canon, HP, Microtek, Mustek, Siemens, UMAX, and
383  *      Visioneer scanners.
384  *    - Added test for USB_CLASS_CDC_DATA which is used by some fingerprint scanners
385  *    - Use static declarations for usb_scanner_init/usb_scanner_exit 
386  *      (Daniele Bellucci).
387  *
388  * 0.4.16  2003-11-04
389  *    - Added vendor/product ids for Epson, Genius, Microtek, Plustek, Reflecta, and
390  *      Visioneer scanners. Removed ids for HP PSC devices as these are supported by
391  *      the hpoj userspace driver.
392  *
393  * TODO
394  *    - Performance
395  *    - Select/poll methods
396  *    - More testing
397  *    - More general usage ioctl's
398  *
399  *
400  *  Thanks to:
401  *
402  *    - All the folks on the linux-usb list who put up with me. :)  This 
403  *      has been a great learning experience for me.
404  *    - To Linus Torvalds for this great OS.
405  *    - The GNU folks.
406  *    - The folks that forwarded Vendor:Product ID's to me.
407  *    - Johannes Erdfelt for the loaning of a USB analyzer for tracking an
408  *      issue with HP-4100 and uhci.
409  *    - Adolfo Montero for his assistance.
410  *    - All the folks who chimed in with reports and suggestions.
411  *    - All the developers that are working on USB SANE backends or other
412  *      applications to use USB scanners.
413  *    - Thanks to Greg KH <greg@kroah.com> for setting up Brian Beattie
414  *      and Henning Meier-Geinitz to be the new USB Scanner maintainer.
415  *
416  *  Performance:
417  *
418  *    System: Pentium 120, 80 MB RAM, OHCI, Linux 2.3.23, HP 4100C USB Scanner
419  *            300 dpi scan of the entire bed
420  *      24 Bit Color ~ 70 secs - 3.6 Mbit/sec
421  *       8 Bit Gray ~ 17 secs - 4.2 Mbit/sec */
422
423 /*
424  * For documentation, see Documentation/usb/scanner.txt.
425  * Website: http://www.meier-geinitz.de/kernel/
426  * Please contact the maintainer if your scanner is not detected by this
427  * driver automatically.
428  */
429
430
431 /* 
432  * Scanner definitions, macros, module info, 
433  * debug/ioctl/data_dump enable, and other constants.
434  */ 
435 #include "scanner.h"
436
437 static void purge_scanner(struct scn_usb_data *scn);
438
439 static void
440 irq_scanner(struct urb *urb)
441 {
442
443 /*
444  * For the meantime, this is just a placeholder until I figure out what
445  * all I want to do with it -- or somebody else for that matter.
446  */
447
448         struct scn_usb_data *scn;
449         unsigned char *data;
450         scn = urb->context;
451
452         data = &scn->button;
453         data += 0;              /* Keep gcc from complaining about unused var */
454
455         if (urb->status) {
456                 return;
457         }
458
459         dbg("irq_scanner(%d): data:%x", scn->scn_minor, *data);
460
461         return;
462 }
463
464 static int
465 open_scanner(struct inode * inode, struct file * file)
466 {
467         struct scn_usb_data *scn;
468         struct usb_device *dev;
469
470         kdev_t scn_minor;
471
472         int err=0;
473
474         down(&scn_mutex);
475
476         scn_minor = USB_SCN_MINOR(inode);
477
478         dbg("open_scanner: scn_minor:%d", scn_minor);
479
480         if (!p_scn_table[scn_minor]) {
481                 up(&scn_mutex);
482                 dbg("open_scanner(%d): Unable to access minor data", scn_minor);
483                 return -ENODEV;
484         }
485
486         scn = p_scn_table[scn_minor];
487
488         dev = scn->scn_dev;
489
490         down(&(scn->sem));      /* Now protect the scn_usb_data structure */
491
492         up(&scn_mutex); /* Now handled by the above */
493
494         if (!dev) {
495                 err("open_scanner(%d): Scanner device not present", scn_minor);
496                 err = -ENODEV;
497                 goto out_error;
498         }
499
500         if (!scn->present) {
501                 err("open_scanner(%d): Scanner is not present", scn_minor);
502                 err = -ENODEV;
503                 goto out_error;
504         }
505
506         if (scn->isopen) {
507                 dbg("open_scanner(%d): Scanner device is already open", scn_minor);
508                 err = -EBUSY;
509                 goto out_error;
510         }
511
512         init_waitqueue_head(&scn->rd_wait_q);
513
514         scn->isopen = 1;
515
516         file->private_data = scn; /* Used by the read and write methods */
517
518
519 out_error:
520
521         up(&(scn->sem)); /* Wake up any possible contending processes */
522
523         return err;
524 }
525
526 static int
527 close_scanner(struct inode * inode, struct file * file)
528 {
529         struct scn_usb_data *scn = file->private_data;
530
531         down(&(scn->sem));
532         scn->isopen = 0;
533
534         file->private_data = NULL;
535
536         if (!scn->present) {
537                 /* The device was unplugged while open - need to clean up */
538                 up(&(scn->sem));
539                 purge_scanner(scn);
540                 return 0;
541         }
542
543         up(&(scn->sem));
544
545         return 0;
546 }
547
548 static ssize_t
549 write_scanner(struct file * file, const char * buffer,
550               size_t count, loff_t *ppos)
551 {
552         struct scn_usb_data *scn;
553         struct usb_device *dev;
554
555         ssize_t bytes_written = 0; /* Overall count of bytes written */
556         ssize_t ret = 0;
557
558         kdev_t scn_minor;
559
560         int this_write;         /* Number of bytes to write */
561         int partial;            /* Number of bytes successfully written */
562         int result = 0;
563
564         char *obuf;
565
566         scn = file->private_data;
567
568         down(&(scn->sem));
569
570         if (!scn->present) {
571                 /* The device was unplugged while open */
572                 up(&(scn->sem));
573                 return -ENODEV;
574         }
575
576         if (!scn->bulk_out_ep) {
577                 /* This scanner does not have a bulk-out endpoint */
578                 up(&(scn->sem));
579                 return -EINVAL;
580         }
581
582         scn_minor = scn->scn_minor;
583
584         obuf = scn->obuf;
585
586         dev = scn->scn_dev;
587
588         file->f_dentry->d_inode->i_atime = CURRENT_TIME;
589
590         while (count > 0) {
591
592                 if (signal_pending(current)) {
593                         ret = -ERESTARTSYS;
594                         break;
595                 }
596
597                 this_write = (count >= OBUF_SIZE) ? OBUF_SIZE : count;
598
599                 if (copy_from_user(scn->obuf, buffer, this_write)) {
600                         ret = -EFAULT;
601                         break;
602                 }
603
604                 result = usb_bulk_msg(dev,usb_sndbulkpipe(dev, scn->bulk_out_ep), obuf, this_write, &partial, 60*HZ);
605                 dbg("write stats(%d): result:%d this_write:%d partial:%d", scn_minor, result, this_write, partial);
606
607                 if (result == -ETIMEDOUT) {     /* NAK -- shouldn't happen */
608                         warn("write_scanner: NAK received.");
609                         ret = result;
610                         break;
611                 } else if (result < 0) { /* We should not get any I/O errors */
612                         warn("write_scanner(%d): funky result: %d. Consult Documentataion/usb/scanner.txt.", scn_minor, result);
613                         ret = -EIO;
614                         break;
615                 }
616
617 #ifdef WR_DATA_DUMP
618                 if (partial) {
619                         unsigned char cnt, cnt_max;
620                         cnt_max = (partial > 24) ? 24 : partial;
621                         printk(KERN_DEBUG "dump(%d): ", scn_minor);
622                         for (cnt=0; cnt < cnt_max; cnt++) {
623                                 printk("%X ", obuf[cnt]);
624                         }
625                         printk("\n");
626                 }
627 #endif
628                 if (partial != this_write) { /* Unable to write all contents of obuf */
629                         ret = -EIO;
630                         break;
631                 }
632
633                 if (partial) { /* Data written */
634                         buffer += partial;
635                         count -= partial;
636                         bytes_written += partial;
637                 } else { /* No data written */
638                         ret = 0;
639                         break;
640                 }
641         }
642         up(&(scn->sem));
643         mdelay(5);              /* This seems to help with SANE queries */
644         return ret ? ret : bytes_written;
645 }
646
647 static ssize_t
648 read_scanner(struct file * file, char * buffer,
649              size_t count, loff_t *ppos)
650 {
651         struct scn_usb_data *scn;
652         struct usb_device *dev;
653
654         ssize_t bytes_read;     /* Overall count of bytes_read */
655         ssize_t ret;
656
657         kdev_t scn_minor;
658
659         int partial;            /* Number of bytes successfully read */
660         int this_read;          /* Max number of bytes to read */
661         int result;
662         int rd_expire = RD_EXPIRE;
663
664         char *ibuf;
665
666         scn = file->private_data;
667
668         down(&(scn->sem));
669
670         if (!scn->present) {
671                 /* The device was unplugged while open */
672                 up(&(scn->sem));
673                 return -ENODEV;
674         }
675
676         scn_minor = scn->scn_minor;
677
678         ibuf = scn->ibuf;
679
680         dev = scn->scn_dev;
681
682         bytes_read = 0;
683         ret = 0;
684
685         file->f_dentry->d_inode->i_atime = CURRENT_TIME; /* Update the
686                                                             atime of
687                                                             the device
688                                                             node */
689         while (count > 0) {
690                 if (signal_pending(current)) {
691                         ret = -ERESTARTSYS;
692                         break;
693                 }
694
695                 this_read = (count >= IBUF_SIZE) ? IBUF_SIZE : count;
696
697                 result = usb_bulk_msg(dev, usb_rcvbulkpipe(dev, scn->bulk_in_ep), ibuf, this_read, &partial, scn->rd_nak_timeout);
698                 dbg("read stats(%d): result:%d this_read:%d partial:%d count:%d", scn_minor, result, this_read, partial, count);
699
700 /*
701  * Scanners are sometimes inheriently slow since they are mechanical
702  * in nature.  USB bulk reads tend to timeout while the scanner is
703  * positioning, resetting, warming up the lamp, etc if the timeout is
704  * set too low.  A very long timeout parameter for bulk reads was used
705  * to overcome this limitation, but this sometimes resulted in folks
706  * having to wait for the timeout to expire after pressing Ctrl-C from
707  * an application. The user was sometimes left with the impression
708  * that something had hung or crashed when in fact the USB read was
709  * just waiting on data.  So, the below code retains the same long
710  * timeout period, but splits it up into smaller parts so that
711  * Ctrl-C's are acted upon in a reasonable amount of time.
712  */
713
714                 if (result == -ETIMEDOUT) { /* NAK */
715                         if (!partial) { /* No data */
716                                 if (--rd_expire <= 0) { /* Give it up */
717                                         warn("read_scanner(%d): excessive NAK's received", scn_minor);
718                                         ret = result;
719                                         break;
720                                 } else { /* Keep trying to read data */
721                                         interruptible_sleep_on_timeout(&scn->rd_wait_q, scn->rd_nak_timeout);
722                                         continue;
723                                 }
724                         } else { /* Timeout w/ some data */
725                                 goto data_recvd;
726                         }
727                 }
728
729                 if (result == -EPIPE) { /* No hope */
730                         if(usb_clear_halt(dev, scn->bulk_in_ep)) {
731                                 err("read_scanner(%d): Failure to clear endpoint halt condition (%Zd).", scn_minor, ret);
732                         }
733                         ret = result;
734                         break;
735                 } else if ((result < 0) && (result != USB_ST_DATAUNDERRUN)) {
736                         warn("read_scanner(%d): funky result:%d. Consult Documentation/usb/scanner.txt.", scn_minor, (int)result);
737                         ret = -EIO;
738                         break;
739                 }
740
741         data_recvd:
742
743 #ifdef RD_DATA_DUMP
744                 if (partial) {
745                         unsigned char cnt, cnt_max;
746                         cnt_max = (partial > 24) ? 24 : partial;
747                         printk(KERN_DEBUG "dump(%d): ", scn_minor);
748                         for (cnt=0; cnt < cnt_max; cnt++) {
749                                 printk("%X ", ibuf[cnt]);
750                         }
751                         printk("\n");
752                 }
753 #endif
754
755                 if (partial) { /* Data returned */
756                         if (copy_to_user(buffer, ibuf, partial)) {
757                                 ret = -EFAULT;
758                                 break;
759                         }
760                         count -= this_read; /* Compensate for short reads */
761                         bytes_read += partial; /* Keep tally of what actually was read */
762                         buffer += partial;
763                 } else {
764                         ret = 0;
765                         break;
766                 }
767         }
768         up(&(scn->sem));
769         return ret ? ret : bytes_read;
770 }
771
772 static int
773 ioctl_scanner(struct inode *inode, struct file *file,
774               unsigned int cmd, unsigned long arg)
775 {
776         struct scn_usb_data *scn;
777         struct usb_device *dev;
778         int retval = -ENOTTY;
779
780         scn = file->private_data;
781         down(&(scn->sem));
782
783         if (!scn->present) {
784                 /* The device was unplugged while open */
785                 up(&(scn->sem));
786                 return -ENODEV;
787         }
788
789         dev = scn->scn_dev;
790
791         switch (cmd)
792         {
793         case SCANNER_IOCTL_VENDOR :
794                 retval = (put_user(dev->descriptor.idVendor, (unsigned int *) arg));
795                 break;
796         case SCANNER_IOCTL_PRODUCT :
797                 retval = (put_user(dev->descriptor.idProduct, (unsigned int *) arg));
798                 break;
799         case SCANNER_IOCTL_CTRLMSG:
800         {
801                 struct ctrlmsg_ioctl {
802                         struct usb_ctrlrequest  req;
803                         void            *data;
804                 } cmsg;
805                 int pipe, nb, ret;
806                 unsigned char buf[64];
807                 retval = 0;
808
809                 if (copy_from_user(&cmsg, (void *)arg, sizeof(cmsg))) {
810                         retval = -EFAULT;
811                         break;
812                 }
813
814                 nb = cmsg.req.wLength;
815
816                 if (nb > sizeof(buf)) {
817                         retval = -EINVAL;
818                         break;
819                 }
820
821                 if ((cmsg.req.bRequestType & 0x80) == 0) {
822                         pipe = usb_sndctrlpipe(dev, 0);
823                         if (nb > 0 && copy_from_user(buf, cmsg.data, nb)) {
824                                 retval = -EFAULT;
825                                 break;
826                         }
827                 } else {
828                         pipe = usb_rcvctrlpipe(dev, 0);
829                 }
830
831                 ret = usb_control_msg(dev, pipe, cmsg.req.bRequest,
832                                       cmsg.req.bRequestType,
833                                       cmsg.req.wValue,
834                                       cmsg.req.wIndex,
835                                       buf, nb, HZ);
836
837                 if (ret < 0) {
838                         err("ioctl_scanner: control_msg returned %d\n", ret);
839                         retval = -EIO;
840                         break;
841                 }
842
843                 if (nb > 0 && (cmsg.req.bRequestType & 0x80) && copy_to_user(cmsg.data, buf, nb))
844                         retval = -EFAULT;
845
846                 break;
847         }
848         default:
849                 break;
850         }
851         up(&(scn->sem));
852         return retval;
853 }
854
855 static struct
856 file_operations usb_scanner_fops = {
857         owner:          THIS_MODULE,
858         read:           read_scanner,
859         write:          write_scanner,
860         ioctl:          ioctl_scanner,
861         open:           open_scanner,
862         release:        close_scanner,
863 };
864
865 static void *
866 probe_scanner(struct usb_device *dev, unsigned int ifnum,
867               const struct usb_device_id *id)
868 {
869         struct scn_usb_data *scn;
870         struct usb_interface_descriptor *interface;
871         struct usb_endpoint_descriptor *endpoint;
872
873         int ep_cnt;
874         int ix;
875
876         kdev_t scn_minor;
877
878         char valid_device = 0;
879         char have_bulk_in, have_bulk_out, have_intr;
880         char name[10];
881
882         dbg("probe_scanner: USB dev address:%p", dev);
883         dbg("probe_scanner: ifnum:%u", ifnum);
884
885 /*
886  * 1. Check Vendor/Product
887  * 2. Determine/Assign Bulk Endpoints
888  * 3. Determine/Assign Intr Endpoint
889  */
890
891 /*
892  * There doesn't seem to be an imaging class defined in the USB
893  * Spec. (yet).  If there is, HP isn't following it and it doesn't
894  * look like anybody else is either.  Therefore, we have to test the
895  * Vendor and Product ID's to see what we have.  Also, other scanners
896  * may be able to use this driver by specifying both vendor and
897  * product ID's as options to the scanner module in conf.modules.
898  *
899  * NOTE: Just because a product is supported here does not mean that
900  * applications exist that support the product.  It's in the hopes
901  * that this will allow developers a means to produce applications
902  * that will support USB products.
903  *
904  * Until we detect a device which is pleasing, we silently punt.
905  */
906
907         for (ix = 0; ix < sizeof (scanner_device_ids) / sizeof (struct usb_device_id); ix++) {
908                 if ((dev->descriptor.idVendor == scanner_device_ids [ix].idVendor) &&
909                     (dev->descriptor.idProduct == scanner_device_ids [ix].idProduct)) {
910                         valid_device = 1;
911                         break;
912                 }
913         }
914         if (dev->descriptor.idVendor == vendor &&   /* User specified */
915             dev->descriptor.idProduct == product) { /* User specified */
916                 valid_device = 1;
917         }
918
919         if (!valid_device)
920                 return NULL;    /* We didn't find anything pleasing */
921
922 /*
923  * After this point we can be a little noisy about what we are trying to
924  *  configure.
925  */
926
927         if (dev->descriptor.bNumConfigurations != 1) {
928                 info("probe_scanner: Only one device configuration is supported.");
929                 return NULL;
930         }
931
932         interface = dev->config[0].interface[ifnum].altsetting;
933
934         if (interface[0].bInterfaceClass != USB_CLASS_VENDOR_SPEC &&
935             interface[0].bInterfaceClass != USB_CLASS_PER_INTERFACE &&
936             interface[0].bInterfaceClass != USB_CLASS_CDC_DATA &&
937             interface[0].bInterfaceClass != SCN_CLASS_SCANJET) {
938                 dbg("probe_scanner: This interface doesn't look like a scanner (class=0x%x).", interface[0].bInterfaceClass);
939                 return NULL;
940         }
941
942         endpoint = interface[0].endpoint;
943
944 /*
945  * Start checking for bulk and interrupt endpoints. We are only using the first
946  * one of each type of endpoint. If we have an interrupt endpoint go ahead and
947  * setup the handler. FIXME: This is a future enhancement...
948  */
949
950         dbg("probe_scanner: Number of Endpoints:%d", (int) interface->bNumEndpoints);
951
952         ep_cnt = have_bulk_in = have_bulk_out = have_intr = 0;
953
954         while (ep_cnt < interface->bNumEndpoints) {
955
956                 if (IS_EP_BULK_IN(endpoint[ep_cnt])) {
957                         ep_cnt++;
958                         if (have_bulk_in) {
959                                 info ("probe_scanner: ignoring additional bulk_in_ep:%d", ep_cnt);
960                                 continue;
961                         }
962                         have_bulk_in = endpoint[ep_cnt - 1].bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
963                         dbg("probe_scanner: bulk_in_ep:%d", have_bulk_in);
964                         continue;
965                 }
966
967                 if (IS_EP_BULK_OUT(endpoint[ep_cnt])) {
968                         ep_cnt++;
969                         if (have_bulk_out) {
970                                 info ("probe_scanner: ignoring additional bulk_out_ep:%d", ep_cnt);
971                                 continue;
972                         }
973                         have_bulk_out = endpoint[ep_cnt - 1].bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
974                         dbg("probe_scanner: bulk_out_ep:%d", have_bulk_out);
975                         continue;
976                 }
977
978                 if (IS_EP_INTR(endpoint[ep_cnt])) {
979                         ep_cnt++;
980                         if (have_intr) {
981                                 info ("probe_scanner: ignoring additional intr_ep:%d", ep_cnt);
982                                 continue;
983                         }
984                         have_intr = endpoint[ep_cnt - 1].bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
985                         dbg("probe_scanner: intr_ep:%d", have_intr);
986                         continue;
987                 }
988                 info("probe_scanner: Undetected endpoint -- consult Documentation/usb/scanner.txt.");
989                 return NULL;    /* Shouldn't ever get here unless we have something weird */
990         }
991
992
993 /*
994  * Perform a quick check to make sure that everything worked as it
995  * should have.
996  */
997         if (!have_bulk_in) {
998                 err("probe_scanner: One bulk-in endpoint required.");
999                 return NULL;
1000         }
1001
1002
1003 /*
1004  * Determine a minor number and initialize the structure associated
1005  * with it.  The problem with this is that we are counting on the fact
1006  * that the user will sequentially add device nodes for the scanner
1007  * devices.  */
1008         
1009         down(&scn_mutex);
1010
1011         for (scn_minor = 0; scn_minor < SCN_MAX_MNR; scn_minor++) {
1012                 if (!p_scn_table[scn_minor])
1013                         break;
1014         }
1015
1016 /* Check to make sure that the last slot isn't already taken */
1017         if (scn_minor >= SCN_MAX_MNR) {
1018                 err("probe_scanner: No more minor devices remaining.");
1019                 up(&scn_mutex);
1020                 return NULL;
1021         }
1022
1023         dbg("probe_scanner: Allocated minor:%d", scn_minor);
1024
1025         if (!(scn = kmalloc (sizeof (struct scn_usb_data), GFP_KERNEL))) {
1026                 err("probe_scanner: Out of memory.");
1027                 up(&scn_mutex);
1028                 return NULL;
1029         }
1030         memset (scn, 0, sizeof(struct scn_usb_data));
1031
1032         init_MUTEX(&(scn->sem)); /* Initializes to unlocked */
1033
1034         dbg ("probe_scanner(%d): Address of scn:%p", scn_minor, scn);
1035
1036 /* Ok, if we detected an interrupt EP, setup a handler for it */
1037         if (have_intr) {
1038                 dbg("probe_scanner(%d): Configuring IRQ handler for intr EP:%d", scn_minor, have_intr);
1039                 FILL_INT_URB(&scn->scn_irq, dev,
1040                              usb_rcvintpipe(dev, have_intr),
1041                              &scn->button, 1, irq_scanner, scn,
1042                              // endpoint[(int)have_intr].bInterval);
1043                              250);
1044
1045                 if (usb_submit_urb(&scn->scn_irq)) {
1046                         err("probe_scanner(%d): Unable to allocate INT URB.", scn_minor);
1047                         kfree(scn);
1048                         up(&scn_mutex);
1049                         return NULL;
1050                 }
1051         }
1052
1053
1054 /* Ok, now initialize all the relevant values */
1055         if (!(scn->obuf = (char *)kmalloc(OBUF_SIZE, GFP_KERNEL))) {
1056                 err("probe_scanner(%d): Not enough memory for the output buffer.", scn_minor);
1057                 if (have_intr)
1058                         usb_unlink_urb(&scn->scn_irq);
1059                 kfree(scn);
1060                 up(&scn_mutex);
1061                 return NULL;
1062         }
1063         dbg("probe_scanner(%d): obuf address:%p", scn_minor, scn->obuf);
1064
1065         if (!(scn->ibuf = (char *)kmalloc(IBUF_SIZE, GFP_KERNEL))) {
1066                 err("probe_scanner(%d): Not enough memory for the input buffer.", scn_minor);
1067                 if (have_intr)
1068                         usb_unlink_urb(&scn->scn_irq);
1069                 kfree(scn->obuf);
1070                 kfree(scn);
1071                 up(&scn_mutex);
1072                 return NULL;
1073         }
1074         dbg("probe_scanner(%d): ibuf address:%p", scn_minor, scn->ibuf);
1075         
1076
1077         switch (dev->descriptor.idVendor) { /* Scanner specific read timeout parameters */
1078         case 0x04b8:            /* Seiko/Epson */
1079                 scn->rd_nak_timeout = HZ * 60;
1080                 break;
1081         case 0x055f:            /* Mustek */
1082         case 0x0400:            /* Another Mustek */
1083                 scn->rd_nak_timeout = HZ * 1;
1084         default:
1085                 scn->rd_nak_timeout = RD_NAK_TIMEOUT;
1086         }
1087
1088
1089         if (read_timeout > 0) { /* User specified read timeout overrides everything */
1090                 info("probe_scanner: User specified USB read timeout - %d", read_timeout);
1091                 scn->rd_nak_timeout = read_timeout;
1092         }
1093
1094
1095         scn->bulk_in_ep = have_bulk_in;
1096         scn->bulk_out_ep = have_bulk_out;
1097         scn->intr_ep = have_intr;
1098         scn->present = 1;
1099         scn->scn_dev = dev;
1100         scn->scn_minor = scn_minor;
1101         scn->isopen = 0;
1102
1103         sprintf(name, "scanner%d", scn->scn_minor);
1104         
1105         scn->devfs = devfs_register(usb_devfs_handle, name,
1106                                     DEVFS_FL_DEFAULT, USB_MAJOR,
1107                                     SCN_BASE_MNR + scn->scn_minor,
1108                                     S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP |
1109                                     S_IWGRP | S_IROTH | S_IWOTH, &usb_scanner_fops, NULL);
1110         if (scn->devfs == NULL)
1111                 dbg("scanner%d: device node registration failed", scn_minor);
1112
1113         info ("USB scanner device (0x%04x/0x%04x) now attached to %s",
1114               dev->descriptor.idVendor, dev->descriptor.idProduct, name);
1115         p_scn_table[scn_minor] = scn;
1116
1117         up(&scn_mutex);
1118
1119         return scn;
1120 }
1121
1122 static void
1123 purge_scanner(struct scn_usb_data *scn)
1124 {
1125         kfree(scn->ibuf);
1126         kfree(scn->obuf);
1127         kfree(scn);
1128 }
1129
1130 static void
1131 disconnect_scanner(struct usb_device *dev, void *ptr)
1132 {
1133         struct scn_usb_data *scn = (struct scn_usb_data *) ptr;
1134
1135         down (&scn_mutex);
1136         down (&(scn->sem));
1137
1138         if(scn->intr_ep) {
1139                 dbg("disconnect_scanner(%d): Unlinking IRQ URB", scn->scn_minor);
1140                 usb_unlink_urb(&scn->scn_irq);
1141         }
1142         usb_driver_release_interface(&scanner_driver,
1143                 &scn->scn_dev->actconfig->interface[scn->ifnum]);
1144
1145         dbg("disconnect_scanner: De-allocating minor:%d", scn->scn_minor);
1146         devfs_unregister(scn->devfs);
1147         p_scn_table[scn->scn_minor] = NULL;
1148
1149         if (scn->isopen) {
1150                 /* The device is still open - cleanup must be delayed */
1151                 scn->present = 0;
1152                 up(&(scn->sem));
1153                 up(&scn_mutex);
1154                 return;
1155         }
1156
1157         up (&(scn->sem));
1158         up (&scn_mutex);
1159
1160         purge_scanner(scn);
1161 }
1162
1163 static struct
1164 usb_driver scanner_driver = {
1165         name:           "usbscanner",
1166         probe:          probe_scanner,
1167         disconnect:     disconnect_scanner,
1168         fops:           &usb_scanner_fops,
1169         minor:          SCN_BASE_MNR,
1170         id_table:       NULL, /* This would be scanner_device_ids, but we
1171                                  need to check every USB device, in case
1172                                  we match a user defined vendor/product ID. */
1173 };
1174
1175 static void __exit
1176 usb_scanner_exit(void)
1177 {
1178         usb_deregister(&scanner_driver);
1179 }
1180
1181 static int __init
1182 usb_scanner_init (void)
1183 {
1184         if (usb_register(&scanner_driver) < 0)
1185                 return -1;
1186
1187         info(DRIVER_VERSION ":" DRIVER_DESC);
1188         if (vendor != -1 && product != -1)
1189                 info("probe_scanner: User specified USB scanner -- Vendor:Product - %x:%x", vendor, product);
1190         return 0;
1191 }
1192
1193 module_init(usb_scanner_init);
1194 module_exit(usb_scanner_exit);