From patchwork Fri Dec 10 00:08:32 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Hilman X-Patchwork-Id: 397042 X-Patchwork-Delegate: paul@pwsan.com 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 oBA08bMc007105 for ; Fri, 10 Dec 2010 00:08:41 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757550Ab0LJAIk (ORCPT ); Thu, 9 Dec 2010 19:08:40 -0500 Received: from mail-gx0-f180.google.com ([209.85.161.180]:45548 "EHLO mail-gx0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753408Ab0LJAIj (ORCPT ); Thu, 9 Dec 2010 19:08:39 -0500 Received: by mail-gx0-f180.google.com with SMTP id 19so1870788gxk.11 for ; Thu, 09 Dec 2010 16:08:39 -0800 (PST) Received: by 10.150.218.21 with SMTP id q21mr354069ybg.177.1291939719376; Thu, 09 Dec 2010 16:08:39 -0800 (PST) Received: from localhost (c-24-18-179-55.hsd1.wa.comcast.net [24.18.179.55]) by mx.google.com with ESMTPS id g9sm1491620yha.6.2010.12.09.16.08.37 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 09 Dec 2010 16:08:38 -0800 (PST) From: Kevin Hilman To: linux-omap@vger.kernel.org Cc: Paul Walmsely Subject: [PATCH/RFC 2/2] OMAP: PM: implement context loss count APIs Date: Thu, 9 Dec 2010 16:08:32 -0800 Message-Id: <1291939712-25487-2-git-send-email-khilman@deeprootsystems.com> X-Mailer: git-send-email 1.7.2.1 In-Reply-To: <1291939712-25487-1-git-send-email-khilman@deeprootsystems.com> References: <1291939712-25487-1-git-send-email-khilman@deeprootsystems.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Fri, 10 Dec 2010 00:08:41 +0000 (UTC) diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 81c1097..0ec9c70 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -2220,3 +2220,21 @@ ohsps_unlock: return ret; } + +/** + * omap_hwmod_get_context_loss_count - get lost context count + * @oh: struct omap_hwmod * + * + * Query the powerdomain of of @oh to get the context loss + * count for this device. + */ +int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh) +{ + struct powerdomain *pwrdm; + + pwrdm = omap_hwmod_get_pwrdm(oh); + if (!pwrdm) + return -ENODEV; + + return pwrdm_get_context_loss_count(pwrdm); +} diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index 28e2d1a..70d31d0 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h @@ -107,6 +107,7 @@ void __iomem *omap_device_get_rt_va(struct omap_device *od); int omap_device_align_pm_lat(struct platform_device *pdev, u32 new_wakeup_lat_limit); struct powerdomain *omap_device_get_pwrdm(struct omap_device *od); +int omap_device_get_context_loss_count(struct platform_device *pdev); /* Other */ diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 62bdb23..5a96ac5 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h @@ -568,6 +568,7 @@ int omap_hwmod_for_each_by_class(const char *classname, void *user); int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state); +int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh); /* * Chip variant-specific hwmod init routines - XXX should be converted diff --git a/arch/arm/plat-omap/omap-pm-noop.c b/arch/arm/plat-omap/omap-pm-noop.c index 7578366..5a58f97 100644 --- a/arch/arm/plat-omap/omap-pm-noop.c +++ b/arch/arm/plat-omap/omap-pm-noop.c @@ -20,9 +20,11 @@ #include #include #include +#include /* Interface documentation is in mach/omap-pm.h */ #include +#include struct omap_opp *dsp_opps; struct omap_opp *mpu_opps; @@ -288,20 +290,19 @@ unsigned long omap_pm_cpu_get_freq(void) int omap_pm_get_dev_context_loss_count(struct device *dev) { + struct platform_device *pdev = to_platform_device(dev); + int count; + if (!dev) { WARN_ON(1); return -EINVAL; }; - pr_debug("OMAP PM: returning context loss count for dev %s\n", - dev_name(dev)); + count = omap_device_get_context_loss_count(pdev); + pr_debug("OMAP PM: context loss count for dev %s = %d\n", + dev_name(dev), count); - /* - * Map the device to the powerdomain. Return the powerdomain - * off counter. - */ - - return 0; + return count; } diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index abe933c..e29c2d6 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -280,6 +280,26 @@ static void _add_optional_clock_alias(struct omap_device *od, /* Public functions for use by core code */ /** + * omap_device_get_context_loss_count - get lost context count + * @od: struct omap_device * + * + * Using the primary hwmod for this device, query the context loss + * count for this device. + */ +int omap_device_get_context_loss_count(struct platform_device *pdev) +{ + struct omap_device *od; + int ret = -ENODEV; + + od = _find_by_pdev(pdev); + + if (od->hwmods_cnt) + omap_hwmod_get_context_loss_count(od->hwmods[0]); + + return ret; +} + +/** * omap_device_count_resources - count number of struct resource entries needed * @od: struct omap_device * *