diff options
| author | Dmitry Torokhov <dtor@insightbb.com> | 2006-11-04 22:42:39 -0500 | 
|---|---|---|
| committer | Dmitry Torokhov <dtor@insightbb.com> | 2006-11-04 22:42:39 -0500 | 
| commit | 752c58a471c108d64da1676b2925dfbd83eb177e (patch) | |
| tree | fbffa0d7c54cd812950dffc16d642c9d449f4faf /drivers/usb/core | |
| parent | e52b29c2a637f6854d71a45646d7283d984a6dad (diff) | |
| parent | 10b1fbdb0a0ca91847a534ad26d0bc250c25b74f (diff) | |
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/usb/core')
| -rw-r--r-- | drivers/usb/core/devio.c | 8 | ||||
| -rw-r--r-- | drivers/usb/core/endpoint.c | 22 | ||||
| -rw-r--r-- | drivers/usb/core/hub.c | 3 | 
3 files changed, 16 insertions, 17 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 724822cac2b..fed92be63b5 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -1588,15 +1588,18 @@ const struct file_operations usbfs_device_file_operations = {  	.release =	usbdev_release,  }; -static void usbdev_add(struct usb_device *dev) +static int usbdev_add(struct usb_device *dev)  {  	int minor = ((dev->bus->busnum-1) * 128) + (dev->devnum-1);  	dev->class_dev = class_device_create(usb_device_class, NULL,  				MKDEV(USB_DEVICE_MAJOR, minor), &dev->dev,  				"usbdev%d.%d", dev->bus->busnum, dev->devnum); +	if (IS_ERR(dev->class_dev)) +		return PTR_ERR(dev->class_dev);  	dev->class_dev->class_data = dev; +	return 0;  }  static void usbdev_remove(struct usb_device *dev) @@ -1609,7 +1612,8 @@ static int usbdev_notify(struct notifier_block *self, unsigned long action,  {  	switch (action) {  	case USB_DEVICE_ADD: -		usbdev_add(dev); +		if (usbdev_add(dev)) +			return NOTIFY_BAD;  		break;  	case USB_DEVICE_REMOVE:  		usbdev_remove(dev); diff --git a/drivers/usb/core/endpoint.c b/drivers/usb/core/endpoint.c index 3ebb90149e9..3b2d137912b 100644 --- a/drivers/usb/core/endpoint.c +++ b/drivers/usb/core/endpoint.c @@ -223,7 +223,7 @@ int usb_create_ep_files(struct device *parent,  	ep_dev = kzalloc(sizeof(*ep_dev), GFP_KERNEL);  	if (!ep_dev) {  		retval = -ENOMEM; -		goto exit; +		goto error_alloc;  	}  	/* fun calculation to determine the minor of this endpoint */ @@ -241,33 +241,31 @@ int usb_create_ep_files(struct device *parent,  	retval = device_register(&ep_dev->dev);  	if (retval) -		goto error; +		goto error_register;  	retval = sysfs_create_group(&ep_dev->dev.kobj, &ep_dev_attr_grp);  	if (retval)  		goto error_group; -	endpoint->ep_dev = ep_dev; -  	/* create the symlink to the old-style "ep_XX" directory */  	sprintf(name, "ep_%02x", endpoint->desc.bEndpointAddress); -	retval = sysfs_create_link(&parent->kobj, -				   &endpoint->ep_dev->dev.kobj, name); +	retval = sysfs_create_link(&parent->kobj, &ep_dev->dev.kobj, name);  	if (retval)  		goto error_link; -exit: +	endpoint->ep_dev = ep_dev;  	return retval;  error_link:  	sysfs_remove_group(&ep_dev->dev.kobj, &ep_dev_attr_grp); -  error_group:  	device_unregister(&ep_dev->dev); -	endpoint->ep_dev = NULL;  	destroy_endpoint_class();  	return retval; -error: + +error_register:  	kfree(ep_dev); +error_alloc:  	destroy_endpoint_class(); +exit:  	return retval;  } @@ -282,8 +280,6 @@ void usb_remove_ep_files(struct usb_host_endpoint *endpoint)  		sysfs_remove_group(&endpoint->ep_dev->dev.kobj, &ep_dev_attr_grp);  		device_unregister(&endpoint->ep_dev->dev);  		endpoint->ep_dev = NULL; +		destroy_endpoint_class();  	} -	destroy_endpoint_class();  } - - diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 66bff184a30..ba165aff9ea 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -1188,6 +1188,7 @@ static inline void show_string(struct usb_device *udev, char *id, char *string)  #ifdef	CONFIG_USB_OTG  #include "otg_whitelist.h" +static int __usb_port_suspend(struct usb_device *, int port1);  #endif  /** @@ -1289,8 +1290,6 @@ int usb_new_device(struct usb_device *udev)  		 * (Includes HNP test device.)  		 */  		if (udev->bus->b_hnp_enable || udev->bus->is_b_host) { -			static int __usb_port_suspend(struct usb_device *, -						int port1);  			err = __usb_port_suspend(udev, udev->bus->otg_port);  			if (err < 0)  				dev_dbg(&udev->dev, "HNP fail, %d\n", err);  | 
