int rhea_force_sleep(suspend_state_t state) { struct kona_idle_state s; int i; memset(&s, 0, sizeof(s)); s.state = get_force_sleep_state(); /* No more scheduling out */ local_irq_disable(); local_fiq_disable(); force_sleep = 1; while (1) { for (i = 0; i < PWR_MGR_NUM_EVENTS; i++) { int test = 0; test |= (i == SOFTWARE_0_EVENT) ? 1 : 0; test |= (i == SOFTWARE_2_EVENT) ? 1 : 0; test |= (i == VREQ_NONZERO_PI_MODEM_EVENT) ? 1 : 0; if (test == 0) pwr_mgr_event_trg_enable(i, 0); } disable_all_interrupts(); enter_idle_state(&s); } }
int __init island_pwr_mgr_init() { struct v0x_spec_i2c_cmd_ptr v_ptr; int i; struct pi* pi; struct pm_policy_cfg cfg; cfg.ac = 1; cfg.atl = 0; v_ptr.other_ptr = 1; v_ptr.set2_val = 1; /*Retention voltage inx*/ v_ptr.set2_ptr = 45; v_ptr.set1_val = 2;/*Should be 8 ????Wakeup override*/ v_ptr.set1_ptr = 49; v_ptr.zerov_ptr = 45; /*Not used for island*/ #if 0 /*disable jtag clock instrusive during debug*/ pwr_mgr_ignore_dap_powerup_request(true); #endif pwr_mgr_init(&island_pwr_mgr_info); island_pi_mgr_init(); /*MM override is not set by default*/ //pwr_mgr_pi_set_wakeup_override(PI_MGR_PI_ID_MM,false/*clear*/); /*clear all the event */ pwr_mgr_event_clear_events(LCDTE_EVENT, EVENT_ID_ALL); pwr_mgr_event_set(SOFTWARE_2_EVENT,1); pwr_mgr_event_set(SOFTWARE_0_EVENT,1); /*Init I2c seq*/ pwr_mgr_pm_i2c_enable(false); /*Program I2C sequencer*/ island_pm_i2c_cmd_init(); //pwr_mgr_pm_i2c_cmd_write(i2c_cmd,ARRAY_SIZE(i2c_cmd)); /*Program voltage lookup table AVS driver may chnage this later*/ //pwr_mgr_pm_i2c_var_data_write(pwrmgr_default_volt_lut,VLT_LUT_SIZE); /*populate the jump voltage table */ //pwr_mgr_set_v0x_specific_i2c_cmd_ptr(VOLT0,&v_ptr); pwr_mgr_pm_i2c_enable(true); /*Init event table*/ for(i = 0; i < ARRAY_SIZE(event_table); i++) { u32 event_id; event_id = event_table[i].event_id; if (event_id >= GPIO29_A_EVENT && event_id <= SPARE10_A_EVENT) event_id = GPIO29_A_EVENT; if (event_id >= GPIO29_B_EVENT && event_id <= SPARE10_B_EVENT) event_id = GPIO29_B_EVENT; pwr_mgr_event_trg_enable(event_table[i].event_id,event_table[i].trig_type); cfg.policy = event_table[i].policy_modem; pwr_mgr_event_set_pi_policy(event_id, PI_MGR_PI_ID_MODEM, &cfg); cfg.policy = event_table[i].policy_arm_core; pwr_mgr_event_set_pi_policy(event_id, PI_MGR_PI_ID_ARM_CORE, &cfg); cfg.policy = event_table[i].policy_arm_sub; pwr_mgr_event_set_pi_policy(event_id, PI_MGR_PI_ID_ARM_SUB_SYSTEM, &cfg); cfg.policy = event_table[i].policy_hub_aon; pwr_mgr_event_set_pi_policy(event_id, PI_MGR_PI_ID_HUB_AON, &cfg); cfg.policy = event_table[i].policy_hub_switchable; pwr_mgr_event_set_pi_policy(event_id, PI_MGR_PI_ID_HUB_SWITCHABLE, &cfg); } /*Init all PIs*/ /*Init all PIs*/ for(i = 0; i < PI_MGR_PI_ID_MODEM; i++) { pi = pi_mgr_get(i); BUG_ON(pi == NULL); pi_init(pi); } island_clock_init(); /*All the initializations are done. Clear override bit here so that * appropriate policies take effect*/ #if 1 for (i = 0; i < PI_MGR_PI_ID_MODEM; i++) { pi = pi_mgr_get(i); BUG_ON(pi == NULL); pi_init_state(pi); } #endif return 0; }