From patchwork Wed Feb 15 14:26:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Bailon X-Patchwork-Id: 9574203 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C8C1560209 for ; Wed, 15 Feb 2017 14:27:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BCDB627D16 for ; Wed, 15 Feb 2017 14:27:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B18F527E5A; Wed, 15 Feb 2017 14:27:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5065A27D16 for ; Wed, 15 Feb 2017 14:27:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751513AbdBOO1I (ORCPT ); Wed, 15 Feb 2017 09:27:08 -0500 Received: from mail-wr0-f179.google.com ([209.85.128.179]:34309 "EHLO mail-wr0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751108AbdBOO1H (ORCPT ); Wed, 15 Feb 2017 09:27:07 -0500 Received: by mail-wr0-f179.google.com with SMTP id z61so4245331wrc.1 for ; Wed, 15 Feb 2017 06:27:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Y7aVpeLpDnxEcpOHdajHNOOUQx4UEJMYV+NO595uM6s=; b=jjOHxkKbtdOvShxqyS14CJHT6J2tiZNkhg/OkmRls6AwLUSvurHZQH0ku7W8t+ile1 uAcfzA8jMm/Apc0g5qAzooov/N3s6P6tb14TVy/dFE+FWBGYioIYkOr5kHeKmWbbKwzI M1Jb3xyS7HF9Z/Eyo086ub1Mk3DPBfJvk9nmGI8LZYeWcN+S3yw3oQuv4ZSAMUrxkxvG reqhbhR4WcR5AgIXFcKE/zwoHxo/XCTnqjtCke1tTNYcGSCmaaB/Asihx1IMlCzeUDMa pbcENgG9a6QOsc/Cho1IRhTb6VpCYhBJcVSvK1UvyYUW2GUpvM/0Ck1xr6mjB5/nTnVg 60Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Y7aVpeLpDnxEcpOHdajHNOOUQx4UEJMYV+NO595uM6s=; b=op4VVzdlJuteVfHHdL3rV/kCr2958sesoA05CuIE1FZB17xtCZbVRK7LNAz01e8Zo0 CtNRNR8KSz5Wu9rw+B4pM0WcedO2Yjb2Uio57gxBP0TbCANX+j4wIrmsof48wbmwgoNj Y1huBEHYVM99d6qf7+2jauvDV7ouc8PigIgg9Y6ir2oP2joVi6QrLjhNmv2h5X11u1+E fs3dKGDC6JJCZoPiN/BxHPd/jS643a/DnkaR/NmfrW3qLbmZpsDLhdQO2AL6I9ELjtjO 3APolPQlksHXuabB+vDrG1shRX3his48O4OGFn02LmoCYEGCDTz/KJPqHNyxI/6lsXp1 Q6Ew== X-Gm-Message-State: AMke39mPjXABq4afj1CtvGvi+OTq0czASGKLquJapvT8BmBJz4aiT1+0LzXdHTov1YIRCvZz X-Received: by 10.223.179.87 with SMTP id k23mr1641907wrd.32.1487168825734; Wed, 15 Feb 2017 06:27:05 -0800 (PST) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id z90sm5127419wrc.24.2017.02.15.06.27.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 15 Feb 2017 06:27:05 -0800 (PST) From: Alexandre Bailon To: b-liu@ti.com Cc: nsekhar@ti.com, khilman@baylibre.com, ptitiano@baylibre.com, tony@atomide.com, linux-omap@vger.kernel.org, sergei.shtylyov@cogentembedded.com, linux-usb@vger.kernel.org, Alexandre Bailon Subject: [PATCH v6 4/4] usb: musb: da8xx: Add a primary support of PM runtime Date: Wed, 15 Feb 2017 15:26:57 +0100 Message-Id: <20170215142657.31571-5-abailon@baylibre.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170215142657.31571-1-abailon@baylibre.com> References: <20170215142657.31571-1-abailon@baylibre.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Currently, MUSB DA8xx glue driver doesn't have PM runtime support. Because the CPPI 4.1 is using the same clock as MUSB DA8xx and CPPI 4.1 is a child of MUSB DA8xx glue, add support of PM runtime to the DA8xx glue driver in order to let the CPPI 4.1 driver manage the clock by using PM runtime. Signed-off-by: Alexandre Bailon --- drivers/usb/musb/da8xx.c | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index ed28afd..89e12f6 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -30,7 +30,6 @@ */ #include -#include #include #include #include @@ -86,7 +85,6 @@ struct da8xx_glue { struct device *dev; struct platform_device *musb; struct platform_device *usb_phy; - struct clk *clk; struct phy *phy; }; @@ -376,11 +374,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_sync(musb->controller->parent); /* Returns zero if e.g. not clocked */ rev = musb_readl(reg_base, DA8XX_USB_REVISION_REG); @@ -423,7 +417,7 @@ static int da8xx_musb_init(struct musb *musb) err_phy_power_on: phy_exit(glue->phy); fail: - clk_disable_unprepare(glue->clk); + pm_runtime_put(musb->controller->parent); return ret; } @@ -435,7 +429,7 @@ static int da8xx_musb_exit(struct musb *musb) phy_power_off(glue->phy); phy_exit(glue->phy); - clk_disable_unprepare(glue->clk); + pm_runtime_put(musb->controller->parent); usb_put_phy(musb->xceiv); @@ -519,7 +513,6 @@ static int da8xx_probe(struct platform_device *pdev) struct musb_hdrc_platform_data *pdata = dev_get_platdata(&pdev->dev); struct da8xx_glue *glue; struct platform_device_info pinfo; - struct clk *clk; struct device_node *np = pdev->dev.of_node; int ret; @@ -527,12 +520,6 @@ static int da8xx_probe(struct platform_device *pdev) if (!glue) return -ENOMEM; - clk = devm_clk_get(&pdev->dev, "usb20"); - if (IS_ERR(clk)) { - dev_err(&pdev->dev, "failed to get clock\n"); - return PTR_ERR(clk); - } - glue->phy = devm_phy_get(&pdev->dev, "usb-phy"); if (IS_ERR(glue->phy)) { if (PTR_ERR(glue->phy) != -EPROBE_DEFER) @@ -541,7 +528,6 @@ static int da8xx_probe(struct platform_device *pdev) } glue->dev = &pdev->dev; - glue->clk = clk; if (IS_ENABLED(CONFIG_OF) && np) { pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); @@ -587,6 +573,8 @@ static int da8xx_probe(struct platform_device *pdev) pinfo.data = pdata; pinfo.size_data = sizeof(*pdata); + pm_runtime_enable(&pdev->dev); + glue->musb = platform_device_register_full(&pinfo); ret = PTR_ERR_OR_ZERO(glue->musb); if (ret) { @@ -603,6 +591,7 @@ static int da8xx_remove(struct platform_device *pdev) platform_device_unregister(glue->musb); usb_phy_generic_unregister(glue->usb_phy); + pm_runtime_disable(&pdev->dev); return 0; } @@ -616,7 +605,7 @@ static int da8xx_suspend(struct device *dev) ret = phy_power_off(glue->phy); if (ret) return ret; - clk_disable_unprepare(glue->clk); + pm_runtime_put_sync(dev); return 0; } @@ -626,7 +615,7 @@ static int da8xx_resume(struct device *dev) int ret; struct da8xx_glue *glue = dev_get_drvdata(dev); - ret = clk_prepare_enable(glue->clk); + ret = pm_runtime_get_sync(dev); if (ret) return ret; return phy_power_on(glue->phy);