Commit 87006dd6 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Kishon Vijay Abraham I

phy: phy-core: allow specifying supply at port level

Multi-port phys may have per port power supplies. Let's change phy
core to look for supply at the port level when multiple ports are
specified. To keep compatibility with the existing device tree board
descriptions for single-port phys we will continue looking up the
power supply at the parent node level
Signed-off-by: default avatarDmitry Torokhov <dtor@chromium.org>
Signed-off-by: default avatarArun Ramamurthy <arun.ramamurthy@broadcom.com>
Reviewed-by: default avatarRay Jui <rjui@broadcom.com>
Reviewed-by: default avatarScott Branden <sbranden@broadcom.com>
Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
parent a666f7d0
...@@ -683,16 +683,6 @@ struct phy *phy_create(struct device *dev, struct device_node *node, ...@@ -683,16 +683,6 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
goto free_phy; goto free_phy;
} }
/* phy-supply */
phy->pwr = regulator_get_optional(dev, "phy");
if (IS_ERR(phy->pwr)) {
if (PTR_ERR(phy->pwr) == -EPROBE_DEFER) {
ret = -EPROBE_DEFER;
goto free_ida;
}
phy->pwr = NULL;
}
device_initialize(&phy->dev); device_initialize(&phy->dev);
mutex_init(&phy->mutex); mutex_init(&phy->mutex);
...@@ -706,6 +696,16 @@ struct phy *phy_create(struct device *dev, struct device_node *node, ...@@ -706,6 +696,16 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
if (ret) if (ret)
goto put_dev; goto put_dev;
/* phy-supply */
phy->pwr = regulator_get_optional(&phy->dev, "phy");
if (IS_ERR(phy->pwr)) {
ret = PTR_ERR(phy->pwr);
if (ret == -EPROBE_DEFER)
goto put_dev;
phy->pwr = NULL;
}
ret = device_add(&phy->dev); ret = device_add(&phy->dev);
if (ret) if (ret)
goto put_dev; goto put_dev;
...@@ -721,9 +721,6 @@ struct phy *phy_create(struct device *dev, struct device_node *node, ...@@ -721,9 +721,6 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
put_device(&phy->dev); /* calls phy_release() which frees resources */ put_device(&phy->dev); /* calls phy_release() which frees resources */
return ERR_PTR(ret); return ERR_PTR(ret);
free_ida:
ida_simple_remove(&phy_ida, phy->id);
free_phy: free_phy:
kfree(phy); kfree(phy);
return ERR_PTR(ret); return ERR_PTR(ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment