[PATCH v4 17/43] usb: gadget: composite: add usb_get_interface_id() function

From: Robert Baldyga
Date: Wed Feb 03 2016 - 07:52:22 EST


Introduce function returning id of interface at given index in function.
The id value is equal bInterfaceNumber field in interface descriptor.
This value can be useful during preparation of class or vendor specific
descriptors in prep_vendor_descs() callback. It can be also necessary
to handle some class or vendor specific setup requests.

Signed-off-by: Robert Baldyga <r.baldyga@xxxxxxxxxxx>
---
drivers/usb/gadget/composite.c | 19 +++++++++++++++++++
include/linux/usb/composite.h | 2 ++
2 files changed, 21 insertions(+)

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 452294e..7e3721d 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -670,6 +670,25 @@ static int usb_interface_id_to_index(struct usb_function *f, u8 id)
}

/**
+ * usb_get_interface_id - get id number of interface at given index in
+ * USB function
+ * @f: USB function
+ * @i: index of interface in function
+ *
+ * Returns interface id on success, else negative errno.
+ */
+int usb_get_interface_id(struct usb_function *f, int i)
+{
+ if (!f->descs)
+ return -ENODEV;
+ if (f->descs->intfs_num <= i)
+ return -ENODEV;
+
+ return f->descs->intfs[i]->id;
+}
+EXPORT_SYMBOL_GPL(usb_get_interface_id);
+
+/**
* usb_function_get_ep - obtains endpoint of given index from active
* altsetting of given interface
* @f: USB function
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 2e646e3..b2fb260 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -425,6 +425,8 @@ int usb_ep_add_vendor_desc(struct usb_function *f, int i, int a, int e,
const struct usb_descriptor_header *desc);


+int usb_get_interface_id(struct usb_function *f, int i);
+
struct usb_ep *usb_function_get_ep(struct usb_function *f, int intf, int ep);

int usb_interface_id(struct usb_configuration *, struct usb_function *);
--
1.9.1