Index: yc_lpm.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_lpm.c	(revision 780)
+++ /YC3121_SDK/fw/sdk/yc_lpm.c	(working copy)
@@ -15,14 +15,15 @@
     //  ((void(*)(uint8_t type,uint32_t val))FUNC_LPM_BT_WRITE_ADDR)(type,val);
     enable_clock(CLKCLS_BT);
     *(volatile uint8_t *)0xc804c = (val & 0x000000ff) >> 0;
-    delay(10);
+    delay_us(1);
     *(volatile uint8_t *)0xc804d = (val & 0x0000ff00) >> 8;
-    delay(10);
+    delay_us(1);
     *(volatile uint8_t *)0xc804e = (val & 0x00ff0000) >> 16;
-    delay(10);
+    delay_us(1);
     *(volatile uint8_t *)0xc804f = (val & 0xff000000) >> 24;
-    delay(10);
+    delay_us(1);
     *(volatile uint8_t *)0xc8005 = 1 << type;
+    delay_ms(1);
 }
 
 uint32_t lpm_bt_read(uint8_t type)
@@ -95,22 +96,46 @@
 
 void BT_Hibernate(void)
 {
-    ipc_inited = FALSE;
-
-    read_otp(0x13e, (uint8_t *)&value_rtc_1s, 2);
-    value_rtc_1s = (value_rtc_1s == 0) ? 0x8000 : value_rtc_1s;
+#if (VERSIONS == EXIST_BT)
+    if(TRUE == ipc_inited)
+    {
+        ipc_inited = FALSE;
 
-    BT_CONFIG &= ~(1 << BT_INIT_FLAG);
+        read_otp(0x13e, (uint8_t *)&value_rtc_1s, 2);
+        value_rtc_1s = (value_rtc_1s == 0) ? 0x8000 : value_rtc_1s;
 
-    NVIC_DisableIRQ(BT_IRQn);
-    SYSCTRL_ROM_SWITCH = 0x90;
-
-    HCI_TypeDef IpcRxData;
-    IpcRxData.type = 1;
-    IpcRxData.opcode = 0x27;
-    IpcRxData.DataLen = 0;
-    IPC_TxData(&IpcRxData);
-    delay(10000);
+        BT_CONFIG &= ~(1 << BT_INIT_FLAG);
+
+        NVIC_DisableIRQ(BT_IRQn);
+        SYSCTRL_ROM_SWITCH = 0x90;
+
+        HCI_TypeDef IpcRxData;
+        IpcRxData.type = 1;
+        IpcRxData.opcode = 0x27;
+        IpcRxData.DataLen = 0;
+        IPC_TxData(&IpcRxData);
+        delay(10000);
+
+    }
+#elif (VERSIONS == NO_BT || VERSIONS == NO_XTAL)
+    if(TRUE == ipc_inited)
+    {
+        ipc_inited = FALSE;
+        BT_CONFIG &= ~(1 << BT_INIT_FLAG);
+        NVIC_DisableIRQ(BT_IRQn);
+        SYSCTRL_ROM_SWITCH = 0x90;
+        lpm_bt_write(2,0);
+        delay_us(1000);
+        lpm_bt_write(3,0);
+        delay_us(1000);
+        lpm_bt_write(5,0);
+        delay_us(1000);
+        lpm_bt_write(1,0xd80000);
+        delay_us(1000);
+        lpm_bt_write(4,0x50000);
+        delay_us(1000);
+    }
+#endif
 }
 
 void Chip_Speedstep(void)
