generic-phy: add generic_phy_get_by_node()

Add generic_phy_get_by_node() to get a PHY phandle from a node instead
of a udevice.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
[narmstrong: fixed by including ofnode.h in generic-phy.h]
This commit is contained in:
Neil Armstrong 2020-03-30 11:27:23 +02:00
parent c8ccca921a
commit c2b9aa98bf
2 changed files with 40 additions and 5 deletions

View File

@ -31,20 +31,20 @@ static int generic_phy_xlate_offs_flags(struct phy *phy,
return 0;
}
int generic_phy_get_by_index(struct udevice *dev, int index,
struct phy *phy)
int generic_phy_get_by_node(ofnode node, int index, struct phy *phy)
{
struct ofnode_phandle_args args;
struct phy_ops *ops;
struct udevice *phydev;
int i, ret;
debug("%s(dev=%p, index=%d, phy=%p)\n", __func__, dev, index, phy);
debug("%s(node=%s, index=%d, phy=%p)\n",
__func__, ofnode_get_name(node), index, phy);
assert(phy);
phy->dev = NULL;
ret = dev_read_phandle_with_args(dev, "phys", "#phy-cells", 0, index,
&args);
ret = ofnode_parse_phandle_with_args(node, "phys", "#phy-cells", 0,
index, &args);
if (ret) {
debug("%s: dev_read_phandle_with_args failed: err=%d\n",
__func__, ret);
@ -90,6 +90,12 @@ err:
return ret;
}
int generic_phy_get_by_index(struct udevice *dev, int index,
struct phy *phy)
{
return generic_phy_get_by_node(dev_ofnode(dev), index, phy);
}
int generic_phy_get_by_name(struct udevice *dev, const char *phy_name,
struct phy *phy)
{

View File

@ -7,6 +7,8 @@
#ifndef __GENERIC_PHY_H
#define __GENERIC_PHY_H
#include <dm/ofnode.h>
struct ofnode_phandle_args;
/**
@ -193,6 +195,33 @@ int generic_phy_power_off(struct phy *phy);
int generic_phy_get_by_index(struct udevice *user, int index,
struct phy *phy);
/**
* generic_phy_get_by_node() - Get a PHY device by integer index on ofnode
*
* @node: the device node
* @index: The index in the list of available PHYs
* @phy: A pointer to the PHY port
*
* This looks up a PHY device for a client device based on its ofnode and on
* its position in the list of the possible PHYs.
*
* example:
* usb1: usb_otg_ss@xxx {
* compatible = "xxx";
* reg = <xxx>;
* .
* .
* phys = <&usb2_phy>, <&usb3_phy>;
* .
* .
* };
* the USB2 phy can be accessed by passing index '0' and the USB3 phy can
* be accessed by passing index '1'
*
* @return 0 if OK, or a negative error code
*/
int generic_phy_get_by_node(ofnode node, int index, struct phy *phy);
/**
* generic_phy_get_by_name() - Get a PHY device by its name.
*