]> git.hungrycats.org Git - linux/commitdiff
USB: add usb_get_intf() and usb_put_intf() functions as they will be needed.
authorGreg Kroah-Hartman <greg@kroah.com>
Wed, 31 Mar 2004 06:17:38 +0000 (22:17 -0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Wed, 31 Mar 2004 06:17:38 +0000 (22:17 -0800)
drivers/usb/core/usb.c
include/linux/usb.h

index 11d5c1b94fcea574f4ce8a1164ad4bc2f058d3d2..0da70f7af71daa426746af4fee463a1b7f7cfd18 100644 (file)
@@ -768,7 +768,7 @@ usb_alloc_dev(struct usb_device *parent, struct usb_bus *bus, unsigned port)
  *
  * A pointer to the device with the incremented reference counter is returned.
  */
-struct usb_device *usb_get_dev (struct usb_device *dev)
+struct usb_device *usb_get_dev(struct usb_device *dev)
 {
        if (dev)
                get_device(&dev->dev);
@@ -788,6 +788,40 @@ void usb_put_dev(struct usb_device *dev)
                put_device(&dev->dev);
 }
 
+/**
+ * usb_get_intf - increments the reference count of the usb interface structure
+ * @intf: the interface being referenced
+ *
+ * Each live reference to a interface must be refcounted.
+ *
+ * Drivers for USB interfaces should normally record such references in
+ * their probe() methods, when they bind to an interface, and release
+ * them by calling usb_put_intf(), in their disconnect() methods.
+ *
+ * A pointer to the interface with the incremented reference counter is
+ * returned.
+ */
+struct usb_interface *usb_get_intf(struct usb_interface *intf)
+{
+       if (intf)
+               get_device(&intf->dev);
+       return intf;
+}
+
+/**
+ * usb_put_intf - release a use of the usb interface structure
+ * @intf: interface that's been decremented
+ *
+ * Must be called when a user of an interface is finished with it.  When the
+ * last user of the interface calls this function, the memory of the interface
+ * is freed.
+ */
+void usb_put_intf(struct usb_interface *intf)
+{
+       if (intf)
+               put_device(&intf->dev);
+}
+
 static struct usb_device *match_device(struct usb_device *dev,
                                       u16 vendor_id, u16 product_id)
 {
index 47a4e5c82af4da64ac919af62ab9ec5f7e0d7298..608e3a2973401709dbe662e3e5a882eda412dfd2 100644 (file)
@@ -140,6 +140,9 @@ static inline void usb_set_intfdata (struct usb_interface *intf, void *data)
        dev_set_drvdata(&intf->dev, data);
 }
 
+struct usb_interface *usb_get_intf(struct usb_interface *intf);
+void usb_put_intf(struct usb_interface *intf);
+
 /* this maximum is arbitrary */
 #define USB_MAXINTERFACES      32