diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index d9c61e2..ea1ced8 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -61,7 +61,7 @@
 static void *gnss_set_rsp_ptr = NULL;
 static gnss_err_enum gnss_set_result = GNSS_ERR_OK;
 static hd8122_msg_id_t msg_array[GNSS_MSG_NUM_MAX];
-static char gnss_ctrl_path[128] = "/sys/devices/platform/mbtk-gnss/ctrl";
+//static char gnss_ctrl_path[128] = "/sys/devices/platform/mbtk-gnss/ctrl";
 static gnss_agps_info_t agps_info;
 static char *gnss_set_cmd_rsp = NULL;
 static int gnss_cmd_rsp_len = 0;
@@ -70,6 +70,8 @@
 int OpenUart(const char* UART_DEV);
 int uart_close(int fd);
 int fw_update_boot(int uart_fd, uint8_t *data, uint32_t len);
+int fw_update_boot_8122(int uart_fd, uint8_t *data, uint32_t len);
+
 
 static uint16 fletcher16(const uint8_t* data, int data_len)
 {
@@ -184,40 +186,6 @@
     return count;
 }
 
-static int gnss_ctrl_write(char* str)
-{
-    int fd = -1;
-    int ret = -1;
-    fd = open((const char*)gnss_ctrl_path, O_WRONLY);
-    if (fd < 0)
-    {
-        LOGE("open %s fail", gnss_ctrl_path);
-        return -1;
-    }
-    else
-    {
-        ret = write(fd, str, strlen(str));
-        close(fd);
-        if(ret < 0)
-        {
-            LOGE("write %s fail", str);
-            return -1;
-        }
-    }
-    return 0;
-}
-
-static int gnss_fwdl_enable()
-{
-    int ret = -1;
-	ret = gnss_ctrl_write("fdl");
-    if(ret < 0)
-    {
-        LOGE("gnss_ctrl_write fail");
-        return -1;
-    }
-    return 0;
-}
 
 static uint32_t read_bin_file(uint8_t *path, uint8_t *buff)
 {
@@ -634,7 +602,8 @@
 
 int gnss_8122_fw_dl(int fd, const char *fw_name, const char *dev)
 {
-    int uart_fd = OpenUart(dev);//PORT_NAME234
+    //PORT_NAME234
+    int uart_fd = open(dev , O_RDWR|O_NOCTTY);
     if (uart_fd < 0)
     {
         LOGE("open uart failed %d[%d]", uart_fd, errno);
@@ -651,6 +620,13 @@
     {
         memcpy(fw_path, GNSS_FW_GAQBS_PATH, strlen(GNSS_FW_GAQBS_PATH));
     }
+    else if(fw_name != NULL)
+    {
+        memcpy(fw_path, fw_name, strlen(fw_name));
+        LOGE("fw_path: %s",fw_path);
+    }
+
+   
     else
     {
         LOGE("fw dl param error");
@@ -669,43 +645,91 @@
         LOGE("Read file failed ,len = %d", len);
         goto error;
     }
-    if(gnss_8122_dev_open())
-    {
-        LOGE("open gnss device fail:%d", errno);
-        goto error;
+
+    int ret;
+    // branch1：gp_gl_ga & gp_bd_ga
+    if (memcmp(fw_name, "gp_gl_ga", 8) == 0 || memcmp(fw_name, "gp_bd_ga", 8) == 0) {
+        if(gnss_8122_dev_open())
+        {
+            LOGE("open gnss device fail:%d", errno);
+            goto error;
+        }
+
+        mbtk_system("echo 63 > /sys/class/gpio/export");
+        mbtk_system("echo 62 > /sys/class/gpio/export");
+        mbtk_system("echo out > /sys/class/gpio/gpio63/direction");
+        mbtk_system("echo out > /sys/class/gpio/gpio62/direction");
+        mbtk_system("echo 0 > /sys/class/gpio/gpio63/value");
+        usleep(100000);//100ms
+        mbtk_system("echo 1 > /sys/class/gpio/gpio62/value");//reset
+        usleep(1000000);//1s
+        mbtk_system("echo 0 > /sys/class/gpio/gpio62/value");
+        usleep(100000);//100ms
+        mbtk_system("echo 1 > /sys/class/gpio/gpio63/value");//boot
+        mbtk_system("echo 62 > /sys/class/gpio/unexport");
+        mbtk_system("echo 63 > /sys/class/gpio/unexport");
+
+
+        ret = fw_update_boot_8122(uart_fd, g_bin_buff, len);
+        if (ret < 0)
+        {
+            LOGE("fw_update_boot() fail : %d", ret);
+            goto error;
+        }
+
+        if(gnss_8122_dev_close(0))
+        {
+            LOGE("close gnss device fail:%d", errno);
+            goto error;
+        }
+
+        if(ret == HDBD_UPG_SUCESS)
+        {
+            LOGD("upgrade sucess!");
+        }
+        else
+        {
+            LOGD("upgrade FAIL, fail style:%d", ret);
+            goto error;
+        }
+
+        free(g_bin_buff);
+        uart_close(uart_fd);
+        return GNSS_ERR_OK;
+    }
+    // branch2: else
+    else {
+        mbtk_system("echo 0 > /sys/class/gpio/gpio41/value");//41 gnss_power_en
+        usleep(500000);//500ms
+
+        mbtk_system("echo 1 > /sys/class/gpio/gpio120/value");//120 boot
+        usleep(500000);//500ms
+        mbtk_system("echo 1 > /sys/class/gpio/gpio41/value");//41 gnss_power_en
+        usleep(500000);//500ms
+
+
+        ret = fw_update_boot(uart_fd, g_bin_buff, len);
+        if (ret < 0)
+        {
+            LOGE("fw_update_boot() fail : %d", ret);
+            goto error;
+        }
+
+        if(ret == HDBD_UPG_SUCESS)
+        {
+            LOGD("upgrade sucess!");
+        }
+        else
+        {
+            LOGD("upgrade FAIL, fail style:%d", ret);
+            goto error;
+        }
+
+        free(g_bin_buff);
+        uart_close(uart_fd);
+        return GNSS_ERR_OK;
     }
 
-    if(gnss_fwdl_enable() < 0)
-    {
-        LOGE("gnss_fwdl_enable fail");
-        goto error;
-    }
-
-    int ret = fw_update_boot(uart_fd, g_bin_buff, len);
-    if (ret < 0)
-    {
-        LOGE("fw_update_boot() fail : %d", ret);
-        goto error;
-    }
-    if(ret == HDBD_UPG_SUCESS)
-    {
-        LOGD("upgrade sucess!");
-    }
-    else
-    {
-        LOGD("upgrade FAIL, fail style:%d", ret);
-        goto error;
-    }
-
-    if(gnss_8122_dev_close(0))
-    {
-        LOGE("close gnss device fail:%d", errno);
-        goto error;
-    }
-    free(g_bin_buff);
-    g_bin_buff = NULL;
-    uart_close(uart_fd);
-    return GNSS_ERR_OK;
 error:
     if(g_bin_buff)
     {
