1 /* 2 * OMAP2XXX powerdomain definitions 3 * 4 * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc. 5 * Copyright (C) 2007-2011 Nokia Corporation 6 * 7 * Paul Walmsley, Jouni Högander 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 14 #include <linux/kernel.h> 15 #include <linux/init.h> 16 17 #include "powerdomain.h" 18 #include "powerdomains2xxx_3xxx_data.h" 19 20 #include "prcm-common.h" 21 #include "prm2xxx_3xxx.h" 22 #include "prm-regbits-24xx.h" 23 24 /* 24XX powerdomains and dependencies */ 25 26 /* Powerdomains */ 27 28 static struct powerdomain dsp_pwrdm = { 29 .name = "dsp_pwrdm", 30 .prcm_offs = OMAP24XX_DSP_MOD, 31 .pwrsts = PWRSTS_OFF_RET_ON, 32 .pwrsts_logic_ret = PWRSTS_RET, 33 .banks = 1, 34 .pwrsts_mem_ret = { 35 [0] = PWRSTS_RET, 36 }, 37 .pwrsts_mem_on = { 38 [0] = PWRSTS_ON, 39 }, 40 .voltdm = { .name = "core" }, 41 }; 42 43 static struct powerdomain mpu_24xx_pwrdm = { 44 .name = "mpu_pwrdm", 45 .prcm_offs = MPU_MOD, 46 .pwrsts = PWRSTS_OFF_RET_ON, 47 .pwrsts_logic_ret = PWRSTS_OFF_RET, 48 .banks = 1, 49 .pwrsts_mem_ret = { 50 [0] = PWRSTS_RET, 51 }, 52 .pwrsts_mem_on = { 53 [0] = PWRSTS_ON, 54 }, 55 .voltdm = { .name = "core" }, 56 }; 57 58 static struct powerdomain core_24xx_pwrdm = { 59 .name = "core_pwrdm", 60 .prcm_offs = CORE_MOD, 61 .pwrsts = PWRSTS_OFF_RET_ON, 62 .banks = 3, 63 .pwrsts_mem_ret = { 64 [0] = PWRSTS_OFF_RET, /* MEM1RETSTATE */ 65 [1] = PWRSTS_OFF_RET, /* MEM2RETSTATE */ 66 [2] = PWRSTS_OFF_RET, /* MEM3RETSTATE */ 67 }, 68 .pwrsts_mem_on = { 69 [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */ 70 [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */ 71 [2] = PWRSTS_OFF_RET_ON, /* MEM3ONSTATE */ 72 }, 73 .voltdm = { .name = "core" }, 74 }; 75 76 77 /* 78 * 2430-specific powerdomains 79 */ 80 81 /* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */ 82 83 static struct powerdomain mdm_pwrdm = { 84 .name = "mdm_pwrdm", 85 .prcm_offs = OMAP2430_MDM_MOD, 86 .pwrsts = PWRSTS_OFF_RET_ON, 87 .pwrsts_logic_ret = PWRSTS_RET, 88 .banks = 1, 89 .pwrsts_mem_ret = { 90 [0] = PWRSTS_RET, /* MEMRETSTATE */ 91 }, 92 .pwrsts_mem_on = { 93 [0] = PWRSTS_ON, /* MEMONSTATE */ 94 }, 95 .voltdm = { .name = "core" }, 96 }; 97 98 /* 99 * 100 */ 101 102 static struct powerdomain *powerdomains_omap24xx[] __initdata = { 103 &wkup_omap2_pwrdm, 104 &gfx_omap2_pwrdm, 105 &dsp_pwrdm, 106 &mpu_24xx_pwrdm, 107 &core_24xx_pwrdm, 108 NULL 109 }; 110 111 static struct powerdomain *powerdomains_omap2430[] __initdata = { 112 &mdm_pwrdm, 113 NULL 114 }; 115 116 void __init omap242x_powerdomains_init(void) 117 { 118 if (!cpu_is_omap2420()) 119 return; 120 121 pwrdm_register_platform_funcs(&omap2_pwrdm_operations); 122 pwrdm_register_pwrdms(powerdomains_omap24xx); 123 pwrdm_complete_init(); 124 } 125 126 void __init omap243x_powerdomains_init(void) 127 { 128 if (!cpu_is_omap2430()) 129 return; 130 131 pwrdm_register_platform_funcs(&omap2_pwrdm_operations); 132 pwrdm_register_pwrdms(powerdomains_omap24xx); 133 pwrdm_register_pwrdms(powerdomains_omap2430); 134 pwrdm_complete_init(); 135 } 136