Message ID | 1398082604-3013-3-git-send-email-gautam.vivek@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello, > -----Original Message----- > From: Vivek Gautam [mailto:gautamvivek1987@gmail.com] On Behalf Of > Vivek Gautam > Sent: Monday, April 21, 2014 9:17 PM > To: linux-usb@vger.kernel.org; linux-samsung-soc@vger.kernel.org > Cc: linux-kernel@vger.kernel.org; linux-omap@vger.kernel.org; linux- > arm-kernel@lists.infradead.org; gregkh@linuxfoundation.org; > stern@rowland.harvard.edu; balbi@ti.com; kgene.kim@samsung.com; Vivek > Gautam; Anton Tikhomirov > Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd > regulators > > Facilitate getting required 3.3V and 1.0V VDD supply for > DWC3 controller on Exynos. > > With patches for regulators' nodes merged in 3.15: > c8c253f ARM: dts: Add regulator entries to smdk5420 > 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, > > certain perripherals will now need to ensure that, > they request VDD regulators in their drivers, and enable > them so as to make them working. > > Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> > Cc: Anton Tikhomirov <av.tikhomirov@samsung.com> > --- > > Based on 'usb-next' branch of Greg's USB tree. > Also cleanly applies on 'next' branch of Balbi's USB tree. > > drivers/usb/dwc3/dwc3-exynos.c | 51 > ++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 49 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3- > exynos.c > index 28c8ad7..c9d9102 100644 > --- a/drivers/usb/dwc3/dwc3-exynos.c > +++ b/drivers/usb/dwc3/dwc3-exynos.c > @@ -27,6 +27,7 @@ > #include <linux/usb/usb_phy_gen_xceiv.h> > #include <linux/of.h> > #include <linux/of_platform.h> > +#include <linux/regulator/consumer.h> > > struct dwc3_exynos { > struct platform_device *usb2_phy; > @@ -34,6 +35,8 @@ struct dwc3_exynos { > struct device *dev; > > struct clk *clk; > + struct regulator *vdd33; > + struct regulator *vdd10; > }; > > static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos) > @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct > platform_device *pdev) > > clk_prepare_enable(exynos->clk); > > + exynos->vdd33 = devm_regulator_get(dev, "vdd33"); > + if (IS_ERR(exynos->vdd33)) { > + ret = PTR_ERR(exynos->vdd33); > + goto err2; Is regulator property mandatory for dwc3-exynos? If it is not and device tree doesn't provide it, dwc3-exynos driver probe shouldn't fail here. > + } > + ret = regulator_enable(exynos->vdd33); > + if (ret) { > + dev_err(dev, "Failed to enable VDD33 supply\n"); > + goto err2; > + } > + Thanks
Hi Anton, On Wed, Apr 23, 2014 at 2:56 PM, Anton Tikhomirov <av.tikhomirov@samsung.com> wrote: > Hello, > >> -----Original Message----- >> From: Vivek Gautam [mailto:gautamvivek1987@gmail.com] On Behalf Of >> Vivek Gautam >> Sent: Monday, April 21, 2014 9:17 PM >> To: linux-usb@vger.kernel.org; linux-samsung-soc@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org; linux-omap@vger.kernel.org; linux- >> arm-kernel@lists.infradead.org; gregkh@linuxfoundation.org; >> stern@rowland.harvard.edu; balbi@ti.com; kgene.kim@samsung.com; Vivek >> Gautam; Anton Tikhomirov >> Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd >> regulators >> >> Facilitate getting required 3.3V and 1.0V VDD supply for >> DWC3 controller on Exynos. >> >> With patches for regulators' nodes merged in 3.15: >> c8c253f ARM: dts: Add regulator entries to smdk5420 >> 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, >> >> certain perripherals will now need to ensure that, >> they request VDD regulators in their drivers, and enable >> them so as to make them working. >> >> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> >> Cc: Anton Tikhomirov <av.tikhomirov@samsung.com> >> --- >> >> Based on 'usb-next' branch of Greg's USB tree. >> Also cleanly applies on 'next' branch of Balbi's USB tree. >> >> drivers/usb/dwc3/dwc3-exynos.c | 51 >> ++++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 49 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3- >> exynos.c >> index 28c8ad7..c9d9102 100644 >> --- a/drivers/usb/dwc3/dwc3-exynos.c >> +++ b/drivers/usb/dwc3/dwc3-exynos.c >> @@ -27,6 +27,7 @@ >> #include <linux/usb/usb_phy_gen_xceiv.h> >> #include <linux/of.h> >> #include <linux/of_platform.h> >> +#include <linux/regulator/consumer.h> >> >> struct dwc3_exynos { >> struct platform_device *usb2_phy; >> @@ -34,6 +35,8 @@ struct dwc3_exynos { >> struct device *dev; >> >> struct clk *clk; >> + struct regulator *vdd33; >> + struct regulator *vdd10; >> }; >> >> static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos) >> @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct >> platform_device *pdev) >> >> clk_prepare_enable(exynos->clk); >> >> + exynos->vdd33 = devm_regulator_get(dev, "vdd33"); >> + if (IS_ERR(exynos->vdd33)) { >> + ret = PTR_ERR(exynos->vdd33); >> + goto err2; > > Is regulator property mandatory for dwc3-exynos? If it is not > and device tree doesn't provide it, dwc3-exynos driver probe shouldn't > fail here. These are the VDD regulators (from PMIC ldo supplies), in absence of which the controller will not be powered up. So doesn't it make sense to stop the probe when these are not supplied by device tree ? [snip]
Hi, > Hi Anton, > > > On Wed, Apr 23, 2014 at 2:56 PM, Anton Tikhomirov > <av.tikhomirov@samsung.com> wrote: > > Hello, > > > >> -----Original Message----- > >> From: Vivek Gautam [mailto:gautamvivek1987@gmail.com] On Behalf Of > >> Vivek Gautam > >> Sent: Monday, April 21, 2014 9:17 PM > >> To: linux-usb@vger.kernel.org; linux-samsung-soc@vger.kernel.org > >> Cc: linux-kernel@vger.kernel.org; linux-omap@vger.kernel.org; linux- > >> arm-kernel@lists.infradead.org; gregkh@linuxfoundation.org; > >> stern@rowland.harvard.edu; balbi@ti.com; kgene.kim@samsung.com; > Vivek > >> Gautam; Anton Tikhomirov > >> Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd > >> regulators > >> > >> Facilitate getting required 3.3V and 1.0V VDD supply for > >> DWC3 controller on Exynos. > >> > >> With patches for regulators' nodes merged in 3.15: > >> c8c253f ARM: dts: Add regulator entries to smdk5420 > >> 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, > >> > >> certain perripherals will now need to ensure that, > >> they request VDD regulators in their drivers, and enable > >> them so as to make them working. > >> > >> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> > >> Cc: Anton Tikhomirov <av.tikhomirov@samsung.com> > >> --- > >> > >> Based on 'usb-next' branch of Greg's USB tree. > >> Also cleanly applies on 'next' branch of Balbi's USB tree. > >> > >> drivers/usb/dwc3/dwc3-exynos.c | 51 > >> ++++++++++++++++++++++++++++++++++++++-- > >> 1 file changed, 49 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3- > >> exynos.c > >> index 28c8ad7..c9d9102 100644 > >> --- a/drivers/usb/dwc3/dwc3-exynos.c > >> +++ b/drivers/usb/dwc3/dwc3-exynos.c > >> @@ -27,6 +27,7 @@ > >> #include <linux/usb/usb_phy_gen_xceiv.h> > >> #include <linux/of.h> > >> #include <linux/of_platform.h> > >> +#include <linux/regulator/consumer.h> > >> > >> struct dwc3_exynos { > >> struct platform_device *usb2_phy; > >> @@ -34,6 +35,8 @@ struct dwc3_exynos { > >> struct device *dev; > >> > >> struct clk *clk; > >> + struct regulator *vdd33; > >> + struct regulator *vdd10; > >> }; > >> > >> static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos) > >> @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct > >> platform_device *pdev) > >> > >> clk_prepare_enable(exynos->clk); > >> > >> + exynos->vdd33 = devm_regulator_get(dev, "vdd33"); > >> + if (IS_ERR(exynos->vdd33)) { > >> + ret = PTR_ERR(exynos->vdd33); > >> + goto err2; > > > > Is regulator property mandatory for dwc3-exynos? If it is not > > and device tree doesn't provide it, dwc3-exynos driver probe > shouldn't > > fail here. > > These are the VDD regulators (from PMIC ldo supplies), in absence of > which the controller will not be powered up. > So doesn't it make sense to stop the probe when these are not supplied > by device tree ? Agree. Just curious, is there special reason for this change except making things right?
Hi, On Wed, Apr 23, 2014 at 4:27 PM, Anton Tikhomirov <av.tikhomirov@samsung.com> wrote: > Hi, > >> Hi Anton, >> >> >> On Wed, Apr 23, 2014 at 2:56 PM, Anton Tikhomirov >> <av.tikhomirov@samsung.com> wrote: >> > Hello, >> > >> >> -----Original Message----- >> >> From: Vivek Gautam [mailto:gautamvivek1987@gmail.com] On Behalf Of >> >> Vivek Gautam >> >> Sent: Monday, April 21, 2014 9:17 PM >> >> To: linux-usb@vger.kernel.org; linux-samsung-soc@vger.kernel.org >> >> Cc: linux-kernel@vger.kernel.org; linux-omap@vger.kernel.org; linux- >> >> arm-kernel@lists.infradead.org; gregkh@linuxfoundation.org; >> >> stern@rowland.harvard.edu; balbi@ti.com; kgene.kim@samsung.com; >> Vivek >> >> Gautam; Anton Tikhomirov >> >> Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd >> >> regulators >> >> >> >> Facilitate getting required 3.3V and 1.0V VDD supply for >> >> DWC3 controller on Exynos. >> >> >> >> With patches for regulators' nodes merged in 3.15: >> >> c8c253f ARM: dts: Add regulator entries to smdk5420 >> >> 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, >> >> >> >> certain perripherals will now need to ensure that, >> >> they request VDD regulators in their drivers, and enable >> >> them so as to make them working. >> >> >> >> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> >> >> Cc: Anton Tikhomirov <av.tikhomirov@samsung.com> >> >> --- >> >> >> >> Based on 'usb-next' branch of Greg's USB tree. >> >> Also cleanly applies on 'next' branch of Balbi's USB tree. >> >> >> >> drivers/usb/dwc3/dwc3-exynos.c | 51 >> >> ++++++++++++++++++++++++++++++++++++++-- >> >> 1 file changed, 49 insertions(+), 2 deletions(-) >> >> >> >> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3- >> >> exynos.c >> >> index 28c8ad7..c9d9102 100644 >> >> --- a/drivers/usb/dwc3/dwc3-exynos.c >> >> +++ b/drivers/usb/dwc3/dwc3-exynos.c >> >> @@ -27,6 +27,7 @@ >> >> #include <linux/usb/usb_phy_gen_xceiv.h> >> >> #include <linux/of.h> >> >> #include <linux/of_platform.h> >> >> +#include <linux/regulator/consumer.h> >> >> >> >> struct dwc3_exynos { >> >> struct platform_device *usb2_phy; >> >> @@ -34,6 +35,8 @@ struct dwc3_exynos { >> >> struct device *dev; >> >> >> >> struct clk *clk; >> >> + struct regulator *vdd33; >> >> + struct regulator *vdd10; >> >> }; >> >> >> >> static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos) >> >> @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct >> >> platform_device *pdev) >> >> >> >> clk_prepare_enable(exynos->clk); >> >> >> >> + exynos->vdd33 = devm_regulator_get(dev, "vdd33"); >> >> + if (IS_ERR(exynos->vdd33)) { >> >> + ret = PTR_ERR(exynos->vdd33); >> >> + goto err2; >> > >> > Is regulator property mandatory for dwc3-exynos? If it is not >> > and device tree doesn't provide it, dwc3-exynos driver probe >> shouldn't >> > fail here. >> >> These are the VDD regulators (from PMIC ldo supplies), in absence of >> which the controller will not be powered up. >> So doesn't it make sense to stop the probe when these are not supplied >> by device tree ? > > Agree. Just curious, is there special reason for this change except making > things right? Yea, actually after the patch (which got merged in 3.15 rc1) 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, the USB stops working, and that's because the regulators related to usb are not turned on by default (ldo12 and ldo15 to be specific). So we need to enable those regulators, which ofcourse the driver should be doing, if i am not wrong. Similar is the reason for EHCI, and OHCI exynos patches in this series. I shall be sending the dt patch for this soon.
On Wednesday, April 23, 2014 8:06 PM, Vivek Gautam wrote: > On Wednesday, April 23, 2014 7:58 PM, Anton Tikhomirov wrote: > > On Wednesday, April 23, 2014 6:52 PM, Vivek Gautam wrote: > >> On Wednesday, April 23, 2014 6:27 PM, Anton Tikhomirov wrote: > >> > On Monday, April 21, 2014 9:17 PM, Vivek Gautam wrote: > >> >> > >> >> Facilitate getting required 3.3V and 1.0V VDD supply for > >> >> DWC3 controller on Exynos. > >> >> > >> >> With patches for regulators' nodes merged in 3.15: > >> >> c8c253f ARM: dts: Add regulator entries to smdk5420 > >> >> 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, > >> >> > >> >> certain perripherals will now need to ensure that, > >> >> they request VDD regulators in their drivers, and enable > >> >> them so as to make them working. > >> >> > >> >> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> > >> >> Cc: Anton Tikhomirov <av.tikhomirov@samsung.com> > >> >> --- > >> >> > >> >> Based on 'usb-next' branch of Greg's USB tree. > >> >> Also cleanly applies on 'next' branch of Balbi's USB tree. > >> >> > >> >> drivers/usb/dwc3/dwc3-exynos.c | 51 > >> >> ++++++++++++++++++++++++++++++++++++++-- > >> >> 1 file changed, 49 insertions(+), 2 deletions(-) > >> >> > >> >> diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3- > >> >> exynos.c > >> >> index 28c8ad7..c9d9102 100644 > >> >> --- a/drivers/usb/dwc3/dwc3-exynos.c > >> >> +++ b/drivers/usb/dwc3/dwc3-exynos.c > >> >> @@ -27,6 +27,7 @@ > >> >> #include <linux/usb/usb_phy_gen_xceiv.h> > >> >> #include <linux/of.h> > >> >> #include <linux/of_platform.h> > >> >> +#include <linux/regulator/consumer.h> > >> >> > >> >> struct dwc3_exynos { > >> >> struct platform_device *usb2_phy; > >> >> @@ -34,6 +35,8 @@ struct dwc3_exynos { > >> >> struct device *dev; > >> >> > >> >> struct clk *clk; > >> >> + struct regulator *vdd33; > >> >> + struct regulator *vdd10; > >> >> }; > >> >> > >> >> static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos) > >> >> @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct > >> >> platform_device *pdev) > >> >> > >> >> clk_prepare_enable(exynos->clk); > >> >> > >> >> + exynos->vdd33 = devm_regulator_get(dev, "vdd33"); > >> >> + if (IS_ERR(exynos->vdd33)) { > >> >> + ret = PTR_ERR(exynos->vdd33); > >> >> + goto err2; > >> > > >> > Is regulator property mandatory for dwc3-exynos? If it is not > >> > and device tree doesn't provide it, dwc3-exynos driver probe > >> shouldn't > >> > fail here. > >> > >> These are the VDD regulators (from PMIC ldo supplies), in absence of > >> which the controller will not be powered up. > >> So doesn't it make sense to stop the probe when these are not supplied > >> by device tree ? > > > > Agree. Just curious, is there special reason for this change except making > > things right? > > Yea, actually after the patch (which got merged in 3.15 rc1) > 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, > > the USB stops working, and that's because the regulators related to > usb are not turned on by default (ldo12 and ldo15 to be specific). > So we need to enable those regulators, which ofcourse the driver > should be doing, if i am not wrong. > Similar is the reason for EHCI, and OHCI exynos patches in this series. Oh, I see. Thank you for your explanation. > > I shall be sending the dt patch for this soon. OK, I will wait for your patch. Best regards, Jingoo Han > > > -- > Best Regards > Vivek Gautam > Samsung R&D Institute, Bangalore > India
diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c index 28c8ad7..c9d9102 100644 --- a/drivers/usb/dwc3/dwc3-exynos.c +++ b/drivers/usb/dwc3/dwc3-exynos.c @@ -27,6 +27,7 @@ #include <linux/usb/usb_phy_gen_xceiv.h> #include <linux/of.h> #include <linux/of_platform.h> +#include <linux/regulator/consumer.h> struct dwc3_exynos { struct platform_device *usb2_phy; @@ -34,6 +35,8 @@ struct dwc3_exynos { struct device *dev; struct clk *clk; + struct regulator *vdd33; + struct regulator *vdd10; }; static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos) @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct platform_device *pdev) clk_prepare_enable(exynos->clk); + exynos->vdd33 = devm_regulator_get(dev, "vdd33"); + if (IS_ERR(exynos->vdd33)) { + ret = PTR_ERR(exynos->vdd33); + goto err2; + } + ret = regulator_enable(exynos->vdd33); + if (ret) { + dev_err(dev, "Failed to enable VDD33 supply\n"); + goto err2; + } + + exynos->vdd10 = devm_regulator_get(dev, "vdd10"); + if (IS_ERR(exynos->vdd10)) { + ret = PTR_ERR(exynos->vdd10); + goto err3; + } + ret = regulator_enable(exynos->vdd10); + if (ret) { + dev_err(dev, "Failed to enable VDD10 supply\n"); + goto err3; + } + if (node) { ret = of_platform_populate(node, NULL, NULL, dev); if (ret) { dev_err(dev, "failed to add dwc3 core\n"); - goto err2; + goto err4; } } else { dev_err(dev, "no device node, failed to add dwc3 core\n"); ret = -ENODEV; - goto err2; + goto err4; } return 0; +err4: + regulator_disable(exynos->vdd10); +err3: + regulator_disable(exynos->vdd33); err2: clk_disable_unprepare(clk); err1: @@ -174,6 +203,9 @@ static int dwc3_exynos_remove(struct platform_device *pdev) clk_disable_unprepare(exynos->clk); + regulator_disable(exynos->vdd33); + regulator_disable(exynos->vdd10); + return 0; } @@ -192,12 +224,27 @@ static int dwc3_exynos_suspend(struct device *dev) clk_disable(exynos->clk); + regulator_disable(exynos->vdd33); + regulator_disable(exynos->vdd10); + return 0; } static int dwc3_exynos_resume(struct device *dev) { struct dwc3_exynos *exynos = dev_get_drvdata(dev); + int ret; + + ret = regulator_enable(exynos->vdd33); + if (ret) { + dev_err(dev, "Failed to enable VDD33 supply\n"); + return ret; + } + ret = regulator_enable(exynos->vdd10); + if (ret) { + dev_err(dev, "Failed to enable VDD10 supply\n"); + return ret; + } clk_enable(exynos->clk);
Facilitate getting required 3.3V and 1.0V VDD supply for DWC3 controller on Exynos. With patches for regulators' nodes merged in 3.15: c8c253f ARM: dts: Add regulator entries to smdk5420 275dcd2 ARM: dts: add max77686 pmic node for smdk5250, certain perripherals will now need to ensure that, they request VDD regulators in their drivers, and enable them so as to make them working. Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> Cc: Anton Tikhomirov <av.tikhomirov@samsung.com> --- Based on 'usb-next' branch of Greg's USB tree. Also cleanly applies on 'next' branch of Balbi's USB tree. drivers/usb/dwc3/dwc3-exynos.c | 51 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-)