1 /******************************************************************************
2 ** File Name: watchdog_phy_v3.c *
5 ** Copyright: 2010 Spreatrum, Incoporated. All Rights Reserved. *
6 ** Description: This file define the physical layer of I2C device. *
7 ******************************************************************************
9 ******************************************************************************
11 ** ------------------------------------------------------------------------- *
12 ** DATE NAME DESCRIPTION *
13 ** 08/02/2010 Jie Dai Create. *
14 ******************************************************************************/
16 /**---------------------------------------------------------------------------*
18 **---------------------------------------------------------------------------*/
19 #include <asm/arch/os_api.h>
20 #include <asm/arch/sc_reg.h>
21 #include <asm/arch/adi_hal_internal.h>
22 #include <asm/arch/watchdog_phy.h>
24 /**---------------------------------------------------------------------------*
26 **---------------------------------------------------------------------------*/
32 #define ANA_WDG_LOAD_TIMEOUT_NUM (0xfffff)
33 #define ANA_WDG_CLR_INT_TIMEOUT_NUM (10000)
35 #define WDG_LOAD_TIMER_VALUE(value) \
38 while((ANA_REG_GET(WDG_INT_RAW) & WDG_LD_BUSY_BIT) && ( cnt < ANA_WDG_LOAD_TIMEOUT_NUM )) cnt++;\
39 ANA_REG_SET( WDG_LOAD_HIGH, (uint16)(((value) >> 16 ) & 0xffff));\
40 ANA_REG_SET( WDG_LOAD_LOW , (uint16)((value) & 0xffff) );\
43 #define CLEAR_WDG_INT(msk) \
46 ANA_REG_SET(WDG_INT_CLR, (msk));\
47 while((ANA_REG_GET(WDG_INT_RAW) & (msk))&&(cnt < ANA_WDG_CLR_INT_TIMEOUT_NUM)) cnt++; \
51 /**---------------------------------------------------------------------------*
53 **---------------------------------------------------------------------------*/
56 /*****************************************************************************/
57 // Description: This function config the watch dog module.
61 /*****************************************************************************/
62 #ifdef CONFIG_SC7710G2
63 PUBLIC int32 WDG_PHY_CONFIG (WDG_CONFIG_T *cfg)
68 ///WDG_TRACE("Watch Dog Trace: Watch Dog Value 0x%8.8x", CHIP_REG_GET(WDG_VALUE));
70 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
74 case WDG_TIMEOUT_MODE_RESET:
75 ANA_REG_OR (WDG_CTRL, WDG_RST_EN);
78 case WDG_TIMEOUT_MODE_INT:
79 ANA_REG_OR (WDG_CTRL, WDG_INT_EN_BIT);
83 break; //No need to change
86 if (WDG_TIMER_STATE_STOP != cfg->state)
88 WDG_LOAD_TIMER_VALUE (cfg->val);
93 case WDG_TIMER_STATE_STOP:
94 ANA_REG_AND (WDG_CTRL, (~WDG_CNT_EN_BIT));
97 case WDG_TIMER_STATE_START:
98 ANA_REG_OR (WDG_CTRL, WDG_CNT_EN_BIT);
102 break; //No need to change
105 WDG_TRACE ("Watch Dog Trace: Watch Dog Control 0x%8.8x", ANA_REG_GET (WDG_CTRL));
106 /// WDG_TRACE ("Watch Dog Trace: Watch Dog LOAD 0x%8.8x", CHIP_REG_GET (WDG_LOAD));
108 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
113 PUBLIC int32 WDG_PHY_CONFIG (WDG_CONFIG_T *cfg)
118 ///WDG_TRACE("Watch Dog Trace: Watch Dog Value 0x%8.8x", CHIP_REG_GET(WDG_VALUE));
120 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
124 case WDG_TIMEOUT_MODE_RESET:
125 ANA_REG_AND (WDG_CTRL, (~WDG_INT_EN_BIT));
128 case WDG_TIMEOUT_MODE_INT:
129 ANA_REG_OR (WDG_CTRL, WDG_INT_EN_BIT);
133 break; //No need to change
136 if (WDG_TIMER_STATE_STOP != cfg->state)
138 WDG_LOAD_TIMER_VALUE (cfg->val);
143 case WDG_TIMER_STATE_STOP:
144 ANA_REG_AND (WDG_CTRL, (~WDG_CNT_EN_BIT));
147 case WDG_TIMER_STATE_START:
148 ANA_REG_OR (WDG_CTRL, WDG_CNT_EN_BIT);
152 break; //No need to change
155 WDG_TRACE ("Watch Dog Trace: Watch Dog Control 0x%8.8x", ANA_REG_GET (WDG_CTRL));
156 /// WDG_TRACE ("Watch Dog Trace: Watch Dog LOAD 0x%8.8x", CHIP_REG_GET (WDG_LOAD));
158 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
163 /*****************************************************************************/
164 // Description: This function clear the watch dog interrupt
168 /*****************************************************************************/
169 PUBLIC int32 WDG_PHY_INT_CLR (void)
171 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
172 CLEAR_WDG_INT (WDG_INT_CLEAR_BIT);
173 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
176 PUBLIC void WDG_ClockOn(void)
178 #ifdef CONFIG_SC7710G2
179 ANA_REG_OR(ANA_APB_CLK_EN, WDG_EB);
180 ANA_REG_OR(ANA_RTC_CLK_EN, APB_ARCH_EB|RTC_WDG_EB);
182 ANA_REG_OR(ANA_APB_CLK_EN, WDG_EB | APB_ARCH_EB | RTC_WDG_EB);
189 /**---------------------------------------------------------------------------*
191 **---------------------------------------------------------------------------*/