drivers: phy: Make NULL a valid phy reference

The common clock framework considers NULL a valid clock
reference. This makes handling optional clocks simple, in that if the
optional clock is not available, a NULL reference can be used in the
place of a real clock, simplifying the clock consumer.

Extend this concept to the phy consumer API. A NULL can be passed to
the release calls, the phy_init() and phy_exit() calls, and
phy_power_on() and phy_power_off() and a NOP is performed.

Signed-off-by: Andrew Lunn <[email protected]>
Tested-by: Gregory CLEMENT <[email protected]>
Acked-by: Kishon Vijay Abraham I <[email protected]>
Signed-off-by: Jason Cooper <[email protected]>
This commit is contained in:
Andrew Lunn 2014-02-04 18:33:11 +01:00 • committed by Jason Cooper
commit 04c2facad8
2 changed files with 22 additions and 1 deletions

View file

@ -162,6 +162,9 @@ int phy_init(struct phy *phy)
{
int ret;
if (!phy)
return 0;
ret = phy_pm_runtime_get_sync(phy);
if (ret < 0 && ret != -ENOTSUPP)
return ret;
@ -187,6 +190,9 @@ int phy_exit(struct phy *phy)
{
int ret;
if (!phy)
return 0;
ret = phy_pm_runtime_get_sync(phy);
if (ret < 0 && ret != -ENOTSUPP)
return ret;
@ -212,6 +218,9 @@ int phy_power_on(struct phy *phy)
{
int ret;
if (!phy)
return 0;
ret = phy_pm_runtime_get_sync(phy);
if (ret < 0 && ret != -ENOTSUPP)
return ret;
@ -240,6 +249,9 @@ int phy_power_off(struct phy *phy)
{
int ret;
if (!phy)
return 0;
mutex_lock(&phy->mutex);
if (phy->power_count == 1 && phy->ops->power_off) {
ret = phy->ops->power_off(phy);
@ -308,7 +320,7 @@ err0:
*/
void phy_put(struct phy *phy)
{
if (IS_ERR(phy))
if (!phy || IS_ERR(phy))
return;
module_put(phy->ops->owner);
@ -328,6 +340,9 @@ void devm_phy_put(struct device *dev, struct phy *phy)
{
int r;
if (!phy)
return;
r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
}