--- ./source/private_module/device/voltage.c	2021-11-22 02:22:08.209965921 +0000
+++ ./source/private_module/device/voltage.c.hotpatch	2021-11-24 04:07:56.672599096 +0000
@@ -1198,20 +1198,7 @@
     }
 }
 
-/*****************************************************************************
-     : DPL_VoltSetRoutine
-   : ѹ⴦
-   : NODE_INFO_S* Node     ڵ
-             ROUTINE_DATA_S *Data  
-   : 
-   ֵ  : DMI_STATIC OSP_VOID
- 
- ޸ʷ      :
-  1.       : 2014417
-           : d90003911
-    ޸   : ɺ
-
-*****************************************************************************/
+OSP_S32 DMI_CheckClearLedFileExsitAndExecute(OSP_VOID);
 DMI_STATIC OSP_VOID DPL_VoltSetRoutine(NODE_INFO_S* Node, 
     ROUTINE_DATA_S *Data)
 {
@@ -1223,7 +1210,9 @@
     OSP_S32 Ret = RETURN_ERROR;
     VOLT_STAT_E *Status = NULL;
     OSP_U32 VoltCnt = 0;
-
+    OSP_U32 MemberIdx = 0;
+    static OSP_U32 LedSetindex = 0;
+	
     DRV_ASSERT(NULL != Node, return);
     REFERNCE_VAR(Data);
     
@@ -1280,10 +1269,32 @@
             Node->State = STATE_INITIAL;
             return;
         }
+		
+        if (Info->Member[0].SubType >= DAL_VOLTAGE_TYPE_BUTT) {
+            VoltSet->MgmtInfo.StatusHandleOver = B_FALSE;
+            return;
+        }
+        /*ҵѹеѹ,ҵRTCѹʱȡ״̬*/
+        for (MemberIdx = 0; MemberIdx < VoltCnt; MemberIdx++) {
+            if (Info->Member[MemberIdx].SubType == DAL_VOLTAGE_RTC) {
+                if (Status[MemberIdx] == VOLT_OK) {
+                    break;
+                }
+                Status[MemberIdx] = VOLT_OK;
+                if (LedSetindex < 3) {
+                    if (RETURN_OK == DMI_CheckClearLedFileExsitAndExecute()) {
+                        LedSetindex = 3;
+                        DMI_LOG(INFO, 0, "index %d clear led successfully.", LedSetindex);
+                        break;
+                    }
+                    LedSetindex++;
+                    DMI_LOG(INFO, 0, "index %d clear led retry.", LedSetindex);
+                }
+            }
+        }
         VoltSet->MgmtInfo.StatusHandleOver = B_FALSE;
     }
 }
-
 /*****************************************************************************
      : DPL_GetVoltSetChgState
    : ȡVoltSetĽڵ仯״̬
@@ -1292,17 +1303,6 @@
              OSP_U32 ChgSize 仯ݻС
    : 
    ֵ  : DMI_STATIC OSP_S32 仯
- 
- ޸ʷ      :
-  1.       : 201457
-           : d90003911
-    ޸   : ɺ
-  2.       : 2017317
-           : ywx291300
-    ޸   : ͬDTS2017031502186
-  3.       : 201747
-           : l00404270
-    ޸   : ׵DTS2017040700828,޸ֵܳԽ
 *****************************************************************************/
 DMI_STATIC OSP_S32 DPL_GetVoltSetChgState(NODE_INFO_S* Node, STATE_CHG_INFO_S *ChgInfo,
     OSP_U32 ChgSize)
@@ -1518,7 +1518,38 @@
     
     DMI_LOG(INFO, 5836, "Voltset(0x%llx) release sub memory.", Node->Id);
 }
-
+/****************************************************************************
+  : ļǷ
+     
+޸ʷ      :
+1.       : 20210228
+       : d00570465
+޸   : 
+*****************************************************************************/
+#define DMI_PANGEA_CLEAR_LED_SHELL "/OSM/script/pangea_clearled.sh"
+OSP_S32 DMI_CheckClearLedFileExsitAndExecute(OSP_VOID)
+{
+    OSP_S32 File;
+    OSP_U32 Result;
+    /* жϱǷнű */
+    File = OSAL_Filp_Open(DMI_PANGEA_CLEAR_LED_SHELL, O_RDONLY, 0);
+    if (0 > File) {
+        DMI_LOG(WARN, 0, "shell(%s) not exsit.",
+                DMI_PANGEA_CLEAR_LED_SHELL);
+        return RETURN_ERROR;
+    }
+    (OSP_VOID)OSAL_Filp_Close(NULL, File);
+        
+    Result = OSAL_Execute(DMI_PANGEA_CLEAR_LED_SHELL);
+    if (RETURN_OK != Result) {
+        DMI_LOG(WARN, 0, "Call user mode to execute shell(%s) failed, result(%d).",
+                DMI_PANGEA_CLEAR_LED_SHELL, Result);
+        return RETURN_ERROR;
+    }
+    DMI_LOG(DBG, 0, "Call user mode to execute shell(%s) successfully, result(%d).",
+            DMI_PANGEA_CLEAR_LED_SHELL, Result);
+    return RETURN_OK;
+}
 #ifdef __cplusplus
 }
 #endif
