Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 364659
b: refs/heads/master
c: 792bfcf
h: refs/heads/master
i:
  364657: b7b85fa
  364655: 77ea515
v: v3
  • Loading branch information
Felipe Balbi committed Mar 18, 2013
1 parent b480a26 commit c905e48
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8707d5abbd96f7a124647357005511bee8d3ccdd
refs/heads/master: 792bfcf7a1cd7913fa5d55f2b3a40e3275e98f6f
39 changes: 34 additions & 5 deletions trunk/drivers/usb/gadget/udc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,15 +166,23 @@ static void usb_udc_release(struct device *dev)
}

static const struct attribute_group *usb_udc_attr_groups[];

static void usb_udc_nop_release(struct device *dev)
{
dev_vdbg(dev, "%s\n", __func__);
}

/**
* usb_add_gadget_udc - adds a new gadget to the udc class driver list
* @parent: the parent device to this udc. Usually the controller
* driver's device.
* @gadget: the gadget to be added to the list
* usb_add_gadget_udc_release - adds a new gadget to the udc class driver list
* @parent: the parent device to this udc. Usually the controller driver's
* device.
* @gadget: the gadget to be added to the list.
* @release: a gadget release function.
*
* Returns zero on success, negative errno otherwise.
*/
int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
void (*release)(struct device *dev))
{
struct usb_udc *udc;
int ret = -ENOMEM;
Expand All @@ -190,6 +198,13 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
gadget->dev.dma_parms = parent->dma_parms;
gadget->dev.dma_mask = parent->dma_mask;

if (release) {
gadget->dev.release = release;
} else {
if (!gadget->dev.release)
gadget->dev.release = usb_udc_nop_release;
}

ret = device_register(&gadget->dev);
if (ret)
goto err2;
Expand Down Expand Up @@ -231,6 +246,20 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
err1:
return ret;
}
EXPORT_SYMBOL_GPL(usb_add_gadget_udc_release);

/**
* usb_add_gadget_udc - adds a new gadget to the udc class driver list
* @parent: the parent device to this udc. Usually the controller
* driver's device.
* @gadget: the gadget to be added to the list
*
* Returns zero on success, negative errno otherwise.
*/
int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
{
return usb_add_gadget_udc_release(parent, gadget, NULL);
}
EXPORT_SYMBOL_GPL(usb_add_gadget_udc);

static void usb_gadget_remove_driver(struct usb_udc *udc)
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/usb/gadget.h
Original file line number Diff line number Diff line change
Expand Up @@ -874,6 +874,8 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver);
*/
int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);

extern int usb_add_gadget_udc_release(struct device *parent,
struct usb_gadget *gadget, void (*release)(struct device *dev));
extern int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
extern void usb_del_gadget_udc(struct usb_gadget *gadget);
extern int udc_attach_driver(const char *name,
Expand Down

0 comments on commit c905e48

Please sign in to comment.