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/mutex.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 DEFINE_MUTEX(rio500_mutex
);
76 static struct rio_usb_data rio_instance
;
78 static int open_rio(struct inode
*inode
, struct file
*file
)
80 struct rio_usb_data
*rio
= &rio_instance
;
82 /* against disconnect() */
83 mutex_lock(&rio500_mutex
);
84 mutex_lock(&(rio
->lock
));
86 if (rio
->isopen
|| !rio
->present
) {
87 mutex_unlock(&(rio
->lock
));
88 mutex_unlock(&rio500_mutex
);
93 init_waitqueue_head(&rio
->wait_q
);
95 mutex_unlock(&(rio
->lock
));
97 dev_info(&rio
->rio_dev
->dev
, "Rio opened.\n");
98 mutex_unlock(&rio500_mutex
);
103 static int close_rio(struct inode
*inode
, struct file
*file
)
105 struct rio_usb_data
*rio
= &rio_instance
;
109 dev_info(&rio
->rio_dev
->dev
, "Rio closed.\n");
113 static long ioctl_rio(struct file
*file
, unsigned int cmd
, unsigned long arg
)
115 struct RioCommand rio_cmd
;
116 struct rio_usb_data
*rio
= &rio_instance
;
118 unsigned char *buffer
;
119 int result
, requesttype
;
123 mutex_lock(&(rio
->lock
));
124 /* Sanity check to make sure rio is connected, powered, etc */
125 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
131 case RIO_RECV_COMMAND
:
132 data
= (void __user
*) arg
;
135 if (copy_from_user(&rio_cmd
, data
, sizeof(struct RioCommand
))) {
139 if (rio_cmd
.length
< 0 || rio_cmd
.length
> PAGE_SIZE
) {
143 buffer
= (unsigned char *) __get_free_page(GFP_KERNEL
);
144 if (buffer
== NULL
) {
148 if (copy_from_user(buffer
, rio_cmd
.buffer
, rio_cmd
.length
)) {
150 free_page((unsigned long) buffer
);
154 requesttype
= rio_cmd
.requesttype
| USB_DIR_IN
|
155 USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
156 dev_dbg(&rio
->rio_dev
->dev
,
157 "sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
158 requesttype
, rio_cmd
.request
, rio_cmd
.value
,
159 rio_cmd
.index
, rio_cmd
.length
);
160 /* Send rio control message */
163 result
= usb_control_msg(rio
->rio_dev
,
164 usb_rcvctrlpipe(rio
-> rio_dev
, 0),
168 rio_cmd
.index
, buffer
,
170 jiffies_to_msecs(rio_cmd
.timeout
));
171 if (result
== -ETIMEDOUT
)
173 else if (result
< 0) {
174 dev_err(&rio
->rio_dev
->dev
,
175 "Error executing ioctrl. code = %d\n",
179 dev_dbg(&rio
->rio_dev
->dev
,
180 "Executed ioctl. Result = %d (data=%02x)\n",
182 if (copy_to_user(rio_cmd
.buffer
, buffer
,
184 free_page((unsigned long) buffer
);
191 /* rio_cmd.buffer contains a raw stream of single byte
192 data which has been returned from rio. Data is
193 interpreted at application level. For data that
194 will be cast to data types longer than 1 byte, data
195 will be little_endian and will potentially need to
196 be swapped at the app level */
199 free_page((unsigned long) buffer
);
202 case RIO_SEND_COMMAND
:
203 data
= (void __user
*) arg
;
206 if (copy_from_user(&rio_cmd
, data
, sizeof(struct RioCommand
))) {
210 if (rio_cmd
.length
< 0 || rio_cmd
.length
> PAGE_SIZE
) {
214 buffer
= (unsigned char *) __get_free_page(GFP_KERNEL
);
215 if (buffer
== NULL
) {
219 if (copy_from_user(buffer
, rio_cmd
.buffer
, rio_cmd
.length
)) {
220 free_page((unsigned long)buffer
);
225 requesttype
= rio_cmd
.requesttype
| USB_DIR_OUT
|
226 USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
227 dev_dbg(&rio
->rio_dev
->dev
,
228 "sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
229 requesttype
, rio_cmd
.request
, rio_cmd
.value
,
230 rio_cmd
.index
, rio_cmd
.length
);
231 /* Send rio control message */
234 result
= usb_control_msg(rio
->rio_dev
,
235 usb_sndctrlpipe(rio
-> rio_dev
, 0),
239 rio_cmd
.index
, buffer
,
241 jiffies_to_msecs(rio_cmd
.timeout
));
242 if (result
== -ETIMEDOUT
)
244 else if (result
< 0) {
245 dev_err(&rio
->rio_dev
->dev
,
246 "Error executing ioctrl. code = %d\n",
250 dev_dbg(&rio
->rio_dev
->dev
,
251 "Executed ioctl. Result = %d\n", result
);
257 free_page((unsigned long) buffer
);
267 mutex_unlock(&(rio
->lock
));
272 write_rio(struct file
*file
, const char __user
*buffer
,
273 size_t count
, loff_t
* ppos
)
276 struct rio_usb_data
*rio
= &rio_instance
;
278 unsigned long copy_size
;
279 unsigned long bytes_written
= 0;
280 unsigned int partial
;
287 intr
= mutex_lock_interruptible(&(rio
->lock
));
290 /* Sanity check to make sure rio is connected, powered, etc */
291 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
292 mutex_unlock(&(rio
->lock
));
299 unsigned long thistime
;
300 char *obuf
= rio
->obuf
;
302 thistime
= copy_size
=
303 (count
>= OBUF_SIZE
) ? OBUF_SIZE
: count
;
304 if (copy_from_user(rio
->obuf
, buffer
, copy_size
)) {
314 if (signal_pending(current
)) {
315 mutex_unlock(&(rio
->lock
));
316 return bytes_written
? bytes_written
: -EINTR
;
319 result
= usb_bulk_msg(rio
->rio_dev
,
320 usb_sndbulkpipe(rio
->rio_dev
, 2),
321 obuf
, thistime
, &partial
, 5000);
323 dev_dbg(&rio
->rio_dev
->dev
,
324 "write stats: result:%d thistime:%lu partial:%u\n",
325 result
, thistime
, partial
);
327 if (result
== -ETIMEDOUT
) { /* NAK - so hold for a while */
332 prepare_to_wait(&rio
->wait_q
, &wait
, TASK_INTERRUPTIBLE
);
333 schedule_timeout(NAK_TIMEOUT
);
334 finish_wait(&rio
->wait_q
, &wait
);
336 } else if (!result
&& partial
) {
343 dev_err(&rio
->rio_dev
->dev
, "Write Whoops - %x\n",
348 bytes_written
+= copy_size
;
353 mutex_unlock(&(rio
->lock
));
355 return bytes_written
? bytes_written
: -EIO
;
358 mutex_unlock(&(rio
->lock
));
363 read_rio(struct file
*file
, char __user
*buffer
, size_t count
, loff_t
* ppos
)
366 struct rio_usb_data
*rio
= &rio_instance
;
368 unsigned int partial
;
375 intr
= mutex_lock_interruptible(&(rio
->lock
));
378 /* Sanity check to make sure rio is connected, powered, etc */
379 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
380 mutex_unlock(&(rio
->lock
));
390 if (signal_pending(current
)) {
391 mutex_unlock(&(rio
->lock
));
392 return read_count
? read_count
: -EINTR
;
395 mutex_unlock(&(rio
->lock
));
398 this_read
= (count
>= IBUF_SIZE
) ? IBUF_SIZE
: count
;
400 result
= usb_bulk_msg(rio
->rio_dev
,
401 usb_rcvbulkpipe(rio
->rio_dev
, 1),
402 ibuf
, this_read
, &partial
,
405 dev_dbg(&rio
->rio_dev
->dev
,
406 "read stats: result:%d this_read:%u partial:%u\n",
407 result
, this_read
, partial
);
410 count
= this_read
= partial
;
411 } else if (result
== -ETIMEDOUT
|| result
== 15) { /* FIXME: 15 ??? */
413 mutex_unlock(&(rio
->lock
));
414 dev_err(&rio
->rio_dev
->dev
,
415 "read_rio: maxretry timeout\n");
418 prepare_to_wait(&rio
->wait_q
, &wait
, TASK_INTERRUPTIBLE
);
419 schedule_timeout(NAK_TIMEOUT
);
420 finish_wait(&rio
->wait_q
, &wait
);
422 } else if (result
!= -EREMOTEIO
) {
423 mutex_unlock(&(rio
->lock
));
424 dev_err(&rio
->rio_dev
->dev
,
425 "Read Whoops - result:%u partial:%u this_read:%u\n",
426 result
, partial
, this_read
);
429 mutex_unlock(&(rio
->lock
));
434 if (copy_to_user(buffer
, ibuf
, this_read
)) {
435 mutex_unlock(&(rio
->lock
));
439 read_count
+= this_read
;
443 mutex_unlock(&(rio
->lock
));
447 static const struct file_operations usb_rio_fops
= {
448 .owner
= THIS_MODULE
,
451 .unlocked_ioctl
= ioctl_rio
,
453 .release
= close_rio
,
454 .llseek
= noop_llseek
,
457 static struct usb_class_driver usb_rio_class
= {
459 .fops
= &usb_rio_fops
,
460 .minor_base
= RIO_MINOR
,
463 static int probe_rio(struct usb_interface
*intf
,
464 const struct usb_device_id
*id
)
466 struct usb_device
*dev
= interface_to_usbdev(intf
);
467 struct rio_usb_data
*rio
= &rio_instance
;
470 dev_info(&intf
->dev
, "USB Rio found at address %d\n", dev
->devnum
);
472 retval
= usb_register_dev(intf
, &usb_rio_class
);
475 "Not able to get a minor for this device.\n");
481 if (!(rio
->obuf
= kmalloc(OBUF_SIZE
, GFP_KERNEL
))) {
483 "probe_rio: Not enough memory for the output buffer\n");
484 usb_deregister_dev(intf
, &usb_rio_class
);
487 dev_dbg(&intf
->dev
, "obuf address:%p\n", rio
->obuf
);
489 if (!(rio
->ibuf
= kmalloc(IBUF_SIZE
, GFP_KERNEL
))) {
491 "probe_rio: Not enough memory for the input buffer\n");
492 usb_deregister_dev(intf
, &usb_rio_class
);
496 dev_dbg(&intf
->dev
, "ibuf address:%p\n", rio
->ibuf
);
498 mutex_init(&(rio
->lock
));
500 usb_set_intfdata (intf
, rio
);
506 static void disconnect_rio(struct usb_interface
*intf
)
508 struct rio_usb_data
*rio
= usb_get_intfdata (intf
);
510 usb_set_intfdata (intf
, NULL
);
511 mutex_lock(&rio500_mutex
);
513 usb_deregister_dev(intf
, &usb_rio_class
);
515 mutex_lock(&(rio
->lock
));
518 /* better let it finish - the release will do whats needed */
520 mutex_unlock(&(rio
->lock
));
521 mutex_unlock(&rio500_mutex
);
527 dev_info(&intf
->dev
, "USB Rio disconnected.\n");
530 mutex_unlock(&(rio
->lock
));
532 mutex_unlock(&rio500_mutex
);
535 static const struct usb_device_id rio_table
[] = {
536 { USB_DEVICE(0x0841, 1) }, /* Rio 500 */
537 { } /* Terminating entry */
540 MODULE_DEVICE_TABLE (usb
, rio_table
);
542 static struct usb_driver rio_driver
= {
545 .disconnect
= disconnect_rio
,
546 .id_table
= rio_table
,
549 module_usb_driver(rio_driver
);
551 MODULE_AUTHOR( DRIVER_AUTHOR
);
552 MODULE_DESCRIPTION( DRIVER_DESC
);
553 MODULE_LICENSE("GPL");