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/slab.h>
40 #include <linux/spinlock.h>
41 #include <linux/usb.h>
42 #include <linux/wait.h>
44 #include "rio500_usb.h"
49 #define DRIVER_VERSION "v1.1"
50 #define DRIVER_AUTHOR "Cesar Miquel <miquel@df.uba.ar>"
51 #define DRIVER_DESC "USB Rio 500 driver"
55 /* stall/wait timeout for rio */
56 #define NAK_TIMEOUT (HZ)
58 #define IBUF_SIZE 0x1000
60 /* Size of the rio buffer */
61 #define OBUF_SIZE 0x10000
64 struct usb_device
*rio_dev
; /* init: probe_rio */
65 unsigned int ifnum
; /* Interface number of the USB device */
66 int isopen
; /* nz if open */
67 int present
; /* Device is present on the bus */
68 char *obuf
, *ibuf
; /* transfer buffers */
69 char bulk_in_ep
, bulk_out_ep
; /* Endpoint assignments */
70 wait_queue_head_t wait_q
; /* for timeouts */
71 struct mutex lock
; /* general race avoidance */
74 static DEFINE_MUTEX(rio500_mutex
);
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 /* against disconnect() */
82 mutex_lock(&rio500_mutex
);
83 mutex_lock(&(rio
->lock
));
85 if (rio
->isopen
|| !rio
->present
) {
86 mutex_unlock(&(rio
->lock
));
87 mutex_unlock(&rio500_mutex
);
92 init_waitqueue_head(&rio
->wait_q
);
94 mutex_unlock(&(rio
->lock
));
96 dev_info(&rio
->rio_dev
->dev
, "Rio opened.\n");
97 mutex_unlock(&rio500_mutex
);
102 static int close_rio(struct inode
*inode
, struct file
*file
)
104 struct rio_usb_data
*rio
= &rio_instance
;
108 dev_info(&rio
->rio_dev
->dev
, "Rio closed.\n");
112 static long ioctl_rio(struct file
*file
, unsigned int cmd
, unsigned long arg
)
114 struct RioCommand rio_cmd
;
115 struct rio_usb_data
*rio
= &rio_instance
;
117 unsigned char *buffer
;
118 int result
, requesttype
;
122 mutex_lock(&(rio
->lock
));
123 /* Sanity check to make sure rio is connected, powered, etc */
124 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
130 case RIO_RECV_COMMAND
:
131 data
= (void __user
*) arg
;
134 if (copy_from_user(&rio_cmd
, data
, sizeof(struct RioCommand
))) {
138 if (rio_cmd
.length
< 0 || rio_cmd
.length
> PAGE_SIZE
) {
142 buffer
= (unsigned char *) __get_free_page(GFP_KERNEL
);
143 if (buffer
== NULL
) {
147 if (copy_from_user(buffer
, rio_cmd
.buffer
, rio_cmd
.length
)) {
149 free_page((unsigned long) buffer
);
153 requesttype
= rio_cmd
.requesttype
| USB_DIR_IN
|
154 USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
155 dev_dbg(&rio
->rio_dev
->dev
,
156 "sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
157 requesttype
, rio_cmd
.request
, rio_cmd
.value
,
158 rio_cmd
.index
, rio_cmd
.length
);
159 /* Send rio control message */
162 result
= usb_control_msg(rio
->rio_dev
,
163 usb_rcvctrlpipe(rio
-> rio_dev
, 0),
167 rio_cmd
.index
, buffer
,
169 jiffies_to_msecs(rio_cmd
.timeout
));
170 if (result
== -ETIMEDOUT
)
172 else if (result
< 0) {
173 dev_err(&rio
->rio_dev
->dev
,
174 "Error executing ioctrl. code = %d\n",
178 dev_dbg(&rio
->rio_dev
->dev
,
179 "Executed ioctl. Result = %d (data=%02x)\n",
181 if (copy_to_user(rio_cmd
.buffer
, buffer
,
183 free_page((unsigned long) buffer
);
190 /* rio_cmd.buffer contains a raw stream of single byte
191 data which has been returned from rio. Data is
192 interpreted at application level. For data that
193 will be cast to data types longer than 1 byte, data
194 will be little_endian and will potentially need to
195 be swapped at the app level */
198 free_page((unsigned long) buffer
);
201 case RIO_SEND_COMMAND
:
202 data
= (void __user
*) arg
;
205 if (copy_from_user(&rio_cmd
, data
, sizeof(struct RioCommand
))) {
209 if (rio_cmd
.length
< 0 || rio_cmd
.length
> PAGE_SIZE
) {
213 buffer
= (unsigned char *) __get_free_page(GFP_KERNEL
);
214 if (buffer
== NULL
) {
218 if (copy_from_user(buffer
, rio_cmd
.buffer
, rio_cmd
.length
)) {
219 free_page((unsigned long)buffer
);
224 requesttype
= rio_cmd
.requesttype
| USB_DIR_OUT
|
225 USB_TYPE_VENDOR
| USB_RECIP_DEVICE
;
226 dev_dbg(&rio
->rio_dev
->dev
,
227 "sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
228 requesttype
, rio_cmd
.request
, rio_cmd
.value
,
229 rio_cmd
.index
, rio_cmd
.length
);
230 /* Send rio control message */
233 result
= usb_control_msg(rio
->rio_dev
,
234 usb_sndctrlpipe(rio
-> rio_dev
, 0),
238 rio_cmd
.index
, buffer
,
240 jiffies_to_msecs(rio_cmd
.timeout
));
241 if (result
== -ETIMEDOUT
)
243 else if (result
< 0) {
244 dev_err(&rio
->rio_dev
->dev
,
245 "Error executing ioctrl. code = %d\n",
249 dev_dbg(&rio
->rio_dev
->dev
,
250 "Executed ioctl. Result = %d\n", result
);
256 free_page((unsigned long) buffer
);
266 mutex_unlock(&(rio
->lock
));
271 write_rio(struct file
*file
, const char __user
*buffer
,
272 size_t count
, loff_t
* ppos
)
275 struct rio_usb_data
*rio
= &rio_instance
;
277 unsigned long copy_size
;
278 unsigned long bytes_written
= 0;
279 unsigned int partial
;
286 intr
= mutex_lock_interruptible(&(rio
->lock
));
289 /* Sanity check to make sure rio is connected, powered, etc */
290 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
291 mutex_unlock(&(rio
->lock
));
298 unsigned long thistime
;
299 char *obuf
= rio
->obuf
;
301 thistime
= copy_size
=
302 (count
>= OBUF_SIZE
) ? OBUF_SIZE
: count
;
303 if (copy_from_user(rio
->obuf
, buffer
, copy_size
)) {
313 if (signal_pending(current
)) {
314 mutex_unlock(&(rio
->lock
));
315 return bytes_written
? bytes_written
: -EINTR
;
318 result
= usb_bulk_msg(rio
->rio_dev
,
319 usb_sndbulkpipe(rio
->rio_dev
, 2),
320 obuf
, thistime
, &partial
, 5000);
322 dev_dbg(&rio
->rio_dev
->dev
,
323 "write stats: result:%d thistime:%lu partial:%u\n",
324 result
, thistime
, partial
);
326 if (result
== -ETIMEDOUT
) { /* NAK - so hold for a while */
331 prepare_to_wait(&rio
->wait_q
, &wait
, TASK_INTERRUPTIBLE
);
332 schedule_timeout(NAK_TIMEOUT
);
333 finish_wait(&rio
->wait_q
, &wait
);
335 } else if (!result
&& partial
) {
342 dev_err(&rio
->rio_dev
->dev
, "Write Whoops - %x\n",
347 bytes_written
+= copy_size
;
352 mutex_unlock(&(rio
->lock
));
354 return bytes_written
? bytes_written
: -EIO
;
357 mutex_unlock(&(rio
->lock
));
362 read_rio(struct file
*file
, char __user
*buffer
, size_t count
, loff_t
* ppos
)
365 struct rio_usb_data
*rio
= &rio_instance
;
367 unsigned int partial
;
374 intr
= mutex_lock_interruptible(&(rio
->lock
));
377 /* Sanity check to make sure rio is connected, powered, etc */
378 if (rio
->present
== 0 || rio
->rio_dev
== NULL
) {
379 mutex_unlock(&(rio
->lock
));
389 if (signal_pending(current
)) {
390 mutex_unlock(&(rio
->lock
));
391 return read_count
? read_count
: -EINTR
;
394 mutex_unlock(&(rio
->lock
));
397 this_read
= (count
>= IBUF_SIZE
) ? IBUF_SIZE
: count
;
399 result
= usb_bulk_msg(rio
->rio_dev
,
400 usb_rcvbulkpipe(rio
->rio_dev
, 1),
401 ibuf
, this_read
, &partial
,
404 dev_dbg(&rio
->rio_dev
->dev
,
405 "read stats: result:%d this_read:%u partial:%u\n",
406 result
, this_read
, partial
);
409 count
= this_read
= partial
;
410 } else if (result
== -ETIMEDOUT
|| result
== 15) { /* FIXME: 15 ??? */
412 mutex_unlock(&(rio
->lock
));
413 dev_err(&rio
->rio_dev
->dev
,
414 "read_rio: maxretry timeout\n");
417 prepare_to_wait(&rio
->wait_q
, &wait
, TASK_INTERRUPTIBLE
);
418 schedule_timeout(NAK_TIMEOUT
);
419 finish_wait(&rio
->wait_q
, &wait
);
421 } else if (result
!= -EREMOTEIO
) {
422 mutex_unlock(&(rio
->lock
));
423 dev_err(&rio
->rio_dev
->dev
,
424 "Read Whoops - result:%u partial:%u this_read:%u\n",
425 result
, partial
, this_read
);
428 mutex_unlock(&(rio
->lock
));
433 if (copy_to_user(buffer
, ibuf
, this_read
)) {
434 mutex_unlock(&(rio
->lock
));
438 read_count
+= this_read
;
442 mutex_unlock(&(rio
->lock
));
446 static const struct file_operations usb_rio_fops
= {
447 .owner
= THIS_MODULE
,
450 .unlocked_ioctl
= ioctl_rio
,
452 .release
= close_rio
,
453 .llseek
= noop_llseek
,
456 static struct usb_class_driver usb_rio_class
= {
458 .fops
= &usb_rio_fops
,
459 .minor_base
= RIO_MINOR
,
462 static int probe_rio(struct usb_interface
*intf
,
463 const struct usb_device_id
*id
)
465 struct usb_device
*dev
= interface_to_usbdev(intf
);
466 struct rio_usb_data
*rio
= &rio_instance
;
469 dev_info(&intf
->dev
, "USB Rio found at address %d\n", dev
->devnum
);
471 retval
= usb_register_dev(intf
, &usb_rio_class
);
474 "Not able to get a minor for this device.\n");
480 if (!(rio
->obuf
= kmalloc(OBUF_SIZE
, GFP_KERNEL
))) {
482 "probe_rio: Not enough memory for the output buffer\n");
483 usb_deregister_dev(intf
, &usb_rio_class
);
486 dev_dbg(&intf
->dev
, "obuf address:%p\n", rio
->obuf
);
488 if (!(rio
->ibuf
= kmalloc(IBUF_SIZE
, GFP_KERNEL
))) {
490 "probe_rio: Not enough memory for the input buffer\n");
491 usb_deregister_dev(intf
, &usb_rio_class
);
495 dev_dbg(&intf
->dev
, "ibuf address:%p\n", rio
->ibuf
);
497 mutex_init(&(rio
->lock
));
499 usb_set_intfdata (intf
, rio
);
505 static void disconnect_rio(struct usb_interface
*intf
)
507 struct rio_usb_data
*rio
= usb_get_intfdata (intf
);
509 usb_set_intfdata (intf
, NULL
);
510 mutex_lock(&rio500_mutex
);
512 usb_deregister_dev(intf
, &usb_rio_class
);
514 mutex_lock(&(rio
->lock
));
517 /* better let it finish - the release will do whats needed */
519 mutex_unlock(&(rio
->lock
));
520 mutex_unlock(&rio500_mutex
);
526 dev_info(&intf
->dev
, "USB Rio disconnected.\n");
529 mutex_unlock(&(rio
->lock
));
531 mutex_unlock(&rio500_mutex
);
534 static const struct usb_device_id rio_table
[] = {
535 { USB_DEVICE(0x0841, 1) }, /* Rio 500 */
536 { } /* Terminating entry */
539 MODULE_DEVICE_TABLE (usb
, rio_table
);
541 static struct usb_driver rio_driver
= {
544 .disconnect
= disconnect_rio
,
545 .id_table
= rio_table
,
548 module_usb_driver(rio_driver
);
550 MODULE_AUTHOR( DRIVER_AUTHOR
);
551 MODULE_DESCRIPTION( DRIVER_DESC
);
552 MODULE_LICENSE("GPL");