From patchwork Thu Jan 19 14:08:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Bailon X-Patchwork-Id: 9525917 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 2A4F06020B for ; Thu, 19 Jan 2017 14:08:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1B61228503 for ; Thu, 19 Jan 2017 14:08:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1008628517; Thu, 19 Jan 2017 14:08:53 +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 98DA428503 for ; Thu, 19 Jan 2017 14:08:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752881AbdASOIs (ORCPT ); Thu, 19 Jan 2017 09:08:48 -0500 Received: from mail-wm0-f54.google.com ([74.125.82.54]:35572 "EHLO mail-wm0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752870AbdASOIr (ORCPT ); Thu, 19 Jan 2017 09:08:47 -0500 Received: by mail-wm0-f54.google.com with SMTP id r126so291061493wmr.0 for ; Thu, 19 Jan 2017 06:08:46 -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=biuRaR4qumnJY4A5XhG1RCCjITW/V/xZwlnjfJnF+no=; b=aFhr9bgHjh2DRGsKl0yk695Wev9S/VYXuV0fa/zo8bp6ghYzA5BJwzVJiiiKtVjin+ bh4wxqIr4w8qsBnPZ7nMFShpeHqBC6oUMFZ5RKhgBtAWYslW2n/pBQEirogsjzZTamkU Qt/KtEHF1Ibdzv3TFn4oVHOL62Z5Dz3LX2bPPX9RFfjzKOOClgnLSKVL5+pJEu940gXX EoUOOchBXpokyvHlaaNTblzvbnLBkET1z2C0SFvlp8qftIYBny4o1Eig6CMeCjTwik2C DOKtBxAzFIP+iQ31+Lt88wIEkQ3NfvF+cwved3K4GWAoW0rnZUkbUl8MCr2l0cGMaSfy fbUg== 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=biuRaR4qumnJY4A5XhG1RCCjITW/V/xZwlnjfJnF+no=; b=GLWgw5GCuvyDkKch1RMp/QP2rCiFZ/jJHz4T4TkxV0C/2OLZ5Qjhe9dEYbPzVpUdZe gXmBpm9vkpepERIrJnO3DAAFuVODGx6vX0kRup6uqD9cnRJAmmn74BGPCwYtoql5wqZQ bwgNPc4CjTNxiAj0xg/KHrnadrmDwuqcFH91Esuy+r5FU29prD4rxJGRhIP9lMLSM4t6 lXnMZBdlyQlwZUL+IPEdsx/AHGxIvOB4FbC4HW5nHc32NqHL56tWMSAynRBbNVClrLqP CyHkJ+LdpRh61hrnhATk1tbwBzxmPBp3qmWfSiv0rv3QfBUDwQ5UjP0+wuJt9pslX8bu mq8w== X-Gm-Message-State: AIkVDXLDFhKHKxD+mKbeEpVJg9SEcdA6ANoSWvbVdOD7GvgIBaSshThacZ4g1jEX+lH+J+/r X-Received: by 10.223.160.206 with SMTP id n14mr7732350wrn.31.1484834925527; Thu, 19 Jan 2017 06:08:45 -0800 (PST) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id d64sm53546626wmh.3.2017.01.19.06.08.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 19 Jan 2017 06:08:44 -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, grygorii.strashko@ti.com, linux-usb@vger.kernel.org, Alexandre Bailon Subject: [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime Date: Thu, 19 Jan 2017 15:08:35 +0100 Message-Id: <20170119140835.18981-6-abailon@baylibre.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170119140835.18981-1-abailon@baylibre.com> References: <20170119140835.18981-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, 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 --- drivers/usb/musb/da8xx.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 8c9850c..c4478c7 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; }; @@ -377,11 +375,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); @@ -424,7 +418,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_sync(musb->controller->parent); return ret; } @@ -436,7 +430,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_sync(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; }