Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0873c764 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

USB: convert usb class devices to real devices

parent 7bc3d635
Loading
Loading
Loading
Loading
+6 −7
Original line number Original line Diff line number Diff line
@@ -194,14 +194,13 @@ int usb_register_dev(struct usb_interface *intf,
		++temp;
		++temp;
	else
	else
		temp = name;
		temp = name;
	intf->class_dev = class_device_create(usb_class->class, NULL,
	intf->usb_dev = device_create(usb_class->class, &intf->dev,
					      MKDEV(USB_MAJOR, minor),
				      MKDEV(USB_MAJOR, minor), "%s", temp);
					      &intf->dev, "%s", temp);
	if (IS_ERR(intf->usb_dev)) {
	if (IS_ERR(intf->class_dev)) {
		spin_lock (&minor_lock);
		spin_lock (&minor_lock);
		usb_minors[intf->minor] = NULL;
		usb_minors[intf->minor] = NULL;
		spin_unlock (&minor_lock);
		spin_unlock (&minor_lock);
		retval = PTR_ERR(intf->class_dev);
		retval = PTR_ERR(intf->usb_dev);
	}
	}
exit:
exit:
	return retval;
	return retval;
@@ -242,8 +241,8 @@ void usb_deregister_dev(struct usb_interface *intf,
	spin_unlock (&minor_lock);
	spin_unlock (&minor_lock);


	snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base);
	snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base);
	class_device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor));
	device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor));
	intf->class_dev = NULL;
	intf->usb_dev = NULL;
	intf->minor = -1;
	intf->minor = -1;
	destroy_usb_class();
	destroy_usb_class();
}
}
+3 −2
Original line number Original line Diff line number Diff line
@@ -107,7 +107,8 @@ enum usb_interface_condition {
 * @needs_remote_wakeup: flag set when the driver requires remote-wakeup
 * @needs_remote_wakeup: flag set when the driver requires remote-wakeup
 *	capability during autosuspend.
 *	capability during autosuspend.
 * @dev: driver model's view of this device
 * @dev: driver model's view of this device
 * @class_dev: driver model's class view of this device.
 * @usb_dev: if an interface is bound to the USB major, this will point
 *	to the sysfs representation for that device.
 * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not
 * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not
 *	allowed unless the counter is 0.
 *	allowed unless the counter is 0.
 *
 *
@@ -152,7 +153,7 @@ struct usb_interface {
	unsigned needs_remote_wakeup:1;	/* driver requires remote wakeup */
	unsigned needs_remote_wakeup:1;	/* driver requires remote wakeup */


	struct device dev;		/* interface specific device info */
	struct device dev;		/* interface specific device info */
	struct class_device *class_dev;
	struct device *usb_dev;		/* pointer to the usb class's device, if any */
	int pm_usage_cnt;		/* usage counter for autosuspend */
	int pm_usage_cnt;		/* usage counter for autosuspend */
};
};
#define	to_usb_interface(d) container_of(d, struct usb_interface, dev)
#define	to_usb_interface(d) container_of(d, struct usb_interface, dev)