static kal_int32 fgauge_set_low_battery_interrupt(void *data)
{
#if defined(CONFIG_MTK_HAFG_20)
	kal_uint32 voltage=*(kal_uint32*)(data);
	kal_uint32 rawdata;
	static int eint_init=0;

	if(eint_init==0)
	{
		pmic_register_interrupt_callback(2,fg_bat_l_int_handler);
		eint_init=1;
	}

	is_lbat_int=KAL_FALSE;

	pmic_turn_on_clock(KAL_TRUE);

	rawdata=voltage*4096/1800/4;

	bm_print(BM_LOG_CRTI, "[fgauge_set_low_battery_interrupt] Battery voltage %d %d\n",rawdata,voltage);
	
	// 0:set interrupt 
	pmic_set_register_value(PMIC_RG_INT_EN_BAT_L,1);

	// 1.setup min voltage threshold 3.4v
	pmic_set_register_value(PMIC_RG_LBAT_VOLT_MIN,rawdata);	

	// 2.setup detection period
	pmic_set_register_value(PMIC_RG_LBAT_DET_PRD_19_16,0x0);
	pmic_set_register_value(PMIC_RG_LBAT_DET_PRD_15_0,0x12f);

	// 3.setup max/min debounce time
	pmic_set_register_value(PMIC_RG_LBAT_DEBT_MIN,0x5a);//15mins	

	// 4.turn on IRQ
	pmic_set_register_value(PMIC_RG_LBAT_IRQ_EN_MIN,0x1); 	

	// 5. turn on LowBattery Detection
	pmic_set_register_value(PMIC_RG_LBAT_EN_MIN,1);
#endif	

	return STATUS_OK;
}
static int rtc_pdrv_probe(struct platform_device *pdev)
{
    unsigned long flags;

    /* only enable LPD interrupt in engineering build */
    spin_lock_irqsave(&rtc_lock, flags);
    hal_rtc_set_lp_irq();
    spin_unlock_irqrestore(&rtc_lock, flags);

    /* register rtc device (/dev/rtc0) */
    rtc = rtc_device_register(RTC_NAME, &pdev->dev, &rtc_ops, THIS_MODULE);
    if (IS_ERR(rtc)) {
        rtc_xerror("register rtc device failed (%ld)\n", PTR_ERR(rtc));
        return PTR_ERR(rtc);
    }

#ifdef PMIC_REGISTER_INTERRUPT_ENABLE
    pmic_register_interrupt_callback(RTC_INTERRUPT_NUM,rtc_irq_handler);
    pmic_enable_interrupt(RTC_INTERRUPT_NUM,1,"RTC");
#endif

    device_init_wakeup(&pdev->dev, 1);
    return 0;
}