On Thu, Oct 4, 2018 at 12:55 PM Martin Fuzzey <martin.fuzzey@flowbird.group> wrote: > > Configure the phy regulator if defined by the "phy-supply" DT phandle. > > Signed-off-by: Martin Fuzzey <martin.fuzzey@flowbird.group>
This patch seems to break the Ethernet on my board, but I think I have a possible solution (see below) > --- > drivers/net/fec_mxc.c | 20 ++++++++++++++++++++ > drivers/net/fec_mxc.h | 3 +++ > 2 files changed, 23 insertions(+) > > diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c > index 163ae4c..4a5555e 100644 > --- a/drivers/net/fec_mxc.c > +++ b/drivers/net/fec_mxc.c > @@ -15,6 +15,7 @@ > #include <miiphy.h> > #include <net.h> > #include <netdev.h> > +#include <power/regulator.h> > > #include <asm/io.h> > #include <linux/errno.h> > @@ -1272,6 +1273,16 @@ static int fecmxc_probe(struct udevice *dev) > if (ret) > return ret; > > +#ifdef CONFIG_DM_REGULATOR > + if (priv->phy_supply) { > + ret = regulator_autoset(priv->phy_supply); I have a board that uses a fixed regulator driven by a GPIO. It's neither always-on, nor it is enabled on boot and it doesn't have a specified current setting. With DM_REGULATOR set, regulator_autoset fails and FEC doesn't come up. Looking at a bunch of other drivers, and how they enable their respective regulators, they're using regulator_set_enable instead of autoset. Is there a reason we couldn't use ret = regulator_set_enable(priv->phy_supply, true); adam > + if (ret) { > + printf("%s: Error enabling phy supply\n", dev->name); > + return ret; > + } > + } > +#endif > + > #ifdef CONFIG_DM_GPIO > fec_gpio_reset(priv); > #endif > @@ -1327,6 +1338,11 @@ static int fecmxc_remove(struct udevice *dev) > mdio_unregister(priv->bus); > mdio_free(priv->bus); > > +#ifdef CONFIG_DM_REGULATOR > + if (priv->phy_supply) > + regulator_set_enable(priv->phy_supply, false); > +#endif > + > return 0; > } > > @@ -1364,6 +1380,10 @@ static int fecmxc_ofdata_to_platdata(struct udevice > *dev) > } > #endif > > +#ifdef CONFIG_DM_REGULATOR > + device_get_supply_regulator(dev, "phy-supply", &priv->phy_supply); > +#endif > + > return 0; > } > > diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h > index fd89443..848cd7c 100644 > --- a/drivers/net/fec_mxc.h > +++ b/drivers/net/fec_mxc.h > @@ -250,6 +250,9 @@ struct fec_priv { > int phy_id; > int (*mii_postcall)(int); > #endif > +#ifdef CONFIG_DM_REGULATOR > + struct udevice *phy_supply; > +#endif > #ifdef CONFIG_DM_GPIO > struct gpio_desc phy_reset_gpio; > uint32_t reset_delay; > -- > 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