diff --git a/mbtk/libgsw_lib/gsw_pm_interface.c b/mbtk/libgsw_lib/gsw_pm_interface.c
index 517b134..ee28780 100755
--- a/mbtk/libgsw_lib/gsw_pm_interface.c
+++ b/mbtk/libgsw_lib/gsw_pm_interface.c
@@ -15,94 +15,10 @@
 #include <stdint.h>
 #include <sys/time.h>
 #include "gsw_pm_interface.h"
-
-#ifndef LOG_ERR_LEVEL
-#define LOG_ERR_LEVEL  3      /* error conditions */
-#endif
-#ifndef LOG_WARN_LEVEL
-#define LOG_WARN_LEVEL 4   /* warning conditions */
-#endif
-#ifndef LOG_INFO_LEVEL
-#define LOG_INFO_LEVEL 6      /* informational */
-#endif
-#ifndef LOG_DEBUG_LEVEL
-#define LOG_DEBUG_LEVEL 7     /* debug-level messages */
-#endif
-#ifndef LOG_VERBOSE_LEVEL
-#define LOG_VERBOSE_LEVEL 8
-#endif
+#include "gsw_log_interface.h"
 
 #define GSW_PM "[HAL][GSW_PM]"
 #define GSW_WAKELOCK_NAME "gsw_app_wakelock"
-#define LOGV(fmt, args ...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_PM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGI(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_INFO_LEVEL, "%s#%s: "GSW_PM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGD(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_PM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGW(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_WARN_LEVEL, "%s#%s: "GSW_PM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGE(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_ERR_LEVEL, "%s#%s: "GSW_PM"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
     
 #define LOCK_MAX_SIZE 129
 #define SDK_READY_CMD "uci get persist.mbtk.sdk__state"
@@ -114,7 +30,7 @@
 
 typedef void (*GSW_PM_WAKEUPCALLBACK)(int32_t wakeup_in);
 typedef void (*mbtk_lpm_handler_t)(int32_t wakeup_in);
-typedef void (*mbtk_log)(int level, const char *format,...);
+//typedef void (*mbtk_log)(int level, const char *format,...);
 
 int (*mbtk_autosuspend_enable)(char);
 int (*mbtk_wakelock_create)(const char* name , size_t);
@@ -132,7 +48,7 @@
 } mbtk_lock_name_s;
 static mbtk_lock_name_s lock_name[LOCK_MAX_SIZE]={0};
 
-static mbtk_log fun_ptr_log = NULL;
+//static mbtk_log fun_ptr_log = NULL;
 static void *dlHandle_sleep = NULL;
 char *lynqLib_sleep = "/lib/libmbtk_lib.so";
 
@@ -181,11 +97,11 @@
 
 static int handle()
 {
-    if(dlHandle_sleep == NULL || fun_ptr_log == NULL)
+    if(dlHandle_sleep == NULL)
     {
         dlHandle_sleep = dlopen(lynqLib_sleep, RTLD_NOW);
-        fun_ptr_log = (mbtk_log)dlsym(dlHandle_sleep, "mbtk_log");
-        if(fun_ptr_log == NULL || dlHandle_sleep == NULL)
+        //fun_ptr_log = (mbtk_log)dlsym(dlHandle_sleep, "mbtk_log");
+        if(dlHandle_sleep == NULL)
         {
             return GSW_HAL_NORMAL_FAIL;
         }
@@ -202,7 +118,7 @@
     ret = mbtk_autosuspend_enable(1);
     if(ret < 0)
     {
-        LOGE("mbtk_autosuspend_enable FAIL.\n");
+        LOGE(GSW_PM,"mbtk_autosuspend_enable FAIL.\n");
         return GSW_HAL_NORMAL_FAIL;
     }
     return GSW_HAL_SUCCESS;
@@ -222,7 +138,7 @@
     ret = mbtk_autosuspend_enable(0);
     if(ret < 0)
     {
-        LOGE("mbtk_autosuspend_enable FAIL.\n");
+        LOGE(GSW_PM,"mbtk_autosuspend_enable FAIL.\n");
         return GSW_HAL_NORMAL_FAIL;
     }
     return GSW_HAL_SUCCESS;
@@ -244,7 +160,7 @@
     ret = mbtk_lpm_init((mbtk_lpm_handler_t)wakeup_callback);
     if(ret < 0)
     {
-        LOGE("mbtk_lpm_init FAIL.\n");
+        LOGE(GSW_PM,"mbtk_lpm_init FAIL.\n");
         return GSW_HAL_NORMAL_FAIL;
     }
     return GSW_HAL_SUCCESS;
@@ -273,7 +189,7 @@
     }
     if (i >= LOCK_MAX_SIZE)
     {
-        LOGE("mbtk_wakelock_lock not create.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_lock not create.\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -281,7 +197,7 @@
     ret = mbtk_wakelock_unlock(lock_fd);
     if(ret < 0)
     {
-        LOGE("mbtk_wakelock_unlock FAIL.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_unlock FAIL.\n");
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -289,7 +205,7 @@
     ret = mbtk_wakelock_destroy(lock_fd);
     if(ret < 0)
     {
-        LOGE("mbtk_wakelock_destroy FAIL.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_destroy FAIL.\n");
         return GSW_HAL_NORMAL_FAIL;
     }
     if (lock_name[i].name != NULL)
@@ -318,7 +234,7 @@
     lock_fd = mbtk_wakelock_create(gsw_wakelock_name, strlen(gsw_wakelock_name));
     if(lock_fd < 0)
     {
-        LOGE("mbtk_wakelock_create FAIL.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_create FAIL.\n");
         ret = GSW_HAL_NORMAL_FAIL;
         goto end;
     }
@@ -327,7 +243,7 @@
     ret = mbtk_wakelock_lock(lock_fd);
     if(ret < 0)
     {
-        LOGE("mbtk_wakelock_lock FAIL.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_lock FAIL.\n");
         ret = GSW_HAL_NORMAL_FAIL;
         goto end;
     }
@@ -338,14 +254,14 @@
     }
     if(i == LOCK_MAX_SIZE)
     {
-        LOGE("mbtk_wakelock_lock not space FAIL.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_lock not space FAIL.\n");
         ret = GSW_HAL_NORMAL_FAIL;
         goto end;
     }
     lock_name[i].name = malloc(strlen(gsw_wakelock_name)+1);
     if (lock_name[i].name == NULL)
     {
-        LOGE("mbtk_wakelock_lock remeber FAIL.\n");
+        LOGE(GSW_PM,"mbtk_wakelock_lock remeber FAIL.\n");
         ret = GSW_HAL_NORMAL_FAIL;
         goto end;
     }
