aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/smartreflex.c
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2011-11-09 00:51:32 -0600
committerTodd Poynor <toddpoynor@google.com>2011-11-10 20:20:35 -0800
commit6315584afe592abf4a201c75f3a7a01e9f076b42 (patch)
tree77c65ab70305f167bdac54ac732231a36debece8 /arch/arm/mach-omap2/smartreflex.c
parent6552941899645ec97acf141446917e2a597959b2 (diff)
downloadkernel_samsung_tuna-6315584afe592abf4a201c75f3a7a01e9f076b42.zip
kernel_samsung_tuna-6315584afe592abf4a201c75f3a7a01e9f076b42.tar.gz
kernel_samsung_tuna-6315584afe592abf4a201c75f3a7a01e9f076b42.tar.bz2
OMAP3+: Smartreflex: Add a shutdown hook
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. Change-Id: I7f8c66cc45f8785394cce1fdde3cfda15ecc1fbc Signed-off-by: Nishanth Menon <nm@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2/smartreflex.c')
-rw-r--r--arch/arm/mach-omap2/smartreflex.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c
index c51e95f..29a222a 100644
--- a/arch/arm/mach-omap2/smartreflex.c
+++ b/arch/arm/mach-omap2/smartreflex.c
@@ -1061,8 +1061,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",
},