diff options
| -rw-r--r-- | drivers/hid/usbhid/hiddev.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/dabusb.c | 6 | ||||
| -rw-r--r-- | drivers/usb/class/usblp.c | 6 | ||||
| -rw-r--r-- | drivers/usb/core/file.c | 13 | ||||
| -rw-r--r-- | drivers/usb/core/usb.c | 11 | ||||
| -rw-r--r-- | drivers/usb/misc/iowarrior.c | 6 | ||||
| -rw-r--r-- | drivers/usb/misc/legousbtower.c | 6 | ||||
| -rw-r--r-- | include/linux/usb.h | 3 | 
8 files changed, 56 insertions, 2 deletions
diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c index e9b436d2d94..9e9421525fb 100644 --- a/drivers/hid/usbhid/hiddev.c +++ b/drivers/hid/usbhid/hiddev.c @@ -850,8 +850,14 @@ static const struct file_operations hiddev_fops = {  #endif  }; +static char *hiddev_nodename(struct device *dev) +{ +	return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); +} +  static struct usb_class_driver hiddev_class = {  	.name =		"hiddev%d", +	.nodename =	hiddev_nodename,  	.fops =		&hiddev_fops,  	.minor_base =	HIDDEV_MINOR_BASE,  }; @@ -955,7 +961,6 @@ static int hiddev_usbd_probe(struct usb_interface *intf,  	return -ENODEV;  } -  static /* const */ struct usb_driver hiddev_driver = {  	.name =		"hiddev",  	.probe =	hiddev_usbd_probe, diff --git a/drivers/media/video/dabusb.c b/drivers/media/video/dabusb.c index ba3709bec3f..ec2f45dde16 100644 --- a/drivers/media/video/dabusb.c +++ b/drivers/media/video/dabusb.c @@ -747,8 +747,14 @@ static const struct file_operations dabusb_fops =  	.release =	dabusb_release,  }; +static char *dabusb_nodename(struct device *dev) +{ +	return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); +} +  static struct usb_class_driver dabusb_class = {  	.name =		"dabusb%d", +	.nodename =	dabusb_nodename,  	.fops =		&dabusb_fops,  	.minor_base =	DABUSB_MINOR,  }; diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index d2747a49b97..26c09f0257d 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c @@ -1057,8 +1057,14 @@ static const struct file_operations usblp_fops = {  	.release =	usblp_release,  }; +static char *usblp_nodename(struct device *dev) +{ +	return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); +} +  static struct usb_class_driver usblp_class = {  	.name =		"lp%d", +	.nodename =	usblp_nodename,  	.fops =		&usblp_fops,  	.minor_base =	USBLP_MINOR_BASE,  }; diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c index 997e659ff69..5cef88929b3 100644 --- a/drivers/usb/core/file.c +++ b/drivers/usb/core/file.c @@ -67,6 +67,16 @@ static struct usb_class {  	struct class *class;  } *usb_class; +static char *usb_nodename(struct device *dev) +{ +	struct usb_class_driver *drv; + +	drv = dev_get_drvdata(dev); +	if (!drv || !drv->nodename) +		return NULL; +	return drv->nodename(dev); +} +  static int init_usb_class(void)  {  	int result = 0; @@ -90,6 +100,7 @@ static int init_usb_class(void)  		kfree(usb_class);  		usb_class = NULL;  	} +	usb_class->class->nodename = usb_nodename;  exit:  	return result; @@ -198,7 +209,7 @@ int usb_register_dev(struct usb_interface *intf,  	else  		temp = name;  	intf->usb_dev = device_create(usb_class->class, &intf->dev, -				      MKDEV(USB_MAJOR, minor), NULL, +				      MKDEV(USB_MAJOR, minor), class_driver,  				      "%s", temp);  	if (IS_ERR(intf->usb_dev)) {  		down_write(&minor_rwsem); diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 7eee400d3e3..927a27dd2f8 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -305,10 +305,21 @@ static struct dev_pm_ops usb_device_pm_ops = {  #endif	/* CONFIG_PM */ + +static char *usb_nodename(struct device *dev) +{ +	struct usb_device *usb_dev; + +	usb_dev = to_usb_device(dev); +	return kasprintf(GFP_KERNEL, "bus/usb/%03d/%03d", +			 usb_dev->bus->busnum, usb_dev->devnum); +} +  struct device_type usb_device_type = {  	.name =		"usb_device",  	.release =	usb_release_dev,  	.uevent =	usb_dev_uevent, +	.nodename = 	usb_nodename,  	.pm =		&usb_device_pm_ops,  }; diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c index a4ef77ef917..3c5fe5cee05 100644 --- a/drivers/usb/misc/iowarrior.c +++ b/drivers/usb/misc/iowarrior.c @@ -726,12 +726,18 @@ static const struct file_operations iowarrior_fops = {  	.poll = iowarrior_poll,  }; +static char *iowarrior_nodename(struct device *dev) +{ +	return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); +} +  /*   * usb class driver info in order to get a minor number from the usb core,   * and to have the device registered with devfs and the driver core   */  static struct usb_class_driver iowarrior_class = {  	.name = "iowarrior%d", +	.nodename = iowarrior_nodename,  	.fops = &iowarrior_fops,  	.minor_base = IOWARRIOR_MINOR_BASE,  }; diff --git a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtower.c index ab0f3226158..c1e2433f640 100644 --- a/drivers/usb/misc/legousbtower.c +++ b/drivers/usb/misc/legousbtower.c @@ -266,12 +266,18 @@ static const struct file_operations tower_fops = {  	.llseek =	tower_llseek,  }; +static char *legousbtower_nodename(struct device *dev) +{ +	return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); +} +  /*   * usb class driver info in order to get a minor number from the usb core,   * and to have the device registered with the driver core   */  static struct usb_class_driver tower_class = {  	.name =		"legousbtower%d", +	.nodename = 	legousbtower_nodename,  	.fops =		&tower_fops,  	.minor_base =	LEGO_USB_TOWER_MINOR_BASE,  }; diff --git a/include/linux/usb.h b/include/linux/usb.h index 3aa2cd1f8d0..34cdfcac455 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -869,6 +869,8 @@ struct usb_driver {   * struct usb_device_driver - identifies USB device driver to usbcore   * @name: The driver name should be unique among USB drivers,   *	and should normally be the same as the module name. + * @nodename: Callback to provide a naming hint for a possible + *	device node to create.   * @probe: Called to see if the driver is willing to manage a particular   *	device.  If it is, probe returns zero and uses dev_set_drvdata()   *	to associate driver-specific data with the device.  If unwilling @@ -912,6 +914,7 @@ extern struct bus_type usb_bus_type;   */  struct usb_class_driver {  	char *name; +	char *(*nodename)(struct device *dev);  	const struct file_operations *fops;  	int minor_base;  };  |