Re: [PATCH v2 5/5] usb: musb: da8xx: Add a primary support of PM runtime

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux PCI]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux