2010-06-18 02:48:43 +04:00
/*
* Runtime PM support code for OMAP1
*
* Author : Kevin Hilman , Deep Root Systems , LLC
*
* Copyright ( C ) 2010 Texas Instruments , Inc .
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed " as is " without any
* warranty of any kind , whether express or implied .
*/
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/io.h>
# include <linux/pm_runtime.h>
2011-08-25 17:34:19 +04:00
# include <linux/pm_clock.h>
2010-06-18 02:48:43 +04:00
# include <linux/platform_device.h>
# include <linux/mutex.h>
# include <linux/clk.h>
# include <linux/err.h>
# include <plat/omap_device.h>
# include <plat/omap-pm.h>
# ifdef CONFIG_PM_RUNTIME
static int omap1_pm_runtime_suspend ( struct device * dev )
{
2011-05-16 22:15:36 +04:00
int ret ;
2010-06-18 02:48:43 +04:00
dev_dbg ( dev , " %s \n " , __func__ ) ;
ret = pm_generic_runtime_suspend ( dev ) ;
2011-05-16 22:15:36 +04:00
if ( ret )
return ret ;
2010-06-18 02:48:43 +04:00
2011-07-02 00:13:44 +04:00
ret = pm_clk_suspend ( dev ) ;
2011-05-16 22:15:36 +04:00
if ( ret ) {
pm_generic_runtime_resume ( dev ) ;
return ret ;
2010-06-18 02:48:43 +04:00
}
return 0 ;
2011-05-16 22:15:36 +04:00
}
2010-06-18 02:48:43 +04:00
static int omap1_pm_runtime_resume ( struct device * dev )
{
dev_dbg ( dev , " %s \n " , __func__ ) ;
2011-07-02 00:13:44 +04:00
pm_clk_resume ( dev ) ;
2011-05-16 22:15:36 +04:00
return pm_generic_runtime_resume ( dev ) ;
}
2010-06-18 02:48:43 +04:00
2011-06-23 03:52:55 +04:00
static struct dev_pm_domain default_pm_domain = {
2011-05-16 22:15:36 +04:00
. ops = {
. runtime_suspend = omap1_pm_runtime_suspend ,
. runtime_resume = omap1_pm_runtime_resume ,
USE_PLATFORM_PM_SLEEP_OPS
} ,
} ;
2011-06-23 03:52:55 +04:00
# define OMAP1_PM_DOMAIN (&default_pm_domain)
2011-06-14 16:53:18 +04:00
# else
2011-06-23 03:52:55 +04:00
# define OMAP1_PM_DOMAIN NULL
2011-06-14 16:53:18 +04:00
# endif /* CONFIG_PM_RUNTIME */
2010-06-18 02:48:43 +04:00
2011-05-16 22:15:36 +04:00
static struct pm_clk_notifier_block platform_bus_notifier = {
2011-06-23 03:52:55 +04:00
. pm_domain = OMAP1_PM_DOMAIN ,
2011-05-16 22:15:36 +04:00
. con_ids = { " ick " , " fck " , NULL , } ,
2010-06-18 02:48:43 +04:00
} ;
static int __init omap1_pm_runtime_init ( void )
{
2010-12-10 20:46:24 +03:00
if ( ! cpu_class_is_omap1 ( ) )
return - ENODEV ;
2011-07-02 00:13:44 +04:00
pm_clk_add_notifier ( & platform_bus_type , & platform_bus_notifier ) ;
2010-06-18 02:48:43 +04:00
return 0 ;
}
core_initcall ( omap1_pm_runtime_init ) ;
2011-06-14 16:53:18 +04:00