Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cedb7f89 authored by Felipe Balbi's avatar Felipe Balbi Committed by Kishon Vijay Abraham I
Browse files

phy: core: properly handle failure of pm_runtime_get functions



In case pm_runtime_get*() fails, it still
increments pm usage counter, so we *must*
make sure to pm_runtime_put() even in those
cases.

This patch fixes that mistake the same way
usbcore treats those possible failures.

Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
parent 413541dd
Loading
Loading
Loading
Loading
+14 −2
Original line number Original line Diff line number Diff line
@@ -94,19 +94,31 @@ static struct phy_provider *of_phy_provider_lookup(struct device_node *node)


int phy_pm_runtime_get(struct phy *phy)
int phy_pm_runtime_get(struct phy *phy)
{
{
	int ret;

	if (!pm_runtime_enabled(&phy->dev))
	if (!pm_runtime_enabled(&phy->dev))
		return -ENOTSUPP;
		return -ENOTSUPP;


	return pm_runtime_get(&phy->dev);
	ret = pm_runtime_get(&phy->dev);
	if (ret < 0 && ret != -EINPROGRESS)
		pm_runtime_put_noidle(&phy->dev);

	return ret;
}
}
EXPORT_SYMBOL_GPL(phy_pm_runtime_get);
EXPORT_SYMBOL_GPL(phy_pm_runtime_get);


int phy_pm_runtime_get_sync(struct phy *phy)
int phy_pm_runtime_get_sync(struct phy *phy)
{
{
	int ret;

	if (!pm_runtime_enabled(&phy->dev))
	if (!pm_runtime_enabled(&phy->dev))
		return -ENOTSUPP;
		return -ENOTSUPP;


	return pm_runtime_get_sync(&phy->dev);
	ret = pm_runtime_get_sync(&phy->dev);
	if (ret < 0)
		pm_runtime_put_sync(&phy->dev);

	return ret;
}
}
EXPORT_SYMBOL_GPL(phy_pm_runtime_get_sync);
EXPORT_SYMBOL_GPL(phy_pm_runtime_get_sync);