📄 power.c
字号:
#endif
#ifndef _WINDOWS
ffs_exit ();
#endif // _WINDOWS
rvf_send_trace("Power off button", 16, NULL_PARAM, RV_TRACE_LEVEL_ERROR, LCC_USE_ID);
#ifndef _WINDOWS
#if (OP_WCP == 0)
(Kp.pressed)(KPD_PWR); /* tell key is pressed */
rvf_delay(5);
(Kp.released)(); /* tell key is released */
#endif
#endif // _WINDOWS
#if (ANLG_FAM!=11)
SPI_GBL_INFO_PTR->is_gsm_on = FALSE;
#else
// power_state=POWER_OFF;
#endif
}
/**
* @brief Sets the cause of the swith ON event.
*
* This function get the ABB status register and stores it into the
* global variable Power_abb_status.
*
* @noparam
*
* @noreturn
*/
void Set_Switch_ON_Cause(void)
{
#if (CHIPSET!=15)
Power_abb_status = ABB_Read_Status();
#else
SYS_UWORD8 status;
bspTwl3029_Power_SwitchOnStatus(&status);
Power_abb_status = status;
LCC_TRACE(TTrAll,"LCC: PWR : status=%x Ln:%d",status,__LINE__);
#endif
}
#if (ANLG_FAM==11)
// Added by jiangbo.2006/04/24
unsigned char pwr_read_status(void)
{
SYS_UWORD8 status;
bspTwl3029_Power_SwitchOnStatus(&status);
return status;
}
#endif
void Sys_PowerOff() // added by jiangbo.2006/01/10
{
#if(ANLG_FAM == 11)
bspTwl3029_Power_SwitchOff();
#else
Lcd_Power_Off();
SIM_PowerOff();
ABB_Power_Off();
#endif
}
/*******************************************************************************
**
** Function Switch_ON
**
** Description This function is called by the spi task after the board is
** switched ON. It calls the appropriate function according
** to the ABB status register.
**
** Warning The Set_Switch_ON_Cause() function has to be called prior.
** edit by horace shi 06/09/01
*******************************************************************************/
//char g_szBuff[40];
extern unsigned short dar_previous_status;
extern unsigned short dar_current_status;
extern unsigned short dar_lcd_sleep_flag;
extern unsigned char xdump_buffer[];
T_CHARG_HISR_INFOS bios_charg_hisr_infos = {0};
extern void bios_charg_hisr_entry(void);
#if 1
unsigned char g_bios_charg_flag=0;
#endif
void Switch_ON(void)
{
//SYS_UWORD16 abb_status;
UINT16 loop_count;
unsigned char status,rtc_state;
T_DAR_RECOVERY_STATUS uWDStatus = 0;
unsigned int flag_hi = 0;
unsigned int flag_low = 0;
unsigned short dar_lcd_flag = 0;
// unsigned short dar_lcd_flag1 = 0;
LCC_TRACE(TTrAll,"LCC: PWR: Switch_ON Ln:%d ",__LINE__);
flag_hi = *((unsigned char *)xdump_buffer+150);
flag_low = *((unsigned char *)xdump_buffer+151);
dar_lcd_sleep_flag =( flag_hi<<8)+flag_low;
LCC_TRACE(TTrAll,"LCC: PWR: dar_lcd_flag:%x ",flag_hi);
LCC_TRACE(TTrAll,"LCC: PWR: dar_lcd_flag:%x ",flag_low);
LCC_TRACE(TTrAll,"LCC: PWR: dar_lcd_flag:%x ",dar_lcd_sleep_flag);
dar_previous_status = dar_current_status;//edit by horace
dar_recovery_get_status(&uWDStatus);
LCC_TRACE(TTrAll,"LCC: PWR: Switch_ON dar=0x%x abb_status=0x%x Ln:%d",
uWDStatus,Power_abb_status,__LINE__);
//abb_status = Power_abb_status;
//lcd_ms_delay(5000);
//reset power on
if(uWDStatus == DAR_WATCHDOG
|| uWDStatus == DAR_NORMAL_SCUTTLING
|| uWDStatus == DAR_EMERGENCY_SCUTTLING)
{
LCC_TRACE(TTrAll, "LCC: PWR: Start from reset Ln:%d",__LINE__);
//rvf_send_trace("Start from reset",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID);
power_state = POWER_ON;
//g_bios_charg_flag=g_bios_charg_flag;//need think plug or unplug during dar reset
}
else//normal power on
{
#if 1
g_bios_charg_flag=0;//inital
#endif
status = pwr_read_status();//insteand Power_abb_status
BspTwl3029_I2c_ReadSingle(1,17,&rtc_state,NULL);
if( (status&(1<<BSP_TWL3029_POWER_PWON_OFFSET
|1<<BSP_TWL3029_POWER_RPWON_OFFSET)) )//pwon
{
LCC_TRACE(TTrAll, "LCC: PWR: check power key");
for (loop_count = 0; loop_count < 10; loop_count++)
{
status = pwr_read_status();
LCC_TRACE(TTrAll, "LCC: PWR: check power key%d status=%x Ln:%d",
loop_count,status,__LINE__);
if ((status & (1<<BSP_TWL3029_POWER_PWON_OFFSET
|1<<BSP_TWL3029_POWER_RPWON_OFFSET)) == 0)
{
LCC_TRACE(TTrAll, "LCC: PWR: check power off Ln:%d",__LINE__);
Sys_PowerOff();
}
lcd_ms_delay(45);
}
power_state = POWER_ON;
pwron_way=0;
}
/*else if( (status&(1<<BSP_TWL3029_POWER_RPWON_OFFSET)) )//rpwon
{
//Switch on Condition on ON REM transition 0->1
LCC_TRACE(TTrAll, "LCC: PWR: ON Remote Ln:%d", __LINE__);
Power_ON_Remote();
}*/
else if( (status&(1<<BSP_TWL3029_POWER_CHG_OFFSET)) )//charger charging
{
// Switch on Condition on CHARGER IC PLUG
rvf_send_trace("CHGSTS --kathy",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID);
LCC_TRACE(TTrAll, "LCC: PWR: CHGSTS power on Ln:%d",__LINE__);
pwron_way = 1 ;
#if 1
g_bios_charg_flag=1;
#endif
}
else if( (status&(1<<BSP_TWL3029_POWER_USB_OFFSET)) )//usb charging
{
//Switch on Condition on CHARGER IC PLUG
rvf_send_trace("CHGSTS --kathy",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID);
LCC_TRACE(TTrAll, "LCC: PWR: USB CHGSTS power on Ln:%d",__LINE__);
pwron_way = 1 ;
//g_bios_charg_flag=1;//need edit later by horace
}
else if( (rtc_state&0x40)==0x40)//rtc power on
{
power_state = POWER_ON;
pwron_way = 2; // indicate the power way is through RTC
}
else//unkonw state
{
Sys_PowerOff();
}
}
//-----------------------------------------------------//
/* NU_Create_HISR(&bios_charg_hisr_infos.hisr,
"CHARG_HISR",
bios_charg_hisr_entry,
2,
bios_charg_hisr_infos.hisr_stack,
sizeof(bios_charg_hisr_infos.hisr_stack));*/
//--------------------------------------------------------//
bspTwl3029_IntC_setHandler(BSP_TWL3029_INTC_SOURCE_ID_PW_FALL_EDGE, Power_Key_Interrupt);
bspTwl3029_IntC_enableSource(BSP_TWL3029_INTC_SOURCE_ID_PW_FALL_EDGE);
/* wangwang : add for when using charger power on machine ,remote poweron can still
be used to let the machine into normal idle MMI
060826 */
bspTwl3029_IntC_setHandler(BSP_TWL3029_INTC_SOURCE_ID_EVENT, Power_Key_Interrupt);
bspTwl3029_IntC_enableSource(BSP_TWL3029_INTC_SOURCE_ID_EVENT);
}
/*******************************************************************************
**
** Function Power_ON_Remote
**
** Description
**
**
*******************************************************************************/
void Power_ON_Remote(void)
{
/* FIXME: Patch for I-Sample 1.1 */
rvf_send_trace("Start from Remote, Routing to Power ON",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID);
Power_ON_Button();
}
/*******************************************************************************
**
** Function Power_OFF_Remote
**
** Description
**
**
*******************************************************************************/
void Power_OFF_Remote(void)
{
/* FIXME: Patch for I-Sample 1.1 */
rvf_send_trace("Stop from Remote, Routing to Power OFF",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID);
Power_OFF_Button();
}
/*******************************************************************************
**
** Function Power_IT_WakeUp
**
** Description
**
**
*******************************************************************************/
void Power_IT_WakeUp(void)
{
}
#ifdef RVM_PWR_SWE
/*******************************************************************************
**
** Function PWR_Charger_Plug
**
** Description
**
**
*******************************************************************************/
void PWR_Charger_Plug(void)
{
/* Start the fast charging cycle */
/* Since this function is called from the SPI task
it can't be interrupt by another task
so we can directly access the SPI through the low-level driver */
if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */
{
rvf_delay(RVF_MS_TO_TICKS(2000));
}
rvf_stop_timer(SPI_TIMER3);
/* informs the upper layer that the charger has been plugged */
pwr_send_charger_plug_event();
/* get the type of the battery */
pwr_get_battery_type();
}
/*******************************************************************************
**
** Function PWR_Charger_Unplug
**
** Description
**
**
*******************************************************************************/
void PWR_Charger_Unplug(void)
{
/* informs the upper layer that the charger has been unplugged */
pwr_send_charger_unplug_event();
rvf_send_trace("Charger unplug", 14, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID );
pwr_stop_charging();
if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */
{
#ifndef _WINDOWS
#if (ANLG_FAM == 1)
ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE);
#elif ((ANLG_FAM == 2) || (ANLG_FAM == 3)|| (ANLG_FAM == 4))
ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001);
#endif
#else
ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x00EE);
#endif // _WINDOWS
}
else
{
pwr_handle_discharge();
}
}
#endif /* #ifdef RVM_PWR_SWE */
//zhengyu add 2002-11-01
UINT16 charge_switch(void)
{
return pwron_way;
}
void decide_whether_light_charger_led(void)
{
if (charge_switch()==1) // charger power on
{
//wangwang : enalbe gpio12 output high to light on the
// power indicate led
// 070508
GPIO_SET_OUTPUT(12);
GPIO_DIRECTION_OUT(12);
CONF_GPIO_12 = MUX_CFG(0,PULLUP);
}
}
/*Lily Porting by he jun --- end*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -