Hi, John Youn <John.Youn@xxxxxxxxxxxx> writes: > Hi Felipe, > > On 8/10/2016 6:53 AM, Dinh Nguyen wrote: >> From: Dinh Nguyen <dinguyen@xxxxxxxxxxxxxxxxxxxxx> >> >> Allow for platforms that have a reset controller driver in place to bring >> the USB IP out of reset. >> >> Signed-off-by: Dinh Nguyen <dinguyen@xxxxxxxxxxxxxxxxxxxxx> >> Acked-by: John Youn <johnyoun@xxxxxxxxxxxx> >> Tested-by: Stefan Wahren <stefan.wahren@xxxxxxxx> >> --- >> Hi Felipe, >> >> Can you please take this patch through your USB tree? This patch was dependent >> on "168d7c4e8bb2 reset: Return -ENOTSUPP when not configured" and is now in >> v3.8-rc1. >> >> The discussion is highlight here: >> >> https://lkml.org/lkml/2016/7/7/291 >> >> Thanks, >> Dinh >> --- >> v7: Use devm_reset_control_get_optional() >> v6: fix 80 line checkpatch warning in dev_err print >> v5: updated error conditions for not finding the reset property >> v4: use dev_dbg() if not a -EPROBE_DEFER >> v3: fix compile error >> v2: move to lowlevel_hw_init() >> --- >> drivers/usb/dwc2/core.h | 1 + >> drivers/usb/dwc2/platform.c | 22 ++++++++++++++++++++++ >> 2 files changed, 23 insertions(+) >> >> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h >> index 9fae029..d645512 100644 >> --- a/drivers/usb/dwc2/core.h >> +++ b/drivers/usb/dwc2/core.h >> @@ -868,6 +868,7 @@ struct dwc2_hsotg { >> void *priv; >> int irq; >> struct clk *clk; >> + struct reset_control *reset; >> >> unsigned int queuing_high_bandwidth:1; >> unsigned int srp_success:1; >> diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c >> index fc6f525..530959a 100644 >> --- a/drivers/usb/dwc2/platform.c >> +++ b/drivers/usb/dwc2/platform.c >> @@ -45,6 +45,7 @@ >> #include <linux/platform_device.h> >> #include <linux/phy/phy.h> >> #include <linux/platform_data/s3c-hsotg.h> >> +#include <linux/reset.h> >> >> #include <linux/usb/of.h> >> >> @@ -337,6 +338,24 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) >> { >> int i, ret; >> >> + hsotg->reset = devm_reset_control_get_optional(hsotg->dev, "dwc2"); >> + if (IS_ERR(hsotg->reset)) { >> + ret = PTR_ERR(hsotg->reset); >> + switch (ret) { >> + case -ENOENT: >> + case -ENOTSUPP: >> + hsotg->reset = NULL; >> + break; >> + default: >> + dev_err(hsotg->dev, "error getting reset control %d\n", >> + ret); >> + return ret; >> + } >> + } >> + >> + if (hsotg->reset) >> + reset_control_deassert(hsotg->reset); >> + >> /* Set default UTMI width */ >> hsotg->phyif = GUSBCFG_PHYIF16; >> >> @@ -434,6 +453,9 @@ static int dwc2_driver_remove(struct platform_device *dev) >> if (hsotg->ll_hw_enabled) >> dwc2_lowlevel_hw_disable(hsotg); >> >> + if (hsotg->reset) >> + reset_control_assert(hsotg->reset); >> + >> return 0; >> } >> >> > > Can you take this for 4.8-rc? All the dependencies are in place now. now in testing/fixes, thanks -- balbi
Attachment:
signature.asc
Description: PGP signature