phy: Introduce of_phy_get_by_phandle
Currently generic phy support assumes that the standard phy binding from dts/Bindings/phy/phy-bindings.txt is used. This adds a helper function which can be used to retrieve a phy when this standard binding is not used. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
4ed80f0643
commit
850557842f
|
@ -267,6 +267,42 @@ struct phy *of_phy_get(struct device_node *np, const char *con_id)
|
|||
return _of_phy_get(np, index);
|
||||
}
|
||||
|
||||
/**
|
||||
* of_phy_get_by_phandle() - lookup and obtain a reference to a phy.
|
||||
* @dev: device that requests this phy
|
||||
* @phandle - name of the property holding the phy phandle value
|
||||
* @index - the index of the phy
|
||||
*
|
||||
* Returns the phy driver, after getting a refcount to it; or
|
||||
* -ENODEV if there is no such phy. The caller is responsible for
|
||||
* calling phy_put() to release that count.
|
||||
*/
|
||||
struct phy *of_phy_get_by_phandle(struct device_d *dev, const char *phandle,
|
||||
u8 index)
|
||||
{
|
||||
struct device_node *np;
|
||||
struct phy_provider *phy_provider;
|
||||
|
||||
if (!dev->device_node) {
|
||||
dev_dbg(dev, "device does not have a device node entry\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
np = of_parse_phandle(dev->device_node, phandle, index);
|
||||
if (!np) {
|
||||
dev_dbg(dev, "failed to get %s phandle in %s node\n", phandle,
|
||||
dev->device_node->full_name);
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
phy_provider = of_phy_provider_lookup(np);
|
||||
if (IS_ERR(phy_provider)) {
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
return phy_provider->of_xlate(phy_provider->dev, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* phy_get() - lookup and obtain a reference to a phy.
|
||||
* @dev: device that requests this phy
|
||||
|
|
|
@ -136,6 +136,8 @@ static inline void phy_set_bus_width(struct phy *phy, int bus_width)
|
|||
}
|
||||
struct phy *phy_get(struct device_d *dev, const char *string);
|
||||
struct phy *phy_optional_get(struct device_d *dev, const char *string);
|
||||
struct phy *of_phy_get_by_phandle(struct device_d *dev, const char *phandle,
|
||||
u8 index);
|
||||
void phy_put(struct phy *phy);
|
||||
struct phy *of_phy_get(struct device_node *np, const char *con_id);
|
||||
struct phy *of_phy_simple_xlate(struct device_d *dev,
|
||||
|
@ -198,6 +200,12 @@ static inline struct phy *phy_optional_get(struct device_d *dev,
|
|||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline struct phy *of_phy_get_by_phandle(struct device_d *dev,
|
||||
const char *phandle, u8 index)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline void phy_put(struct phy *phy)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue