diff options
| author | Dmitry Torokhov <[email protected]> | 2023-05-01 15:20:08 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-05-01 15:20:08 -0700 | 
| commit | 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e (patch) | |
| tree | d57f3a63479a07b4e0cece029886e76e04feb984 /drivers/phy/phy-core.c | |
| parent | 5dc63e56a9cf8df0b59c234a505a1653f1bdf885 (diff) | |
| parent | 53bea86b5712c7491bb3dae12e271666df0a308c (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.4 merge window.
Diffstat (limited to 'drivers/phy/phy-core.c')
| -rw-r--r-- | drivers/phy/phy-core.c | 51 | 
1 files changed, 30 insertions, 21 deletions
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c index d93ddf1262c5..9951efc03eaa 100644 --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -767,27 +767,6 @@ struct phy *phy_get(struct device *dev, const char *string)  EXPORT_SYMBOL_GPL(phy_get);  /** - * phy_optional_get() - lookup and obtain a reference to an optional phy. - * @dev: device that requests this phy - * @string: the phy name as given in the dt data or the name of the controller - * port for non-dt case - * - * Returns the phy driver, after getting a refcount to it; or - * NULL if there is no such phy.  The caller is responsible for - * calling phy_put() to release that count. - */ -struct phy *phy_optional_get(struct device *dev, const char *string) -{ -	struct phy *phy = phy_get(dev, string); - -	if (PTR_ERR(phy) == -ENODEV) -		phy = NULL; - -	return phy; -} -EXPORT_SYMBOL_GPL(phy_optional_get); - -/**   * devm_phy_get() - lookup and obtain a reference to a phy.   * @dev: device that requests this phy   * @string: the phy name as given in the dt data or phy device name @@ -880,6 +859,36 @@ struct phy *devm_of_phy_get(struct device *dev, struct device_node *np,  EXPORT_SYMBOL_GPL(devm_of_phy_get);  /** + * devm_of_phy_optional_get() - lookup and obtain a reference to an optional + * phy. + * @dev: device that requests this phy + * @np: node containing the phy + * @con_id: name of the phy from device's point of view + * + * Gets the phy using of_phy_get(), and associates a device with it using + * devres. On driver detach, release function is invoked on the devres data, + * then, devres data is freed.  This differs to devm_of_phy_get() in + * that if the phy does not exist, it is not considered an error and + * -ENODEV will not be returned. Instead the NULL phy is returned, + * which can be passed to all other phy consumer calls. + */ +struct phy *devm_of_phy_optional_get(struct device *dev, struct device_node *np, +				     const char *con_id) +{ +	struct phy *phy = devm_of_phy_get(dev, np, con_id); + +	if (PTR_ERR(phy) == -ENODEV) +		phy = NULL; + +	if (IS_ERR(phy)) +		dev_err_probe(dev, PTR_ERR(phy), "failed to get PHY %pOF:%s", +			      np, con_id); + +	return phy; +} +EXPORT_SYMBOL_GPL(devm_of_phy_optional_get); + +/**   * devm_of_phy_get_by_index() - lookup and obtain a reference to a phy by index.   * @dev: device that requests this phy   * @np: node containing the phy  |