diff --git a/recipes-ccsp/hal/hal-wifi-patches/0037-HAL-add-get-and-set-radio-mode.patch b/recipes-ccsp/hal/hal-wifi-patches/0037-HAL-add-get-and-set-radio-mode.patch
index 3c97aee..657ba17 100644
--- a/recipes-ccsp/hal/hal-wifi-patches/0037-HAL-add-get-and-set-radio-mode.patch
+++ b/recipes-ccsp/hal/hal-wifi-patches/0037-HAL-add-get-and-set-radio-mode.patch
@@ -1,17 +1,33 @@
-From f3ddc9ecc94827f7d4e0884d57afed1878aebc69 Mon Sep 17 00:00:00 2001
+From 47094ac819aba0809c899fe8ad1083b319617813 Mon Sep 17 00:00:00 2001
 From: "Allen.Ye" <allen.ye@mediatek.com>
-Date: Wed, 17 Aug 2022 14:30:27 +0800
+Date: Thu, 8 Sep 2022 10:31:06 +0800
 Subject: [PATCH] HAL: add get and set radio mode
 
 ---
- source/wifi/wifi_hal.c | 135 ++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 133 insertions(+), 2 deletions(-)
+ source/wifi/wifi_hal.c | 120 ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 119 insertions(+), 1 deletion(-)
 
 diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
-index 1d7833d..b4628c9 100644
+index fa1af2e..9e17de6 100644
 --- a/source/wifi/wifi_hal.c
 +++ b/source/wifi/wifi_hal.c
-@@ -1526,10 +1526,59 @@ INT wifi_getRadioStandard(INT radioIndex, CHAR *output_string, BOOL *gOnly, BOOL
+@@ -170,6 +170,15 @@ typedef enum
+     band_6 = 2,
+ } wifi_band;
+ 
++typedef enum {
++    WIFI_MODE_A = 0x01,
++    WIFI_MODE_B = 0x02,
++    WIFI_MODE_G = 0x04,
++    WIFI_MODE_N = 0x08,
++    WIFI_MODE_AC = 0x10,
++    WIFI_MODE_AX = 0x20,
++} wifi_ieee80211_Mode;
++
+ #ifdef WIFI_HAL_VERSION_3
+ 
+ // Return number of elements in array
+@@ -1696,7 +1705,63 @@ INT wifi_getRadioStandard(INT radioIndex, CHAR *output_string, BOOL *gOnly, BOOL
  #endif
  }
  
@@ -21,6 +37,7 @@
 +    char cmd[128] = {0};
 +    char buf[64] = {0};
 +    char config_file[64] = {0};
++    wifi_band band;
 +
 +    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
 +    if(NULL == output_string || NULL == pureMode)
@@ -28,36 +45,42 @@
 +
 +    // grep all of the ieee80211 protocol config set to 1
 +    snprintf(config_file, sizeof(cmd), "%s%d.conf", CONFIG_PREFIX, radioIndex);
-+    snprintf(cmd, sizeof(cmd), "cat %s | grep -E\"ieee.*=1\" | cut -d '=' -f1 | tr -d 'ieee80211'", config_file);
++    snprintf(cmd, sizeof(cmd), "cat %s | grep -E\"^ieee.*=1\" | cut -d '=' -f1 | tr -d 'ieee80211'", config_file);
 +    _syscmd(cmd, buf, sizeof(buf));
 +
++    band = wifi_index_to_band(radioIndex);
 +    // puremode is a bit map
 +    *pureMode = 0;
-+    if (radioIndex == 0) {
++    if (band == band_2_4) {
 +        strcat(output_string, "b,g");
-+        *pureMode |= 4;
++        *pureMode |= WIFI_MODE_B | WIFI_MODE_G;
 +        if (strstr(buf, "n") != NULL) {
 +            strcat(output_string, ",n");
-+            *pureMode |= 8;
++            *pureMode |= WIFI_MODE_N;
 +        }
 +        if (strstr(buf, "ax") != NULL) {
 +            strcat(output_string, ",ax");
-+            *pureMode |= 32;
++            *pureMode |= WIFI_MODE_AX;
 +        }
-+    } else if (radioIndex == 1) {
++    } else if (band == band_5) {
 +        strcat(output_string, "a");
-+        *pureMode |= 1;
++        *pureMode |= WIFI_MODE_A;
 +        if (strstr(buf, "n") != NULL) {
 +            strcat(output_string, ",n");
-+            *pureMode |= 8;
++            *pureMode |= WIFI_MODE_N;
 +        }
 +        if (strstr(buf, "ac") != NULL) {
 +            strcat(output_string, ",ac");
-+            *pureMode |= 16;
++            *pureMode |= WIFI_MODE_AC;
 +        }
 +        if (strstr(buf, "ax") != NULL) {
 +            strcat(output_string, ",ax");
-+            *pureMode |= 32;
++            *pureMode |= WIFI_MODE_AX;
++        }
++    } else if (band == band_6) {
++        if (strstr(buf, "ax") != NULL) {
++            strcat(output_string, "ax");
++            *pureMode |= WIFI_MODE_AX;
 +        }
 +    }
 +
@@ -68,12 +91,8 @@
 +// Set the radio operating mode, and pure mode flag.
  INT wifi_setRadioChannelMode(INT radioIndex, CHAR *channelMode, BOOL gOnlyFlag, BOOL nOnlyFlag, BOOL acOnlyFlag)	//RDKB
  {
--    WIFI_ENTRY_EXIT_DEBUG("Inside %s_%s_%d_%d:%d\n",__func__,channelMode,nOnlyFlag,gOnlyFlag,__LINE__);  
-+    WIFI_ENTRY_EXIT_DEBUG("Inside %s_%s_%d_%d:%d\n",__func__,channelMode,nOnlyFlag,gOnlyFlag,__LINE__);
-     if (strcmp (channelMode,"11A") == 0)
-     {
-         writeBandWidth(radioIndex,"20MHz");
-@@ -1621,6 +1670,88 @@ INT wifi_setRadioChannelMode(INT radioIndex, CHAR *channelMode, BOOL gOnlyFlag,
+     WIFI_ENTRY_EXIT_DEBUG("Inside %s_%s_%d_%d:%d\n",__func__,channelMode,nOnlyFlag,gOnlyFlag,__LINE__);  
+@@ -1791,6 +1856,59 @@ INT wifi_setRadioChannelMode(INT radioIndex, CHAR *channelMode, BOOL gOnlyFlag,
      return RETURN_OK;
  }
  
@@ -85,6 +104,7 @@
 +    char config_file[64] = {0};
 +    char bandwidth[16] = {0};
 +    int mode_check_bit = 1 << 3;    // n mode
++    wifi_ieee80211_Mode mode = (wifi_ieee80211_Mode)pureMode;
 +
 +    WIFI_ENTRY_EXIT_DEBUG("Inside %s_%d:%d\n", __func__, channelMode, pureMode, __LINE__);
 +    // Set radio mode
@@ -94,61 +114,31 @@
 +    snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, radioIndex);
 +
 +    // check the bit map from n to ax, and set hostapd config
-+    for(int i = 0; i < num_hostapd_support_mode; i++) {
-+        if (pureMode & mode_check_bit)
-+            list[i].value = "1";
-+        else
-+            list[i].value = "0";
-+        mode_check_bit = mode_check_bit << 1;
-+    }
++    if (mode & WIFI_MODE_N)
++        list[0].value = "1";
++    else
++        list[0].value = "0";
++    if (mode & WIFI_MODE_AC)
++        list[1].value = "1";
++    else
++        list[1].value = "0";
++    if (mode & WIFI_MODE_AX)
++        list[2].value = "1";
++    else
++        list[2].value = "0";
 +    wifi_hostapdWrite(config_file, list, num_hostapd_support_mode);
 +
++    if (channelMode == NULL || strlen(channelMode) == 0)
++        return RETURN_OK;
 +    // Set bandwidth
-+    // 5G
-+    if (strcmp (channelMode,"11A") == 0)
-+        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11NAHT20") == 0)
-+        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11NAHT40PLUS") == 0)
++    if (strstr(channelMode, "40") != NULL)
 +        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11NAHT40MINUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11ACVHT20") == 0)
-+        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11ACVHT40PLUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11ACVHT40MINUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11ACVHT80") == 0)
-+        strcpy(bandwidth, "80MHz");
-+    else if (strcmp (channelMode,"11ACVHT160") == 0)
-+        strcpy(bandwidth, "160MHz");
-+    else if (strcmp (channelMode,"11AXHE80") == 0)
++    else if (strstr(channelMode, "80") != NULL)
 +        strcpy(bandwidth, "80MHz");
-+    else if (strcmp (channelMode,"11AXHE160") == 0)
++    else if (strstr(channelMode, "160") != NULL)
 +        strcpy(bandwidth, "160MHz");
-+    // 2.4G
-+    else if (strcmp (channelMode,"11B") == 0)
++    else    // 11A, 11B, 11G....
 +        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11G") == 0)
-+        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11NGHT20") == 0)
-+        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11NGHT40PLUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11NGHT40MINUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11AXHE20") == 0)
-+        strcpy(bandwidth, "20MHz");
-+    else if (strcmp (channelMode,"11AXHE40PLUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else if (strcmp (channelMode,"11AXHE40MINUS") == 0)
-+        strcpy(bandwidth, "40MHz");
-+    else
-+    {
-+        wifi_dbg_printf("%s: input parameter channelMode format error\n", __func__);
-+        return RETURN_ERR;
-+    }
 +
 +    writeBandWidth(radioIndex, bandwidth);
 +    wifi_setRadioOperatingChannelBandwidth(radioIndex, bandwidth);
