blob: 0263efda06f4ed38022070b357b76df199b1db9f [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2007, ZTE Corporation.
*
* File Name: drvs_pow.h
* File Mark:
* Description:
* Others:
* Version: 1.3.0
* Author: wangxia
* Date: 2009-6-10
* History 1:
* Date:
* Version:
* Author:
* Modification:
* History 2:
********************************************************************************/
#ifndef _DRVS_POW_H
#define _DRVS_POW_H
/****************************************************************************
* Include files
****************************************************************************/
/****************************************************************************
* macro define
****************************************************************************/
//#define _USE_PSM
//#define _USE_PSM_DEBUG
#ifdef _OS_LINUX
#define PSM_CPU_CP 0
#else
#define PSM_CPU_CP 1
#endif
#ifdef _CPU_DFS_ON
#define PSM_CPU_DFS 1
#else
#define PSM_CPU_DFS 0
#endif
#ifdef _AXI_DFS_ON
#define PSM_AXI_DFS 1
#else
#define PSM_AXI_DFS 0
#endif
#ifdef _AXI_DFS_ON_HW
#define PSM_AXI_DFS_HW 1 //axi change by hw
#else
#define PSM_AXI_DFS_HW 0
#endif
#ifdef _DDR_DFS_ON
#define PSM_DDR_DFS 1
#if PSM_DDR_DFS
#define PSM_DDR_DFS_HW 1 //ddr change by hw
#endif
#else
#define PSM_DDR_DFS 0
#define PSM_DDR_DFS_HW 0
#endif
#ifdef _VCORE_DVS_ON
#define PSM_VCORE_DVS 1
#else
#define PSM_VCORE_DVS 0
#endif
#define POW_IDLE_TIMEOUT_MS (1)
#define POW_IDLE_TIMEOUT_TCPIP (5*1000*POW_IDLE_TIMEOUT_MS)
#define ICP2M0_PSM_AT_CMD_VALID 0x49435001
#define ICP2M0_PSM_AXI_DFS 0x49435002
/****************************************************************************
* Global Variables
****************************************************************************/
/****************************************************************************
* Types
****************************************************************************/
typedef enum
{
/*PS wake int dis reg1 begin*/
PS_RM_INT_DIS=1,
UART0_RXD_INT_DIS=2,
SD0_DATA1_INT_DIS=3,
PS_TIMER1_INT_DIS,
PS_TIMER2_INT_DIS,
ICP_AP2PS_INT_DIS,
USB2_POWERDWN_UP_INT_DIS,
USB2_POWERDWN_DOWN_INT_DIS,
HSIC_POWERDWN_UP_INT_DIS,
HSIC_POWERDWN_DOWN_INT_DIS,
ICP_PHY2PS_INT_DIS,
ICP_M02PS_INT_DIS,
RM_RTC_ALARM_INT_DIS,
RM_RTC_TIMER_INT_DIS,
RM_KEYPAD_INT_DIS,
SD1_DATA1_INT_DIS,
UART0_CTS_INT_DIS,
SPCU_PW_INT_DIS,
GSM_LPM_INT_DIS,
TD_LPM_TIMER_IND3_DIS=24,
TD_LPM_TIMER_IND4_DIS,
LTE_LPM_TIMER_IND2_DIS,
LTE_LPM_TIMER_IND4_DIS,
LTE_LPM_TIMER_IND5_DIS,
WD_LPM_TIMER_IND3_DIS,
WD_LPM_TIMER_IND4_DIS,
FRM_INT_ARM_32K_DIS=31,
/*PS wake int dis reg1 end*/
/*PS wake int dis reg2 begin*/
EXTERNAL_INT0_DIS=34,
EXTERNAL_INT1_DIS,
EXTERNAL_INT2_DIS,
EXTERNAL_INT3_DIS,
EXTERNAL_INT4_DIS,
EXTERNAL_INT5_DIS,
EXTERNAL_INT6_DIS,
EXTERNAL_INT7_DIS,
EXTERNAL_8IN1_INT0_DIS,
EXTERNAL_8IN1_INT1_DIS,
EXTERNAL_8IN1_INT2_DIS,
EXTERNAL_8IN1_INT3_DIS,
EXTERNAL_8IN1_INT4_DIS,
EXTERNAL_8IN1_INT5_DIS,
EXTERNAL_8IN1_INT6_DIS,
EXTERNAL_8IN1_INT7_DIS=49,
INVALID_WAKE_DIS_BIT
/*PS wake int dis reg2 end*/
}T_ZDrvPow_PsIntWakeDis;
typedef enum
{
PS_WAKE_INT,
PS_DIS_WAKE_INT,
INVALID_PS_WAKE_EN
}T_ZDrvPow_PsWakeIntDis;
typedef enum
{
IDLE_FLAG_UICC =0,
IDLE_FLAG_USBENUM =1,
IDLE_FLAG_VOICE =2,
IDLE_FLAG_I2S=3,
IDLE_FLAG_AP2CP=4,
IDLE_FLAG_SLEEP=5,
IDLE_FLAG_WIFI=6,
IDLE_FLAG_KPD=7,
IDLE_FLAG_TCPIP=8,
IDLE_FLAG_NAND=9,
IDLE_FLAG_CHARGER=10,
IDLE_FLAG_LCD=11,
IDLE_FLAG_LED=12,
IDLE_FLAG_WIFI_IOCTRL=13,
IDLE_FLAG_WIFI_XMIT=14,
IDLE_FLAG_LAN=15,
IDLE_FLAG_HOSTENUM=16,
IDLE_FLAG_BLG=17,
IDLE_FLAG_UART=18,
IDLE_FLAG_TD_ICP=19,/*·ÀֹʹÄÜ×ÓÖ¡ÖжÏÓë×ÓÖ¡Öжϵ½À´ÆÚ¼ä½øÈëÐÝÃß*/
IDLE_FLAG_W_ICP=20,
IDLE_FLAG_LTE_ICP=21,
IDLE_FLAG_CAMERA=22,
IDLE_FLAG_SD=23,
IDLE_FLAG_PMIC=24,
IDLE_FLAG_I2C=25,
IDLE_FLAG_VSIM = 26,
IDLE_FLAG_EDCP=27,
IDLE_FLAG_TDM,
IDLE_FLAG_MAX
}T_ZDrvPow_IdleFlag;
/*plat begin*/
typedef enum
{
TD_PHY =0,
WD_PHY =1,
LTE_PHY =2,
PHY_ID_MAX
}T_ZDrvPow_PhyId;
typedef enum
{
POW_BOOT_DEFAULT, /* Æô¶¯³õʼֵ */
POW_SYSINIT_FINISH, /* ϵͳ³õʼ»¯Íê³É,ÈçÐͺŻúÍê³ÉSysEntry */
POW_BOOT_FINISH /* ¿ª»úÍê³É£¬ÈçÐͺŻú³öÏÖ´ý»ú½çÃæ */
}T_ZDrvPow_BootStage; /* Æô¶¯½×¶Î */
/*plat begin*/
/*sleep begin*/
typedef struct _T_ZDrvPow_Opt
{
VOID (*pow_RefBeforeSleep)(VOID);
VOID (*pow_RefAfterSleep)(VOID);
}T_ZDrvPow_Opt;
typedef enum
{
KERNEL_SLEEP_MODE,
BOOT_SLEEP_MODE,
LOSSCOVERAGE_SLEEP_MODE,
AIRPLANE_SLEEP_MODE,
DEEP_SLEEP_MODE,
MAX_SLEEP_MODE
}T_ZDrvPow_SleepMode;
typedef enum
{
FPI_CLK_32K = 0,
FPI_CLK_52M = 1,
FPI_INVALID_CLK
}T_ZDrvPow_FpiClk;
typedef enum
{
ARM_PS_WAKE = 0,
ARM_PS_SLEEP = 1,
ARM_PS_INVALID_FLAG
}T_ZDrvPow_PsSleepFlag;
/*sleep end*/
/*freq begin*/
typedef enum
{
#if defined (_CHIP_ZX297520V2)
MAIN_CLK=0,
AON_MPLL_624M,
AON_DPLL_491M52,
MATRIX_MPLL_312M,
AON_MPLL_208M,
MATRIX_MPLL_104M,
MATRIX_MPLL_78M,
MATRIX_MPLL_52M=7,
#else
MAIN_CLK=0,
AON_MPLL_624M,
MATRIX_MPLL_312M,
MATRIX_MPLL_156M,
#endif
CORE_INVALID_FREQ
}T_ZDrvPow_CoreFreq;
typedef enum
{
#if defined (_CHIP_ZX297520V2)
AXI_26M,
AXI_39M,
AXI_52M,
AXI_78M,
AXI_104M,
AXI_122M88,
AXI_156M,
#else
AXI_6M5=0,
AXI_26M,
AXI_39M,
AXI_52M,
AXI_78M,
AXI_104M,
AXI_124M8,
AXI_156M=7,
#endif
AXI_INVALID_FREQ
}T_ZDrvPow_AxiFreq;
typedef enum
{
VCORE_0V800,
VCORE_0V825,
VCORE_0V850,
VCORE_0V875,
VCORE_0V900,
VCORE_INVALID_VOL
}T_ZDrvPow_Vcore;
typedef enum
{
CLK26M=26000000,
CLK624M=624000000,
#if defined (_CHIP_ZX297520V2)
#else
CLK156M=156000000,
#endif
CLK312M=312000000,
CLK208M=208000000,
CLK78M=78000000,
CLK_INVALID_FREQ
}T_ZDrvPow_PsFreqConst;
#define DOWN_CPUFREQ CLK156M
#define UP_CPUFREQ CLK312M
#define PULL_CPUFREQ CLK624M
#if PSM_DDR_DFS_HW
typedef enum
{
DDR_156M = 0, //ÐèÒªÖØÐ¿¼ÂÇÆµÂʵµ£¬×îÖÕÆµÂÊÇëÇóΪ¸÷ºËÇëÇóµþ¼ÓºÍ
DDR_208M = 0x4f,
DDR_312M = 0x9d,
DDR_400M = 0xc8,
DDR_CLKEND
}T_zDrvPow_DDRCLK;
#else
typedef enum
{
#if defined (_CHIP_ZX297520V2)
DDR_13M = 0,
DDR_52M = 1,
DDR_100M = 2,
DDR_104M = 3,
DDR_156M = 4,
DDR_208M = 5,
DDR_312M = 6,
DDR_400M = 7,
DDR_416M = 8,
#else
DDR_156M ,
DDR_208M ,
DDR_312M ,
DDR_400M ,
#endif
DDR_CLKEND
}T_zDrvPow_DDRCLK;
#endif
/*freq end*/
/*gate begin*/
typedef enum
{
/*ps power domain*/
GSM_RAM_PWR = 0,
GSM_DSP_PWR = 1,
EDCP_PWR = 4,
/*3/4bits reserved*/
USB_CTRL_PWR = 8,
USB_HSIC_PWR = 9,
PS_ALL_PWR = 10,
MAX_PWR = 11
}T_ZDrvPow_PwrId;
typedef enum
{
POW_ENABLE = 0,
POW_DISABLE = 1,
POW_ENABLE_ALL
}T_ZDrvPow_PwrEn;
/*gate end*/
#ifdef _USE_WAKELOCK
/*wakelock begin*/
typedef struct _T_ZDrvWakeLock_Entry
{
struct list_head node; /* node*/
char name[32];
BOOL active:1;
UINT32 active_count;
UINT32 relax_count;
}T_ZDrvWakeLock_Entry;
typedef struct _T_zDrvWakeLock_TAB
{
struct list_head devList;
ZOSS_SEMAPHORE_ID opMutex;
UINT32 devListCount;
}T_zDrvWakeLock_TAB;
typedef void * T_ZDrvWakeLock_Handle;
/*wakelock end*/
#endif
/****************************************************************************
* function
****************************************************************************/
#ifdef _USE_WAKELOCK
/*wakelock begin*/
T_ZDrvWakeLock_Handle zDrvWakeLock_Register(const char *name);
VOID zDrvWakeLock_Lock(T_ZDrvWakeLock_Handle handle);
VOID zDrvWakeLock_Unlock(T_ZDrvWakeLock_Handle handle);
BOOL zDrvWakeLock_DevStatue(VOID);
/*wakelock end*/
#endif
typedef VOID (*psm_uartWakeExtApHook)(VOID); /*uart wake ext ap hook */
typedef VOID (*psm_usbWakeExtApHook)(VOID); /*usb wake ext ap hook */
typedef SINT32 (*pm_callback_fn)(void);
extern SINT32 zx_pm_register_callback(pm_callback_fn enter_cb, pm_callback_fn exit_cb);
VOID zDrvPow_SetWakeExtApHookOpt(psm_uartWakeExtApHook uartWakeExtApHook, psm_usbWakeExtApHook usbWakeExtApHook);
/*plat begin*/
SINT32 zDrvPow_GetLteSleepFlag(VOID);/*ЭÒéÕ»ÐèÇó£¬Óë7510±£³ÖÒ»ÖÂ*/
VOID zDrvPow_ClearPhySleepFlag(VOID);
SINT32 zDrvPow_GetPhySleepFlag(T_ZDrvPow_PhyId phyId);
BOOL zDrvPow_PsmGetCampon(VOID);
VOID zDrvPow_SetBootStage(T_ZDrvPow_BootStage stage);
BOOL zDrvPow_PsmIdleFlag(VOID);
VOID zDrvPow_DpramSendCmdWakePhy(T_ZDrvPow_PhyId phyId);
VOID zDrvPow_Icp2ZspDebugInfo(T_ZDrvPow_PhyId phyId,SINT32 dwIcp);
BOOL zDrvPow_UmtsSleep(VOID);
VOID zDrvPow_ChangeRRCFreForGSM(VOID);
UINT32 zDrvPow_Sleep_Func(T_ZDrvPow_SleepMode sleep_mode, UINT32 sleep_time);
SINT32 zDrvPow_SetDevActive(T_ZDrvPow_IdleFlag devId);
SINT32 zDrvPow_SetDevIdle(T_ZDrvPow_IdleFlag devId);
UINT32 zDrvPow_PsmIdleFlagGet(VOID);
UINT32 zDrvPow_PsmDeepSleepCnt(VOID);
/*plat end*/
/*sleep begin*/
SINT32 zDrvPow_SetOpt(T_ZDrvPow_Opt* pPowOpt);
UINT32 zDrvPow_PsmDeepSleep(UINT32 ps_sleep_time);
UINT32 zDrvPow_ChargerSleep(UINT32 sleep_time);
VOID zDrvPow_KernelSleep(VOID);
UINT32 zDrvPow_BootSleep(UINT32 sleep_time);
VOID zDrvPow_ActiveSleep(UINT32 ms);
SINT32 zDrvPow_SetPcuWakeInt(T_ZDrvPow_PsIntWakeDis intId,T_ZDrvPow_PsWakeIntDis intDis);
SINT32 zDrvPow_PSM_Init(VOID);
VOID zDrvPow_ChargerOnSleepInit(VOID);
VOID zDrvPow_ChargerOnSleepOperation(VOID);
/*sleep end*/
/*freq begin*/
UINT32 zDrvPow_GetPsCoreFreq(VOID);
SINT32 zDrvPow_SetArmPsCoreFreq(T_ZDrvPow_PsFreqConst workFreq);
SINT32 zDrvPow_SetPsDdrFreq(T_zDrvPow_DDRCLK freq);
/*freq end*/
SINT32 zDrvPow_GetTdSfnFlag(VOID);
VOID zDrvPow_PcuSetWakeSource(UINT32 *wake_source);
VOID zDrvPow_PsmLed(BOOL onOff);
/*power partition control*/
SINT32 zDrvpow_SetPwrGate(T_ZDrvPow_PwrId partId, T_ZDrvPow_PwrEn ena);
#endif/*_DRVS_POW_H*/