Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753221AbbHUMo6 (ORCPT ); Fri, 21 Aug 2015 08:44:58 -0400 Received: from comal.ext.ti.com ([198.47.26.152]:53702 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752068AbbHUMo4 (ORCPT ); Fri, 21 Aug 2015 08:44:56 -0400 Message-ID: <55D71D3E.3010807@ti.com> Date: Fri, 21 Aug 2015 18:14:46 +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: Marek Szyprowski , , , CC: Robert Baldyga , John Youn , Krzysztof Kozlowski , Kukjin Kim , Kamil Debski Subject: Re: [PATCH 1/7] phy: exynos-usb2: add vbus regulator support References: <1440160723-6636-1-git-send-email-m.szyprowski@samsung.com> <1440160723-6636-2-git-send-email-m.szyprowski@samsung.com> In-Reply-To: <1440160723-6636-2-git-send-email-m.szyprowski@samsung.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4161 Lines: 125 Hi, On Friday 21 August 2015 06:08 PM, Marek Szyprowski wrote: > Exynos USB2 PHY has separate power supply, which is usually provided by > VBUS regulator. This patch adds support for it. VBUS regulator is > optional, to keep compatibility with boards, which have VBUS provided > from some always-on power source. > > Signed-off-by: Marek Szyprowski > --- > .../devicetree/bindings/phy/samsung-phy.txt | 3 +++ > drivers/phy/phy-samsung-usb2.c | 25 ++++++++++++++++++++-- > drivers/phy/phy-samsung-usb2.h | 2 ++ > 3 files changed, 28 insertions(+), 2 deletions(-) > > diff --git a/Documentation/devicetree/bindings/phy/samsung-phy.txt b/Documentation/devicetree/bindings/phy/samsung-phy.txt > index 60c6f2a633e0..0289d3b07853 100644 > --- a/Documentation/devicetree/bindings/phy/samsung-phy.txt > +++ b/Documentation/devicetree/bindings/phy/samsung-phy.txt > @@ -44,6 +44,9 @@ Required properties: > - the "ref" clock is used to get the rate of the clock provided to the > PHY module > > +Optional properties: > +- vbus-supply: power-supply phandle for vbus power source how about using phy-supply? Thanks Kishon > + > The first phandle argument in the PHY specifier identifies the PHY, its > meaning is compatible dependent. For the currently supported SoCs (Exynos 4210 > and Exynos 4212) it is as follows: > diff --git a/drivers/phy/phy-samsung-usb2.c b/drivers/phy/phy-samsung-usb2.c > index f278a9c547e1..1d22d93b552d 100644 > --- a/drivers/phy/phy-samsung-usb2.c > +++ b/drivers/phy/phy-samsung-usb2.c > @@ -27,6 +27,13 @@ static int samsung_usb2_phy_power_on(struct phy *phy) > > dev_dbg(drv->dev, "Request to power_on \"%s\" usb phy\n", > inst->cfg->label); > + > + if (drv->vbus) { > + ret = regulator_enable(drv->vbus); > + if (ret) > + goto err_regulator; > + } > + > ret = clk_prepare_enable(drv->clk); > if (ret) > goto err_main_clk; > @@ -48,6 +55,9 @@ err_power_on: > err_instance_clk: > clk_disable_unprepare(drv->clk); > err_main_clk: > + if (drv->vbus) > + regulator_disable(drv->vbus); > +err_regulator: > return ret; > } > > @@ -55,7 +65,7 @@ static int samsung_usb2_phy_power_off(struct phy *phy) > { > struct samsung_usb2_phy_instance *inst = phy_get_drvdata(phy); > struct samsung_usb2_phy_driver *drv = inst->drv; > - int ret; > + int ret = 0; > > dev_dbg(drv->dev, "Request to power_off \"%s\" usb phy\n", > inst->cfg->label); > @@ -68,7 +78,10 @@ static int samsung_usb2_phy_power_off(struct phy *phy) > } > clk_disable_unprepare(drv->ref_clk); > clk_disable_unprepare(drv->clk); > - return 0; > + if (drv->vbus) > + ret = regulator_disable(drv->vbus); > + > + return ret; > } > > static const struct phy_ops samsung_usb2_phy_ops = { > @@ -203,6 +216,14 @@ static int samsung_usb2_phy_probe(struct platform_device *pdev) > return ret; > } > > + drv->vbus = devm_regulator_get(dev, "vbus"); > + if (IS_ERR(drv->vbus)) { > + ret = PTR_ERR(drv->vbus); > + if (ret == -EPROBE_DEFER) > + return ret; > + drv->vbus = NULL; > + } > + > for (i = 0; i < drv->cfg->num_phys; i++) { > char *label = drv->cfg->phys[i].label; > struct samsung_usb2_phy_instance *p = &drv->instances[i]; > diff --git a/drivers/phy/phy-samsung-usb2.h b/drivers/phy/phy-samsung-usb2.h > index 44bead9b8f34..6563e7ca0ac4 100644 > --- a/drivers/phy/phy-samsung-usb2.h > +++ b/drivers/phy/phy-samsung-usb2.h > @@ -17,6 +17,7 @@ > #include > #include > #include > +#include > > #define KHZ 1000 > #define MHZ (KHZ * KHZ) > @@ -37,6 +38,7 @@ struct samsung_usb2_phy_driver { > const struct samsung_usb2_phy_config *cfg; > struct clk *clk; > struct clk *ref_clk; > + struct regulator *vbus; > unsigned long ref_rate; > u32 ref_reg_val; > struct device *dev; > -- 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/