2008-08-19 11:08:42 +03:00
/*
2010-12-21 20:01:20 -07:00
* OMAP2XXX powerdomain definitions
2008-08-19 11:08:42 +03:00
*
* Copyright ( C ) 2007 - 2008 Texas Instruments , Inc .
2011-03-07 19:28:15 -07:00
* Copyright ( C ) 2007 - 2011 Nokia Corporation
2008-08-19 11:08:42 +03:00
*
2010-12-21 20:01:20 -07:00
* Paul Walmsley , Jouni Högander
2008-08-19 11:08:42 +03: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-21 20:01:20 -07:00
# include <linux/kernel.h>
# include <linux/init.h>
2008-08-19 11:08:42 +03:00
2010-12-21 21:05:16 -07:00
# include "powerdomain.h"
2010-12-21 20:01:20 -07:00
# include "powerdomains2xxx_3xxx_data.h"
2008-08-19 11:08:42 +03:00
# include "prcm-common.h"
2010-12-21 15:30:55 -07:00
# include "prm2xxx_3xxx.h"
2008-08-19 11:08:42 +03:00
# include "prm-regbits-24xx.h"
/* 24XX powerdomains and dependencies */
/* Powerdomains */
static struct powerdomain dsp_pwrdm = {
. name = " dsp_pwrdm " ,
. prcm_offs = OMAP24XX_DSP_MOD ,
. omap_chip = OMAP_CHIP_INIT ( CHIP_IS_OMAP24XX ) ,
. pwrsts = PWRSTS_OFF_RET_ON ,
2011-03-07 19:28:15 -07:00
. pwrsts_logic_ret = PWRSTS_RET ,
2008-08-19 11:08:42 +03:00
. banks = 1 ,
. pwrsts_mem_ret = {
2011-03-07 19:28:15 -07:00
[ 0 ] = PWRSTS_RET ,
2008-08-19 11:08:42 +03:00
} ,
. pwrsts_mem_on = {
2011-03-07 19:28:15 -07:00
[ 0 ] = PWRSTS_ON ,
2008-08-19 11:08:42 +03:00
} ,
} ;
static struct powerdomain mpu_24xx_pwrdm = {
. name = " mpu_pwrdm " ,
. prcm_offs = MPU_MOD ,
. omap_chip = OMAP_CHIP_INIT ( CHIP_IS_OMAP24XX ) ,
. pwrsts = PWRSTS_OFF_RET_ON ,
. pwrsts_logic_ret = PWRSTS_OFF_RET ,
. banks = 1 ,
. pwrsts_mem_ret = {
2011-03-07 19:28:15 -07:00
[ 0 ] = PWRSTS_RET ,
2008-08-19 11:08:42 +03:00
} ,
. pwrsts_mem_on = {
2011-03-07 19:28:15 -07:00
[ 0 ] = PWRSTS_ON ,
2008-08-19 11:08:42 +03:00
} ,
} ;
static struct powerdomain core_24xx_pwrdm = {
. name = " core_pwrdm " ,
. prcm_offs = CORE_MOD ,
. omap_chip = OMAP_CHIP_INIT ( CHIP_IS_OMAP24XX ) ,
. pwrsts = PWRSTS_OFF_RET_ON ,
. 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 */
} ,
} ;
/*
* 2430 - specific powerdomains
*/
2011-01-27 16:39:40 -08:00
# ifdef CONFIG_SOC_OMAP2430
2008-08-19 11:08:42 +03:00
/* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */
static struct powerdomain mdm_pwrdm = {
. name = " mdm_pwrdm " ,
. prcm_offs = OMAP2430_MDM_MOD ,
. omap_chip = OMAP_CHIP_INIT ( CHIP_IS_OMAP2430 ) ,
. pwrsts = PWRSTS_OFF_RET_ON ,
2011-03-07 19:28:15 -07:00
. pwrsts_logic_ret = PWRSTS_RET ,
2008-08-19 11:08:42 +03:00
. banks = 1 ,
. pwrsts_mem_ret = {
2011-03-07 19:28:15 -07:00
[ 0 ] = PWRSTS_RET , /* MEMRETSTATE */
2008-08-19 11:08:42 +03:00
} ,
. pwrsts_mem_on = {
2011-03-07 19:28:15 -07:00
[ 0 ] = PWRSTS_ON , /* MEMONSTATE */
2008-08-19 11:08:42 +03:00
} ,
} ;
2011-01-27 16:39:40 -08:00
# endif /* CONFIG_SOC_OMAP2430 */
2008-08-19 11:08:42 +03:00
2010-12-21 20:01:20 -07:00
/* As powerdomains are added or removed above, this list must also be changed */
static struct powerdomain * powerdomains_omap2xxx [ ] __initdata = {
2008-08-19 11:08:42 +03:00
2010-12-21 20:01:20 -07:00
& wkup_omap2_pwrdm ,
& gfx_omap2_pwrdm ,
# ifdef CONFIG_ARCH_OMAP2
& dsp_pwrdm ,
& mpu_24xx_pwrdm ,
& core_24xx_pwrdm ,
2008-08-19 11:08:42 +03:00
# endif
2010-12-21 20:01:20 -07:00
2011-01-27 16:39:40 -08:00
# ifdef CONFIG_SOC_OMAP2430
2010-12-21 20:01:20 -07:00
& mdm_pwrdm ,
# endif
NULL
} ;
void __init omap2xxx_powerdomains_init ( void )
{
pwrdm_init ( powerdomains_omap2xxx , & omap2_pwrdm_operations ) ;
}