Index: /branches/rel_apv_10_7_4/usr/click/bin/check_mainboard/check_mainboard.c
===================================================================
--- /branches/rel_apv_10_7_4/usr/click/bin/check_mainboard/check_mainboard.c	(revision 39991)
+++ /branches/rel_apv_10_7_4/usr/click/bin/check_mainboard/check_mainboard.c	(working copy)
@@ -19,6 +19,7 @@
 #include <term.h>
 #include <errno.h>
 #include <sys/ioctl.h>
+#include <time.h>
 
 
 static int u_dual_power_mode = 0;
@@ -2530,6 +2531,10 @@
 	pthread_t thread_led;
 	int res;
 
+        time_t last_power_check_time = 0;
+        time_t current_time = 0;
+        int do_power_check = 0;
+
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 
@@ -2644,46 +2649,92 @@
 
 	while (1) {	
 		if (u_hardware_control) {
+
+                        // Check if need to do power check (every 60 seconds),
+                        // and validate last_power_check_time to account for potential system time changes.
+                        current_time = time(NULL);
+                        if (current_time - last_power_check_time >= 60 || current_time < last_power_check_time) {
+                            do_power_check = 1;
+                            last_power_check_time = current_time;
+                        } else {
+                            do_power_check = 0;
+                        }
+
+                        // Get info for disk temperature and fans
 			u_check_disk_temp();
 			if (GET_IPMI_BY_DUMP) {
-				u_previous_check_ipmi();
+			    u_previous_check_ipmi();
 			}
-			if (u_chipset_id == CHIPSET_ID_CB2612B) {
+
+                        // Execute check process depend on different chip set.
+                        switch (u_chipset_id) {
+                            case CHIPSET_ID_CB2612B:
 #ifndef ARM64
-				aewin_cb2612b_check_led();
-				aewin_cb2612b_check_power_state();
-				aewin_cb2612b_check_temp_sensor();
-				aewin_cb2612b_check_fan_sensor();
+                                aewin_cb2612b_check_led();
+                                if (do_power_check) {
+                                    aewin_cb2612b_check_power_state();
+                                }
+                                aewin_cb2612b_check_temp_sensor();
+                                aewin_cb2612b_check_fan_sensor();
 #endif
-			} else if (u_chipset_id == CHIPSET_ID_CB2622) {
-				aewin_cb2622_check_power_state();
-				aewin_cb2622_check_temp_sensor();
-				aewin_cb2622_check_fan_sensor();
-			} else if (u_chipset_id == CHIPSET_ID_CB1727) {
-				aewin_cb1727_check_power_state();
-				aewin_cb1727_check_temp_sensor();
-				aewin_cb1727_check_fan_sensor();
-			} else if (u_chipset_id == CHIPSET_ID_SCB1939) {
-				aewin_cb1939_check_hardware();
-			} else if (u_chipset_id == CHIPSET_ID_FT2004 
-				|| u_chipset_id == CHIPSET_ID_FT2000_4
-				|| u_chipset_id == CHIPSET_ID_HW_FT2004) {
-				aewin_apv1880_check_temp_sensor();
-				aewin_apv1880_check_power_state();
-				aewin_apv1880_check_fan_speed();
-			} else {
-				if (u_chipset_id == CHIPSET_ID_SCB1816 || u_chipset_id == CHIPSET_ID_SCB1819) {
-					aewin_check_power_state();
-				} else {
-					if(u_chipset_id == CHIPSET_ID_T1SMFT_E4) {
-						u_check_power_state_by_ipmi_ft();
-					} else {
-						u_check_power_state_by_ipmi();
-					}
-				}
-				u_check_ipmi_temp_sensor(u_chipset_id);
-				u_check_ipmi_fan_sensor(u_chipset_id);
-			}
+                                break;
+
+                            case CHIPSET_ID_CB2622:
+                                if (do_power_check) {
+                                    aewin_cb2622_check_power_state();
+                                }
+                                aewin_cb2622_check_temp_sensor();
+                                aewin_cb2622_check_fan_sensor();
+                                break;
+
+                            case CHIPSET_ID_CB1727:
+                                if (do_power_check) {
+                                    aewin_cb1727_check_power_state();
+                                }
+                                aewin_cb1727_check_temp_sensor();
+                                aewin_cb1727_check_fan_sensor();
+                                break;
+
+                            case CHIPSET_ID_SCB1939:
+                                aewin_cb1939_check_hardware();
+                                break;
+
+                            case CHIPSET_ID_FT2004:
+                            case CHIPSET_ID_FT2000_4:
+                            case CHIPSET_ID_HW_FT2004:
+                                if (do_power_check) {
+                                    aewin_apv1880_check_power_state();
+                                }
+                                aewin_apv1880_check_temp_sensor();
+                                aewin_apv1880_check_fan_speed();
+                                break;
+
+                            case CHIPSET_ID_SCB1816:
+                            case CHIPSET_ID_SCB1819:
+                                if (do_power_check) {
+                                    aewin_check_power_state();
+                                }
+                                u_check_ipmi_temp_sensor(u_chipset_id);
+                                u_check_ipmi_fan_sensor(u_chipset_id);
+                                break;
+
+                            case CHIPSET_ID_T1SMFT_E4:
+                                if (do_power_check) {
+                                    u_check_power_state_by_ipmi_ft();
+                                }
+                                u_check_ipmi_temp_sensor(u_chipset_id);
+                                u_check_ipmi_fan_sensor(u_chipset_id);
+                                break;
+
+                            default:
+                                if (do_power_check) {
+                                    u_check_power_state_by_ipmi();
+                                }
+                                u_check_ipmi_temp_sensor(u_chipset_id);
+                                u_check_ipmi_fan_sensor(u_chipset_id);
+                                break;
+                        }
+
 			usleep(500000); /* 500ms, same with clicktcp_slowtimo timer */
 		} else {
 			sleep(3600);
