diff options
Diffstat (limited to 'drivers/usb/misc/adutux.c')
| -rw-r--r-- | drivers/usb/misc/adutux.c | 295 | 
1 files changed, 105 insertions, 190 deletions
diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c index 44f8b922505..493c7f268b6 100644 --- a/drivers/usb/misc/adutux.c +++ b/drivers/usb/misc/adutux.c @@ -18,39 +18,21 @@   *   */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/kernel.h>  #include <linux/errno.h> -#include <linux/init.h>  #include <linux/slab.h>  #include <linux/module.h>  #include <linux/usb.h>  #include <linux/mutex.h> -#include <asm/uaccess.h> - -#ifdef CONFIG_USB_DEBUG -static int debug = 5; -#else -static int debug = 1; -#endif - -/* Use our own dbg macro */ -#undef dbg -#define dbg(lvl, format, arg...) 					\ -do { 									\ -	if (debug >= lvl)						\ -		printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg);	\ -} while (0) - +#include <linux/uaccess.h>  /* Version Information */  #define DRIVER_VERSION "v0.0.13"  #define DRIVER_AUTHOR "John Homppi"  #define DRIVER_DESC "adutux (see www.ontrak.net)" -/* Module parameters */ -module_param(debug, int, S_IRUGO | S_IWUSR); -MODULE_PARM_DESC(debug, "Debug enabled or not"); -  /* Define these values to match your device */  #define ADU_VENDOR_ID 0x0a07  #define ADU_PRODUCT_ID 0x0064 @@ -58,12 +40,12 @@ MODULE_PARM_DESC(debug, "Debug enabled or not");  /* table of devices that work with this driver */  static const struct usb_device_id device_table[] = {  	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID) },		/* ADU100 */ -	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+20) }, 	/* ADU120 */ -	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+30) }, 	/* ADU130 */ +	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+20) },	/* ADU120 */ +	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+30) },	/* ADU130 */  	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+100) },	/* ADU200 */  	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+108) },	/* ADU208 */  	{ USB_DEVICE(ADU_VENDOR_ID, ADU_PRODUCT_ID+118) },	/* ADU218 */ -	{ }/* Terminating entry */ +	{ } /* Terminating entry */  };  MODULE_DEVICE_TABLE(usb, device_table); @@ -92,16 +74,16 @@ MODULE_DEVICE_TABLE(usb, device_table);  /* Structure to hold all of our device specific stuff */  struct adu_device {  	struct mutex		mtx; -	struct usb_device*	udev; /* save off the usb device pointer */ -	struct usb_interface*	interface; +	struct usb_device *udev; /* save off the usb device pointer */ +	struct usb_interface *interface;  	unsigned int		minor; /* the starting minor number for this device */  	char			serial_number[8];  	int			open_count; /* number of times this port has been opened */ -	char*			read_buffer_primary; +	char		*read_buffer_primary;  	int			read_buffer_length; -	char*			read_buffer_secondary; +	char		*read_buffer_secondary;  	int			secondary_head;  	int			secondary_tail;  	spinlock_t		buflock; @@ -109,14 +91,14 @@ struct adu_device {  	wait_queue_head_t	read_wait;  	wait_queue_head_t	write_wait; -	char*			interrupt_in_buffer; -	struct usb_endpoint_descriptor* interrupt_in_endpoint; -	struct urb*		interrupt_in_urb; +	char		*interrupt_in_buffer; +	struct usb_endpoint_descriptor *interrupt_in_endpoint; +	struct urb	*interrupt_in_urb;  	int			read_urb_finished; -	char*			interrupt_out_buffer; -	struct usb_endpoint_descriptor* interrupt_out_endpoint; -	struct urb*		interrupt_out_urb; +	char		*interrupt_out_buffer; +	struct usb_endpoint_descriptor *interrupt_out_endpoint; +	struct urb	*interrupt_out_urb;  	int			out_urb_finished;  }; @@ -124,19 +106,11 @@ static DEFINE_MUTEX(adutux_mutex);  static struct usb_driver adu_driver; -static void adu_debug_data(int level, const char *function, int size, -			   const unsigned char *data) +static inline void adu_debug_data(struct device *dev, const char *function, +				  int size, const unsigned char *data)  { -	int i; - -	if (debug < level) -		return; - -	printk(KERN_DEBUG "%s: %s - length = %d, data = ", -	       __FILE__, function, size); -	for (i = 0; i < size; ++i) -		printk("%.2x ", data[i]); -	printk("\n"); +	dev_dbg(dev, "%s - length = %d, data = %*ph\n", +		function, size, size, data);  }  /** @@ -147,12 +121,8 @@ static void adu_abort_transfers(struct adu_device *dev)  {  	unsigned long flags; -	dbg(2," %s : enter", __func__); - -	if (dev->udev == NULL) { -		dbg(1," %s : udev is null", __func__); -		goto exit; -	} +	if (dev->udev == NULL) +		return;  	/* shutdown transfer */ @@ -170,15 +140,10 @@ static void adu_abort_transfers(struct adu_device *dev)  		usb_kill_urb(dev->interrupt_out_urb);  	} else  		spin_unlock_irqrestore(&dev->buflock, flags); - -exit: -	dbg(2," %s : leave", __func__);  }  static void adu_delete(struct adu_device *dev)  { -	dbg(2, "%s enter", __func__); -  	/* free data structures */  	usb_free_urb(dev->interrupt_in_urb);  	usb_free_urb(dev->interrupt_out_urb); @@ -187,8 +152,6 @@ static void adu_delete(struct adu_device *dev)  	kfree(dev->interrupt_in_buffer);  	kfree(dev->interrupt_out_buffer);  	kfree(dev); - -	dbg(2, "%s : leave", __func__);  }  static void adu_interrupt_in_callback(struct urb *urb) @@ -196,34 +159,35 @@ static void adu_interrupt_in_callback(struct urb *urb)  	struct adu_device *dev = urb->context;  	int status = urb->status; -	dbg(4," %s : enter, status %d", __func__, status); -	adu_debug_data(5, __func__, urb->actual_length, -		       urb->transfer_buffer); +	adu_debug_data(&dev->udev->dev, __func__, +		       urb->actual_length, urb->transfer_buffer);  	spin_lock(&dev->buflock);  	if (status != 0) {  		if ((status != -ENOENT) && (status != -ECONNRESET) &&  			(status != -ESHUTDOWN)) { -			dbg(1," %s : nonzero status received: %d", -			    __func__, status); +			dev_dbg(&dev->udev->dev, +				"%s : nonzero status received: %d\n", +				__func__, status);  		}  		goto exit;  	}  	if (urb->actual_length > 0 && dev->interrupt_in_buffer[0] != 0x00) {  		if (dev->read_buffer_length < -		    (4 * le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize)) - +		    (4 * usb_endpoint_maxp(dev->interrupt_in_endpoint)) -  		     (urb->actual_length)) {  			memcpy (dev->read_buffer_primary +  				dev->read_buffer_length,  				dev->interrupt_in_buffer, urb->actual_length);  			dev->read_buffer_length += urb->actual_length; -			dbg(2," %s reading  %d ", __func__, -			    urb->actual_length); +			dev_dbg(&dev->udev->dev,"%s reading  %d\n", __func__, +				urb->actual_length);  		} else { -			dbg(1," %s : read_buffer overflow", __func__); +			dev_dbg(&dev->udev->dev,"%s : read_buffer overflow\n", +				__func__);  		}  	} @@ -232,9 +196,6 @@ exit:  	spin_unlock(&dev->buflock);  	/* always wake up so we recover from errors */  	wake_up_interruptible(&dev->read_wait); -	adu_debug_data(5, __func__, urb->actual_length, -		       urb->transfer_buffer); -	dbg(4," %s : leave, status %d", __func__, status);  }  static void adu_interrupt_out_callback(struct urb *urb) @@ -242,27 +203,23 @@ static void adu_interrupt_out_callback(struct urb *urb)  	struct adu_device *dev = urb->context;  	int status = urb->status; -	dbg(4," %s : enter, status %d", __func__, status); -	adu_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer); +	adu_debug_data(&dev->udev->dev, __func__, +		       urb->actual_length, urb->transfer_buffer);  	if (status != 0) {  		if ((status != -ENOENT) &&  		    (status != -ECONNRESET)) { -			dbg(1, " %s :nonzero status received: %d", -			    __func__, status); +			dev_dbg(&dev->udev->dev, +				"%s :nonzero status received: %d\n", __func__, +				status);  		} -		goto exit; +		return;  	}  	spin_lock(&dev->buflock);  	dev->out_urb_finished = 1;  	wake_up(&dev->write_wait);  	spin_unlock(&dev->buflock); -exit: - -	adu_debug_data(5, __func__, urb->actual_length, -		       urb->transfer_buffer); -	dbg(4," %s : leave, status %d", __func__, status);  }  static int adu_open(struct inode *inode, struct file *file) @@ -272,19 +229,16 @@ static int adu_open(struct inode *inode, struct file *file)  	int subminor;  	int retval; -	dbg(2,"%s : enter", __func__); -  	subminor = iminor(inode); -	if ((retval = mutex_lock_interruptible(&adutux_mutex))) { -		dbg(2, "%s : mutex lock failed", __func__); +	retval = mutex_lock_interruptible(&adutux_mutex); +	if (retval)  		goto exit_no_lock; -	}  	interface = usb_find_interface(&adu_driver, subminor);  	if (!interface) { -		printk(KERN_ERR "adutux: %s - error, can't find device for " -		       "minor %d\n", __func__, subminor); +		pr_err("%s - error, can't find device for minor %d\n", +		       __func__, subminor);  		retval = -ENODEV;  		goto exit_no_device;  	} @@ -302,7 +256,8 @@ static int adu_open(struct inode *inode, struct file *file)  	}  	++dev->open_count; -	dbg(2,"%s : open count %d", __func__, dev->open_count); +	dev_dbg(&dev->udev->dev, "%s: open count %d\n", __func__, +		dev->open_count);  	/* save device in the file's private structure */  	file->private_data = dev; @@ -311,11 +266,11 @@ static int adu_open(struct inode *inode, struct file *file)  	dev->read_buffer_length = 0;  	/* fixup first read by having urb waiting for it */ -	usb_fill_int_urb(dev->interrupt_in_urb,dev->udev, +	usb_fill_int_urb(dev->interrupt_in_urb, dev->udev,  			 usb_rcvintpipe(dev->udev,  					dev->interrupt_in_endpoint->bEndpointAddress),  			 dev->interrupt_in_buffer, -			 le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize), +			 usb_endpoint_maxp(dev->interrupt_in_endpoint),  			 adu_interrupt_in_callback, dev,  			 dev->interrupt_in_endpoint->bInterval);  	dev->read_urb_finished = 0; @@ -332,23 +287,19 @@ static int adu_open(struct inode *inode, struct file *file)  exit_no_device:  	mutex_unlock(&adutux_mutex);  exit_no_lock: -	dbg(2,"%s : leave, return value %d ", __func__, retval);  	return retval;  }  static void adu_release_internal(struct adu_device *dev)  { -	dbg(2," %s : enter", __func__); -  	/* decrement our usage count for the device */  	--dev->open_count; -	dbg(2," %s : open count %d", __func__, dev->open_count); +	dev_dbg(&dev->udev->dev, "%s : open count %d\n", __func__, +		dev->open_count);  	if (dev->open_count <= 0) {  		adu_abort_transfers(dev);  		dev->open_count = 0;  	} - -	dbg(2," %s : leave", __func__);  }  static int adu_release(struct inode *inode, struct file *file) @@ -356,17 +307,13 @@ static int adu_release(struct inode *inode, struct file *file)  	struct adu_device *dev;  	int retval = 0; -	dbg(2," %s : enter", __func__); -  	if (file == NULL) { - 		dbg(1," %s : file is NULL", __func__);  		retval = -ENODEV;  		goto exit;  	}  	dev = file->private_data;  	if (dev == NULL) { - 		dbg(1," %s : object is NULL", __func__);  		retval = -ENODEV;  		goto exit;  	} @@ -374,7 +321,7 @@ static int adu_release(struct inode *inode, struct file *file)  	mutex_lock(&adutux_mutex); /* not interruptible */  	if (dev->open_count <= 0) { -		dbg(1," %s : device not opened", __func__); +		dev_dbg(&dev->udev->dev, "%s : device not opened\n", __func__);  		retval = -ENODEV;  		goto unlock;  	} @@ -388,7 +335,6 @@ static int adu_release(struct inode *inode, struct file *file)  unlock:  	mutex_unlock(&adutux_mutex);  exit: -	dbg(2," %s : leave, return value %d", __func__, retval);  	return retval;  } @@ -405,35 +351,32 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,  	unsigned long flags;  	DECLARE_WAITQUEUE(wait, current); -	dbg(2," %s : enter, count = %Zd, file=%p", __func__, count, file); -  	dev = file->private_data; -	dbg(2," %s : dev=%p", __func__, dev); -  	if (mutex_lock_interruptible(&dev->mtx))  		return -ERESTARTSYS;  	/* verify that the device wasn't unplugged */  	if (dev->udev == NULL) {  		retval = -ENODEV; -		printk(KERN_ERR "adutux: No device or device unplugged %d\n", -		       retval); +		pr_err("No device or device unplugged %d\n", retval);  		goto exit;  	}  	/* verify that some data was requested */  	if (count == 0) { -		dbg(1," %s : read request of 0 bytes", __func__); +		dev_dbg(&dev->udev->dev, "%s : read request of 0 bytes\n", +			__func__);  		goto exit;  	}  	timeout = COMMAND_TIMEOUT; -	dbg(2," %s : about to start looping", __func__); +	dev_dbg(&dev->udev->dev, "%s : about to start looping\n", __func__);  	while (bytes_to_read) {  		int data_in_secondary = dev->secondary_tail - dev->secondary_head; -		dbg(2," %s : while, data_in_secondary=%d, status=%d", -		    __func__, data_in_secondary, -		    dev->interrupt_in_urb->status); +		dev_dbg(&dev->udev->dev, +			"%s : while, data_in_secondary=%d, status=%d\n", +			__func__, data_in_secondary, +			dev->interrupt_in_urb->status);  		if (data_in_secondary) {  			/* drain secondary buffer */ @@ -456,8 +399,9 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,  			if (dev->read_buffer_length) {  				/* we secure access to the primary */  				char *tmp; -				dbg(2," %s : swap, read_buffer_length = %d", -				    __func__, dev->read_buffer_length); +				dev_dbg(&dev->udev->dev, +					"%s : swap, read_buffer_length = %d\n", +					__func__, dev->read_buffer_length);  				tmp = dev->read_buffer_secondary;  				dev->read_buffer_secondary = dev->read_buffer_primary;  				dev->read_buffer_primary = tmp; @@ -472,18 +416,22 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,  				if (!dev->read_urb_finished) {  					/* somebody is doing IO */  					spin_unlock_irqrestore(&dev->buflock, flags); -					dbg(2," %s : submitted already", __func__); +					dev_dbg(&dev->udev->dev, +						"%s : submitted already\n", +						__func__);  				} else {  					/* we must initiate input */ -					dbg(2," %s : initiate input", __func__); +					dev_dbg(&dev->udev->dev, +						"%s : initiate input\n", +						__func__);  					dev->read_urb_finished = 0;  					spin_unlock_irqrestore(&dev->buflock, flags); -					usb_fill_int_urb(dev->interrupt_in_urb,dev->udev, -							 usb_rcvintpipe(dev->udev, -							 		dev->interrupt_in_endpoint->bEndpointAddress), +					usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, +							usb_rcvintpipe(dev->udev, +								dev->interrupt_in_endpoint->bEndpointAddress),  							 dev->interrupt_in_buffer, -							 le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize), +							 usb_endpoint_maxp(dev->interrupt_in_endpoint),  							 adu_interrupt_in_callback,  							 dev,  							 dev->interrupt_in_endpoint->bInterval); @@ -493,7 +441,9 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,  						if (retval == -ENOMEM) {  							retval = bytes_read ? bytes_read : -ENOMEM;  						} -						dbg(2," %s : submit failed", __func__); +						dev_dbg(&dev->udev->dev, +							"%s : submit failed\n", +							__func__);  						goto exit;  					}  				} @@ -512,13 +462,16 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,  				remove_wait_queue(&dev->read_wait, &wait);  				if (timeout <= 0) { -					dbg(2," %s : timeout", __func__); +					dev_dbg(&dev->udev->dev, +						"%s : timeout\n", __func__);  					retval = bytes_read ? bytes_read : -ETIMEDOUT;  					goto exit;  				}  				if (signal_pending(current)) { -					dbg(2," %s : signal pending", __func__); +					dev_dbg(&dev->udev->dev, +						"%s : signal pending\n", +						__func__);  					retval = bytes_read ? bytes_read : -EINTR;  					goto exit;  				} @@ -532,11 +485,11 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,  	if (should_submit && dev->read_urb_finished) {  		dev->read_urb_finished = 0;  		spin_unlock_irqrestore(&dev->buflock, flags); -		usb_fill_int_urb(dev->interrupt_in_urb,dev->udev, +		usb_fill_int_urb(dev->interrupt_in_urb, dev->udev,  				 usb_rcvintpipe(dev->udev, -				 		dev->interrupt_in_endpoint->bEndpointAddress), +					dev->interrupt_in_endpoint->bEndpointAddress),  				dev->interrupt_in_buffer, -				le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize), +				usb_endpoint_maxp(dev->interrupt_in_endpoint),  				adu_interrupt_in_callback,  				dev,  				dev->interrupt_in_endpoint->bInterval); @@ -551,7 +504,6 @@ exit:  	/* unlock the device */  	mutex_unlock(&dev->mtx); -	dbg(2," %s : leave, return value %d", __func__, retval);  	return retval;  } @@ -566,8 +518,6 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,  	unsigned long flags;  	int retval; -	dbg(2," %s : enter, count = %Zd", __func__, count); -  	dev = file->private_data;  	retval = mutex_lock_interruptible(&dev->mtx); @@ -577,14 +527,14 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,  	/* verify that the device wasn't unplugged */  	if (dev->udev == NULL) {  		retval = -ENODEV; -		printk(KERN_ERR "adutux: No device or device unplugged %d\n", -		       retval); +		pr_err("No device or device unplugged %d\n", retval);  		goto exit;  	}  	/* verify that we actually have some data to write */  	if (count == 0) { -		dbg(1," %s : write request of 0 bytes", __func__); +		dev_dbg(&dev->udev->dev, "%s : write request of 0 bytes\n", +			__func__);  		goto exit;  	} @@ -597,13 +547,15 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,  			mutex_unlock(&dev->mtx);  			if (signal_pending(current)) { -				dbg(1," %s : interrupted", __func__); +				dev_dbg(&dev->udev->dev, "%s : interrupted\n", +					__func__);  				set_current_state(TASK_RUNNING);  				retval = -EINTR;  				goto exit_onqueue;  			}  			if (schedule_timeout(COMMAND_TIMEOUT) == 0) { -				dbg(1, "%s - command timed out.", __func__); +				dev_dbg(&dev->udev->dev, +					"%s - command timed out.\n", __func__);  				retval = -ETIMEDOUT;  				goto exit_onqueue;  			} @@ -614,18 +566,22 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,  				goto exit_nolock;  			} -			dbg(4," %s : in progress, count = %Zd", __func__, count); +			dev_dbg(&dev->udev->dev, +				"%s : in progress, count = %Zd\n", +				__func__, count);  		} else {  			spin_unlock_irqrestore(&dev->buflock, flags);  			set_current_state(TASK_RUNNING);  			remove_wait_queue(&dev->write_wait, &waita); -			dbg(4," %s : sending, count = %Zd", __func__, count); +			dev_dbg(&dev->udev->dev, "%s : sending, count = %Zd\n", +				__func__, count);  			/* write the data into interrupt_out_buffer from userspace */ -			buffer_size = le16_to_cpu(dev->interrupt_out_endpoint->wMaxPacketSize); +			buffer_size = usb_endpoint_maxp(dev->interrupt_out_endpoint);  			bytes_to_write = count > buffer_size ? buffer_size : count; -			dbg(4," %s : buffer_size = %Zd, count = %Zd, bytes_to_write = %Zd", -			    __func__, buffer_size, count, bytes_to_write); +			dev_dbg(&dev->udev->dev, +				"%s : buffer_size = %Zd, count = %Zd, bytes_to_write = %Zd\n", +				__func__, buffer_size, count, bytes_to_write);  			if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write) != 0) {  				retval = -EFAULT; @@ -664,7 +620,6 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,  exit:  	mutex_unlock(&dev->mtx);  exit_nolock: -	dbg(2," %s : leave, return value %d", __func__, retval);  	return retval;  exit_onqueue: @@ -710,14 +665,12 @@ static int adu_probe(struct usb_interface *interface,  	int out_end_size;  	int i; -	dbg(2," %s : enter", __func__); -  	if (udev == NULL) {  		dev_err(&interface->dev, "udev is NULL.\n");  		goto exit;  	} -	/* allocate memory for our device state and intialize it */ +	/* allocate memory for our device state and initialize it */  	dev = kzalloc(sizeof(struct adu_device), GFP_KERNEL);  	if (dev == NULL) {  		dev_err(&interface->dev, "Out of memory\n"); @@ -752,8 +705,8 @@ static int adu_probe(struct usb_interface *interface,  		goto error;  	} -	in_end_size = le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize); -	out_end_size = le16_to_cpu(dev->interrupt_out_endpoint->wMaxPacketSize); +	in_end_size = usb_endpoint_maxp(dev->interrupt_in_endpoint); +	out_end_size = usb_endpoint_maxp(dev->interrupt_out_endpoint);  	dev->read_buffer_primary = kmalloc((4 * in_end_size), GFP_KERNEL);  	if (!dev->read_buffer_primary) { @@ -811,7 +764,7 @@ static int adu_probe(struct usb_interface *interface,  		dev_err(&interface->dev, "Could not retrieve serial number\n");  		goto error;  	} -	dbg(2," %s : serial_number=%s", __func__, dev->serial_number); +	dev_dbg(&interface->dev,"serial_number=%s", dev->serial_number);  	/* we can register the device now, as it is ready */  	usb_set_intfdata(interface, dev); @@ -829,11 +782,9 @@ static int adu_probe(struct usb_interface *interface,  	/* let the user know what node this device is now attached to */  	dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n", -		 udev->descriptor.idProduct, dev->serial_number, +		 le16_to_cpu(udev->descriptor.idProduct), dev->serial_number,  		 (dev->minor - ADU_MINOR_BASE));  exit: -	dbg(2," %s : leave, return value %p (dev)", __func__, dev); -  	return retval;  error: @@ -851,8 +802,6 @@ static void adu_disconnect(struct usb_interface *interface)  	struct adu_device *dev;  	int minor; -	dbg(2," %s : enter", __func__); -  	dev = usb_get_intfdata(interface);  	mutex_lock(&dev->mtx);	/* not interruptible */ @@ -865,7 +814,8 @@ static void adu_disconnect(struct usb_interface *interface)  	usb_set_intfdata(interface, NULL);  	/* if the device is not opened, then we clean up right now */ -	dbg(2," %s : open count %d", __func__, dev->open_count); +	dev_dbg(&dev->udev->dev, "%s : open count %d\n", +		__func__, dev->open_count);  	if (!dev->open_count)  		adu_delete(dev); @@ -873,8 +823,6 @@ static void adu_disconnect(struct usb_interface *interface)  	dev_info(&interface->dev, "ADU device adutux%d now disconnected\n",  		 (minor - ADU_MINOR_BASE)); - -	dbg(2," %s : leave", __func__);  }  /* usb specific object needed to register this driver with the usb subsystem */ @@ -885,40 +833,7 @@ static struct usb_driver adu_driver = {  	.id_table = device_table,  }; -static int __init adu_init(void) -{ -	int result; - -	dbg(2," %s : enter", __func__); - -	/* register this driver with the USB subsystem */ -	result = usb_register(&adu_driver); -	if (result < 0) { -		printk(KERN_ERR "usb_register failed for the "__FILE__ -		       " driver. Error number %d\n", result); -		goto exit; -	} - -	printk(KERN_INFO "adutux " DRIVER_DESC " " DRIVER_VERSION "\n"); -	printk(KERN_INFO "adutux is an experimental driver. " -	       "Use at your own risk\n"); - -exit: -	dbg(2," %s : leave, return value %d", __func__, result); - -	return result; -} - -static void __exit adu_exit(void) -{ -	dbg(2," %s : enter", __func__); -	/* deregister this driver with the USB subsystem */ -	usb_deregister(&adu_driver); -	dbg(2," %s : leave", __func__); -} - -module_init(adu_init); -module_exit(adu_exit); +module_usb_driver(adu_driver);  MODULE_AUTHOR(DRIVER_AUTHOR);  MODULE_DESCRIPTION(DRIVER_DESC);  | 
