From patchwork Fri Mar 24 14:36:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Bailon X-Patchwork-Id: 9642979 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 C268F6020B for ; Fri, 24 Mar 2017 14:36:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B5DCF206AC for ; Fri, 24 Mar 2017 14:36:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AA39A26E81; Fri, 24 Mar 2017 14:36:46 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,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 E493A206AC for ; Fri, 24 Mar 2017 14:36:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965818AbdCXOgj (ORCPT ); Fri, 24 Mar 2017 10:36:39 -0400 Received: from mail-wm0-f41.google.com ([74.125.82.41]:34976 "EHLO mail-wm0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965821AbdCXOge (ORCPT ); Fri, 24 Mar 2017 10:36:34 -0400 Received: by mail-wm0-f41.google.com with SMTP id u132so14688533wmg.0 for ; Fri, 24 Mar 2017 07:36:33 -0700 (PDT) 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=l4hMOAuAfvxrf5mS7mi0vKbmJLi9CinmA5iDBk3VTAwEjpCCAF3Q/qx2GWviQYiaHI ZCDvJ3prsuwRXIH5Nsx/dUIxCxRd33cMNEBxliIfEl7Zd/+hK2Leg+metCVH5EKcqZlW zohbbjJSnW7BYkQA4L45mNrqyeFfJ0khKRa7rxPWkG3cJOjK6+YUaae605mTODUu8qUp TWt7rz5nxlrZ6dePqc2twPt10a5nn32DKfhhe+uFaI6x6fcjLpxvVETIK+x5qEluVp0j ojatWgQnUxkJWIhHYMDRTOiKp08Yl2iQJRE7+UWyxX6FSGbewGkUvbgB+9ydOfGJJxvf /8ew== 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=Xr83ZA9vdBNM/BNTxoz8l3PS9mZc7kg6DPNYKgSBfd1ZqP+tx9hIHqcEVrPd9MJinu O1Q4fJK9xlr27tbxRR70iFqrh35k1FjHRsVV4BbCpIOuqKYwp8446zuU0RImmwacCtog XeCHpCi8p1LXVK1B+UlmzZzUIq1EQ/xDgNil642KslIfcj5H7n+MeFwVU84N3bO/3x9a y9rEQAjHrQlm4fRci8MxVQ4H8cM/owvkfL6VxYC2djYVpcREzPpYOubSLrL2356cuW/t zLIUnqXicUXD1wq4EXfYn1ifQZaW5TyvvoaxwtcdUayNwPa7G11y4KvlMH8twv6m+I3D GVkw== X-Gm-Message-State: AFeK/H3uvx/KX8+hnI1JPEfMfhj2qAN6CHOKt7HeKyO15q+zoT89+XycCL83jmpY0v116UHX X-Received: by 10.28.12.147 with SMTP id 141mr3568541wmm.8.1490366192189; Fri, 24 Mar 2017 07:36:32 -0700 (PDT) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id o2sm2665565wmb.28.2017.03.24.07.36.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Mar 2017 07:36:31 -0700 (PDT) From: Alexandre Bailon To: b-liu@ti.com Cc: linux-usb@vger.kernel.org, ptitiano@baylibre.com, khilman@baylibre.com, nsekhar@ti.com, tony@atomide.com, sergei.shtylyov@cogentembedded.com, linux-omap@vger.kernel.org, Alexandre Bailon Subject: [RESEND PATCH v6 4/4] usb: musb: da8xx: Add a primary support of PM runtime Date: Fri, 24 Mar 2017 15:36:00 +0100 Message-Id: <20170324143600.4704-5-abailon@baylibre.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170324143600.4704-1-abailon@baylibre.com> References: <20170324143600.4704-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);