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;
}