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/errno.h>
36 #include <linux/random.h>
37 #include <linux/poll.h>
38 #include <linux/init.h>
39 #include <linux/slab.h>
40 #include <linux/spinlock.h>
41 #include <linux/usb.h>
42 #include <linux/smp_lock.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));
98 static int close_rio(struct inode *inode, struct file *file)
100 struct rio_usb_data *rio = &rio_instance;
109 ioctl_rio(struct inode *inode, struct file *file, unsigned int cmd,
112 struct RioCommand rio_cmd;
113 struct rio_usb_data *rio = &rio_instance;
115 unsigned char *buffer;
116 int result, requesttype;
120 mutex_lock(&(rio->lock));
121 /* Sanity check to make sure rio is connected, powered, etc */
124 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;
157 ("sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x",
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 err("Error executing ioctrl. code = %d", result);
177 dbg("Executed ioctl. Result = %d (data=%02x)",
179 if (copy_to_user(rio_cmd.buffer, buffer,
181 free_page((unsigned long) buffer);
188 /* rio_cmd.buffer contains a raw stream of single byte
189 data which has been returned from rio. Data is
190 interpreted at application level. For data that
191 will be cast to data types longer than 1 byte, data
192 will be little_endian and will potentially need to
193 be swapped at the app level */
196 free_page((unsigned long) buffer);
199 case RIO_SEND_COMMAND:
200 data = (void __user *) arg;
203 if (copy_from_user(&rio_cmd, data, sizeof(struct RioCommand))) {
207 if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
211 buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
212 if (buffer == NULL) {
216 if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
217 free_page((unsigned long)buffer);
222 requesttype = rio_cmd.requesttype | USB_DIR_OUT |
223 USB_TYPE_VENDOR | USB_RECIP_DEVICE;
224 dbg("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x",
225 requesttype, rio_cmd.request, rio_cmd.value,
226 rio_cmd.index, rio_cmd.length);
227 /* Send rio control message */
230 result = usb_control_msg(rio->rio_dev,
231 usb_sndctrlpipe(rio-> rio_dev, 0),
235 rio_cmd.index, buffer,
237 jiffies_to_msecs(rio_cmd.timeout));
238 if (result == -ETIMEDOUT)
240 else if (result < 0) {
241 err("Error executing ioctrl. code = %d", result);
244 dbg("Executed ioctl. Result = %d", result);
250 free_page((unsigned long) buffer);
260 mutex_unlock(&(rio->lock));
265 write_rio(struct file *file, const char __user *buffer,
266 size_t count, loff_t * ppos)
269 struct rio_usb_data *rio = &rio_instance;
271 unsigned long copy_size;
272 unsigned long bytes_written = 0;
273 unsigned int partial;
280 intr = mutex_lock_interruptible(&(rio->lock));
283 /* Sanity check to make sure rio is connected, powered, etc */
286 rio->rio_dev == NULL )
288 mutex_unlock(&(rio->lock));
295 unsigned long thistime;
296 char *obuf = rio->obuf;
298 thistime = copy_size =
299 (count >= OBUF_SIZE) ? OBUF_SIZE : count;
300 if (copy_from_user(rio->obuf, buffer, copy_size)) {
310 if (signal_pending(current)) {
311 mutex_unlock(&(rio->lock));
312 return bytes_written ? bytes_written : -EINTR;
315 result = usb_bulk_msg(rio->rio_dev,
316 usb_sndbulkpipe(rio->rio_dev, 2),
317 obuf, thistime, &partial, 5000);
319 dbg("write stats: result:%d thistime:%lu partial:%u",
320 result, thistime, partial);
322 if (result == -ETIMEDOUT) { /* NAK - so hold for a while */
327 prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
328 schedule_timeout(NAK_TIMEOUT);
329 finish_wait(&rio->wait_q, &wait);
331 } else if (!result && partial) {
338 err("Write Whoops - %x", result);
342 bytes_written += copy_size;
347 mutex_unlock(&(rio->lock));
349 return bytes_written ? bytes_written : -EIO;
352 mutex_unlock(&(rio->lock));
357 read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
360 struct rio_usb_data *rio = &rio_instance;
362 unsigned int partial;
369 intr = mutex_lock_interruptible(&(rio->lock));
372 /* Sanity check to make sure rio is connected, powered, etc */
375 rio->rio_dev == NULL )
377 mutex_unlock(&(rio->lock));
387 if (signal_pending(current)) {
388 mutex_unlock(&(rio->lock));
389 return read_count ? read_count : -EINTR;
392 mutex_unlock(&(rio->lock));
395 this_read = (count >= IBUF_SIZE) ? IBUF_SIZE : count;
397 result = usb_bulk_msg(rio->rio_dev,
398 usb_rcvbulkpipe(rio->rio_dev, 1),
399 ibuf, this_read, &partial,
402 dbg("read stats: result:%d this_read:%u partial:%u",
403 result, this_read, partial);
406 count = this_read = partial;
407 } else if (result == -ETIMEDOUT || result == 15) { /* FIXME: 15 ??? */
409 mutex_unlock(&(rio->lock));
410 err("read_rio: maxretry timeout");
413 prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
414 schedule_timeout(NAK_TIMEOUT);
415 finish_wait(&rio->wait_q, &wait);
417 } else if (result != -EREMOTEIO) {
418 mutex_unlock(&(rio->lock));
419 err("Read Whoops - result:%u partial:%u this_read:%u",
420 result, partial, this_read);
423 mutex_unlock(&(rio->lock));
428 if (copy_to_user(buffer, ibuf, this_read)) {
429 mutex_unlock(&(rio->lock));
433 read_count += this_read;
437 mutex_unlock(&(rio->lock));
442 file_operations usb_rio_fops = {
443 .owner = THIS_MODULE,
448 .release = close_rio,
451 static struct usb_class_driver usb_rio_class = {
453 .fops = &usb_rio_fops,
454 .minor_base = RIO_MINOR,
457 static int probe_rio(struct usb_interface *intf,
458 const struct usb_device_id *id)
460 struct usb_device *dev = interface_to_usbdev(intf);
461 struct rio_usb_data *rio = &rio_instance;
464 info("USB Rio found at address %d", dev->devnum);
466 retval = usb_register_dev(intf, &usb_rio_class);
468 err("Not able to get a minor for this device.");
474 if (!(rio->obuf = kmalloc(OBUF_SIZE, GFP_KERNEL))) {
475 err("probe_rio: Not enough memory for the output buffer");
476 usb_deregister_dev(intf, &usb_rio_class);
479 dbg("probe_rio: obuf address:%p", rio->obuf);
481 if (!(rio->ibuf = kmalloc(IBUF_SIZE, GFP_KERNEL))) {
482 err("probe_rio: Not enough memory for the input buffer");
483 usb_deregister_dev(intf, &usb_rio_class);
487 dbg("probe_rio: ibuf address:%p", rio->ibuf);
489 mutex_init(&(rio->lock));
491 usb_set_intfdata (intf, rio);
497 static void disconnect_rio(struct usb_interface *intf)
499 struct rio_usb_data *rio = usb_get_intfdata (intf);
501 usb_set_intfdata (intf, NULL);
503 usb_deregister_dev(intf, &usb_rio_class);
505 mutex_lock(&(rio->lock));
508 /* better let it finish - the release will do whats needed */
510 mutex_unlock(&(rio->lock));
516 info("USB Rio disconnected.");
519 mutex_unlock(&(rio->lock));
523 static struct usb_device_id rio_table [] = {
524 { USB_DEVICE(0x0841, 1) }, /* Rio 500 */
525 { } /* Terminating entry */
528 MODULE_DEVICE_TABLE (usb, rio_table);
530 static struct usb_driver rio_driver = {
533 .disconnect = disconnect_rio,
534 .id_table = rio_table,
537 static int __init usb_rio_init(void)
540 retval = usb_register(&rio_driver);
544 info(DRIVER_VERSION ":" DRIVER_DESC);
551 static void __exit usb_rio_cleanup(void)
553 struct rio_usb_data *rio = &rio_instance;
556 usb_deregister(&rio_driver);
561 module_init(usb_rio_init);
562 module_exit(usb_rio_cleanup);
564 MODULE_AUTHOR( DRIVER_AUTHOR );
565 MODULE_DESCRIPTION( DRIVER_DESC );
566 MODULE_LICENSE("GPL");