From nobody Mon Jun 29 18:39:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 618B1C433F5 for ; Fri, 4 Feb 2022 09:10:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354645AbiBDJKJ (ORCPT ); Fri, 4 Feb 2022 04:10:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344133AbiBDJKD (ORCPT ); Fri, 4 Feb 2022 04:10:03 -0500 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A08D9C06173E for ; Fri, 4 Feb 2022 01:10:02 -0800 (PST) Received: from dslb-188-096-149-005.188.096.pools.vodafone-ip.de ([188.96.149.5] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1nFubN-0002IT-Px; Fri, 04 Feb 2022 10:09:57 +0100 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 1/4] staging: r8188eu: remove constant parameter of phy_LCCalibrate_8188E Date: Fri, 4 Feb 2022 10:09:38 +0100 Message-Id: <20220204090941.309900-2-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220204090941.309900-1-martin@kaiser.cx> References: <20220203203217.252156-1-martin@kaiser.cx> <20220204090941.309900-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The only caller of phy_LCCalibrate_8188E sets is2t to false. Remove this parameter and resulting dead code. Signed-off-by: Martin Kaiser --- v2: no changes drivers/staging/r8188eu/hal/HalPhyRf_8188e.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c b/drivers/staging= /r8188eu/hal/HalPhyRf_8188e.c index 5f7a2668cabb..db87eaafb72f 100644 --- a/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c @@ -821,10 +821,10 @@ static void phy_IQCalibrate_8188E(struct adapter *ada= pt, s32 result[][8], u8 t) } } =20 -static void phy_LCCalibrate_8188E(struct adapter *adapt, bool is2t) +static void phy_LCCalibrate_8188E(struct adapter *adapt) { u8 tmpreg; - u32 RF_Amode =3D 0, RF_Bmode =3D 0, LC_Cal; + u32 RF_Amode =3D 0, LC_Cal; =20 /* Check continuous TX and Packet TX */ tmpreg =3D rtw_read8(adapt, 0xd03); @@ -839,17 +839,9 @@ static void phy_LCCalibrate_8188E(struct adapter *adap= t, bool is2t) /* Path-A */ RF_Amode =3D rtl8188e_PHY_QueryRFReg(adapt, RF_PATH_A, RF_AC, bMask12Bit= s); =20 - /* Path-B */ - if (is2t) - RF_Bmode =3D rtl8188e_PHY_QueryRFReg(adapt, RF_PATH_B, RF_AC, bMask12Bi= ts); - /* 2. Set RF mode =3D standby mode */ /* Path-A */ rtl8188e_PHY_SetRFReg(adapt, RF_PATH_A, RF_AC, bMask12Bits, (RF_Amode & = 0x8FFFF) | 0x10000); - - /* Path-B */ - if (is2t) - rtl8188e_PHY_SetRFReg(adapt, RF_PATH_B, RF_AC, bMask12Bits, (RF_Bmode &= 0x8FFFF) | 0x10000); } =20 /* 3. Read RF reg18 */ @@ -866,10 +858,6 @@ static void phy_LCCalibrate_8188E(struct adapter *adap= t, bool is2t) /* Path-A */ rtw_write8(adapt, 0xd03, tmpreg); rtl8188e_PHY_SetRFReg(adapt, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode); - - /* Path-B */ - if (is2t) - rtl8188e_PHY_SetRFReg(adapt, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode); } else { /* Deal with Packet TX case */ rtw_write8(adapt, REG_TXPAUSE, 0x00); @@ -999,5 +987,5 @@ void PHY_LCCalibrate_8188E(struct adapter *adapt) timecount +=3D 50; } =20 - phy_LCCalibrate_8188E(adapt, false); + phy_LCCalibrate_8188E(adapt); } --=20 2.30.2 From nobody Mon Jun 29 18:39:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 127C5C433F5 for ; Fri, 4 Feb 2022 09:10:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349617AbiBDJKH (ORCPT ); Fri, 4 Feb 2022 04:10:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344941AbiBDJKD (ORCPT ); Fri, 4 Feb 2022 04:10:03 -0500 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF9D5C061714 for ; Fri, 4 Feb 2022 01:10:02 -0800 (PST) Received: from dslb-188-096-149-005.188.096.pools.vodafone-ip.de ([188.96.149.5] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1nFubO-0002IT-Nh; Fri, 04 Feb 2022 10:09:58 +0100 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser , kernel test robot Subject: [PATCH v2 2/4] staging: r8188eu: remove dead code for tx power tracking Date: Fri, 4 Feb 2022 10:09:39 +0100 Message-Id: <20220204090941.309900-3-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220204090941.309900-1-martin@kaiser.cx> References: <20220203203217.252156-1-martin@kaiser.cx> <20220204090941.309900-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The odm_TXPowerTrackingCallback_ThermalMeter_8188E contains code for OFDM paths A and B. It seems that path B is not used, is2t is always false. Remove resulting dead code. Without the path B code, the ele_A and ele_C variables are set but not used. They can be removed. With ele_A and ele_C gone, X and Y are now set but no longer used. Remove them as well. Reported-by: kernel test robot Signed-off-by: Martin Kaiser --- v2: remove variables which are set but not used drivers/staging/r8188eu/hal/HalPhyRf_8188e.c | 72 +------------------- 1 file changed, 2 insertions(+), 70 deletions(-) diff --git a/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c b/drivers/staging= /r8188eu/hal/HalPhyRf_8188e.c index db87eaafb72f..795320e13e55 100644 --- a/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c +++ b/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c @@ -102,12 +102,10 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( u8 ThermalValue =3D 0, delta, delta_LCK, delta_IQK, offset; u8 ThermalValue_AVG_count =3D 0; u32 ThermalValue_AVG =3D 0; - s32 ele_A =3D 0, ele_D, TempCCk, X, value32; - s32 Y, ele_C =3D 0; + s32 ele_D, TempCCk; s8 OFDM_index[2], CCK_index =3D 0; s8 OFDM_index_old[2] =3D {0, 0}, CCK_index_old =3D 0; u32 i =3D 0, j =3D 0; - bool is2t =3D false; =20 u8 OFDM_min_index =3D 6, rf; /* OFDM BB Swing should be less than +3.0dB,= which is required by Arthur */ s8 OFDM_index_mapping[2][index_mapping_NUM_88E] =3D { @@ -139,10 +137,7 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( =20 ThermalValue =3D (u8)rtl8188e_PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_MET= ER_88E, 0xfc00); /* 0x42: RF Reg[15:10] 88E */ =20 - if (is2t) - rf =3D 2; - else - rf =3D 1; + rf =3D 1; =20 if (ThermalValue) { /* Query OFDM path A default setting */ @@ -155,17 +150,6 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( } } =20 - /* Query OFDM path B default setting */ - if (is2t) { - ele_D =3D rtl8188e_PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMas= kDWord) & bMaskOFDM_D; - for (i =3D 0; i < OFDM_TABLE_SIZE_92D; i++) { /* find the index */ - if (ele_D =3D=3D (OFDMSwingTable[i] & bMaskOFDM_D)) { - OFDM_index_old[1] =3D (u8)i; - break; - } - } - } - /* Query CCK default setting From 0xa24 */ TempCCk =3D dm_odm->RFCalibrateInfo.RegA24; =20 @@ -277,11 +261,6 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( if (dm_odm->RFCalibrateInfo.TxPowerTrackControl) { dm_odm->RFCalibrateInfo.bDoneTxpower =3D true; =20 - /* Adujst OFDM Ant_A according to IQK result */ - ele_D =3D (OFDMSwingTable[(u8)OFDM_index[0]] & 0xFFC00000) >> 22; - X =3D dm_odm->RFCalibrateInfo.IQKMatrixRegSetting.Value[0][0]; - Y =3D dm_odm->RFCalibrateInfo.IQKMatrixRegSetting.Value[0][1]; - /* Revse TX power table. */ dm_odm->BbSwingIdxOfdm =3D (u8)OFDM_index[0]; dm_odm->BbSwingIdxCck =3D (u8)CCK_index; @@ -295,53 +274,6 @@ odm_TXPowerTrackingCallback_ThermalMeter_8188E( dm_odm->BbSwingIdxCckCurrent =3D dm_odm->BbSwingIdxCck; dm_odm->BbSwingFlagCck =3D true; } - - if (X !=3D 0) { - if ((X & 0x00000200) !=3D 0) - X =3D X | 0xFFFFFC00; - ele_A =3D ((X * ele_D) >> 8) & 0x000003FF; - - /* new element C =3D element D x Y */ - if ((Y & 0x00000200) !=3D 0) - Y =3D Y | 0xFFFFFC00; - ele_C =3D ((Y * ele_D) >> 8) & 0x000003FF; - - /* 2012/04/23 MH According to Luke's suggestion, we can not write BB= digital */ - /* to increase TX power. Otherwise, EVM will be bad. */ - } - - if (is2t) { - ele_D =3D (OFDMSwingTable[(u8)OFDM_index[1]] & 0xFFC00000) >> 22; - - /* new element A =3D element D x X */ - X =3D dm_odm->RFCalibrateInfo.IQKMatrixRegSetting.Value[0][4]; - Y =3D dm_odm->RFCalibrateInfo.IQKMatrixRegSetting.Value[0][5]; - - if (X !=3D 0) { - if ((X & 0x00000200) !=3D 0) /* consider minus */ - X =3D X | 0xFFFFFC00; - ele_A =3D ((X * ele_D) >> 8) & 0x000003FF; - - /* new element C =3D element D x Y */ - if ((Y & 0x00000200) !=3D 0) - Y =3D Y | 0xFFFFFC00; - ele_C =3D ((Y * ele_D) >> 8) & 0x00003FF; - - /* wtite new elements A, C, D to regC88 and regC9C, element B is alw= ays 0 */ - value32 =3D (ele_D << 22) | ((ele_C & 0x3F) << 16) | ele_A; - rtl8188e_PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, v= alue32); - - value32 =3D (ele_C & 0x000003C0) >> 6; - rtl8188e_PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32); - - value32 =3D ((X * ele_D) >> 7) & 0x01; - rtl8188e_PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT(28), value3= 2); - } else { - rtl8188e_PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, O= FDMSwingTable[(u8)OFDM_index[1]]); - rtl8188e_PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00); - rtl8188e_PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT(28), 0x00); - } - } } } =20 --=20 2.30.2 From nobody Mon Jun 29 18:39:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6CEFC433EF for ; Fri, 4 Feb 2022 09:10:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357306AbiBDJKM (ORCPT ); Fri, 4 Feb 2022 04:10:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345750AbiBDJKD (ORCPT ); Fri, 4 Feb 2022 04:10:03 -0500 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 32AC9C061744 for ; Fri, 4 Feb 2022 01:10:03 -0800 (PST) Received: from dslb-188-096-149-005.188.096.pools.vodafone-ip.de ([188.96.149.5] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1nFubP-0002IT-JW; Fri, 04 Feb 2022 10:09:59 +0100 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 3/4] staging: r8188eu: remove constant parameter of odm_ConfigRFReg_8188E Date: Fri, 4 Feb 2022 10:09:40 +0100 Message-Id: <20220204090941.309900-4-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220204090941.309900-1-martin@kaiser.cx> References: <20220203203217.252156-1-martin@kaiser.cx> <20220204090941.309900-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The only caller of odm_ConfigRFReg_8188E sets RF_PATH to RF_PATH_A. Remove this parameter and use RF_PATH_A inside the function. Signed-off-by: Martin Kaiser --- v2: no changes drivers/staging/r8188eu/hal/odm_RegConfig8188E.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/staging/r8188eu/hal/odm_RegConfig8188E.c b/drivers/sta= ging/r8188eu/hal/odm_RegConfig8188E.c index 5fb5a88314ed..9059f2533b0b 100644 --- a/drivers/staging/r8188eu/hal/odm_RegConfig8188E.c +++ b/drivers/staging/r8188eu/hal/odm_RegConfig8188E.c @@ -4,8 +4,7 @@ #include "../include/drv_types.h" =20 static void odm_ConfigRFReg_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, - u32 Data, enum rf_radio_path RF_PATH, - u32 RegAddr) + u32 Data, u32 RegAddr) { if (Addr =3D=3D 0xffe) { msleep(50); @@ -20,7 +19,7 @@ static void odm_ConfigRFReg_8188E(struct odm_dm_struct *p= DM_Odm, u32 Addr, } else if (Addr =3D=3D 0xf9) { udelay(1); } else { - rtl8188e_PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH, RegAddr, bRFRegOffsetMa= sk, Data); + rtl8188e_PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RegAddr, bRFRegOffset= Mask, Data); /* Add 1us delay between BB/RF register setting. */ udelay(1); } @@ -31,7 +30,7 @@ void odm_ConfigRF_RadioA_8188E(struct odm_dm_struct *pDM_= Odm, u32 Addr, u32 Data u32 content =3D 0x1000; /* RF_Content: radioa_txt */ u32 maskforPhySet =3D (u32)(content & 0xE000); =20 - odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, RF_PATH_A, Addr | maskforPhySe= t); + odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, Addr | maskforPhySet); } =20 void odm_ConfigMAC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u8 Data) --=20 2.30.2 From nobody Mon Jun 29 18:39:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F079EC433F5 for ; Fri, 4 Feb 2022 09:10:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357322AbiBDJKP (ORCPT ); Fri, 4 Feb 2022 04:10:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348476AbiBDJKE (ORCPT ); Fri, 4 Feb 2022 04:10:04 -0500 Received: from viti.kaiser.cx (viti.kaiser.cx [IPv6:2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B44BC061748 for ; Fri, 4 Feb 2022 01:10:04 -0800 (PST) Received: from dslb-188-096-149-005.188.096.pools.vodafone-ip.de ([188.96.149.5] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1nFubQ-0002IT-EM; Fri, 04 Feb 2022 10:10:00 +0100 From: Martin Kaiser To: Greg Kroah-Hartman Cc: Larry Finger , Phillip Potter , Michael Straube , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 4/4] staging: r8188eu: remove constant variable eRFPath Date: Fri, 4 Feb 2022 10:09:41 +0100 Message-Id: <20220204090941.309900-5-martin@kaiser.cx> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220204090941.309900-1-martin@kaiser.cx> References: <20220203203217.252156-1-martin@kaiser.cx> <20220204090941.309900-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In the _PHY_SwChnl8192C function, eRFPath is always zero. Remove the variable and use 0 in the code. Replace (enum rf_radio_path)0 with RF_PATH_A. Signed-off-by: Martin Kaiser --- v2: no changes drivers/staging/r8188eu/hal/rtl8188e_phycfg.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/staging/r8188eu/hal/rtl8188e_phycfg.c b/drivers/stagin= g/r8188eu/hal/rtl8188e_phycfg.c index 8279768201b7..6e26359bdda7 100644 --- a/drivers/staging/r8188eu/hal/rtl8188e_phycfg.c +++ b/drivers/staging/r8188eu/hal/rtl8188e_phycfg.c @@ -712,7 +712,6 @@ void PHY_SetBWMode8188E(struct adapter *Adapter, enum h= t_channel_width Bandwidth =20 static void _PHY_SwChnl8192C(struct adapter *Adapter, u8 channel) { - u8 eRFPath =3D 0; u32 param1, param2; struct hal_data_8188e *pHalData =3D &Adapter->haldata; =20 @@ -725,8 +724,8 @@ static void _PHY_SwChnl8192C(struct adapter *Adapter, u= 8 channel) /* s2. RF dependent command - CmdID_RF_WriteReg, param1=3DRF_CHNLBW, para= m2=3Dchannel */ param1 =3D RF_CHNLBW; param2 =3D channel; - pHalData->RfRegChnlVal[eRFPath] =3D ((pHalData->RfRegChnlVal[eRFPath] & 0= xfffffc00) | param2); - rtl8188e_PHY_SetRFReg(Adapter, (enum rf_radio_path)eRFPath, param1, bRFRe= gOffsetMask, pHalData->RfRegChnlVal[eRFPath]); + pHalData->RfRegChnlVal[0] =3D ((pHalData->RfRegChnlVal[0] & 0xfffffc00) |= param2); + rtl8188e_PHY_SetRFReg(Adapter, RF_PATH_A, param1, bRFRegOffsetMask, pHalD= ata->RfRegChnlVal[0]); } =20 void PHY_SwChnl8188E(struct adapter *Adapter, u8 channel) --=20 2.30.2