From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A7C6746A5ED for ; Wed, 12 Aug 2026 14:46:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786545974; cv=none; b=j8RhloAb7shhJGj2iVzk/jn0J/c3B/CBYlyT8HHtY1ytYoS+GoU/ECAuaxRDY1zOwpJOu2KELm00noMNnXGgxjeLNWJYP/UDepM7LpBIXq9QNW32wKG8/IPij55WAHewmw+4zhAxcGsndAKL0bwn2K3OE5eUTDPPwbsX7J4tJUE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786545974; c=relaxed/simple; bh=ypHI0S+UNvDNhN5cj1MB0lINoArN61phj1Gchrhibgo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZL/DG/IOblXICirTzasmr2ADINFLpv9h4dRVyQ+LWg8niDHwICfJRKO8mf7+WmOkTBPduCtr7gpeDk70bKriODvbmxiA3ZqI6+fpgZCqE5iCKDHep9hVGAeRE++53HtBD8807ZeFe5cMz/IHSA4olTwDHUhSqGtSxcBkEP/qIbQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i3BwMazV; arc=none smtp.client-ip=209.85.208.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i3BwMazV" Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-39dbe684115so17368181fa.1 for ; Wed, 12 Aug 2026 07:46:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786545971; x=1787150771; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9SQr3P3H65aB8k8MZd33ziaOzUGlc9kgkH4DtThvPgg=; b=i3BwMazV4ynu5kMkxlzSJ29g8LAaQ2k81fUMPYz/u0Q9HGyAd52PXr8T7Mkk1H9Vre UQX3pyqej8J0p8hxtfyzEV7bhe4oaLIRAb5OHdkdDASFMbUdhyDrqpjzdH+olFM5PRio QHBAg+EEDFpk+7UoqM4h8KS0qoZqhP7eq2FEp+equupIRbmtt/S3hKKdW1cdqAZ9VHyl DDwr4cTOBINDH1STmD8CF9Z4MkPvikI8a0tZkIRvjUzSzhJQl6KA3V9uTPI42LlK3xyw KPCA5vGFPepQUc0+rrBDpT7JZKQIXTBKK3ENUE62uIJ65eoGM9QBuS06dopPueiLbjEv uHNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786545971; x=1787150771; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=9SQr3P3H65aB8k8MZd33ziaOzUGlc9kgkH4DtThvPgg=; b=VOWGjjSAQm55hzGQ+8rON4XH8lit6CprJqihNAP93TsDz8w6Xgz76SoiyDBXoT9HeA FjldBpTP0R5Ah+pb6mJzN1LI/9tayo1Gle7TNu+1szQFOWf0I+AL2LYpYrjJIb78TNlD bnLyNIET0QukPG/Hb0wISBJco83TxGk0pncXNyK8yrVHewvslMyHowhLZsH7XgFKpLmI GxZDhTBRKz2ScQVxm6HrH1U4ooxvIP17cMx8pfGlGN79DyduTul5IV6U8mLKSymTx8rf 8Fiv5oiNToAlocucphh4cAIf6gXfPpiQXgeslvV7FiV9em8V9I9mXskrk5xWTydVECPz 5hzw== X-Forwarded-Encrypted: i=1; AHgh+RqpRijb8IDd0m2s3Vt6LUcphenIxvb8CbRbqJsZao4oM8ik49a0hmtoUAmJd2r2C/KWxiDg14zeNLCJHz4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw2nGkOp31JKSinahDzoicf6Jsw+fSBhVZQt04lYLoW7DSQX9iM 0g7tXX6oyJo3YCOerr/+S3W2NrcxBjzYVhKx6DlvpK8mXT191btgxCdT X-Gm-Gg: AR+sD124H33ksdLQO7bruNggfm0XmStxsa7lCCsYuCUTU6zRxjiyf2Vjm12pZ0+M+se V0BDM9xm90Jsiak5wqsBVOkN/YO2teKePLfowsQ5unyNT7FlYearV075e08dTxr9C7Ps3nT3su8 SOWetKVsb1hrGirpK7B6/pv3i4/1dCK0IiyhRszkevpOglRLd4otOLcvximka45q6iKBl3M3r11 i/M9sF3uU39jhkO7pnw3ypcPO2sM8H/Q4fITfk9Xa26snOZWgHYXX/b7MSdzG+e4VXbSsULl9Od JAh98G8j+jnDyKI3pYljep0nzZ3Nus9ssUPEuOm6VY1gZAIqt7csDCl6vdOG8sqaSNbSv86UHil yI/MSNRqlmfWXB1uu2ajBZGsju/xNRPRrRhGmkIIXYzilG3uzFAOe+CSnKOO/YfWzn1eTkAFUBc 5rLj4JAMxB8uDDSWPdAuroGgpmhpqdwqPKZD31qSxKpgUHR2HnfyJ8CeTvpTlOF9u+RsJ1Ibw2M WaEpYatzKWzFHhnRPa+dQJ7cJ9pEj1zAtPhURSyyfEVwMHQPrGVDTTqAq73uQ== X-Received: by 2002:a05:6512:481a:b0:5b2:a22c:50ff with SMTP id 2adb3069b0e04-5b44bb42249mr1278206e87.19.1786545970533; Wed, 12 Aug 2026 07:46:10 -0700 (PDT) Received: from archlinux ([94.180.96.85]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b44cfc27besm552179e87.21.2026.08.12.07.46.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 07:46:09 -0700 (PDT) From: Arsenii Pashchenko To: pkshih@realtek.com Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Arsenii Pashchenko Subject: [PATCH 2/4] wifi: rtw88: rtw8822c: use sign_extend32 for DAC IQ validation Date: Wed, 12 Aug 2026 21:45:44 +0700 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Leverage the kernel's native sign_extend32() macro to properly interpret the 10-bit raw values from hardware registers as signed 32-bit (s10) integers covering the [-512, 511] range. This allows us to completely rewrite rtw8822c_dac_iq_check() to use a simple, clean amplitude boundary check instead of complex, nested unsigned boundary conditions. Drop the temporary u32 casts inside the check and sampling routines. Signed-off-by: Arsenii Pashchenko --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 896e3e7b9..d06986d09 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -3,6 +3,7 @@ */ #include +#include #include "main.h" #include "coex.h" #include "fw.h" @@ -277,18 +278,15 @@ static u32 rtw8822c_get_path_read_addr(u8 path) return base_addr; } -static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwdev, s32 value_s32) +static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwdev, s32 value) { - u32 value = (u32)value_s32; - bool ret = true; - if ((value >= 0x200 && (0x400 - value) > 0x64) || - (value < 0x200 && value > 0x64)) { - ret = false; + if (value > 100 || value < -100) { rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] Error overflow\n"); + return false; } - return ret; + return true; } static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) @@ -299,8 +297,8 @@ static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) while (i < DACK_SN_8822C && cnt < 10000) { cnt++; temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[i] = (s32)((temp & 0x3ff000) >> 12); - qv[i] = (s32)(temp & 0x3ff); + iv[i] = sign_extend32((temp & 0x3ff000) >> 12, 9); + qv[i] = sign_extend32(temp & 0x3ff, 9); if (rtw8822c_dac_iq_check(rtwdev, iv[i]) && rtw8822c_dac_iq_check(rtwdev, qv[i])) @@ -352,11 +350,11 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev *rtwdev, if (i_delta > 5 || q_delta > 5) { temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[0] = (s32)((temp & 0x3ff000) >> 12); - qv[0] = (s32)(temp & 0x3ff); + iv[0] = sign_extend32((temp & 0x3ff000) >> 12, 9); + qv[0] = sign_extend32(temp & 0x3ff, 9); temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[DACK_SN_8822C - 1] = (s32)((temp & 0x3ff000) >> 12); - qv[DACK_SN_8822C - 1] = (s32)(temp & 0x3ff); + iv[DACK_SN_8822C - 1] = sign_extend32((temp & 0x3ff000) >> 12, 9); + qv[DACK_SN_8822C - 1] = sign_extend32(temp & 0x3ff, 9); } else { break; } -- 2.55.0