diff options
Diffstat (limited to 'drivers/phy/phy-core.c')
| -rw-r--r-- | drivers/phy/phy-core.c | 16 | 
1 files changed, 9 insertions, 7 deletions
| diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c index 8c7f27db6ad3..e7e574dc667a 100644 --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -275,20 +275,21 @@ EXPORT_SYMBOL_GPL(phy_exit);  int phy_power_on(struct phy *phy)  { -	int ret; +	int ret = 0;  	if (!phy) -		return 0; +		goto out;  	if (phy->pwr) {  		ret = regulator_enable(phy->pwr);  		if (ret) -			return ret; +			goto out;  	}  	ret = phy_pm_runtime_get_sync(phy);  	if (ret < 0 && ret != -ENOTSUPP) -		return ret; +		goto err_pm_sync; +  	ret = 0; /* Override possible ret == -ENOTSUPP */  	mutex_lock(&phy->mutex); @@ -296,19 +297,20 @@ int phy_power_on(struct phy *phy)  		ret = phy->ops->power_on(phy);  		if (ret < 0) {  			dev_err(&phy->dev, "phy poweron failed --> %d\n", ret); -			goto out; +			goto err_pwr_on;  		}  	}  	++phy->power_count;  	mutex_unlock(&phy->mutex);  	return 0; -out: +err_pwr_on:  	mutex_unlock(&phy->mutex);  	phy_pm_runtime_put_sync(phy); +err_pm_sync:  	if (phy->pwr)  		regulator_disable(phy->pwr); - +out:  	return ret;  }  EXPORT_SYMBOL_GPL(phy_power_on); | 
