4 * Driver for USB Rio 500
6 * Cesar Miquel (miquel@df.uba.ar)
8 * based on hp_scanner.c by David E. Nelson (dnelson@jump.net)
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License as
12 * published by the Free Software Foundation; either version 2 of the
13 * License, or (at your option) any later version.
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 * Based upon mouse.c (Brad Keryan) and printer.c (Michael Gee).
27 * 30/05/2003 replaced lock/unlock kernel with up/down
28 * Daniele Bellucci bellucda@tiscali.it
31 #include <linux/module.h>
32 #include <linux/kernel.h>
33 #include <linux/signal.h>
34 #include <linux/sched.h>
35 #include <linux/smp_lock.h>
36 #include <linux/errno.h>
37 #include <linux/random.h>
38 #include <linux/poll.h>
39 #include <linux/init.h>
40 #include <linux/slab.h>
41 #include <linux/spinlock.h>
42 #include <linux/usb.h>
43 #include <linux/wait.h>
45 #include "rio500_usb.h"
50 #define DRIVER_VERSION "v1.1"
51 #define DRIVER_AUTHOR "Cesar Miquel <miquel@df.uba.ar>"
52 #define DRIVER_DESC "USB Rio 500 driver"
56 /* stall/wait timeout for rio */
57 #define NAK_TIMEOUT (HZ)
59 #define IBUF_SIZE 0x1000
61 /* Size of the rio buffer */
62 #define OBUF_SIZE 0x10000
65 struct usb_device
*rio_dev
; /* init: probe_rio */
66 unsigned int ifnum
; /* Interface number of the USB device */
67 int isopen
; /* nz if open */
68 int present
; /* Device is present on the bus */
69 char *obuf
, *ibuf
; /* transfer buffers */
70 char bulk_in_ep
, bulk_out_ep
; /* Endpoint assignments */
71 wait_queue_head_t wait_q
; /* for timeouts */
72 struct mutex lock
; /* general race avoidance */
75 static struct rio_usb_data rio_instance
;
77 static int open_rio(struct inode
*inode
, struct file
*file
)
79 struct rio_usb_data
*rio
= &rio_instance
;
81 mutex_lock(&(rio
->lock
));
83 if (rio
->isopen
|| !rio
->present
) {
84 mutex_unlock(&(rio
->lock
));
89 init_waitqueue_head(&rio
->wait_q
);
91 mutex_unlock(&(rio
->lock
));
93 dev_info(&rio
->rio_dev
->dev
, "Rio opened.\n");
98 static int close_rio(struct inode
*inode
, struct file
*file
)
100 struct rio_usb_data
*rio
= &rio_instance
;
104 dev_info(&rio
->rio_dev
->dev
, "Rio closed.\n");
108 static long ioctl_rio(struct file
*file
, unsigned int cmd
, unsigned long arg
)
110 struct RioCommand rio_cmd
;
111 struct rio_usb_data
*rio
= &rio_instance
;
113 unsigned char *buffer
;
114 int result
, requesttype
;
119 mutex_lock(&(rio
->lock
));
120 /* Sanity check to make sure rio is connected, powered, etc */
121 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
127 case RIO_RECV_COMMAND
:
128 data
= (void __user
*) arg
;
131 if (copy_from_user(&rio_cmd
, data
, sizeof(struct RioCommand
))) {
135 if (rio_cmd
.length
< 0 || rio_cmd
.length
> PAGE_SIZE
) {
139 buffer
= (unsigned char *) __get_free_page(GFP_KERNEL
);
140 if (buffer
== NULL
) {
144 if (copy_from_user(buffer
, rio_cmd
.buffer
, rio_cmd
.length
)) {
146 free_page((unsigned long) buffer
);
150 requesttype
= rio_cmd
.requesttype
| USB_DIR_IN
|
151 USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
153 ("sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x",
154 requesttype
, rio_cmd
.request
, rio_cmd
.value
,
155 rio_cmd
.index
, rio_cmd
.length
);
156 /* Send rio control message */
159 result
= usb_control_msg(rio
->rio_dev
,
160 usb_rcvctrlpipe(rio
-> rio_dev
, 0),
164 rio_cmd
.index
, buffer
,
166 jiffies_to_msecs(rio_cmd
.timeout
));
167 if (result
== -ETIMEDOUT
)
169 else if (result
< 0) {
170 err("Error executing ioctrl. code = %d", result
);
173 dbg("Executed ioctl. Result = %d (data=%02x)",
175 if (copy_to_user(rio_cmd
.buffer
, buffer
,
177 free_page((unsigned long) buffer
);
184 /* rio_cmd.buffer contains a raw stream of single byte
185 data which has been returned from rio. Data is
186 interpreted at application level. For data that
187 will be cast to data types longer than 1 byte, data
188 will be little_endian and will potentially need to
189 be swapped at the app level */
192 free_page((unsigned long) buffer
);
195 case RIO_SEND_COMMAND
:
196 data
= (void __user
*) arg
;
199 if (copy_from_user(&rio_cmd
, data
, sizeof(struct RioCommand
))) {
203 if (rio_cmd
.length
< 0 || rio_cmd
.length
> PAGE_SIZE
) {
207 buffer
= (unsigned char *) __get_free_page(GFP_KERNEL
);
208 if (buffer
== NULL
) {
212 if (copy_from_user(buffer
, rio_cmd
.buffer
, rio_cmd
.length
)) {
213 free_page((unsigned long)buffer
);
218 requesttype
= rio_cmd
.requesttype
| USB_DIR_OUT
|
219 USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
220 dbg("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x",
221 requesttype
, rio_cmd
.request
, rio_cmd
.value
,
222 rio_cmd
.index
, rio_cmd
.length
);
223 /* Send rio control message */
226 result
= usb_control_msg(rio
->rio_dev
,
227 usb_sndctrlpipe(rio
-> rio_dev
, 0),
231 rio_cmd
.index
, buffer
,
233 jiffies_to_msecs(rio_cmd
.timeout
));
234 if (result
== -ETIMEDOUT
)
236 else if (result
< 0) {
237 err("Error executing ioctrl. code = %d", result
);
240 dbg("Executed ioctl. Result = %d", result
);
246 free_page((unsigned long) buffer
);
256 mutex_unlock(&(rio
->lock
));
262 write_rio(struct file
*file
, const char __user
*buffer
,
263 size_t count
, loff_t
* ppos
)
266 struct rio_usb_data
*rio
= &rio_instance
;
268 unsigned long copy_size
;
269 unsigned long bytes_written
= 0;
270 unsigned int partial
;
277 intr
= mutex_lock_interruptible(&(rio
->lock
));
280 /* Sanity check to make sure rio is connected, powered, etc */
281 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
282 mutex_unlock(&(rio
->lock
));
289 unsigned long thistime
;
290 char *obuf
= rio
->obuf
;
292 thistime
= copy_size
=
293 (count
>= OBUF_SIZE
) ? OBUF_SIZE
: count
;
294 if (copy_from_user(rio
->obuf
, buffer
, copy_size
)) {
304 if (signal_pending(current
)) {
305 mutex_unlock(&(rio
->lock
));
306 return bytes_written
? bytes_written
: -EINTR
;
309 result
= usb_bulk_msg(rio
->rio_dev
,
310 usb_sndbulkpipe(rio
->rio_dev
, 2),
311 obuf
, thistime
, &partial
, 5000);
313 dbg("write stats: result:%d thistime:%lu partial:%u",
314 result
, thistime
, partial
);
316 if (result
== -ETIMEDOUT
) { /* NAK - so hold for a while */
321 prepare_to_wait(&rio
->wait_q
, &wait
, TASK_INTERRUPTIBLE
);
322 schedule_timeout(NAK_TIMEOUT
);
323 finish_wait(&rio
->wait_q
, &wait
);
325 } else if (!result
&& partial
) {
332 err("Write Whoops - %x", result
);
336 bytes_written
+= copy_size
;
341 mutex_unlock(&(rio
->lock
));
343 return bytes_written
? bytes_written
: -EIO
;
346 mutex_unlock(&(rio
->lock
));
351 read_rio(struct file
*file
, char __user
*buffer
, size_t count
, loff_t
* ppos
)
354 struct rio_usb_data
*rio
= &rio_instance
;
356 unsigned int partial
;
363 intr
= mutex_lock_interruptible(&(rio
->lock
));
366 /* Sanity check to make sure rio is connected, powered, etc */
367 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
368 mutex_unlock(&(rio
->lock
));
378 if (signal_pending(current
)) {
379 mutex_unlock(&(rio
->lock
));
380 return read_count
? read_count
: -EINTR
;
383 mutex_unlock(&(rio
->lock
));
386 this_read
= (count
>= IBUF_SIZE
) ? IBUF_SIZE
: count
;
388 result
= usb_bulk_msg(rio
->rio_dev
,
389 usb_rcvbulkpipe(rio
->rio_dev
, 1),
390 ibuf
, this_read
, &partial
,
393 dbg("read stats: result:%d this_read:%u partial:%u",
394 result
, this_read
, partial
);
397 count
= this_read
= partial
;
398 } else if (result
== -ETIMEDOUT
|| result
== 15) { /* FIXME: 15 ??? */
400 mutex_unlock(&(rio
->lock
));
401 err("read_rio: maxretry timeout");
404 prepare_to_wait(&rio
->wait_q
, &wait
, TASK_INTERRUPTIBLE
);
405 schedule_timeout(NAK_TIMEOUT
);
406 finish_wait(&rio
->wait_q
, &wait
);
408 } else if (result
!= -EREMOTEIO
) {
409 mutex_unlock(&(rio
->lock
));
410 err("Read Whoops - result:%u partial:%u this_read:%u",
411 result
, partial
, this_read
);
414 mutex_unlock(&(rio
->lock
));
419 if (copy_to_user(buffer
, ibuf
, this_read
)) {
420 mutex_unlock(&(rio
->lock
));
424 read_count
+= this_read
;
428 mutex_unlock(&(rio
->lock
));
433 file_operations usb_rio_fops
= {
434 .owner
= THIS_MODULE
,
437 .unlocked_ioctl
= ioctl_rio
,
439 .release
= close_rio
,
442 static struct usb_class_driver usb_rio_class
= {
444 .fops
= &usb_rio_fops
,
445 .minor_base
= RIO_MINOR
,
448 static int probe_rio(struct usb_interface
*intf
,
449 const struct usb_device_id
*id
)
451 struct usb_device
*dev
= interface_to_usbdev(intf
);
452 struct rio_usb_data
*rio
= &rio_instance
;
455 dev_info(&intf
->dev
, "USB Rio found at address %d\n", dev
->devnum
);
457 retval
= usb_register_dev(intf
, &usb_rio_class
);
459 err("Not able to get a minor for this device.");
465 if (!(rio
->obuf
= kmalloc(OBUF_SIZE
, GFP_KERNEL
))) {
466 err("probe_rio: Not enough memory for the output buffer");
467 usb_deregister_dev(intf
, &usb_rio_class
);
470 dbg("probe_rio: obuf address:%p", rio
->obuf
);
472 if (!(rio
->ibuf
= kmalloc(IBUF_SIZE
, GFP_KERNEL
))) {
473 err("probe_rio: Not enough memory for the input buffer");
474 usb_deregister_dev(intf
, &usb_rio_class
);
478 dbg("probe_rio: ibuf address:%p", rio
->ibuf
);
480 mutex_init(&(rio
->lock
));
482 usb_set_intfdata (intf
, rio
);
488 static void disconnect_rio(struct usb_interface
*intf
)
490 struct rio_usb_data
*rio
= usb_get_intfdata (intf
);
492 usb_set_intfdata (intf
, NULL
);
494 usb_deregister_dev(intf
, &usb_rio_class
);
496 mutex_lock(&(rio
->lock
));
499 /* better let it finish - the release will do whats needed */
501 mutex_unlock(&(rio
->lock
));
507 dev_info(&intf
->dev
, "USB Rio disconnected.\n");
510 mutex_unlock(&(rio
->lock
));
514 static struct usb_device_id rio_table
[] = {
515 { USB_DEVICE(0x0841, 1) }, /* Rio 500 */
516 { } /* Terminating entry */
519 MODULE_DEVICE_TABLE (usb
, rio_table
);
521 static struct usb_driver rio_driver
= {
524 .disconnect
= disconnect_rio
,
525 .id_table
= rio_table
,
528 static int __init
usb_rio_init(void)
531 retval
= usb_register(&rio_driver
);
535 printk(KERN_INFO KBUILD_MODNAME
": " DRIVER_VERSION
":"
543 static void __exit
usb_rio_cleanup(void)
545 struct rio_usb_data
*rio
= &rio_instance
;
548 usb_deregister(&rio_driver
);
553 module_init(usb_rio_init
);
554 module_exit(usb_rio_cleanup
);
556 MODULE_AUTHOR( DRIVER_AUTHOR
);
557 MODULE_DESCRIPTION( DRIVER_DESC
);
558 MODULE_LICENSE("GPL");