linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Add devm_of_phy_get_by_index and update platform drivers
@ 2015-03-20 21:07 Arun Ramamurthy
  2015-03-20 21:07 ` [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core Arun Ramamurthy
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Arun Ramamurthy @ 2015-03-20 21:07 UTC (permalink / raw)
  To: linux-arm-kernel

This patch set adds a new API to get phy by index when multiple 
phys are present. This patch is based on discussion with Arnd Bergmann
about dt bindings for multiple phys. 

Arun Ramamurthy (3):
  phy: core: Add devm_of_phy_get_by_index to phy-core
  usb: ehci-platform: Use devm_of_phy_get_by_index
  usb: ohci-platform: Use devm_of_phy_get_by_index

 drivers/phy/phy-core.c           | 30 ++++++++++++++++++++++++++++++
 drivers/usb/host/ehci-platform.c | 20 ++++----------------
 drivers/usb/host/ohci-platform.c | 20 ++++----------------
 include/linux/phy/phy.h          |  2 ++
 4 files changed, 40 insertions(+), 32 deletions(-)

-- 
2.3.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-20 21:07 [PATCH 0/3] Add devm_of_phy_get_by_index and update platform drivers Arun Ramamurthy
@ 2015-03-20 21:07 ` Arun Ramamurthy
  2015-03-20 21:26   ` Dmitry Torokhov
  2015-03-20 21:07 ` [PATCH 2/3] usb: ehci-platform: Use devm_of_phy_get_by_index Arun Ramamurthy
  2015-03-20 21:07 ` [PATCH 3/3] usb: ohci-platform: " Arun Ramamurthy
  2 siblings, 1 reply; 11+ messages in thread
From: Arun Ramamurthy @ 2015-03-20 21:07 UTC (permalink / raw)
  To: linux-arm-kernel

Adding devm_of_phy_get_by_index to get phys by supplying an index
and not a phy name when multiple phys are declared

Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
---
 drivers/phy/phy-core.c  | 30 ++++++++++++++++++++++++++++++
 include/linux/phy/phy.h |  2 ++
 2 files changed, 32 insertions(+)

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index a12d353..0c03876 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -622,6 +622,36 @@ 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;
+}
+/**
  * 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..ae2ffaf 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);
-- 
2.3.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/3] usb: ehci-platform: Use devm_of_phy_get_by_index
  2015-03-20 21:07 [PATCH 0/3] Add devm_of_phy_get_by_index and update platform drivers Arun Ramamurthy
  2015-03-20 21:07 ` [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core Arun Ramamurthy
@ 2015-03-20 21:07 ` Arun Ramamurthy
  2015-03-20 21:40   ` Dmitry Torokhov
  2015-03-20 21:07 ` [PATCH 3/3] usb: ohci-platform: " Arun Ramamurthy
  2 siblings, 1 reply; 11+ messages in thread
From: Arun Ramamurthy @ 2015-03-20 21:07 UTC (permalink / raw)
  To: linux-arm-kernel

Getting phys by index instead of phy names so that the dt
bindings phy-names remain consistent when multiple phys are present

Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
---
 drivers/usb/host/ehci-platform.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index d8a75a5..8b0c7ae 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -154,7 +154,6 @@ static int ehci_platform_probe(struct platform_device *dev)
 	struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev);
 	struct ehci_platform_priv *priv;
 	struct ehci_hcd *ehci;
-	const char *phy_name;
 	int err, irq, phy_num, clk = 0;
 
 	if (usb_disabled())
@@ -212,21 +211,10 @@ static int ehci_platform_probe(struct platform_device *dev)
 			return -ENOMEM;
 
 		for (phy_num = 0; phy_num < priv->num_phys; phy_num++) {
-				err = of_property_read_string_index(
-						dev->dev.of_node,
-						"phy-names", phy_num,
-						&phy_name);
-
-				if (err < 0) {
-					if (priv->num_phys > 1) {
-						dev_err(&dev->dev, "phy-names not provided");
-						goto err_put_hcd;
-					} else
-						phy_name = "usb";
-				}
-
-				priv->phys[phy_num] = devm_phy_get(&dev->dev,
-						phy_name);
+				priv->phys[phy_num] =
+					devm_of_phy_get_by_index(&dev->dev,
+							dev->dev.of_node,
+							phy_num);
 				if (IS_ERR(priv->phys[phy_num])) {
 					err = PTR_ERR(priv->phys[phy_num]);
 					if ((priv->num_phys > 1) ||
-- 
2.3.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/3] usb: ohci-platform: Use devm_of_phy_get_by_index
  2015-03-20 21:07 [PATCH 0/3] Add devm_of_phy_get_by_index and update platform drivers Arun Ramamurthy
  2015-03-20 21:07 ` [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core Arun Ramamurthy
  2015-03-20 21:07 ` [PATCH 2/3] usb: ehci-platform: Use devm_of_phy_get_by_index Arun Ramamurthy
@ 2015-03-20 21:07 ` Arun Ramamurthy
  2 siblings, 0 replies; 11+ messages in thread
From: Arun Ramamurthy @ 2015-03-20 21:07 UTC (permalink / raw)
  To: linux-arm-kernel

Getting phys by index instead of phy names so that the dt
bindings phy-names remain consistent when multiple phys are present

Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
---
 drivers/usb/host/ohci-platform.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index 185ceee..8b2ec4e 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -123,7 +123,6 @@ static int ohci_platform_probe(struct platform_device *dev)
 	struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev);
 	struct ohci_platform_priv *priv;
 	struct ohci_hcd *ohci;
-	const char *phy_name;
 	int err, irq, phy_num, clk = 0;
 
 	if (usb_disabled())
@@ -182,21 +181,10 @@ static int ohci_platform_probe(struct platform_device *dev)
 			return -ENOMEM;
 
 		for (phy_num = 0; phy_num < priv->num_phys; phy_num++) {
-				err = of_property_read_string_index(
-						dev->dev.of_node,
-						"phy-names", phy_num,
-						&phy_name);
-
-				if (err < 0) {
-					if (priv->num_phys > 1) {
-						dev_err(&dev->dev, "phy-names not provided");
-						goto err_put_hcd;
-					} else
-						phy_name = "usb";
-				}
-
-				priv->phys[phy_num] = devm_phy_get(&dev->dev,
-						phy_name);
+				priv->phys[phy_num] =
+					devm_of_phy_get_by_index(&dev->dev,
+							dev->dev.of_node,
+							phy_num);
 				if (IS_ERR(priv->phys[phy_num])) {
 					err = PTR_ERR(priv->phys[phy_num]);
 					if ((priv->num_phys > 1) ||
-- 
2.3.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-20 21:07 ` [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core Arun Ramamurthy
@ 2015-03-20 21:26   ` Dmitry Torokhov
  2015-03-20 21:29     ` Arun Ramamurthy
  0 siblings, 1 reply; 11+ messages in thread
From: Dmitry Torokhov @ 2015-03-20 21:26 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Arun,

On Fri, Mar 20, 2015 at 02:07:08PM -0700, Arun Ramamurthy wrote:
> Adding devm_of_phy_get_by_index to get phys by supplying an index
> and not a phy name when multiple phys are declared
> 
> Reviewed-by: Ray Jui <rjui@broadcom.com>
> Reviewed-by: Scott Branden <sbranden@broadcom.com>
> Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
> ---
>  drivers/phy/phy-core.c  | 30 ++++++++++++++++++++++++++++++
>  include/linux/phy/phy.h |  2 ++
>  2 files changed, 32 insertions(+)
> 
> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
> index a12d353..0c03876 100644
> --- a/drivers/phy/phy-core.c
> +++ b/drivers/phy/phy-core.c
> @@ -622,6 +622,36 @@ 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;
> +}

You want EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index); here.

> +/**
>   * 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..ae2ffaf 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);
> -- 
> 2.3.2
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-20 21:26   ` Dmitry Torokhov
@ 2015-03-20 21:29     ` Arun Ramamurthy
  2015-03-25 22:03       ` Kishon Vijay Abraham I
  0 siblings, 1 reply; 11+ messages in thread
From: Arun Ramamurthy @ 2015-03-20 21:29 UTC (permalink / raw)
  To: linux-arm-kernel



On 15-03-20 02:26 PM, Dmitry Torokhov wrote:
> Hi Arun,
>
> On Fri, Mar 20, 2015 at 02:07:08PM -0700, Arun Ramamurthy wrote:
>> Adding devm_of_phy_get_by_index to get phys by supplying an index
>> and not a phy name when multiple phys are declared
>>
>> Reviewed-by: Ray Jui <rjui@broadcom.com>
>> Reviewed-by: Scott Branden <sbranden@broadcom.com>
>> Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
>> ---
>>   drivers/phy/phy-core.c  | 30 ++++++++++++++++++++++++++++++
>>   include/linux/phy/phy.h |  2 ++
>>   2 files changed, 32 insertions(+)
>>
>> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
>> index a12d353..0c03876 100644
>> --- a/drivers/phy/phy-core.c
>> +++ b/drivers/phy/phy-core.c
>> @@ -622,6 +622,36 @@ 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;
>> +}
>
> You want EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index); here.
>
Ah, I missed that! Thanks Dmitry, Will update in next patch after any 
other comments.
>> +/**
>>    * 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..ae2ffaf 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);
>> --
>> 2.3.2
>>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 2/3] usb: ehci-platform: Use devm_of_phy_get_by_index
  2015-03-20 21:07 ` [PATCH 2/3] usb: ehci-platform: Use devm_of_phy_get_by_index Arun Ramamurthy
@ 2015-03-20 21:40   ` Dmitry Torokhov
  0 siblings, 0 replies; 11+ messages in thread
From: Dmitry Torokhov @ 2015-03-20 21:40 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Arun,

On Fri, Mar 20, 2015 at 02:07:09PM -0700, Arun Ramamurthy wrote:
> Getting phys by index instead of phy names so that the dt
> bindings phy-names remain consistent when multiple phys are present
> 
> Reviewed-by: Ray Jui <rjui@broadcom.com>
> Reviewed-by: Scott Branden <sbranden@broadcom.com>
> Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
> ---
>  drivers/usb/host/ehci-platform.c | 20 ++++----------------
>  1 file changed, 4 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
> index d8a75a5..8b0c7ae 100644
> --- a/drivers/usb/host/ehci-platform.c
> +++ b/drivers/usb/host/ehci-platform.c
> @@ -154,7 +154,6 @@ static int ehci_platform_probe(struct platform_device *dev)
>  	struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev);
>  	struct ehci_platform_priv *priv;
>  	struct ehci_hcd *ehci;
> -	const char *phy_name;
>  	int err, irq, phy_num, clk = 0;
>  
>  	if (usb_disabled())
> @@ -212,21 +211,10 @@ static int ehci_platform_probe(struct platform_device *dev)
>  			return -ENOMEM;
>  
>  		for (phy_num = 0; phy_num < priv->num_phys; phy_num++) {
> -				err = of_property_read_string_index(
> -						dev->dev.of_node,
> -						"phy-names", phy_num,
> -						&phy_name);
> -
> -				if (err < 0) {
> -					if (priv->num_phys > 1) {
> -						dev_err(&dev->dev, "phy-names not provided");
> -						goto err_put_hcd;
> -					} else
> -						phy_name = "usb";
> -				}
> -
> -				priv->phys[phy_num] = devm_phy_get(&dev->dev,
> -						phy_name);
> +				priv->phys[phy_num] =
> +					devm_of_phy_get_by_index(&dev->dev,
> +							dev->dev.of_node,
> +							phy_num);
>  				if (IS_ERR(priv->phys[phy_num])) {
>  					err = PTR_ERR(priv->phys[phy_num]);
>  					if ((priv->num_phys > 1) ||

While you are fixing this can you please correct the wrong indentation
level and clean up that whole weird business of treating "phy" not
present in DT in a special way and, stuffing NULL pointer in priv->phys,
and checking it for NULL elsewhere?

Thanks!

-- 
Dmitry

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-20 21:29     ` Arun Ramamurthy
@ 2015-03-25 22:03       ` Kishon Vijay Abraham I
  2015-03-26  0:04         ` Arun Ramamurthy
  0 siblings, 1 reply; 11+ messages in thread
From: Kishon Vijay Abraham I @ 2015-03-25 22:03 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On Saturday 21 March 2015 02:59 AM, Arun Ramamurthy wrote:
> 
> 
> On 15-03-20 02:26 PM, Dmitry Torokhov wrote:
>> Hi Arun,
>>
>> On Fri, Mar 20, 2015 at 02:07:08PM -0700, Arun Ramamurthy wrote:
>>> Adding devm_of_phy_get_by_index to get phys by supplying an index
>>> and not a phy name when multiple phys are declared

I think a bit more explanation on why get_by_index is needed here.
>>>
>>> Reviewed-by: Ray Jui <rjui@broadcom.com>
>>> Reviewed-by: Scott Branden <sbranden@broadcom.com>
>>> Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
>>> ---
>>>   drivers/phy/phy-core.c  | 30 ++++++++++++++++++++++++++++++
>>>   include/linux/phy/phy.h |  2 ++
>>>   2 files changed, 32 insertions(+)
>>>
>>> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
>>> index a12d353..0c03876 100644
>>> --- a/drivers/phy/phy-core.c
>>> +++ b/drivers/phy/phy-core.c
>>> @@ -622,6 +622,36 @@ 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;
>>> +}
>>
>> You want EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index); here.

Also update the Documentation/phy.txt.

-Kishon

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-25 22:03       ` Kishon Vijay Abraham I
@ 2015-03-26  0:04         ` Arun Ramamurthy
  2015-03-26 23:07           ` Dmitry Torokhov
  0 siblings, 1 reply; 11+ messages in thread
From: Arun Ramamurthy @ 2015-03-26  0:04 UTC (permalink / raw)
  To: linux-arm-kernel



On 15-03-25 03:03 PM, Kishon Vijay Abraham I wrote:
> Hi,
>
> On Saturday 21 March 2015 02:59 AM, Arun Ramamurthy wrote:
>>
>>
>> On 15-03-20 02:26 PM, Dmitry Torokhov wrote:
>>> Hi Arun,
>>>
>>> On Fri, Mar 20, 2015 at 02:07:08PM -0700, Arun Ramamurthy wrote:
>>>> Adding devm_of_phy_get_by_index to get phys by supplying an index
>>>> and not a phy name when multiple phys are declared
>
> I think a bit more explanation on why get_by_index is needed here.
Thanks Kison. Can you be more specific? I am unsure of what more I can 
explain here.
>>>>
>>>> Reviewed-by: Ray Jui <rjui@broadcom.com>
>>>> Reviewed-by: Scott Branden <sbranden@broadcom.com>
>>>> Signed-off-by: Arun Ramamurthy <arun.ramamurthy@broadcom.com>
>>>> ---
>>>>    drivers/phy/phy-core.c  | 30 ++++++++++++++++++++++++++++++
>>>>    include/linux/phy/phy.h |  2 ++
>>>>    2 files changed, 32 insertions(+)
>>>>
>>>> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
>>>> index a12d353..0c03876 100644
>>>> --- a/drivers/phy/phy-core.c
>>>> +++ b/drivers/phy/phy-core.c
>>>> @@ -622,6 +622,36 @@ 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;
>>>> +}
>>>
>>> You want EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index); here.
>
> Also update the Documentation/phy.txt.
>
Ok will do.
> -Kishon
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-26  0:04         ` Arun Ramamurthy
@ 2015-03-26 23:07           ` Dmitry Torokhov
  2015-03-31 16:00             ` Kishon Vijay Abraham I
  0 siblings, 1 reply; 11+ messages in thread
From: Dmitry Torokhov @ 2015-03-26 23:07 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Mar 25, 2015 at 05:04:32PM -0700, Arun Ramamurthy wrote:
> 
> 
> On 15-03-25 03:03 PM, Kishon Vijay Abraham I wrote:
> >Hi,
> >
> >On Saturday 21 March 2015 02:59 AM, Arun Ramamurthy wrote:
> >>
> >>
> >>On 15-03-20 02:26 PM, Dmitry Torokhov wrote:
> >>>Hi Arun,
> >>>
> >>>On Fri, Mar 20, 2015 at 02:07:08PM -0700, Arun Ramamurthy wrote:
> >>>>Adding devm_of_phy_get_by_index to get phys by supplying an index
> >>>>and not a phy name when multiple phys are declared
> >
> >I think a bit more explanation on why get_by_index is needed here.
> Thanks Kison. Can you be more specific? I am unsure of what more I
> can explain here.

We just need to mention that 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 elaborate naming schemes and
producing custom code to iterate over names, such drivers are better of
using nameless phy bindings and using this newly introduced API to
iterate through them.

Thanks.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core
  2015-03-26 23:07           ` Dmitry Torokhov
@ 2015-03-31 16:00             ` Kishon Vijay Abraham I
  0 siblings, 0 replies; 11+ messages in thread
From: Kishon Vijay Abraham I @ 2015-03-31 16:00 UTC (permalink / raw)
  To: linux-arm-kernel



On Friday 27 March 2015 04:37 AM, Dmitry Torokhov wrote:
> On Wed, Mar 25, 2015 at 05:04:32PM -0700, Arun Ramamurthy wrote:
>>
>>
>> On 15-03-25 03:03 PM, Kishon Vijay Abraham I wrote:
>>> Hi,
>>>
>>> On Saturday 21 March 2015 02:59 AM, Arun Ramamurthy wrote:
>>>>
>>>>
>>>> On 15-03-20 02:26 PM, Dmitry Torokhov wrote:
>>>>> Hi Arun,
>>>>>
>>>>> On Fri, Mar 20, 2015 at 02:07:08PM -0700, Arun Ramamurthy wrote:
>>>>>> Adding devm_of_phy_get_by_index to get phys by supplying an index
>>>>>> and not a phy name when multiple phys are declared
>>>
>>> I think a bit more explanation on why get_by_index is needed here.
>> Thanks Kison. Can you be more specific? I am unsure of what more I
>> can explain here.
>
> We just need to mention that 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 elaborate naming schemes and
> producing custom code to iterate over names, such drivers are better of
> using nameless phy bindings and using this newly introduced API to
> iterate through them.

+1

-Kishon

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-03-31 16:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-20 21:07 [PATCH 0/3] Add devm_of_phy_get_by_index and update platform drivers Arun Ramamurthy
2015-03-20 21:07 ` [PATCH 1/3] phy: core: Add devm_of_phy_get_by_index to phy-core Arun Ramamurthy
2015-03-20 21:26   ` Dmitry Torokhov
2015-03-20 21:29     ` Arun Ramamurthy
2015-03-25 22:03       ` Kishon Vijay Abraham I
2015-03-26  0:04         ` Arun Ramamurthy
2015-03-26 23:07           ` Dmitry Torokhov
2015-03-31 16:00             ` Kishon Vijay Abraham I
2015-03-20 21:07 ` [PATCH 2/3] usb: ehci-platform: Use devm_of_phy_get_by_index Arun Ramamurthy
2015-03-20 21:40   ` Dmitry Torokhov
2015-03-20 21:07 ` [PATCH 3/3] usb: ohci-platform: " Arun Ramamurthy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).