Received: by 10.213.65.68 with SMTP id h4csp3785151imn; Tue, 10 Apr 2018 04:48:52 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/AkLwzQZT2Z1BHZLMgLL1hDa0HLHPEOZeeQEYSu8U8CTQOg3WcbUjA+FzSKZA/Wb4dFDC6 X-Received: by 10.99.97.73 with SMTP id v70mr56768pgb.184.1523360932539; Tue, 10 Apr 2018 04:48:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523360932; cv=none; d=google.com; s=arc-20160816; b=VUyxXRCzp6/3aLb2A5X46ccNpo/qGN6XUG7RX68nLQPYcCCtpHw00c7ndmVcxy0U8g 7+MeC/ISX9l17wmCnrplviUec/guRbKHcmjPZXppDGoiPdvLkH/wFeVpJ6x24LmsQ9rI aJ9joUxeS3mR4WK5AuJg064PkE38BAwxWFObP/BpQYlug8mV0YGYsfa/kVKc7uC5IB9+ jSOXSeZZO9dIDS+8mTER/NuvE0tgKOQr5yxzr+MiWQJaUtVzkNVblAjYBQskKA6I53Uo c5Gat3l1irTiQzbbYkBD8s8w5UPuMR+QCTDAmjOCofIKUFUUUQIzLxZ24rHF9LnAVd1y OPow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:from:references:cc:to:subject :arc-authentication-results; bh=1CoU7g02l2vTJ1DbKtl86fPYV6viwxTvpBQWDPgWRqI=; b=kkqsEAZfLlrdLNOng5pDdPsvbu7yCGrx1XGgusJE8/WSnEabGM8JypWHiHtkN/NCGy 7b0x3H9Djl4QchlVEf7RHGiBeeoCeSnaAWKSpa56OIRevXsVJiP0NCWAohZmIOUZWwXI Ss/xCRtQACYFXoHWFT1roBkmkdBJh8j3pQFiwoy4iVJFhw+P0Lt9CXwVlqXmbWMeNXUn tINmmudgqjt2Ynf9crOn3cv7IaSY+gRTS8Ie+se+6ahncIsHpE3QzIMKgfjzUh7luYQc dNRUM5R0tlAHsvWLYkXSn810NbMsQ53rRtUauFNJMIW7D5qN99h6ri0NiDt/HrjzmttB fe/A== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1si1927398pfq.172.2018.04.10.04.48.15; Tue, 10 Apr 2018 04:48:52 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752781AbeDJLnb (ORCPT + 99 others); Tue, 10 Apr 2018 07:43:31 -0400 Received: from mga03.intel.com ([134.134.136.65]:30552 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752669AbeDJLna (ORCPT ); Tue, 10 Apr 2018 07:43:30 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Apr 2018 04:43:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,431,1517904000"; d="scan'208";a="190286798" Received: from ahunter-desktop.fi.intel.com (HELO [10.237.72.168]) ([10.237.72.168]) by orsmga004.jf.intel.com with ESMTP; 10 Apr 2018 04:43:27 -0700 Subject: Re: [RFC PATCH] sdhci: arasan: Add runtime PM support To: naranimanish@gmail.com, michal.simek@xilinx.com, ulf.hansson@linaro.org, linux-mmc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Manish Narani References: <1522302530-27550-1-git-send-email-naranimanish@gmail.com> From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Message-ID: <29f0aae5-3cee-8a37-f5aa-3830f466a759@intel.com> Date: Tue, 10 Apr 2018 14:42:30 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <1522302530-27550-1-git-send-email-naranimanish@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 29/03/18 08:48, naranimanish@gmail.com wrote: > From: Manish Narani > > This patch adds runtime PM support in Arasan SD driver. > > Signed-off-by: Manish Narani Just a couple of comments about style. > --- > drivers/mmc/host/sdhci-of-arasan.c | 83 +++++++++++++++++++++++++++++++++++++- > 1 file changed, 81 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c > index c33a5f7..47196b5 100644 > --- a/drivers/mmc/host/sdhci-of-arasan.c > +++ b/drivers/mmc/host/sdhci-of-arasan.c > @@ -23,6 +23,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -349,6 +350,75 @@ static const struct sdhci_pltfm_data sdhci_arasan_cqe_pdata = { > SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, > }; > > +#ifdef CONFIG_PM > +/** > + * sdhci_arasan_runtime_suspend - Suspend method for the driver > + * @dev: Address of the device structure > + * Returns 0 on success and error value on error > + * > + * Put the device in a low power state. > + */ Kernel style is not to put kerneldoc on callback functions. > +static int sdhci_arasan_runtime_suspend(struct device *dev) > +{ > + struct platform_device *pdev = to_platform_device(dev); > + struct sdhci_host *host = platform_get_drvdata(pdev); > + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); > + struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); > + int ret; > + > + ret = sdhci_runtime_suspend_host(host); > + if (ret) > + return ret; > + > + if (host->tuning_mode != SDHCI_TUNING_MODE_3) > + mmc_retune_needed(host->mmc); > + > + clk_disable(pltfm_host->clk); > + clk_disable(sdhci_arasan->clk_ahb); > + > + return 0; > +} > + > +/** > + * sdhci_arasan_runtime_resume - Resume method for the driver > + * @dev: Address of the device structure > + * Returns 0 on success and error value on error > + * > + * Resume operation after suspend > + */ Kernel style is not to put kerneldoc on callback functions. > +static int sdhci_arasan_runtime_resume(struct device *dev) > +{ > + struct platform_device *pdev = to_platform_device(dev); > + struct sdhci_host *host = platform_get_drvdata(pdev); > + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); > + struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); > + int ret; > + > + ret = clk_enable(sdhci_arasan->clk_ahb); > + if (ret) { > + dev_err(dev, "Cannot enable AHB clock.\n"); > + return ret; > + } > + > + ret = clk_enable(pltfm_host->clk); > + if (ret) { > + dev_err(dev, "Cannot enable SD clock.\n"); > + return ret; > + } > + > + ret = sdhci_runtime_resume_host(host); > + if (ret) > + goto out; > + > + return 0; > +out: > + clk_disable(pltfm_host->clk); > + clk_disable(sdhci_arasan->clk_ahb); > + > + return ret; > +} > +#endif /* ! CONFIG_PM */ > + > #ifdef CONFIG_PM_SLEEP > /** > * sdhci_arasan_suspend - Suspend method for the driver > @@ -443,8 +513,11 @@ static int sdhci_arasan_resume(struct device *dev) > } > #endif /* ! CONFIG_PM_SLEEP */ > > -static SIMPLE_DEV_PM_OPS(sdhci_arasan_dev_pm_ops, sdhci_arasan_suspend, > - sdhci_arasan_resume); > +static const struct dev_pm_ops sdhci_arasan_dev_pm_ops = { > + SET_SYSTEM_SLEEP_PM_OPS(sdhci_arasan_suspend, sdhci_arasan_resume) > + SET_RUNTIME_PM_OPS(sdhci_arasan_runtime_suspend, > + sdhci_arasan_runtime_resume, NULL) > +}; > > static const struct of_device_id sdhci_arasan_of_match[] = { > /* SoC-specific compatible strings w/ soc_ctl_map */ > @@ -806,6 +879,12 @@ static int sdhci_arasan_probe(struct platform_device *pdev) > if (ret) > goto err_add_host; > > + pm_runtime_set_active(&pdev->dev); > + pm_runtime_enable(&pdev->dev); > + pm_runtime_set_autosuspend_delay(&pdev->dev, 2000); > + pm_runtime_mark_last_busy(&pdev->dev); > + pm_runtime_use_autosuspend(&pdev->dev); > + > return 0; > > err_add_host: >