From 622d3e6b0db6e4c6fc97a7e02627148176674d76 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 30 Mar 2004 22:17:38 -0800 Subject: [PATCH] USB: add usb_get_intf() and usb_put_intf() functions as they will be needed. --- drivers/usb/core/usb.c | 36 +++++++++++++++++++++++++++++++++++- include/linux/usb.h | 3 +++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 11d5c1b94fcea..0da70f7af71da 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -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) { diff --git a/include/linux/usb.h b/include/linux/usb.h index 47a4e5c82af4d..608e3a2973401 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -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 -- 2.53.0