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: 91910 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp293182qgi; Thu, 19 Jan 2017 06:08:51 -0800 (PST) X-Received: by 10.98.66.138 with SMTP id h10mr10113939pfd.94.1484834931225; Thu, 19 Jan 2017 06:08:51 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h88si3674019pfk.4.2017.01.19.06.08.51; Thu, 19 Jan 2017 06:08:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-usb-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@baylibre-com.20150623.gappssmtp.com; spf=pass (google.com: best guess record for domain of linux-usb-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-usb-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752884AbdASOIs (ORCPT + 4 others); Thu, 19 Jan 2017 09:08:48 -0500 Received: from mail-wm0-f47.google.com ([74.125.82.47]:38503 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752869AbdASOIr (ORCPT ); Thu, 19 Jan 2017 09:08:47 -0500 Received: by mail-wm0-f47.google.com with SMTP id r144so78876082wme.1 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=PXbeXFcaID0GcintmRm8moDuZY/A0drbsObgM4/1p39ar+IZ3lDN0rTVDVR8p0GmRE qeTCkO3TznU8jjygadAApGV0cRyvpHXFOMqCl61v0qUdTW7PP08UAMd8w3zqMxhEHuw9 /zlt6zjmtXALvFM2zUwexMBOc3PWgw2/N+RrkgGTZVISE0qiEouPgJF6fxDZs3R1httB 0E0qRYar5K0ICjiQ4GHK17OCvKaPVckoP0snIZaCwNIh9IAh7PDgk23eMqEVNpNTHkrZ g9a1+RZz5MyrkPsdkgbTxrjAMojCmWp02cw08mbz2wbf49q2821Mf3Hs+18STtbW4ArX /KJQ== X-Gm-Message-State: AIkVDXLRPcxVoOSjOvp15kBDvsDy07axRt6YEewCPNw7uRbh2CL7aR6JylYx4Sr0neeyudp7 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-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org 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(-) -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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; }