diff options
Diffstat (limited to 'drivers/usb/common/common.c')
| -rw-r--r-- | drivers/usb/common/common.c | 25 | 
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c index 50a2362ed3ea..48277bbc15e4 100644 --- a/drivers/usb/common/common.c +++ b/drivers/usb/common/common.c @@ -246,6 +246,31 @@ int of_usb_update_otg_caps(struct device_node *np,  }  EXPORT_SYMBOL_GPL(of_usb_update_otg_caps); +/** + * usb_of_get_companion_dev - Find the companion device + * @dev: the device pointer to find a companion + * + * Find the companion device from platform bus. + * + * Takes a reference to the returned struct device which needs to be dropped + * after use. + * + * Return: On success, a pointer to the companion device, %NULL on failure. + */ +struct device *usb_of_get_companion_dev(struct device *dev) +{ +	struct device_node *node; +	struct platform_device *pdev = NULL; + +	node = of_parse_phandle(dev->of_node, "companion", 0); +	if (node) +		pdev = of_find_device_by_node(node); + +	of_node_put(node); + +	return pdev ? &pdev->dev : NULL; +} +EXPORT_SYMBOL_GPL(usb_of_get_companion_dev);  #endif  MODULE_LICENSE("GPL");  | 
