Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp4018825imb; Wed, 6 Mar 2019 03:18:20 -0800 (PST) X-Google-Smtp-Source: APXvYqxE5ln8FsrTYMqQ41OdiCbAQLEO+ijb6kHMEa8g3pS94lkcBWA3Xo1il99LxVUodtpvuyBd X-Received: by 2002:a65:5184:: with SMTP id h4mr5835709pgq.32.1551871100413; Wed, 06 Mar 2019 03:18:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551871100; cv=none; d=google.com; s=arc-20160816; b=USObBMPRbd97XKWM/ld1M8u50ZWhtHTtwaQWoXUxPgIZk+tQd9S4ZgOC19i0l4kLTj R64p8V/duTq2uZjkJZHG6rdc5ULCAd5OYdRVhJIXxqaTQwVY/dq+E2hAYbmpI0JgrgOn 1grI836kvCAXKl7tOaHtF/DL7survfRgny7ehyUbMe+4dqduJImKNHyBGxXANH+hlE6r 1RxuVk3Sj4W1p4uCZejo6h0bv9pkyPBs0hIrQE/zRAXiPLKNYmZZCD6PyUZF4tqJ66mo YXURk8n6ynyLmW5Azl7MV4uuTWR6Vi/AmPz9H2crCkQP8HBdYI3Nvhk1Dp2isVHDzwOg SKnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from; bh=zd+T0jSSPTNtSGYxDwl/VtyPt5PqZbL4yl5jQ2tur9U=; b=zvky+1iKv/qj82elVFzFNAmVUUIQs9CaK8lTcUEKtXLKtHWEyqCGiLn9CQsPejgLGq xF3iPXN0ZcUpm4XpQ0QrfjRWjiRUIDRCT9KDX8D6/iAtx0SR7UmBVHQ7ZCUJP9FmagHf i2WLK4Fjz7mzjMIolQtzjdwABbMd1XONDWxrG8HIdJ2DfC8TimDFv7VJ/VHwaG1lU/Ek vCIrzlDEd9PeO7i9H+70XSDwa3rj9D61Vy9Dl4tjT7u7S3OeKpWTTqc3fm5I9kkrj+ny NWKRwtti8ifFypApz8oKrPgolCDTCoiABSIJLOKZZcWFVsJNoMllXabDY+7J4xqVLYI5 O0MQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=PUVbjOZa; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j9si1206147pgb.49.2019.03.06.03.18.05; Wed, 06 Mar 2019 03:18:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=PUVbjOZa; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729522AbfCFKlg (ORCPT + 99 others); Wed, 6 Mar 2019 05:41:36 -0500 Received: from hqemgate16.nvidia.com ([216.228.121.65]:9065 "EHLO hqemgate16.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729223AbfCFKlf (ORCPT ); Wed, 6 Mar 2019 05:41:35 -0500 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate16.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Wed, 06 Mar 2019 02:41:33 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Wed, 06 Mar 2019 02:41:33 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Wed, 06 Mar 2019 02:41:33 -0800 Received: from HQMAIL102.nvidia.com (172.18.146.10) by HQMAIL106.nvidia.com (172.18.146.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 6 Mar 2019 10:41:33 +0000 Received: from hqnvemgw02.nvidia.com (172.16.227.111) by HQMAIL102.nvidia.com (172.18.146.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Wed, 6 Mar 2019 10:41:32 +0000 Received: from linux.nvidia.com (Not Verified[10.24.34.185]) by hqnvemgw02.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Wed, 06 Mar 2019 02:41:32 -0800 From: Sameer Pujar To: , , , , CC: , , , , , , , Sameer Pujar Subject: [PATCH 2/3] dmaengine: tegra210-adma: use devm_clk_*() helpers Date: Wed, 6 Mar 2019 16:11:17 +0530 Message-ID: <1551868878-1131-2-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551868878-1131-1-git-send-email-spujar@nvidia.com> References: <1551868878-1131-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1551868893; bh=zd+T0jSSPTNtSGYxDwl/VtyPt5PqZbL4yl5jQ2tur9U=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Type; b=PUVbjOZav1l6/MPfZtcwX3ngizp+cxULeQ/acMCUTDAfPkWlmO1k9wX/gMDAwG0nj 1KoA6n+Vse5pl03zJYSs1sRl4Yg8dvfJQTtA92XOEiY2K9uqgaqqCMERKWpl0Ci5cL vs0Xv2m092xyC1eQJEhZcWj3iPYX3ZX9VII3NC27+4igi8ZzUhBdejKaplqXp2o534 CexUYiIEyjmG6N/C4nAQ1Q8moSBzE74B3aknAkLxvLJs9H+tQgj8wNWHfJR21IOsql nBbb9SBasWXU5G8y6cDHddTk4hEFbEDaL1DzeWiaEJYl23r0eDN69V7aBaOWKN9M8z 4IKCYuuitGbgA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Usage of pm_clk_*() results in non-zero prepare_count for clocks and hence module clocks remain ON always. This is not desired as it will leak power unncessarily. This patch replaces pm_clk_*() with devm_clk_*() interface. This helps to keep refcounts balanced when device is not in use and runtime PM callbacks help to enable or disable clocks. System suspend/resume calls can use pm_runtime_force_suspend/resume. Suggested-by: Mohan Kumar D Reviewed-by: Jonathan Hunter Signed-off-by: Sameer Pujar --- drivers/dma/tegra210-adma.c | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c index b26256f..123fc6d 100644 --- a/drivers/dma/tegra210-adma.c +++ b/drivers/dma/tegra210-adma.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -141,6 +140,7 @@ struct tegra_adma { struct dma_device dma_dev; struct device *dev; void __iomem *base_addr; + struct clk *ahub_clk; unsigned int nr_channels; unsigned long rx_requests_reserved; unsigned long tx_requests_reserved; @@ -637,8 +637,9 @@ static int tegra_adma_runtime_suspend(struct device *dev) struct tegra_adma *tdma = dev_get_drvdata(dev); tdma->global_cmd = tdma_read(tdma, ADMA_GLOBAL_CMD); + clk_disable_unprepare(tdma->ahub_clk); - return pm_clk_suspend(dev); + return 0; } static int tegra_adma_runtime_resume(struct device *dev) @@ -646,10 +647,11 @@ static int tegra_adma_runtime_resume(struct device *dev) struct tegra_adma *tdma = dev_get_drvdata(dev); int ret; - ret = pm_clk_resume(dev); - if (ret) + ret = clk_prepare_enable(tdma->ahub_clk); + if (ret) { + dev_err(dev, "ahub clk_enable failed: %d\n", ret); return ret; - + } tdma_write(tdma, ADMA_GLOBAL_CMD, tdma->global_cmd); return 0; @@ -692,13 +694,11 @@ static int tegra_adma_probe(struct platform_device *pdev) if (IS_ERR(tdma->base_addr)) return PTR_ERR(tdma->base_addr); - ret = pm_clk_create(&pdev->dev); - if (ret) - return ret; - - ret = of_pm_clk_add_clk(&pdev->dev, "d_audio"); - if (ret) - goto clk_destroy; + tdma->ahub_clk = devm_clk_get(&pdev->dev, "d_audio"); + if (IS_ERR(tdma->ahub_clk)) { + dev_err(&pdev->dev, "Error: Missing ahub controller clock\n"); + return PTR_ERR(tdma->ahub_clk); + } pm_runtime_enable(&pdev->dev); @@ -775,8 +775,6 @@ static int tegra_adma_probe(struct platform_device *pdev) pm_runtime_put_sync(&pdev->dev); rpm_disable: pm_runtime_disable(&pdev->dev); -clk_destroy: - pm_clk_destroy(&pdev->dev); return ret; } @@ -793,22 +791,15 @@ static int tegra_adma_remove(struct platform_device *pdev) pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); - pm_clk_destroy(&pdev->dev); return 0; } -#ifdef CONFIG_PM_SLEEP -static int tegra_adma_pm_suspend(struct device *dev) -{ - return pm_runtime_suspended(dev) == false; -} -#endif - static const struct dev_pm_ops tegra_adma_dev_pm_ops = { SET_RUNTIME_PM_OPS(tegra_adma_runtime_suspend, tegra_adma_runtime_resume, NULL) - SET_SYSTEM_SLEEP_PM_OPS(tegra_adma_pm_suspend, NULL) + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, + pm_runtime_force_resume) }; static struct platform_driver tegra_admac_driver = { -- 2.7.4