From patchwork Wed Apr 6 22:35:32 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Hilman X-Patchwork-Id: 691051 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p36MVtxl015131 for ; Wed, 6 Apr 2011 22:35:38 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754753Ab1DFWfh (ORCPT ); Wed, 6 Apr 2011 18:35:37 -0400 Received: from na3sys009aog113.obsmtp.com ([74.125.149.209]:60634 "EHLO na3sys009aog113.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752005Ab1DFWfh (ORCPT ); Wed, 6 Apr 2011 18:35:37 -0400 Received: from mail-iy0-f177.google.com ([209.85.210.177]) (using TLSv1) by na3sys009aob113.postini.com ([74.125.148.12]) with SMTP ID DSNKTZzquLoqFVfMEyI0RpKrSZqSbOuKD+VV@postini.com; Wed, 06 Apr 2011 15:35:37 PDT Received: by mail-iy0-f177.google.com with SMTP id 39so2323998iyb.8 for ; Wed, 06 Apr 2011 15:35:36 -0700 (PDT) Received: by 10.42.138.4 with SMTP id a4mr240488icu.258.1302129335670; Wed, 06 Apr 2011 15:35:35 -0700 (PDT) Received: from localhost ([24.18.179.55]) by mx.google.com with ESMTPS id 13sm689483ibo.8.2011.04.06.15.35.33 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 06 Apr 2011 15:35:34 -0700 (PDT) From: Kevin Hilman To: "Rafael J. Wysocki" , Magnus Damm Cc: Linux PM mailing list , LKML , Paul Mundt , linux-sh@vger.kernel.org, grant.likely@secretlab.ca Subject: Re: [RFC][PATCH] PM / Platform: Remove __weak definitions of runtime PM callbacks Organization: Texas Instruments, Inc. References: <201103270058.41632.rjw@sisk.pl> Date: Wed, 06 Apr 2011 15:35:32 -0700 In-Reply-To: <201103270058.41632.rjw@sisk.pl> (Rafael J. Wysocki's message of "Sun, 27 Mar 2011 00:58:41 +0100") Message-ID: <87zko3dn4b.fsf@ti.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) MIME-Version: 1.0 Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 06 Apr 2011 22:35:38 +0000 (UTC) Hi Rafael, Magnus, "Rafael J. Wysocki" writes: > From: Rafael J. Wysocki > > Remove the __weak definitions of platform bus type runtime PM > callbacks, make platform_dev_pm_ops point to the generic routines > as appropriate and allow architectures using platform_dev_pm_ops to > replace the runtime PM callbacks in that structure with their own > set. > > Convert architectures providing its own definitions of the platform > runtime PM callbacks to use the new mechanism. > > Signed-off-by: Rafael J. Wysocki I dont't think we should be adding yet another new interface for setting platform-specific runtime PM ops. We now have 3. Two existing ones: 1) new device power domains (presumably preferred) 2) platform_bus_set_pm_ops() (disliked by many) and now the new one you create here 3) platform_set_runtime_pm_ops() This new one is basically the same as platform_bus_set_pm_ops(), but targetted only at runtime PM ops, and also has all the same problems that have been discussed before. Namely, it overrides the pm ops for *every* device on the platform_bus, instead of targetting only specific devices. With the new device power domains, we can target specific devices. Wouldn't the right way to go here be to convert mach-shmobile over to using device power domains? The patch below against v2.6.39-rc2 combined with your patch (minus the mach-shmobile/* changes) should do it. Magnus, care to test? If SH-mobile is converted to use device powerdomains, not only can we drop this new platform_set_runtime_pm_ops(), but we can also drop platform_bus_set_pm_ops() (I have a patch for this as soon as I post the OMAP conversions to device power domains.) That will leave only a single interface for overriding the runtime PM ops: device power domains. Personally, I prefer that as it's flexible enough, and also allows platforms to target only specific devices instead of the whole bus. Kevin From c8176cdb019ebbb055d70212b7d69c778d3b4b35 Mon Sep 17 00:00:00 2001 From: Kevin Hilman Date: Wed, 6 Apr 2011 15:25:11 -0700 Subject: [PATCH] ARM: sh-mobile: runtime PM: convert to device powerdomains Remove the deprecated use of weak platform_bus symbols in favor of using the new device power domains. Cc: Magnus Damm Cc: Paul Mundt Signed-off-by: Kevin Hilman --- arch/arm/mach-shmobile/pm_runtime.c | 20 +++++++++++++++----- 1 files changed, 15 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-shmobile/pm_runtime.c b/arch/arm/mach-shmobile/pm_runtime.c index 94912d3..6c75c3f 100644 --- a/arch/arm/mach-shmobile/pm_runtime.c +++ b/arch/arm/mach-shmobile/pm_runtime.c @@ -66,7 +66,7 @@ static void platform_pm_runtime_bug(struct device *dev, dev_err(dev, "runtime pm suspend before resume\n"); } -int platform_pm_runtime_suspend(struct device *dev) +static int platform_pm_runtime_suspend(struct device *dev) { struct pm_runtime_data *prd = __to_prd(dev); @@ -82,7 +82,7 @@ int platform_pm_runtime_suspend(struct device *dev) return 0; } -int platform_pm_runtime_resume(struct device *dev) +static int platform_pm_runtime_resume(struct device *dev) { struct pm_runtime_data *prd = __to_prd(dev); @@ -98,12 +98,20 @@ int platform_pm_runtime_resume(struct device *dev) return 0; } -int platform_pm_runtime_idle(struct device *dev) +static int platform_pm_runtime_idle(struct device *dev) { /* suspend synchronously to disable clocks immediately */ return pm_runtime_suspend(dev); } +static struct dev_power_domain platform_pm_power_domain = { + .ops = { + .runtime_suspend = platform_pm_runtime_suspend, + .runtime_resume = platform_pm_runtime_resume, + .runtime_idle = platform_pm_runtime_idle, + }, +}; + static int platform_bus_notify(struct notifier_block *nb, unsigned long action, void *data) { @@ -114,10 +122,12 @@ static int platform_bus_notify(struct notifier_block *nb, if (action == BUS_NOTIFY_BIND_DRIVER) { prd = devres_alloc(__devres_release, sizeof(*prd), GFP_KERNEL); - if (prd) + if (prd) { devres_add(dev, prd); - else + dev->pwr_domain = &platform_pm_power_domain; + } else { dev_err(dev, "unable to alloc memory for runtime pm\n"); + } } return 0;