On Mon, Oct 13, 2014 at 10:36 AM, Anton Tikhomirov <av.tikhomirov@xxxxxxxxxxx> wrote: > Hi Vivek, > >> Some Exynos SoCs have a separate regulator controlling a > > I guess you meant the Exynos based *boards* instead of SoCs, > since Exynos SoCs don't have any boost regulators. Right, should be boards instead. Thanks for pointing it out. > >> Boost 5V supply which goes as input for VBUS regulator. >> So adding a control for the same in driver, to enable >> vbus supply on the port. >> >> Signed-off-by: Vivek Gautam <gautam.vivek@xxxxxxxxxxx> >> --- >> drivers/phy/phy-exynos5-usbdrd.c | 30 ++++++++++++++++++++++++++++-- >> 1 file changed, 28 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/phy/phy-exynos5-usbdrd.c b/drivers/phy/phy- >> exynos5-usbdrd.c >> index 013ee84..57e8a0a 100644 >> --- a/drivers/phy/phy-exynos5-usbdrd.c >> +++ b/drivers/phy/phy-exynos5-usbdrd.c >> @@ -176,6 +176,7 @@ struct exynos5_usbdrd_phy { >> u32 extrefclk; >> struct clk *ref_clk; >> struct regulator *vbus; >> + struct regulator *vbus_boost; >> }; >> >> static inline >> @@ -455,11 +456,20 @@ static int exynos5_usbdrd_phy_power_on(struct phy >> *phy) >> clk_prepare_enable(phy_drd->ref_clk); >> >> /* Enable VBUS supply */ >> + if (phy_drd->vbus_boost) { >> + ret = regulator_enable(phy_drd->vbus_boost); >> + if (ret) { >> + dev_err(phy_drd->dev, >> + "Failed to enable VBUS boost supply\n"); >> + goto fail_vbus; >> + } >> + } >> + >> if (phy_drd->vbus) { >> ret = regulator_enable(phy_drd->vbus); >> if (ret) { >> dev_err(phy_drd->dev, "Failed to enable VBUS >> supply\n"); >> - goto fail_vbus; >> + goto fail_vbus_boost; >> } >> } >> >> @@ -468,6 +478,10 @@ static int exynos5_usbdrd_phy_power_on(struct phy >> *phy) >> >> return 0; >> >> +fail_vbus_boost: >> + if (phy_drd->vbus_boost) >> + regulator_disable(phy_drd->vbus_boost); >> + >> fail_vbus: >> clk_disable_unprepare(phy_drd->ref_clk); >> clk_disable_unprepare(phy_drd->pipeclk); >> @@ -489,6 +503,8 @@ static int exynos5_usbdrd_phy_power_off(struct phy >> *phy) >> /* Disable VBUS supply */ >> if (phy_drd->vbus) >> regulator_disable(phy_drd->vbus); >> + if (phy_drd->vbus_boost) >> + regulator_disable(phy_drd->vbus_boost); >> >> clk_disable_unprepare(phy_drd->ref_clk); >> clk_disable_unprepare(phy_drd->pipeclk); >> @@ -644,7 +660,7 @@ static int exynos5_usbdrd_phy_probe(struct >> platform_device *pdev) >> break; >> } >> >> - /* Get Vbus regulator */ >> + /* Get Vbus regulators */ >> phy_drd->vbus = devm_regulator_get(dev, "vbus"); >> if (IS_ERR(phy_drd->vbus)) { >> ret = PTR_ERR(phy_drd->vbus); >> @@ -655,6 +671,16 @@ static int exynos5_usbdrd_phy_probe(struct >> platform_device *pdev) >> phy_drd->vbus = NULL; >> } >> >> + phy_drd->vbus_boost = devm_regulator_get(dev, "vbus-boost"); >> + if (IS_ERR(phy_drd->vbus_boost)) { >> + ret = PTR_ERR(phy_drd->vbus_boost); >> + if (ret == -EPROBE_DEFER) >> + return ret; >> + >> + dev_warn(dev, "Failed to get VBUS boost supply >> regulator\n"); >> + phy_drd->vbus_boost = NULL; >> + } >> + >> dev_vdbg(dev, "Creating usbdrd_phy phy\n"); >> >> for (i = 0; i < EXYNOS5_DRDPHYS_NUM; i++) { >> -- >> 1.7.10.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-usb" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Best Regards Vivek Gautam Samsung R&D Institute, Bangalore India -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html