diff --git a/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/rlm_domain.c b/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/rlm_domain.c
index 303f7af..fde508f 100644
--- a/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/rlm_domain.c
+++ b/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/rlm_domain.c
@@ -1699,11 +1699,9 @@
 VOID rlmDomainSendPwrLimitCmd(P_ADAPTER_T prAdapter)
 {
 	P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T prCmd;
-	UINT_8 i;
 	UINT_16 u2DefaultTableIndex;
 	UINT_32 u4SetCmdTableMaxSize;
 	UINT_32 u4SetQueryInfoLen;
-	P_CMD_CHANNEL_POWER_LIMIT prCmdPwrLimit;	/* for print usage */
 
 	u4SetCmdTableMaxSize =
 	    sizeof(CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T) +
@@ -1735,62 +1733,6 @@
 			rlmDomainBuildCmdByConfigTable(prAdapter, prCmd);
 		}
 	}
-#if 0
-	u4SetCmdTableMaxSize =
-	    sizeof(CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T) +
-	    MAX_CMD_SUPPORT_CHANNEL_NUM * sizeof(CMD_CHANNEL_POWER_LIMIT);
-
-	prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4SetCmdTableMaxSize);
-	ASSERT(prCmd);
-
-	/* To do: exception handle */
-	if (!prCmd) {
-		DBGLOG(RLM, ERROR, "Domain: no buf to send cmd\n");
-		return;
-	}
-	kalMemZero(prCmd, u4SetCmdTableMaxSize);	/* TODO memzero */
-
-	if (u2TableIndex != POWER_LIMIT_TABLE_NULL && u2TableIndex < MAX_DEFAULT_TABLE_COUNTRY_NUM) {
-
-		prCmd->u2CountryCode = (((UINT_16) g_rRlmCountryPowerLimitTable[u2TableIndex].aucCountryCode[0]) << 8) |
-		    (((UINT_16) g_rRlmCountryPowerLimitTable[u2TableIndex].aucCountryCode[1]) & BITS(0, 7));
-		prChPwrLimit = &g_rRlmCountryPowerLimitTable[u2TableIndex].rChannelPowerLimit[0];
-		prCmdPwrLimit = &prCmd->rChannelPowerLimit[0];
-		prCmd->ucNum = 0;
-		for (i = 0; i < MAX_CMD_SUPPORT_CHANNEL_NUM; i++) {
-
-			if (prChPwrLimit->ucCentralCh != ENDCH) {
-
-				/*Check Power limit table channel efficient or not */
-				fgChannelValid = rlmDomainCheckChannelEntryValid(prAdapter, prChPwrLimit->ucCentralCh);
-
-				/*Cmd set up */
-				if (fgChannelValid) {
-					kalMemCopy(prCmdPwrLimit, prChPwrLimit, sizeof(CMD_CHANNEL_POWER_LIMIT));
-					DBGLOG(RLM, INFO,
-					       "Domain: ValidCh=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
-						prCmdPwrLimit->ucCentralCh, prCmdPwrLimit->cPwrLimitCCK,
-						prCmdPwrLimit->cPwrLimit20, prCmdPwrLimit->cPwrLimit40,
-						prCmdPwrLimit->cPwrLimit80, prCmdPwrLimit->cPwrLimit160,
-						prCmdPwrLimit->ucFlag);
-					prCmd->ucNum++;
-					prCmdPwrLimit++;
-				} else {
-					DBGLOG(RLM, INFO,
-					       "Domain: Non-Ch=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
-						prChPwrLimit->ucCentralCh, prChPwrLimit->cPwrLimitCCK,
-						prChPwrLimit->cPwrLimit20, prChPwrLimit->cPwrLimit40,
-						prChPwrLimit->cPwrLimit80, prChPwrLimit->cPwrLimit160,
-						prChPwrLimit->ucFlag);
-				}
-				prChPwrLimit++;
-			} else {
-				/*End of the chanel entry */
-				break;
-			}
-		};
-	}
-#endif
 
 	if (prCmd->u2CountryCode != 0) {
 		DBGLOG(RLM, INFO,
@@ -1799,14 +1741,6 @@
 	} else {
 		DBGLOG(RLM, INFO, "Domain: ValidCC =0x%04x, ChNum=%d\n", prCmd->u2CountryCode, prCmd->ucNum);
 	}
-	prCmdPwrLimit = &prCmd->rChannelPowerLimit[0];
-
-	for (i = 0; i < prCmd->ucNum; i++) {
-		DBGLOG(RLM, INFO, "Domain: Ch=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n", prCmdPwrLimit->ucCentralCh,
-				   prCmdPwrLimit->cPwrLimitCCK, prCmdPwrLimit->cPwrLimit20, prCmdPwrLimit->cPwrLimit40,
-				   prCmdPwrLimit->cPwrLimit80, prCmdPwrLimit->cPwrLimit160, prCmdPwrLimit->ucFlag);
-		prCmdPwrLimit++;
-	}
 
 	u4SetQueryInfoLen =
 	    (sizeof(CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T) + (prCmd->ucNum) * sizeof(CMD_CHANNEL_POWER_LIMIT));
diff --git a/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/scan.c b/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/scan.c
index b2623a2..790be1f 100644
--- a/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/scan.c
+++ b/drivers/misc/mediatek/connectivity/wlan/gen3/mgmt/scan.c
@@ -2445,13 +2445,6 @@
 			 * we use this Code for "Reject"
 			 * a SCAN result to become our candidate(Like a blacklist).
 			 */
-#if 0				/* TODO(Kevin): */
-			if (prStaRec->u2ReasonCode != REASON_CODE_RESERVED) {
-				DBGLOG(SCN, INFO,
-				       "SEARCH: Ignore BSS with previous Reason Code = %d\n", prStaRec->u2ReasonCode);
-				continue;
-			} else
-#endif
 			if (prStaRec->u2StatusCode != STATUS_CODE_SUCCESSFUL) {
 				/* NOTE(Kevin): greedy association - after timeout, we'll still
 				 * try to associate to the AP whose STATUS of conection attempt
@@ -2501,7 +2494,6 @@
 			if ((prConnSettings->fgIsConnByBssidIssued) &&
 					(prBssDesc->eBSSType == BSS_TYPE_INFRASTRUCTURE)) {
 				if (UNEQUAL_MAC_ADDR(prConnSettings->aucBSSID, prBssDesc->aucBSSID)) {
-					DBGLOG(SCN, INFO, "SEARCH: Ignore due to BSSID was not matched!\n");
 					continue;
 				}
 			}
