diff options
| author | avinash philip <avinashphilip@ti.com> | 2013-06-18 00:16:38 +0530 | 
|---|---|---|
| committer | Evan Wilson <evan@oliodevices.com> | 2014-11-29 14:46:10 -0800 | 
| commit | 86bc91cf3767a0fba0a20ad1d764009ddfe41520 (patch) | |
| tree | b644998ca578a254a276548d506f3c449f251668 | |
| parent | 74bf31540478f9473104885b123f9d505a77dc16 (diff) | |
| download | olio-linux-3.10-86bc91cf3767a0fba0a20ad1d764009ddfe41520.tar.xz olio-linux-3.10-86bc91cf3767a0fba0a20ad1d764009ddfe41520.zip | |
ARM: OMAP2+: gpmc: Low power transition support
GPMC is hardware controller for external memory interfaces.
This patch adds suspend/resume support for GPMC driver.
It also preserves GPMC register configurations across device low-power states
in which GPMC hardware can be powered-off.
gpmc_suspend()/gpmc_resume() are called by default by core PM framework as part
of driver's runtime PM callbacks.
Signed-off-by: Philip Avinash <avinashphilip@ti.com>
Signed-off-by: Pekon Gupta <pekon@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
| -rw-r--r-- | arch/arm/mach-omap2/gpmc.c | 21 | 
1 files changed, 19 insertions, 2 deletions
| diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index bac18b3ebbf..1c7969e965d 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1669,6 +1669,24 @@ static int gpmc_remove(struct platform_device *pdev)  	return 0;  } +#ifdef CONFIG_PM_SLEEP +static int gpmc_suspend(struct device *dev) +{ +	omap3_gpmc_save_context(); +	pm_runtime_put_sync(dev); +	return 0; +} + +static int gpmc_resume(struct device *dev) +{ +	pm_runtime_get_sync(dev); +	omap3_gpmc_restore_context(); +	return 0; +} +#endif + +static SIMPLE_DEV_PM_OPS(gpmc_pm_ops, gpmc_suspend, gpmc_resume); +  static struct platform_driver gpmc_driver = {  	.probe		= gpmc_probe,  	.remove		= gpmc_remove, @@ -1676,6 +1694,7 @@ static struct platform_driver gpmc_driver = {  		.name	= DEVICE_NAME,  		.owner	= THIS_MODULE,  		.of_match_table = of_match_ptr(gpmc_dt_ids), +		.pm	= &gpmc_pm_ops,  	},  }; @@ -1738,7 +1757,6 @@ static irqreturn_t gpmc_handle_irq(int irq, void *dev)  	return IRQ_HANDLED;  } -#ifdef CONFIG_ARCH_OMAP3  static struct omap3_gpmc_regs gpmc_context;  void omap3_gpmc_save_context(void) @@ -1803,4 +1821,3 @@ void omap3_gpmc_restore_context(void)  		}  	}  } -#endif /* CONFIG_ARCH_OMAP3 */ |