On 01/17/2017 06:37 PM, Sergei Shtylyov wrote: > On 01/17/2017 05:35 PM, Alexandre Bailon wrote: > >> Currently, DA8xx doesn't support PM runtime. >> In addition, the glue driver is managing the clock itself. >> But the CPPI DMA needs to manage this clock too. >> Add support to PM runtime and use the callback to enable / disable >> the clock. And because the CPPI 4.1 is a child of Da8xx USB, >> it will be able to enable / disable the clock by using PM runtime. >> >> Signed-off-by: Alexandre Bailon <abailon@xxxxxxxxxxxx> >> --- >> drivers/usb/musb/da8xx.c | 41 ++++++++++++++++++++++++++++++++++------- >> 1 file changed, 34 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c >> index 046356f..e67c41d 100644 >> --- a/drivers/usb/musb/da8xx.c >> +++ b/drivers/usb/musb/da8xx.c >> @@ -379,11 +379,7 @@ static int da8xx_musb_init(struct musb *musb) >> >> musb->mregs += DA8XX_MENTOR_CORE_OFFSET; >> >> - ret = clk_prepare_enable(glue->clk); >> - if (ret) { >> - dev_err(glue->dev, "failed to enable clock\n"); >> - return ret; >> - } >> + pm_runtime_get(musb->controller->parent); > > Not get_sync()? You're accessing a register next thing... > >> /* Returns zero if e.g. not clocked */ >> rev = musb_readl(reg_base, DA8XX_USB_REVISION_REG); > [...] >> @@ -614,12 +612,41 @@ static const struct of_device_id >> da8xx_id_table[] = { >> MODULE_DEVICE_TABLE(of, da8xx_id_table); >> #endif >> >> +static int da8xx_runtime_suspend(struct device *dev) >> +{ >> + struct da8xx_glue *glue = dev_get_drvdata(dev); >> + >> + clk_disable_unprepare(glue->clk); > > I thought RPM would do that for you... DA8xx doesn't support yet the common clock framework. So for now, we have to manage clock in the driver. > >> + >> + return 0; >> +} >> + >> +static int da8xx_runtime_resume(struct device *dev) >> +{ >> + int ret; >> + struct da8xx_glue *glue = dev_get_drvdata(dev); >> + >> + ret = clk_prepare_enable(glue->clk); > > And this too... > >> + if (ret) { >> + dev_err(glue->dev, "failed to enable clock\n"); >> + return ret; >> + } >> + >> + return 0; >> +} > [...] > > MBR, Sergei > Best Regards, Alexandre -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html