Hi, On Mon, Jun 30, 2014 at 02:00:36PM +0300, Roger Quadros wrote: > On some SoCs e.g. J6 the 3.3V supply to the USB2 PHY can be > powered down when the PHY is not in use. Add regulator > management code to control this power line. > > Signed-off-by: Roger Quadros <rogerq@xxxxxx> Reviewed-by: Felipe Balbi <balbi@xxxxxx> > --- > drivers/phy/phy-omap-usb2.c | 25 +++++++++++++++++++++++++ > include/linux/phy/omap_usb.h | 1 + > 2 files changed, 26 insertions(+) > > diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c > index 7007c11..2afc79c 100644 > --- a/drivers/phy/phy-omap-usb2.c > +++ b/drivers/phy/phy-omap-usb2.c > @@ -30,6 +30,7 @@ > #include <linux/phy/omap_control_phy.h> > #include <linux/phy/phy.h> > #include <linux/of_platform.h> > +#include <linux/regulator/consumer.h> > > #define USB2PHY_DISCON_BYP_LATCH (1 << 31) > #define USB2PHY_ANA_CONFIG1 0x4c > @@ -107,6 +108,14 @@ static int omap_usb_power_off(struct phy *x) > > omap_control_phy_power(phy->control_dev, 0); > > + if (phy->pwr) { > + int ret; > + > + ret = regulator_disable(phy->pwr); > + if (ret) > + return ret; > + } > + > return 0; > } > > @@ -114,6 +123,14 @@ static int omap_usb_power_on(struct phy *x) > { > struct omap_usb *phy = phy_get_drvdata(x); > > + if (phy->pwr) { > + int ret; > + > + ret = regulator_enable(phy->pwr); > + if (ret) > + return ret; > + } > + > omap_control_phy_power(phy->control_dev, 1); > > return 0; > @@ -253,6 +270,14 @@ static int omap_usb2_probe(struct platform_device *pdev) > phy->control_dev = &control_pdev->dev; > omap_control_phy_power(phy->control_dev, 0); > > + /* phy-supply */ > + phy->pwr = devm_regulator_get_optional(phy->dev, "phy"); > + if (IS_ERR(phy->pwr)) { > + if (PTR_ERR(phy->pwr) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + phy->pwr = NULL; > + } > + > otg->set_host = omap_usb_set_host; > otg->set_peripheral = omap_usb_set_peripheral; > if (phy_data->flags & OMAP_USB2_HAS_SET_VBUS) > diff --git a/include/linux/phy/omap_usb.h b/include/linux/phy/omap_usb.h > index dc2c541..e2c46df 100644 > --- a/include/linux/phy/omap_usb.h > +++ b/include/linux/phy/omap_usb.h > @@ -40,6 +40,7 @@ struct omap_usb { > struct clk *wkupclk; > struct clk *optclk; > u8 flags; > + struct regulator *pwr; > }; > > struct usb_phy_data { > -- > 1.8.3.2 > -- balbi
Attachment:
signature.asc
Description: Digital signature