From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 2CC3A4195C8 for ; Thu, 13 Aug 2026 06:52:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786603974; cv=none; b=IylrEFgO/TizkYDAGck1QU8fXR0zLHwApb37nsmN0mhJ0Sv5aeSRLFA+iqY+mcoPtvIaDx4FP1slEV589FDFpnAOVjrzWR7vEC8eL5kWFp0W81/tjdf2zMZsieBN+U+PlR3qW1oCndl5d6s0+nbvO38NNnZSs/1gAvlIE5Le5l8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786603974; c=relaxed/simple; bh=ypHI0S+UNvDNhN5cj1MB0lINoArN61phj1Gchrhibgo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dl+GjaqR8vAiCpdZbUudzOYFhNQCuCzq7A9iMkQlkPe+6gANduoGbBMltCPJeySW2rVL8962rhxx1uWJXtszAbq4s1OmhzZKommqwI5aRQ9zn5CLxtM/cas+nT7oeEuOj6zHYoyG1zlwSSgMjsRXPNaQ1F4RrFfYEFF/F2lDBew= 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=a57Tib9A; arc=none smtp.client-ip=209.85.167.46 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="a57Tib9A" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5b013aa02b2so803690e87.0 for ; Wed, 12 Aug 2026 23:52:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786603970; x=1787208770; 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=a57Tib9Af6Bn0X4HuQzDLB1A0wRJET2aHF399y25hHdVJfwrfNNvPRNr4GrnZsn+fv U/AQ1KxD8nXq3q97kZ3eLvKWEi4zZpfP4V+9vBPqP0/oB1D1wqxrAFP+jND10mw5q7B2 887WCcRNTWA4XxLfZJLYVgcuf9aq0UxP50ULfGwpkxAHtilJVScMSGQy89uNNLSJwYVA a5nvwkL2FtRDOk+ubdzUWm6h/JimxKPCx+2LYIumqO7o3C7KMIVVZBUaMRQ2Rj6SpFbQ oDVpjUTPNkOi2SooyTFwVXrOM2DRvCsYmC/gHuJJ3zUHZGinLlkDlG653MB0HEUdmNke k4VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786603970; x=1787208770; 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=Z+mSOhGjLlVUtvR5OteytDs0M7vpqQjSwwNyxrHX1jZR+HUlWEYq8GEbQ8EhNx32ql /ahNFaBVawpBq3wc4eBeUpQCRIIHS0l6er1ogl1am+6MatxavhsWCgs0prBYHz38DOiE Pkgh36Z0Zh5lr39U915/jRyCfFzo+xipo3kEVyIN+aw/la7s6P6BKx95zaP+vyshfsoR oVjxGMhd8WC0D5NigJxks72dd/a9CrTayfX3Q4NHr5qq4erc+aeqstuMNck9eGEn0pta xX0iSnDNjrq8g4pqRjK3u2coXRDpBr7PN2JVLmYbVvZyWYrLBfPYSKosCCtzoiBk40Oc 4Ddg== X-Forwarded-Encrypted: i=1; AHgh+Ropn1n3uJVEZWshe7jSbPTtVu1hIpEUo3FIWMsOFonAK3SB5gKpuM120GkCdOu6leS/RRtgWx17p/qHNXQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzD2fJ5vAwQ0XNJlWvQCn/kGL/wqb+GBpbKF+I7mw9ucn0Lq37J 0npIIV8ZNbb6KzUay4Bsts+bYnJOHcBmPtd2WZ83tEpgpj6V9c3J91d3k4YOFwrH X-Gm-Gg: AR+sD11FNMZaYOjNt47gB21s74+bFBf4NlgTngUFQOnSmccj4vid2DqC+K1K5taJr64 QXk+71Vz8SvXOFd/OIKtEdXd4K3F7+KZvqXz8eYbdXfJ8ycR557WYlMridKr+6w0WIaNY6Up6ex SgcSyxZX3sXEPRPgtUXKxaUqSY/ne2+vuE8HpfvWi2Aff0LKkX4JZoKwImOEqPtiaFCnqcpctSN w9kkl/yJvAVhKKQ/wo8XkMX1/FpjmTznTkdmSZk4vMB+3yvrRl20evaZGWpQU64gJz1lWdy8Dsl wUazU8rlKsTWtv4DhCA2s1/5/XZFtbdUyx1DWQ23clcNBWoeCWi6CIfa4YSdTbCX0Zlcb8Zi1eK 4LuMmi6E8vWMDjvRjmTYmWaYofkSXarwQNyrylhEO0Hkd2gKlOHDe6S4VwyWRuSHF1QnIQGHd2H jDBV19FqtV9+J8z9Qo7vzwGzHbqlyuG7Uit9OktKobHBjltUoYb1GFJ7S9xPv07asmqtv6gHSSN 3Mpsmro2qdbq832o/r0MiyUvZiRM3CrAKXFvxgWSdCHD+ukBGA1yZsL1U//pw== X-Received: by 2002:ac2:5b81:0:b0:5b2:a929:cec3 with SMTP id 2adb3069b0e04-5b453cc584fmr395146e87.13.1786603969767; Wed, 12 Aug 2026 23:52:49 -0700 (PDT) Received: from archlinux ([94.180.96.85]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b453a54adasm270076e87.38.2026.08.12.23.52.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 23:52:49 -0700 (PDT) From: Arsenii Pashchenko To: pkshih@realtek.com Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Arsenii Pashchenko Subject: [PATCH rtw-next v3 2/4] wifi: rtw88: rtw8822c: use sign_extend32 for DAC IQ validation Date: Thu, 13 Aug 2026 13:52:33 +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