Merge remote-tracking branch 'usb-gadget/next'
[deliverable/linux.git] / drivers / usb / gadget / function / f_hid.c
index 51980c50546d5b1061eb289b8825604cf8b031bc..e2966f87c860b49e46a7148e51e35a76ca15685c 100644 (file)
@@ -365,7 +365,7 @@ static int f_hidg_open(struct inode *inode, struct file *fd)
 static inline struct usb_request *hidg_alloc_ep_req(struct usb_ep *ep,
                                                    unsigned length)
 {
-       return alloc_ep_req(ep, length, length);
+       return alloc_ep_req(ep, length);
 }
 
 static void hidg_set_report_complete(struct usb_ep *ep, struct usb_request *req)
@@ -617,14 +617,10 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
 
        /* preallocate request and buffer */
        status = -ENOMEM;
-       hidg->req = usb_ep_alloc_request(hidg->in_ep, GFP_KERNEL);
+       hidg->req = alloc_ep_req(hidg->in_ep, hidg->report_length);
        if (!hidg->req)
                goto fail;
 
-       hidg->req->buf = kmalloc(hidg->report_length, GFP_KERNEL);
-       if (!hidg->req->buf)
-               goto fail;
-
        /* set descriptor dynamic values */
        hidg_interface_desc.bInterfaceSubClass = hidg->bInterfaceSubClass;
        hidg_interface_desc.bInterfaceProtocol = hidg->bInterfaceProtocol;
@@ -677,11 +673,8 @@ fail_free_descs:
        usb_free_all_descriptors(f);
 fail:
        ERROR(f->config->cdev, "hidg_bind FAILED\n");
-       if (hidg->req != NULL) {
-               kfree(hidg->req->buf);
-               if (hidg->in_ep != NULL)
-                       usb_ep_free_request(hidg->in_ep, hidg->req);
-       }
+       if (hidg->req != NULL)
+               free_ep_req(hidg->in_ep, hidg->req);
 
        return status;
 }
@@ -809,11 +802,21 @@ end:
 
 CONFIGFS_ATTR(f_hid_opts_, report_desc);
 
+static ssize_t f_hid_opts_dev_show(struct config_item *item, char *page)
+{
+       struct f_hid_opts *opts = to_f_hid_opts(item);
+
+       return sprintf(page, "%d:%d\n", major, opts->minor);
+}
+
+CONFIGFS_ATTR_RO(f_hid_opts_, dev);
+
 static struct configfs_attribute *hid_attrs[] = {
        &f_hid_opts_attr_subclass,
        &f_hid_opts_attr_protocol,
        &f_hid_opts_attr_report_length,
        &f_hid_opts_attr_report_desc,
+       &f_hid_opts_attr_dev,
        NULL,
 };
 
@@ -910,8 +913,7 @@ static void hidg_unbind(struct usb_configuration *c, struct usb_function *f)
 
        /* disable/free request and end point */
        usb_ep_disable(hidg->in_ep);
-       kfree(hidg->req->buf);
-       usb_ep_free_request(hidg->in_ep, hidg->req);
+       free_ep_req(hidg->in_ep, hidg->req);
 
        usb_free_all_descriptors(f);
 }
This page took 0.027799 seconds and 5 git commands to generate.