aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/phy
diff options
context:
space:
mode:
authorArun Ramamurthy <arun.ramamurthy@broadcom.com>2015-04-22 19:04:11 -0400
committerKishon Vijay Abraham I <kishon@ti.com>2015-05-11 12:12:23 -0400
commit6be109b31ccdb9c98e7be12687171f6602527a5d (patch)
tree8c2ad5df0fea49ca066cc18c7edff9087d4befeb /drivers/phy
parent2decb2682f80759f631c8332f9a2a34a02150a03 (diff)
phy: core: Add devm_of_phy_get_by_index to phy-core
Some generic drivers, such as ehci, may use multiple phys and for such drivers referencing phy(s) by name(s) does not make sense. Instead of inventing new naming schemes and using custom code to iterate through them, such drivers are better of using nameless phy bindings and using this newly introduced API to iterate through them. Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com> Reviewed-by: Ray Jui <rjui@broadcom.com> Reviewed-by: Scott Branden <sbranden@broadcom.com> [kishon@ti.com: fix compilation errors] Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Diffstat (limited to 'drivers/phy')
-rw-r--r--drivers/phy/phy-core.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 3791838f4bd4..964a84d5a580 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -623,6 +623,38 @@ struct phy *devm_of_phy_get(struct device *dev, struct device_node *np,
623EXPORT_SYMBOL_GPL(devm_of_phy_get); 623EXPORT_SYMBOL_GPL(devm_of_phy_get);
624 624
625/** 625/**
626 * devm_of_phy_get_by_index() - lookup and obtain a reference to a phy by index.
627 * @dev: device that requests this phy
628 * @np: node containing the phy
629 * @index: index of the phy
630 *
631 * Gets the phy using _of_phy_get(), and associates a device with it using
632 * devres. On driver detach, release function is invoked on the devres data,
633 * then, devres data is freed.
634 *
635 */
636struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node *np,
637 int index)
638{
639 struct phy **ptr, *phy;
640
641 ptr = devres_alloc(devm_phy_release, sizeof(*ptr), GFP_KERNEL);
642 if (!ptr)
643 return ERR_PTR(-ENOMEM);
644
645 phy = _of_phy_get(np, index);
646 if (!IS_ERR(phy)) {
647 *ptr = phy;
648 devres_add(dev, ptr);
649 } else {
650 devres_free(ptr);
651 }
652
653 return phy;
654}
655EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index);
656
657/**
626 * phy_create() - create a new phy 658 * phy_create() - create a new phy
627 * @dev: device that is creating the new phy 659 * @dev: device that is creating the new phy
628 * @node: device node of the phy 660 * @node: device node of the phy