Commit 5095cb89 authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Greg Kroah-Hartman

usb: of: add functions to bind a companion controller

EHCI controllers will have a companion controller. However, on platform
bus, there was difficult to bind them in previous code. So, this
patch adds helper functions to bind them using a "companion" property.
Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cfd6ed45
...@@ -22,6 +22,7 @@ Optional properties: ...@@ -22,6 +22,7 @@ Optional properties:
property is used if any real OTG features(HNP/SRP/ADP) property is used if any real OTG features(HNP/SRP/ADP)
is enabled, if ADP is required, otg-rev should be is enabled, if ADP is required, otg-rev should be
0x0200 or above. 0x0200 or above.
- companion: phandle of a companion
- hnp-disable: tells OTG controllers we want to disable OTG HNP, normally HNP - hnp-disable: tells OTG controllers we want to disable OTG HNP, normally HNP
is the basic function of real OTG except you want it is the basic function of real OTG except you want it
to be a srp-capable only B device. to be a srp-capable only B device.
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
*/ */
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/usb/of.h> #include <linux/usb/of.h>
/** /**
...@@ -46,3 +47,25 @@ struct device_node *usb_of_get_child_node(struct device_node *parent, ...@@ -46,3 +47,25 @@ struct device_node *usb_of_get_child_node(struct device_node *parent,
} }
EXPORT_SYMBOL_GPL(usb_of_get_child_node); EXPORT_SYMBOL_GPL(usb_of_get_child_node);
/**
* usb_of_get_companion_dev - Find the companion device
* @dev: the device pointer to find a companion
*
* Find the companion device from platform bus.
*
* 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);
...@@ -18,6 +18,7 @@ int of_usb_update_otg_caps(struct device_node *np, ...@@ -18,6 +18,7 @@ int of_usb_update_otg_caps(struct device_node *np,
struct usb_otg_caps *otg_caps); struct usb_otg_caps *otg_caps);
struct device_node *usb_of_get_child_node(struct device_node *parent, struct device_node *usb_of_get_child_node(struct device_node *parent,
int portnum); int portnum);
struct device *usb_of_get_companion_dev(struct device *dev);
#else #else
static inline enum usb_dr_mode static inline enum usb_dr_mode
of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0) of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0)
...@@ -38,6 +39,10 @@ static inline struct device_node *usb_of_get_child_node ...@@ -38,6 +39,10 @@ static inline struct device_node *usb_of_get_child_node
{ {
return NULL; return NULL;
} }
static inline struct device *usb_of_get_companion_dev(struct device *dev)
{
return NULL;
}
#endif #endif
#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT) #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment