aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@chromium.org>2015-04-22 19:14:37 -0400
committerKishon Vijay Abraham I <kishon@ti.com>2015-05-11 12:12:25 -0400
commit87006dd600e36e05a2bd978c112a0aa883713c00 (patch)
tree4956eada9cf1015d395142627dfa1444c9e2901a
parenta666f7d097486bb74f9b02d6d049c1e5a765fa61 (diff)
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>
-rw-r--r--drivers/phy/phy-core.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 964a84d5a580..5f729bb0788f 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -683,16 +683,6 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
683 goto free_phy; 683 goto free_phy;
684 } 684 }
685 685
686 /* phy-supply */
687 phy->pwr = regulator_get_optional(dev, "phy");
688 if (IS_ERR(phy->pwr)) {
689 if (PTR_ERR(phy->pwr) == -EPROBE_DEFER) {
690 ret = -EPROBE_DEFER;
691 goto free_ida;
692 }
693 phy->pwr = NULL;
694 }
695
696 device_initialize(&phy->dev); 686 device_initialize(&phy->dev);
697 mutex_init(&phy->mutex); 687 mutex_init(&phy->mutex);
698 688
@@ -706,6 +696,16 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
706 if (ret) 696 if (ret)
707 goto put_dev; 697 goto put_dev;
708 698
699 /* phy-supply */
700 phy->pwr = regulator_get_optional(&phy->dev, "phy");
701 if (IS_ERR(phy->pwr)) {
702 ret = PTR_ERR(phy->pwr);
703 if (ret == -EPROBE_DEFER)
704 goto put_dev;
705
706 phy->pwr = NULL;
707 }
708
709 ret = device_add(&phy->dev); 709 ret = device_add(&phy->dev);
710 if (ret) 710 if (ret)
711 goto put_dev; 711 goto put_dev;
@@ -721,9 +721,6 @@ put_dev:
721 put_device(&phy->dev); /* calls phy_release() which frees resources */ 721 put_device(&phy->dev); /* calls phy_release() which frees resources */
722 return ERR_PTR(ret); 722 return ERR_PTR(ret);
723 723
724free_ida:
725 ida_simple_remove(&phy_ida, phy->id);
726
727free_phy: 724free_phy:
728 kfree(phy); 725 kfree(phy);
729 return ERR_PTR(ret); 726 return ERR_PTR(ret);