diff mbox

[U-Boot,2/2] net: gmac_rockchip: Add phy supply support

Message ID 1489570124-26724-2-git-send-email-jacob2.chen@rock-chips.com
State Changes Requested
Delegated to: Simon Glass
Headers show

Commit Message

Jacob Chen March 15, 2017, 9:28 a.m. UTC
Some board need a regulator for gmac phy, so add this code to handle it.

Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
---

 drivers/net/gmac_rockchip.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

Joe Hershberger March 21, 2017, 6:56 p.m. UTC | #1
On Wed, Mar 15, 2017 at 4:28 AM, Jacob Chen <jacob2.chen@rock-chips.com> wrote:
> Some board need a regulator for gmac phy, so add this code to handle it.
>
> Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
> ---
>
>  drivers/net/gmac_rockchip.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
>
> diff --git a/drivers/net/gmac_rockchip.c b/drivers/net/gmac_rockchip.c
> index e9b202a..63cccc9 100644
> --- a/drivers/net/gmac_rockchip.c
> +++ b/drivers/net/gmac_rockchip.c
> @@ -17,6 +17,7 @@
>  #include <asm/arch/grf_rk3288.h>
>  #include <dm/pinctrl.h>
>  #include <dt-bindings/clock/rk3288-cru.h>
> +#include <power/regulator.h>
>  #include "designware.h"
>
>  DECLARE_GLOBAL_DATA_PTR;
> @@ -79,6 +80,22 @@ static int gmac_rockchip_probe(struct udevice *dev)
>         struct clk clk;
>         int ret;
>
> +#if defined(CONFIG_DM_REGULATOR)
> +       struct udevice *phy_supply;
> +
> +       ret = device_get_supply_regulator(dev, "phy-supply",
> +                                         &phy_supply);
> +       if (ret) {
> +               debug("%s: No phy supply\n", dev->name);
> +       } else {
> +               ret = regulator_set_enable(phy_supply, true);
> +               if (ret) {
> +                       puts("Error enabling phy supply\n");
> +                       return ret;
> +               }
> +       }
> +#endif
> +

This seems pretty generic. Is there maybe a more common place this
could live? Or is the phy-supply binding in DT only defined for
rockchip?

>         ret = clk_get_by_index(dev, 0, &clk);
>         if (ret)
>                 return ret;
> --
> 1.9.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
Jacob Chen March 22, 2017, 3:17 a.m. UTC | #2
2017-03-22 2:56 GMT+08:00 Joe Hershberger <joe.hershberger@gmail.com>:
> On Wed, Mar 15, 2017 at 4:28 AM, Jacob Chen <jacob2.chen@rock-chips.com> wrote:
>> Some board need a regulator for gmac phy, so add this code to handle it.
>>
>> Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
>> ---
>>
>>  drivers/net/gmac_rockchip.c | 17 +++++++++++++++++
>>  1 file changed, 17 insertions(+)
>>
>> diff --git a/drivers/net/gmac_rockchip.c b/drivers/net/gmac_rockchip.c
>> index e9b202a..63cccc9 100644
>> --- a/drivers/net/gmac_rockchip.c
>> +++ b/drivers/net/gmac_rockchip.c
>> @@ -17,6 +17,7 @@
>>  #include <asm/arch/grf_rk3288.h>
>>  #include <dm/pinctrl.h>
>>  #include <dt-bindings/clock/rk3288-cru.h>
>> +#include <power/regulator.h>
>>  #include "designware.h"
>>
>>  DECLARE_GLOBAL_DATA_PTR;
>> @@ -79,6 +80,22 @@ static int gmac_rockchip_probe(struct udevice *dev)
>>         struct clk clk;
>>         int ret;
>>
>> +#if defined(CONFIG_DM_REGULATOR)
>> +       struct udevice *phy_supply;
>> +
>> +       ret = device_get_supply_regulator(dev, "phy-supply",
>> +                                         &phy_supply);
>> +       if (ret) {
>> +               debug("%s: No phy supply\n", dev->name);
>> +       } else {
>> +               ret = regulator_set_enable(phy_supply, true);
>> +               if (ret) {
>> +                       puts("Error enabling phy supply\n");
>> +                       return ret;
>> +               }
>> +       }
>> +#endif
>> +
>
> This seems pretty generic. Is there maybe a more common place this
> could live? Or is the phy-supply binding in DT only defined for
> rockchip?
>

I have look kernel driver and phy-supply is set in "
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c".
So i think it might not be generic.


>>         ret = clk_get_by_index(dev, 0, &clk);
>>         if (ret)
>>                 return ret;
>> --
>> 1.9.1
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot@lists.denx.de
>> https://lists.denx.de/listinfo/u-boot
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
Sjoerd Simons March 22, 2017, 9:05 a.m. UTC | #3
On Wed, 2017-03-22 at 11:17 +0800, Jacob Chen wrote:
> 2017-03-22 2:56 GMT+08:00 Joe Hershberger <joe.hershberger@gmail.com>
> :
> > On Wed, Mar 15, 2017 at 4:28 AM, Jacob Chen <jacob2.chen@rock-chips
> > .com> wrote:
> > > Some board need a regulator for gmac phy, so add this code to
> > > handle it.
> > > 
> > > Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
> > > ---
> > > 
> > >  drivers/net/gmac_rockchip.c | 17 +++++++++++++++++
> > >  1 file changed, 17 insertions(+)
> > > 
> > > diff --git a/drivers/net/gmac_rockchip.c
> > > b/drivers/net/gmac_rockchip.c
> > > index e9b202a..63cccc9 100644
> > > --- a/drivers/net/gmac_rockchip.c
> > > +++ b/drivers/net/gmac_rockchip.c
> > > @@ -17,6 +17,7 @@
> > >  #include <asm/arch/grf_rk3288.h>
> > >  #include <dm/pinctrl.h>
> > >  #include <dt-bindings/clock/rk3288-cru.h>
> > > +#include <power/regulator.h>
> > >  #include "designware.h"
> > > 
> > >  DECLARE_GLOBAL_DATA_PTR;
> > > @@ -79,6 +80,22 @@ static int gmac_rockchip_probe(struct udevice
> > > *dev)
> > >         struct clk clk;
> > >         int ret;
> > > 
> > > +#if defined(CONFIG_DM_REGULATOR)
> > > +       struct udevice *phy_supply;
> > > +
> > > +       ret = device_get_supply_regulator(dev, "phy-supply",
> > > +                                         &phy_supply);
> > > +       if (ret) {
> > > +               debug("%s: No phy supply\n", dev->name);
> > > +       } else {
> > > +               ret = regulator_set_enable(phy_supply, true);
> > > +               if (ret) {
> > > +                       puts("Error enabling phy supply\n");
> > > +                       return ret;
> > > +               }
> > > +       }
> > > +#endif
> > > +
> > 
> > This seems pretty generic. Is there maybe a more common place this
> > could live? Or is the phy-supply binding in DT only defined for
> > rockchip?
> > 
> 
> I have look kernel driver and phy-supply is set in "
> drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c".
> So i think it might not be generic.


From the device-tree bindings, it's specifically documented for
allwinner,sun7i-a20-gmac and rockchip,*-gmac. It's also the common
naming for in the generic phy bindings (though i haven't seen those
used for any networking device-tree bindings). So it's not documented
as a generic property but definitely is the convential naming for,
well, phy supplies. 

Which is all pretty inconclusive :) But it might make sense to do it
generically for dwmac so e.g. the allwinner support also can use it.

> 
> > >         ret = clk_get_by_index(dev, 0, &clk);
> > >         if (ret)
> > >                 return ret;
> > > --
> > > 1.9.1
> > > 
> > > _______________________________________________
> > > U-Boot mailing list
> > > U-Boot@lists.denx.de
> > > https://lists.denx.de/listinfo/u-boot
> > 
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot@lists.denx.de
> > https://lists.denx.de/listinfo/u-boot
diff mbox

Patch

diff --git a/drivers/net/gmac_rockchip.c b/drivers/net/gmac_rockchip.c
index e9b202a..63cccc9 100644
--- a/drivers/net/gmac_rockchip.c
+++ b/drivers/net/gmac_rockchip.c
@@ -17,6 +17,7 @@ 
 #include <asm/arch/grf_rk3288.h>
 #include <dm/pinctrl.h>
 #include <dt-bindings/clock/rk3288-cru.h>
+#include <power/regulator.h>
 #include "designware.h"
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -79,6 +80,22 @@  static int gmac_rockchip_probe(struct udevice *dev)
 	struct clk clk;
 	int ret;
 
+#if defined(CONFIG_DM_REGULATOR)
+	struct udevice *phy_supply;
+
+	ret = device_get_supply_regulator(dev, "phy-supply",
+					  &phy_supply);
+	if (ret) {
+		debug("%s: No phy supply\n", dev->name);
+	} else {
+		ret = regulator_set_enable(phy_supply, true);
+		if (ret) {
+			puts("Error enabling phy supply\n");
+			return ret;
+		}
+	}
+#endif
+
 	ret = clk_get_by_index(dev, 0, &clk);
 	if (ret)
 		return ret;