|
@@ -1555,6 +1555,44 @@ static void usb_release_interface(struct device *dev)
|
|
|
kfree(intf);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * usb_deauthorize_interface - deauthorize an USB interface
|
|
|
+ *
|
|
|
+ * @intf: USB interface structure
|
|
|
+ */
|
|
|
+void usb_deauthorize_interface(struct usb_interface *intf)
|
|
|
+{
|
|
|
+ struct device *dev = &intf->dev;
|
|
|
+
|
|
|
+ device_lock(dev->parent);
|
|
|
+
|
|
|
+ if (intf->authorized) {
|
|
|
+ device_lock(dev);
|
|
|
+ intf->authorized = 0;
|
|
|
+ device_unlock(dev);
|
|
|
+
|
|
|
+ usb_forced_unbind_intf(intf);
|
|
|
+ }
|
|
|
+
|
|
|
+ device_unlock(dev->parent);
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * usb_authorize_interface - authorize an USB interface
|
|
|
+ *
|
|
|
+ * @intf: USB interface structure
|
|
|
+ */
|
|
|
+void usb_authorize_interface(struct usb_interface *intf)
|
|
|
+{
|
|
|
+ struct device *dev = &intf->dev;
|
|
|
+
|
|
|
+ if (!intf->authorized) {
|
|
|
+ device_lock(dev);
|
|
|
+ intf->authorized = 1; /* authorize interface */
|
|
|
+ device_unlock(dev);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
|
|
|
{
|
|
|
struct usb_device *usb_dev;
|