2008-08-19 12:08:42 +04:00
/*
2010-12-22 06:01:20 +03:00
* OMAP2XXX powerdomain definitions
2008-08-19 12:08:42 +04:00
*
2011-09-14 21:34:21 +04:00
* Copyright ( C ) 2007 - 2008 , 2011 Texas Instruments , Inc .
2011-03-08 05:28:15 +03:00
* Copyright ( C ) 2007 - 2011 Nokia Corporation
2008-08-19 12:08:42 +04:00
*
2010-12-22 06:01:20 +03:00
* Paul Walmsley , Jouni Högander
2008-08-19 12:08:42 +04:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
2010-12-22 06:01:20 +03:00
# include <linux/kernel.h>
# include <linux/init.h>
2008-08-19 12:08:42 +04:00
2012-10-06 00:25:59 +04:00
# include "soc.h"
2010-12-22 07:05:16 +03:00
# include "powerdomain.h"
2010-12-22 06:01:20 +03:00
# include "powerdomains2xxx_3xxx_data.h"
2008-08-19 12:08:42 +04:00
# include "prcm-common.h"
2010-12-22 01:30:55 +03:00
# include "prm2xxx_3xxx.h"
2008-08-19 12:08:42 +04:00
# include "prm-regbits-24xx.h"
/* 24XX powerdomains and dependencies */
/* Powerdomains */
static struct powerdomain dsp_pwrdm = {
. name = " dsp_pwrdm " ,
. prcm_offs = OMAP24XX_DSP_MOD ,
. pwrsts = PWRSTS_OFF_RET_ON ,
2011-03-08 05:28:15 +03:00
. pwrsts_logic_ret = PWRSTS_RET ,
2008-08-19 12:08:42 +04:00
. banks = 1 ,
. pwrsts_mem_ret = {
2011-03-08 05:28:15 +03:00
[ 0 ] = PWRSTS_RET ,
2008-08-19 12:08:42 +04:00
} ,
. pwrsts_mem_on = {
2011-03-08 05:28:15 +03:00
[ 0 ] = PWRSTS_ON ,
2008-08-19 12:08:42 +04:00
} ,
2013-01-26 11:58:17 +04:00
. voltdm = { . name = " core " } ,
2008-08-19 12:08:42 +04:00
} ;
static struct powerdomain mpu_24xx_pwrdm = {
. name = " mpu_pwrdm " ,
. prcm_offs = MPU_MOD ,
. pwrsts = PWRSTS_OFF_RET_ON ,
. pwrsts_logic_ret = PWRSTS_OFF_RET ,
. banks = 1 ,
. pwrsts_mem_ret = {
2011-03-08 05:28:15 +03:00
[ 0 ] = PWRSTS_RET ,
2008-08-19 12:08:42 +04:00
} ,
. pwrsts_mem_on = {
2011-03-08 05:28:15 +03:00
[ 0 ] = PWRSTS_ON ,
2008-08-19 12:08:42 +04:00
} ,
2013-01-26 11:58:17 +04:00
. voltdm = { . name = " core " } ,
2008-08-19 12:08:42 +04:00
} ;
static struct powerdomain core_24xx_pwrdm = {
. name = " core_pwrdm " ,
. prcm_offs = CORE_MOD ,
. pwrsts = PWRSTS_OFF_RET_ON ,
2013-01-26 11:58:12 +04:00
. pwrsts_logic_ret = PWRSTS_RET ,
2008-08-19 12:08:42 +04:00
. banks = 3 ,
. pwrsts_mem_ret = {
[ 0 ] = PWRSTS_OFF_RET , /* MEM1RETSTATE */
[ 1 ] = PWRSTS_OFF_RET , /* MEM2RETSTATE */
[ 2 ] = PWRSTS_OFF_RET , /* MEM3RETSTATE */
} ,
. pwrsts_mem_on = {
[ 0 ] = PWRSTS_OFF_RET_ON , /* MEM1ONSTATE */
[ 1 ] = PWRSTS_OFF_RET_ON , /* MEM2ONSTATE */
[ 2 ] = PWRSTS_OFF_RET_ON , /* MEM3ONSTATE */
} ,
2013-01-26 11:58:17 +04:00
. voltdm = { . name = " core " } ,
2008-08-19 12:08:42 +04:00
} ;
/*
* 2430 - specific powerdomains
*/
/* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */
static struct powerdomain mdm_pwrdm = {
. name = " mdm_pwrdm " ,
. prcm_offs = OMAP2430_MDM_MOD ,
. pwrsts = PWRSTS_OFF_RET_ON ,
2011-03-08 05:28:15 +03:00
. pwrsts_logic_ret = PWRSTS_RET ,
2008-08-19 12:08:42 +04:00
. banks = 1 ,
. pwrsts_mem_ret = {
2011-03-08 05:28:15 +03:00
[ 0 ] = PWRSTS_RET , /* MEMRETSTATE */
2008-08-19 12:08:42 +04:00
} ,
. pwrsts_mem_on = {
2011-03-08 05:28:15 +03:00
[ 0 ] = PWRSTS_ON , /* MEMONSTATE */
2008-08-19 12:08:42 +04:00
} ,
2013-01-26 11:58:17 +04:00
. voltdm = { . name = " core " } ,
2008-08-19 12:08:42 +04:00
} ;
2011-09-14 21:34:21 +04:00
/*
*
*/
2008-08-19 12:08:42 +04:00
2011-09-14 21:34:21 +04:00
static struct powerdomain * powerdomains_omap24xx [ ] __initdata = {
2010-12-22 06:01:20 +03:00
& wkup_omap2_pwrdm ,
& gfx_omap2_pwrdm ,
& dsp_pwrdm ,
& mpu_24xx_pwrdm ,
& core_24xx_pwrdm ,
2011-09-14 21:34:21 +04:00
NULL
} ;
2010-12-22 06:01:20 +03:00
2011-09-14 21:34:21 +04:00
static struct powerdomain * powerdomains_omap2430 [ ] __initdata = {
2010-12-22 06:01:20 +03:00
& mdm_pwrdm ,
NULL
} ;
2011-09-14 21:34:21 +04:00
void __init omap242x_powerdomains_init ( void )
2010-12-22 06:01:20 +03:00
{
2011-09-14 21:34:21 +04:00
if ( ! cpu_is_omap2420 ( ) )
return ;
pwrdm_register_platform_funcs ( & omap2_pwrdm_operations ) ;
pwrdm_register_pwrdms ( powerdomains_omap24xx ) ;
pwrdm_complete_init ( ) ;
}
void __init omap243x_powerdomains_init ( void )
{
if ( ! cpu_is_omap2430 ( ) )
return ;
2011-09-15 02:01:21 +04:00
pwrdm_register_platform_funcs ( & omap2_pwrdm_operations ) ;
2011-09-14 21:34:21 +04:00
pwrdm_register_pwrdms ( powerdomains_omap24xx ) ;
pwrdm_register_pwrdms ( powerdomains_omap2430 ) ;
2011-09-15 02:01:21 +04:00
pwrdm_complete_init ( ) ;
2010-12-22 06:01:20 +03:00
}