From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean Pihet Subject: [PATCH 05/19] ARM: OMAP3+: SmartReflex: Add a shutdown hook Date: Tue, 31 Jan 2012 10:58:18 +0100 Message-ID: <1328003912-11709-6-git-send-email-j-pihet@ti.com> References: <1328003912-11709-1-git-send-email-j-pihet@ti.com> Return-path: Received: from mail-wi0-f174.google.com ([209.85.212.174]:61170 "EHLO mail-wi0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753556Ab2AaJ7E (ORCPT ); Tue, 31 Jan 2012 04:59:04 -0500 Received: by mail-wi0-f174.google.com with SMTP id s10so4219621wic.19 for ; Tue, 31 Jan 2012 01:59:03 -0800 (PST) In-Reply-To: <1328003912-11709-1-git-send-email-j-pihet@ti.com> Sender: linux-omap-owner@vger.kernel.org List-Id: linux-omap@vger.kernel.org To: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, balbi@ti.com, nm@ti.com Cc: Kevin Hilman , Paul Walmsley , Jean Pihet From: Nishanth Menon Since OMAP's VP and PRM modules do not get reset by warm reset, we should ensure that proper shutdown procedure is followed prior to allowing the kernel to reboot back up. Without this patch, Smartreflex module might be left active or system might be caught in an indeterminate sequence when reboot is triggered, leaving the next reboot behavior to be unpredictable. Signed-off-by: Nishanth Menon Signed-off-by: Jean Pihet --- arch/arm/mach-omap2/smartreflex.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index d7294c6..f384c19 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c @@ -1055,8 +1055,32 @@ static int __devexit omap_sr_remove(struct platform_device *pdev) return 0; } +static void __devexit omap_sr_shutdown(struct platform_device *pdev) +{ + struct omap_sr_data *pdata = pdev->dev.platform_data; + struct omap_sr *sr_info; + + if (!pdata) { + dev_err(&pdev->dev, "%s: platform data missing\n", __func__); + return; + } + + sr_info = _sr_lookup(pdata->voltdm); + if (IS_ERR(sr_info)) { + dev_warn(&pdev->dev, "%s: omap_sr struct not found\n", + __func__); + return; + } + + if (sr_info->autocomp_active) + sr_stop_vddautocomp(sr_info); + + return; +} + static struct platform_driver smartreflex_driver = { .remove = omap_sr_remove, + .shutdown = omap_sr_shutdown, .driver = { .name = "smartreflex", }, -- 1.7.5.4