Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754698AbbEKPLU (ORCPT ); Mon, 11 May 2015 11:11:20 -0400 Received: from arroyo.ext.ti.com ([192.94.94.40]:44923 "EHLO arroyo.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751543AbbEKPLP (ORCPT ); Mon, 11 May 2015 11:11:15 -0400 Message-ID: <5550C645.6090106@ti.com> Date: Mon, 11 May 2015 20:39:57 +0530 From: Kishon Vijay Abraham I User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: Arun Ramamurthy , Jonathan Corbet , Tejun Heo , Kyungmin Park , Sylwester Nawrocki , Mauro Carvalho Chehab , Kukjin Kim , Greg Kroah-Hartman , Alan Stern , Tony Prisk , Jean-Christophe Plagniol-Villard , Tomi Valkeinen , Arnd Bergmann , Felipe Balbi , Mathias Nyman , Paul Bolle , Thomas Pugliese , Srinivas Kandagatla , Masanari Iida , David Mosberger , Peter Griffin , Gregory CLEMENT , Laurent Pinchart , Kevin Hao , Jean Delvare CC: , , , , , , , , Dmitry Torokhov , Anatol Pomazau , Jonathan Richardson , Scott Branden , Ray Jui , Subject: Re: [PATCHv3 2/4] phy: core: Add devm_of_phy_get_by_index to phy-core References: <1429743853-10254-1-git-send-email-arun.ramamurthy@broadcom.com> <1429743853-10254-3-git-send-email-arun.ramamurthy@broadcom.com> In-Reply-To: <1429743853-10254-3-git-send-email-arun.ramamurthy@broadcom.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4842 Lines: 116 Hi, On Thursday 23 April 2015 04:34 AM, Arun Ramamurthy wrote: > 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 > Reviewed-by: Ray Jui > Reviewed-by: Scott Branden > --- > Documentation/phy.txt | 7 ++++++- > drivers/phy/phy-core.c | 32 ++++++++++++++++++++++++++++++++ > include/linux/phy/phy.h | 8 ++++++++ > 3 files changed, 46 insertions(+), 1 deletion(-) > > diff --git a/Documentation/phy.txt b/Documentation/phy.txt > index 371361c..b388c5a 100644 > --- a/Documentation/phy.txt > +++ b/Documentation/phy.txt > @@ -76,6 +76,8 @@ struct phy *phy_get(struct device *dev, const char *string); > struct phy *phy_optional_get(struct device *dev, const char *string); > struct phy *devm_phy_get(struct device *dev, const char *string); > struct phy *devm_phy_optional_get(struct device *dev, const char *string); > +struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node *np, > + int index); > > phy_get, phy_optional_get, devm_phy_get and devm_phy_optional_get can > be used to get the PHY. In the case of dt boot, the string arguments > @@ -86,7 +88,10 @@ successful PHY get. On driver detach, release function is invoked on > the the devres data and devres data is freed. phy_optional_get and > devm_phy_optional_get should be used when the phy is optional. These > two functions will never return -ENODEV, but instead returns NULL when > -the phy cannot be found. > +the phy cannot be found.Some generic drivers, such as ehci, may use multiple > +phys and for such drivers referencing phy(s) by name(s) does not make sense. In > +this case, devm_of_phy_get_by_index can be used to get a phy reference based on > +the index. > > It should be noted that NULL is a valid phy reference. All phy > consumer calls on the NULL phy become NOPs. That is the release calls, > diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c > index 3791838..964a84d 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, > EXPORT_SYMBOL_GPL(devm_of_phy_get); > > /** > + * devm_of_phy_get_by_index() - lookup and obtain a reference to a phy by index. > + * @dev: device that requests this phy > + * @np: node containing the phy > + * @index: index of the phy > + * > + * Gets the phy using _of_phy_get(), and associates a device with it using > + * devres. On driver detach, release function is invoked on the devres data, > + * then, devres data is freed. > + * > + */ > +struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node *np, > + int index) > +{ > + struct phy **ptr, *phy; > + > + ptr = devres_alloc(devm_phy_release, sizeof(*ptr), GFP_KERNEL); > + if (!ptr) > + return ERR_PTR(-ENOMEM); > + > + phy = _of_phy_get(np, index); > + if (!IS_ERR(phy)) { > + *ptr = phy; > + devres_add(dev, ptr); > + } else { > + devres_free(ptr); > + } > + > + return phy; > +} > +EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index); > + > +/** > * phy_create() - create a new phy > * @dev: device that is creating the new phy > * @node: device node of the phy > diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h > index a0197fa..978d5af 100644 > --- a/include/linux/phy/phy.h > +++ b/include/linux/phy/phy.h > @@ -133,6 +133,8 @@ struct phy *devm_phy_get(struct device *dev, const char *string); > struct phy *devm_phy_optional_get(struct device *dev, const char *string); > struct phy *devm_of_phy_get(struct device *dev, struct device_node *np, > const char *con_id); > +struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node *np, > + int index); > void phy_put(struct phy *phy); > void devm_phy_put(struct device *dev, struct phy *phy); > struct phy *of_phy_get(struct device_node *np, const char *con_id); > @@ -261,6 +263,12 @@ static inline struct phy *devm_of_phy_get(struct device *dev, > return ERR_PTR(-ENOSYS); > } > > +struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node *np, > + int index); Fixed the compilation error because of the ';' in the end and merged it to linux-phy. Thanks Kishon -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/