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: Dmitry Torokhov <dtor@chromium.org> Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com> Reviewed-by: Ray Jui <rjui@broadcom.com> Reviewed-by: Scott Branden <sbranden@broadcom.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
This commit is contained in:
parent
a666f7d097
commit
87006dd600
|
@ -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,
|
||||||
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 @@ put_dev:
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue