mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	USB: remove CONFIG_USB_DEVICE_CLASS
This option has been deprecated for many years now, and no userspace tools use it anymore, so it should be safe to finally remove it. Reported-by: Kay Sievers <kay@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									fb28d58b72
								
							
						
					
					
						commit
						007bab9132
					
				
					 3 changed files with 0 additions and 75 deletions
				
			
		| 
						 | 
					@ -27,29 +27,6 @@ config USB_ANNOUNCE_NEW_DEVICES
 | 
				
			||||||
comment "Miscellaneous USB options"
 | 
					comment "Miscellaneous USB options"
 | 
				
			||||||
	depends on USB
 | 
						depends on USB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config USB_DEVICE_CLASS
 | 
					 | 
				
			||||||
	bool "USB device class-devices (DEPRECATED)"
 | 
					 | 
				
			||||||
	depends on USB
 | 
					 | 
				
			||||||
	default y
 | 
					 | 
				
			||||||
	---help---
 | 
					 | 
				
			||||||
	  Userspace access to USB devices is granted by device-nodes exported
 | 
					 | 
				
			||||||
	  directly from the usbdev in sysfs. Old versions of the driver
 | 
					 | 
				
			||||||
	  core and udev needed additional class devices to export device nodes.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	  These additional devices are difficult to handle in userspace, if
 | 
					 | 
				
			||||||
	  information about USB interfaces must be available. One device
 | 
					 | 
				
			||||||
	  contains the device node, the other device contains the interface
 | 
					 | 
				
			||||||
	  data. Both devices are at the same level in sysfs (siblings) and one
 | 
					 | 
				
			||||||
	  can't access the other. The device node created directly by the
 | 
					 | 
				
			||||||
	  usb device is the parent device of the interface and therefore
 | 
					 | 
				
			||||||
	  easily accessible from the interface event.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	  This option provides backward compatibility for libusb device
 | 
					 | 
				
			||||||
	  nodes (lsusb) when usbfs is not used, and the following udev rule
 | 
					 | 
				
			||||||
	  doesn't exist:
 | 
					 | 
				
			||||||
	    SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", \
 | 
					 | 
				
			||||||
	    NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config USB_DYNAMIC_MINORS
 | 
					config USB_DYNAMIC_MINORS
 | 
				
			||||||
	bool "Dynamic USB minor allocation"
 | 
						bool "Dynamic USB minor allocation"
 | 
				
			||||||
	depends on USB
 | 
						depends on USB
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2051,44 +2051,13 @@ static void usbdev_remove(struct usb_device *udev)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_USB_DEVICE_CLASS
 | 
					 | 
				
			||||||
static struct class *usb_classdev_class;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int usb_classdev_add(struct usb_device *dev)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct device *cldev;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cldev = device_create(usb_classdev_class, &dev->dev, dev->dev.devt,
 | 
					 | 
				
			||||||
			      NULL, "usbdev%d.%d", dev->bus->busnum,
 | 
					 | 
				
			||||||
			      dev->devnum);
 | 
					 | 
				
			||||||
	if (IS_ERR(cldev))
 | 
					 | 
				
			||||||
		return PTR_ERR(cldev);
 | 
					 | 
				
			||||||
	dev->usb_classdev = cldev;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void usb_classdev_remove(struct usb_device *dev)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (dev->usb_classdev)
 | 
					 | 
				
			||||||
		device_unregister(dev->usb_classdev);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define usb_classdev_add(dev)		0
 | 
					 | 
				
			||||||
#define usb_classdev_remove(dev)	do {} while (0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int usbdev_notify(struct notifier_block *self,
 | 
					static int usbdev_notify(struct notifier_block *self,
 | 
				
			||||||
			       unsigned long action, void *dev)
 | 
								       unsigned long action, void *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	switch (action) {
 | 
						switch (action) {
 | 
				
			||||||
	case USB_DEVICE_ADD:
 | 
						case USB_DEVICE_ADD:
 | 
				
			||||||
		if (usb_classdev_add(dev))
 | 
					 | 
				
			||||||
			return NOTIFY_BAD;
 | 
					 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case USB_DEVICE_REMOVE:
 | 
						case USB_DEVICE_REMOVE:
 | 
				
			||||||
		usb_classdev_remove(dev);
 | 
					 | 
				
			||||||
		usbdev_remove(dev);
 | 
							usbdev_remove(dev);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -2118,21 +2087,6 @@ int __init usb_devio_init(void)
 | 
				
			||||||
		       USB_DEVICE_MAJOR);
 | 
							       USB_DEVICE_MAJOR);
 | 
				
			||||||
		goto error_cdev;
 | 
							goto error_cdev;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#ifdef CONFIG_USB_DEVICE_CLASS
 | 
					 | 
				
			||||||
	usb_classdev_class = class_create(THIS_MODULE, "usb_device");
 | 
					 | 
				
			||||||
	if (IS_ERR(usb_classdev_class)) {
 | 
					 | 
				
			||||||
		printk(KERN_ERR "Unable to register usb_device class\n");
 | 
					 | 
				
			||||||
		retval = PTR_ERR(usb_classdev_class);
 | 
					 | 
				
			||||||
		cdev_del(&usb_device_cdev);
 | 
					 | 
				
			||||||
		usb_classdev_class = NULL;
 | 
					 | 
				
			||||||
		goto out;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	/* devices of this class shadow the major:minor of their parent
 | 
					 | 
				
			||||||
	 * device, so clear ->dev_kobj to prevent adding duplicate entries
 | 
					 | 
				
			||||||
	 * to /sys/dev
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	usb_classdev_class->dev_kobj = NULL;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	usb_register_notify(&usbdev_nb);
 | 
						usb_register_notify(&usbdev_nb);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	return retval;
 | 
						return retval;
 | 
				
			||||||
| 
						 | 
					@ -2145,9 +2099,6 @@ int __init usb_devio_init(void)
 | 
				
			||||||
void usb_devio_cleanup(void)
 | 
					void usb_devio_cleanup(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	usb_unregister_notify(&usbdev_nb);
 | 
						usb_unregister_notify(&usbdev_nb);
 | 
				
			||||||
#ifdef CONFIG_USB_DEVICE_CLASS
 | 
					 | 
				
			||||||
	class_destroy(usb_classdev_class);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	cdev_del(&usb_device_cdev);
 | 
						cdev_del(&usb_device_cdev);
 | 
				
			||||||
	unregister_chrdev_region(USB_DEVICE_DEV, USB_DEVICE_MAX);
 | 
						unregister_chrdev_region(USB_DEVICE_DEV, USB_DEVICE_MAX);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -489,9 +489,6 @@ struct usb_device {
 | 
				
			||||||
	char *serial;
 | 
						char *serial;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct list_head filelist;
 | 
						struct list_head filelist;
 | 
				
			||||||
#ifdef CONFIG_USB_DEVICE_CLASS
 | 
					 | 
				
			||||||
	struct device *usb_classdev;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int maxchild;
 | 
						int maxchild;
 | 
				
			||||||
	struct usb_device **children;
 | 
						struct usb_device **children;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue