From nobody Wed Sep 30 05:00:05 2026 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 59AB63806A6 for ; Wed, 12 Aug 2026 14:46:11 +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=1786545972; cv=none; b=SkU5bau2CSX9NZQmhXpG16FrxW8BTM5a5vHZd+gUKm8SBWo/RC9ecGWnttX2uxRtmIKJetfG0A/pkC07okaU4BbsGNhM9YNXA2N66Eue8AzKXd0Wr6lfc71MRKYHTjYQDw+xgyR3ni8Bf2cAG6zOh204sUDtIBFGq9EoWbE3iDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786545972; c=relaxed/simple; bh=jP70uOP2BCSma+JgjdwArgM9EWTT6A1QGv3/F1F0GvA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Bdztkhgpi/7mWcwY/WNUqVppEe5Ho2U8aA4HnPrhDI1+9hz2P6/paE/rjrSSwjkkf8qk6RkPCHoWF87UXBNH4wHHBGdj4d9Yto6jLj0pGWfWIG+KXehpPEb59DQvFX9Lm5y7ExZk4g8WHXzzkm1cqvmC6ZwSO+NRTf2kXPXxm7U= 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=JQOsnVf7; 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="JQOsnVf7" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5b159850b16so1037409e87.3 for ; Wed, 12 Aug 2026 07:46:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786545969; x=1787150769; 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=xjVce0bOiDbqJh+cO9vi5Yx6lQL92Gy5xiafEpIBLzI=; b=JQOsnVf7v6QcV0u8wSvO8L6YzhJcFndrLMjWlXSZ3qhogQM9wnjAgTpo4dPjZcEXnK J5+fbuJa/6TszBRFSgv3oFTdW/dkN5GFcyBzD44hP8fYlJG9n2l4UsK2Kv4wNnadHCPg +avn0W4o34YEMW2zxJzzA/FdSHcC1cVKfJGl20a7CGro77hL9w3LTGM9KG+hvq1QEzKT yoPiOrRgjIuc7t3vIc3LniQkJQVHI+lJGJlk5hotDoo6nJT+wQ3Cpj0CwIg9GmdN6a4p 5GUjQbi5dQ5CV37QUx99QmqWbC1AecJrX18H8QZyDGiuYudM8s0xPyYT9uvJ/3nYYTGi 8/qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786545969; x=1787150769; 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=xjVce0bOiDbqJh+cO9vi5Yx6lQL92Gy5xiafEpIBLzI=; b=EaePb4bGfuFokNTPnL3/lrf+wYdgm8EiQeZs/FaV9sm1r6NYRw6vC69+VnPvNIiJzT xzxT+0RhTJP+jljrug4AfXO+aYL2AABrlOlp6Tu1YBGz+kxQIIAP9lEkZ1SfE/P+lwhp FVZtbRHrl9GQ0gWxL/6MES5VimabJlvoh9Z/Ek4DYlxUXb9Kan4G0qlYHMdlrCM4X5zz ZJDXZnCtDz8JoDOe6LbpcUgL61tc4SFYdU8243gmDq6lBm5N+Jsf7V5oG8ZjZg+xQnAF q/mpQNP4A+xalwVa8bInlr+zT9L7UNNgDz6uHyEB2YnEDUJUqOyRSKxf1f6LViluGnX+ fXgw== X-Forwarded-Encrypted: i=1; AHgh+RqyUEnhEG8OCpik797rhobdO3UdMyibxm/x22vWw6UCno3hFDeSwA2Ywc2tGP/KnVIpJlqsn90WK2sxx9o=@vger.kernel.org X-Gm-Message-State: AOJu0YwpsFtZlu8vp+BfdOsgb9mnEP/dj4frwUB7IInNfQpRdqfiXe+u ooop20negT3kd7YxvdnLJ7lV/VFmYztFls/yL+0Zein/O/BYw4eo0/pv X-Gm-Gg: AR+sD11etij+/5tK66k+0OR+QOC/2hMH54Mpavs1WF2GUyNETZUZA26F4R/Aru4HsOJ iLX0za9W76moV9QsReJzcR28vw7bn5OJxRbX8t+rblz6aAw+EGvT5msr6xYqiK91NClijEEFLnJ 7/DuEUVoxSkcPmOBpic3zFW84J9ethqauqKf2DPqrFNpiGDN6HJI2MYcEs/fqKLrfHyY2LhoI26 vtAlfAUf/EaG27RPy2KIfuPXn2Ok5gn8KJcYVhR10OdU67S6SpzrgQAjCrWUXWo7+kyQygyNmCe 4SPYt07YfRTDeCcsbAAVHVnx4cdyM9cn6rh8Z9+rnD7ni0GWRUgrAOJ4eZDh2oUmbZ00l07BggM GeKudngj5NeMyIMUGnkRaqctAy7t4HRdQauvqedaK5SpeiFmIe/EQbe7yeeaZ1+uHgCtlATm3yr FhbrZqSwPdp2hno3xgoSBrNseXh3uT8cBDJnVviglDjGHA1v1ZeeJRHCu7GClGGSTuiloTgVzX5 mQUwaX7nE5fdm9mWZPpt/CL0HdU6TFz3N4hbqY+S69kDQJGlEvaqzIOyVDLSQ== X-Received: by 2002:ac2:5a02:0:b0:5b0:1879:1b9d with SMTP id 2adb3069b0e04-5b44e31a809mr616228e87.26.1786545969296; Wed, 12 Aug 2026 07:46:09 -0700 (PDT) Received: from archlinux ([94.180.96.85]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b44cfc27besm552179e87.21.2026.08.12.07.46.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 07:46:08 -0700 (PDT) From: Arsenii Pashchenko To: pkshih@realtek.com Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Arsenii Pashchenko Subject: [PATCH 1/4] wifi: rtw88: rtw8822c: convert DAC IQ buffers and signatures to s32 Date: Wed, 12 Aug 2026 21:45:43 +0700 Message-ID: <12e170032b884c8693a08c780fb8aa677aa4af4c.1786545572.git.ulijg308@gmail.com> 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: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare the DAC IQ calibration path for signed math by converting the temporary stack arrays 'iv' and 'qv' from u32 to s32. Update all internal function signatures to accept s32 pointers. To guarantee bisectability, wrap the existing unsigned logic in temporary casts to u32. This maintains identical mathematical behavior and avoids any compiler sign-compare warnings. Signed-off-by: Arsenii Pashchenko --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wi= reless/realtek/rtw88/rtw8822c.c index 244c80264..896e3e7b9 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -153,9 +153,12 @@ static void rtw8822c_dac_restore_reg(struct rtw_dev *r= twdev, } } =20 -static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rtwdev, u32 value, - u32 *min, u32 *max) +static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rtwdev, s32 value_s32, + s32 *min_s32, s32 *max_s32) { + u32 value =3D (u32)value_s32; + u32 *min =3D (u32 *)min_s32; + u32 *max =3D (u32 *)max_s32; if (value >=3D 0x200) { if (*min >=3D 0x200) { if (*min > value) @@ -182,8 +185,10 @@ static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rtw= dev, u32 value, } } =20 -static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *v1, u32 *v= 2) +static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *v1_s32, s3= 2 *v2_s32) { + u32 *v1 =3D (u32 *)v1_s32; + u32 *v2 =3D (u32 *)v2_s32; if (*v1 >=3D 0x200 && *v2 >=3D 0x200) { if (*v1 > *v2) swap(*v1, *v2); @@ -195,7 +200,7 @@ static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwd= ev, u32 *v1, u32 *v2) } } =20 -static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *iv, u32 *qv) +static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) { u32 i, j; =20 @@ -207,8 +212,9 @@ static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev= , u32 *iv, u32 *qv) } } =20 -static void rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, u32 *vec, u32 *= val) +static void rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, s32 *vec_s32, u= 32 *val) { + u32 *vec =3D (u32 *)vec_s32; u32 p, m, t, i; =20 m =3D 0; @@ -271,8 +277,9 @@ static u32 rtw8822c_get_path_read_addr(u8 path) return base_addr; } =20 -static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwdev, u32 value) +static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwdev, s32 value_s32) { + u32 value =3D (u32)value_s32; bool ret =3D true; =20 if ((value >=3D 0x200 && (0x400 - value) > 0x64) || @@ -284,7 +291,7 @@ static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwde= v, u32 value) return ret; } =20 -static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, u32 *iv, u3= 2 *qv) +static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s3= 2 *qv) { u32 temp; int i =3D 0, cnt =3D 0; @@ -292,8 +299,8 @@ static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *= rtwdev, u32 *iv, u32 *qv) while (i < DACK_SN_8822C && cnt < 10000) { cnt++; temp =3D rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[i] =3D (temp & 0x3ff000) >> 12; - qv[i] =3D temp & 0x3ff; + iv[i] =3D (s32)((temp & 0x3ff000) >> 12); + qv[i] =3D (s32)(temp & 0x3ff); =20 if (rtw8822c_dac_iq_check(rtwdev, iv[i]) && rtw8822c_dac_iq_check(rtwdev, qv[i])) @@ -302,7 +309,7 @@ static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *= rtwdev, u32 *iv, u32 *qv) } =20 static void rtw8822c_dac_cal_iq_search(struct rtw_dev *rtwdev, - u32 *iv, u32 *qv, + s32 *iv, s32 *qv, u32 *i_value, u32 *q_value) { u32 i_max =3D 0, q_max =3D 0, i_min =3D 0, q_min =3D 0; @@ -311,13 +318,13 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev= *rtwdev, int i, cnt =3D 0; =20 do { - i_min =3D iv[0]; - i_max =3D iv[0]; - q_min =3D qv[0]; - q_max =3D qv[0]; + i_min =3D (u32)iv[0]; + i_max =3D (u32)iv[0]; + q_min =3D (u32)qv[0]; + q_max =3D (u32)qv[0]; for (i =3D 0; i < DACK_SN_8822C; i++) { - rtw8822c_rf_minmax_cmp(rtwdev, iv[i], &i_min, &i_max); - rtw8822c_rf_minmax_cmp(rtwdev, qv[i], &q_min, &q_max); + rtw8822c_rf_minmax_cmp(rtwdev, iv[i], (s32 *)&i_min, (s32 *)&i_max); + rtw8822c_rf_minmax_cmp(rtwdev, qv[i], (s32 *)&q_min, (s32 *)&q_max); } =20 if (i_max < 0x200 && i_min < 0x200) @@ -345,11 +352,11 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev= *rtwdev, =20 if (i_delta > 5 || q_delta > 5) { temp =3D rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[0] =3D (temp & 0x3ff000) >> 12; - qv[0] =3D temp & 0x3ff; + iv[0] =3D (s32)((temp & 0x3ff000) >> 12); + qv[0] =3D (s32)(temp & 0x3ff); temp =3D rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[DACK_SN_8822C - 1] =3D (temp & 0x3ff000) >> 12; - qv[DACK_SN_8822C - 1] =3D temp & 0x3ff; + iv[DACK_SN_8822C - 1] =3D (s32)((temp & 0x3ff000) >> 12); + qv[DACK_SN_8822C - 1] =3D (s32)(temp & 0x3ff); } else { break; } @@ -362,7 +369,7 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev *= rtwdev, static void rtw8822c_dac_cal_rf_mode(struct rtw_dev *rtwdev, u32 *i_value, u32 *q_value) { - u32 iv[DACK_SN_8822C], qv[DACK_SN_8822C]; + s32 iv[DACK_SN_8822C], qv[DACK_SN_8822C]; u32 rf_a, rf_b; =20 rf_a =3D rtw_read_rf(rtwdev, RF_PATH_A, 0x0, RFREG_MASK); --=20 2.55.0 From nobody Wed Sep 30 05:00:05 2026 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: quoted-printable Content-Type: text/plain; charset="utf-8" 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/wi= reless/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 @@ */ =20 #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; } =20 -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 =3D (u32)value_s32; - bool ret =3D true; =20 - if ((value >=3D 0x200 && (0x400 - value) > 0x64) || - (value < 0x200 && value > 0x64)) { - ret =3D false; + if (value > 100 || value < -100) { rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] Error overflow\n"); + return false; } =20 - return ret; + return true; } =20 static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s3= 2 *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 =3D rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[i] =3D (s32)((temp & 0x3ff000) >> 12); - qv[i] =3D (s32)(temp & 0x3ff); + iv[i] =3D sign_extend32((temp & 0x3ff000) >> 12, 9); + qv[i] =3D sign_extend32(temp & 0x3ff, 9); =20 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, =20 if (i_delta > 5 || q_delta > 5) { temp =3D rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[0] =3D (s32)((temp & 0x3ff000) >> 12); - qv[0] =3D (s32)(temp & 0x3ff); + iv[0] =3D sign_extend32((temp & 0x3ff000) >> 12, 9); + qv[0] =3D sign_extend32(temp & 0x3ff, 9); temp =3D rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); - iv[DACK_SN_8822C - 1] =3D (s32)((temp & 0x3ff000) >> 12); - qv[DACK_SN_8822C - 1] =3D (s32)(temp & 0x3ff); + iv[DACK_SN_8822C - 1] =3D sign_extend32((temp & 0x3ff000) >> 12, 9); + qv[DACK_SN_8822C - 1] =3D sign_extend32(temp & 0x3ff, 9); } else { break; } --=20 2.55.0 From nobody Wed Sep 30 05:00:05 2026 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 D7F7346AF1B for ; Wed, 12 Aug 2026 14:46:13 +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=1786545975; cv=none; b=i3a8o1Ax4GOW+YY4VkPHMdCZJ5J4SPAprJ0D5JM4pRwX1lk+q1KhqD/uvfBm4btC7FbKyOmR5IDRozLlgdJAgFJMy9pmH6aSCoRNVTDn0B9mlsGs+S4aCNnO/AnJcUgWfsxCUlszB1qpoBHd9f69PLcOIalepwTtA6ayLIt1JgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786545975; c=relaxed/simple; bh=5TXl+7FhJNDRzik5WEtBDUOOLm+EMBxf4N2AmcSdcd4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TFdLV3vbQSfRJHXOUMSJkYOzebHxasMl5TPV0WvcOL4LCo5t3ANZYkX9UKXO4AXNEA+T0p04oBgVYKy6WEqGbgBPldj/+f7MeB+1whEgGUGtZ3eutyIACyhjxaq0uN4rs3VCtFPmczlhPTw6bBNABFLBcuZwQC+1K3bcTc/J4ys= 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=C/uxJANa; 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="C/uxJANa" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5aeb98460c6so968545e87.2 for ; Wed, 12 Aug 2026 07:46:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786545972; x=1787150772; 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=6mNXe4icQAHTtL3mT5idpm+v38V2NUoG/qN7vf7IPgA=; b=C/uxJANa7x30ppSlXWTDWBd2Oug0ygp1CX3CW024WyDNE0vRVe/fuQh5taeoJMZegU PEh4elltdrpbba5seMomqcVkRgZpPhrWTdOdIEJl5AJe2CClimqrYGY6Ow4jKp2ulX3Z CDurUvJT1sjaklCWFVsUY8SEEg4BcbSQkJ3Pahiu6bX7bU4g4oP++vFajP5jyx6QFVJB JDXStZKnJzL8m10JXOwtiMLSr+Hti9/8DyZ2JbFDhPSDbZj9UmbJOFrWn9UBlgX4aWjK 86MGwKGT7MVYFMLxOSqdtj1yDQtZ/KDt0pw/0uPfecfip2K/cBpBeN6ihrgdikqbKQCg P0gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786545972; x=1787150772; 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=6mNXe4icQAHTtL3mT5idpm+v38V2NUoG/qN7vf7IPgA=; b=IBayx1hQpk7sfAVOF4NxS33dkexgV81BFMVctr//3V2ro0nlKP84VgENEkA6icphjD wretAl27g6pGj0q9C+mx1gPzE+iXcesiwDsYBsjqIxIV4tUR+Lz98lkdKVC6fTbaSkfn PLqfuG7qw0begj9VzturZaeILBrTAXia+4+57JpKynh0xJa8gas9N08BYbQqcwjsxsGE Nv13/1u9pcumRsonhKEKWjWRw8VaAukQ2OGGd7CWz1zfL/N5u3Ob3xqEzzAIbb5nGHyz Q+PoH4m4wOEN+Cxd51AwJQfwNTeF3hWsfXP6OqQSOseido1c3udlsK2nvUpr+ZssXBAy VKpQ== X-Forwarded-Encrypted: i=1; AHgh+Rro3LnLZ44j6ycRtHFPyD+Z5wf0xGKiLKe8VG/iSbnFYAMWUo3gGOQM0SQh1unliq+qSWp96Yd3DCEOkv0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7vI2Q+ZtjFwa/YRMPdZNVPjOKFuVh6GhYdJ7vulUlUFUGt7Eu MrMrHzH5yfaggezFkqzugd9Z4CQGUAAeImfNQe4m/O9p96W29ib3MeGV13S0mT6b X-Gm-Gg: AR+sD11jZ4kgxIpk0fBlOc1PPTCDX2WvjyM/y1KvIWv2j4CgPDLjcPO9z3BtlY8d7nU WvFVOQP0Yxdey0bautAJv/asFNl6YcMmfUoIJ6gua6jcBrFpoGkO2dNGMkKL+z29twE36EuKicX cydbUelcuUyfoLH4qqDvJicqmMLbgX/kOnScPYshBXJm1NaLZDI5wGxEy/kPmogWOutc9jr/5mW pTBNm5eOuNlmdLEEf0+440Uv4yrUSztAOPVpyKusG06LlXzZuzx44Im1RYamCtKa58jsOrZAfLS yn5bssevETg+La3YNhzGUblJ65dWy4cH0XKdbieEg6JFYWi81yar784I+9EbvKr7pFcwzt5jlBn rdf2rta32WD8eV3Ob6fDBSG1gq4EGFWhhio7rPDGjNEdIXNXuBaa8JbEuxP1QOA6fFFrogUWNdV QEZPHPeRQUIt9G41rYQyMgs6DpwQpVwNHi7B2ZzpJungyZmn/V3ZQftqwbN/LhNzRlBOeEpGb/j AmBRytVSooljzI8zCbMAAEW5lA9HVhiSf/AT37zXT1JSmYJVyd5ZduYxO1Eyg== X-Received: by 2002:a05:6512:3b91:b0:5b0:1108:c57d with SMTP id 2adb3069b0e04-5b44e31cef8mr947204e87.46.1786545971733; Wed, 12 Aug 2026 07:46:11 -0700 (PDT) Received: from archlinux ([94.180.96.85]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b44cfc27besm552179e87.21.2026.08.12.07.46.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 07:46:11 -0700 (PDT) From: Arsenii Pashchenko To: pkshih@realtek.com Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Arsenii Pashchenko Subject: [PATCH 3/4] wifi: rtw88: rtw8822c: switch to the kernel's sort() library Date: Wed, 12 Aug 2026 21:45:45 +0700 Message-ID: <4a0b85003aac26b23fcfc6e414e00b39e0d2aa45.1786545572.git.ulijg308@gmail.com> 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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the custom, nested bubble-sort logic in rtw8822c_dac_iq_sort() and __rtw8822c_dac_iq_sort() with a call to the kernel's optimized heapsort implementation. Implement a concise, localized s32 comparator. Since the previous patch already guarantees that input values are properly sign-extended into signed arrays, the custom circular index sorting rules completely disappear, trimming down lines of code. Signed-off-by: Arsenii Pashchenko Acked-by: Ping-Ke Shih --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wi= reless/realtek/rtw88/rtw8822c.c index d06986d09..642ac2e2b 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -4,6 +4,7 @@ =20 #include #include +#include #include "main.h" #include "coex.h" #include "fw.h" @@ -186,31 +187,18 @@ static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rt= wdev, s32 value_s32, } } =20 -static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *v1_s32, s3= 2 *v2_s32) +static int rtw8822c_dac_iq_cmp_s32(const void *a, const void *b) { - u32 *v1 =3D (u32 *)v1_s32; - u32 *v2 =3D (u32 *)v2_s32; - if (*v1 >=3D 0x200 && *v2 >=3D 0x200) { - if (*v1 > *v2) - swap(*v1, *v2); - } else if (*v1 < 0x200 && *v2 < 0x200) { - if (*v1 > *v2) - swap(*v1, *v2); - } else if (*v1 < 0x200 && *v2 >=3D 0x200) { - swap(*v1, *v2); - } + s32 va =3D *(const s32 *)a; + s32 vb =3D *(const s32 *)b; + + return (va > vb) - (va < vb); } =20 static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) { - u32 i, j; - - for (i =3D 0; i < DACK_SN_8822C - 1; i++) { - for (j =3D 0; j < (DACK_SN_8822C - 1 - i) ; j++) { - __rtw8822c_dac_iq_sort(rtwdev, &iv[j], &iv[j + 1]); - __rtw8822c_dac_iq_sort(rtwdev, &qv[j], &qv[j + 1]); - } - } + sort(iv, DACK_SN_8822C, sizeof(s32), rtw8822c_dac_iq_cmp_s32, NULL); + sort(qv, DACK_SN_8822C, sizeof(s32), rtw8822c_dac_iq_cmp_s32, NULL); } =20 static void rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, s32 *vec_s32, u= 32 *val) --=20 2.55.0 From nobody Wed Sep 30 05:00:05 2026 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 E05F046D2CF for ; Wed, 12 Aug 2026 14:46:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786545976; cv=none; b=s9pqMyls+wtpwxiBIk6N4F12l8r+wY/ZcUSlE4TOfB8SA70AJ5weS0XOnZHxifGOBSF6J2usu3Vh8nne8GE1x9Wa2qiFqvwpVmGjVUSdDD0y0efwkIxpVGaXxkCCY+BCyh/o060tFUSG1pIGUVx6mJXEyXF+VRC5HbSIIvJSKSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786545976; c=relaxed/simple; bh=mD4MIu7A6RBKLGLZhcQN38rVB6TQlU0KUw0OmGTmwG0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EDf92oODTJRq73VKgF0BAcPPX9iU8gFZxckw7JJIkPhh7mcnOp+scXpuWCJVKiXDLVVqzZKnfvbXtYQ8e+QS4c2sRTkRYYP1MERVBVvfvmuHXAC/Je5itsn9EYqjXbUXiKbP1N83oLpdnG3PyE9/fS1b8pXV0kw4/NPPFJ2Lo5s= 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=M1j2/GdM; arc=none smtp.client-ip=209.85.167.42 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="M1j2/GdM" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-5b015532f7bso1142120e87.0 for ; Wed, 12 Aug 2026 07:46:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786545973; x=1787150773; 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=kRTl+sLRqkpeXssOlH0oy3ZfbvcTh31CRPscib/8rhE=; b=M1j2/GdMTfpUeUlBGIcPbm2mPw/U0VSRHlD/+bdXIENCitM+tew85g3Cwu8qC0zCv9 wZlE6fw5K/rANb7hYkJJu/9kV+0Dj3pnaDQVSmP4lbyXaAq2185hJKmArt2W1GlSa7iq PW4n9XYXQ9ro8QdfH8JM5TjaZKW5OEPH1WG9MGPoPI6+rUJdq0OZYuL46EBVels3ElvE AAsj2iqQLQrx0Hze/SfxyvTZ4z1t3hFmf0EO03OddKA+vdvRG7C9+iu44iM4QJ9ba73S 4+DhargWc5HyxLClKrtPBbbuZm12d7jGhoigGCpG3gJqk1tlZ15606fV47Me5i/iMU2r 2cSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786545973; x=1787150773; 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=kRTl+sLRqkpeXssOlH0oy3ZfbvcTh31CRPscib/8rhE=; b=No5OrdV0izKQ327881Cpvz9z0JuQLOjR1HO8aoriGkLDy7+KTdddQIIW+xSQqsPqBH 99dFxwaOUrR5XpwVFyWw2OUa8SKPVmrjZtOva0AH9B6PGH55kLVa03RYph6B2qw7/ugC ElF4K6KaW64L8Uezk5j+cEYsR+4XcZoDYrkE3Rrplacb3FhWUfE2jXsc5C+hhF76ioiW KMY94bEz/zcebAOQl0JauyKYenzl7PyjWhDiwI4st8Nnye3L4OJQBUGI/c+ffex4joR2 nWOW4bITQCnbqXRJjpT489dQMxX8mtUpcfrMq/9PnlN4VE3xYVzNan6TDIybJqfzG7TO A8iQ== X-Forwarded-Encrypted: i=1; AHgh+RpFVYmbwi+/7SSJRdmeWw+6IQVR3fHTTpCznet0qtXbLBV2qvONwjqhCy3AVDZQIW8CsMuIg8c9wk25GIM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzhq4W2/YdI87eu286brhLvft+A92NAoozfMqAEpaWNmXc+OzLm /ob/Tk2XwH4Lfush6VUoUCiqhE9QSyRKV6iGbqkASK1Wl7X9/ahI42Ba X-Gm-Gg: AR+sD13dyU+K9YDlwURfe1GfukgkRQrVjkAKG6Ii9KGSvDEZ/4WEOQ19OjX/HEu6A4N M4o87hGCKOm3ItvvadiwRtPw+dJnDwiAwLgQhhnxuGKTWYAWRt7xyJiDmr42DoqI8YWuBWFgbPI jtsFkurM8/qzhYYsT+SvGgKITKDd5OFxpaWkh8vQ0QhHxtPzq7xUuKA24CnlVWHZ4k5Ez7hIr/b 1JYi6ohNF48L2uQicXcFQpTHZ3S4qTDFwxEXTr52Cg95C+WsKEzCGbeHFKdCWsSmVae5VjDZDDX 8JeHUbYoVilqXvhQD+4VvymMwW66QAUqU49WfedxL66semf6yIUvpw9YkbArAxrHId5Z985gBuz nd410EPYUgKaatcW/5iqVHIIXv1I4j5V9J5gUr5sdXCiGx5FoyXqQX2cgbav+0hUVBpNWmKndKA qMwC4MGrbMC6oZBHtKK+yxcu/cuQqZFHpAEIDcCBtHEsjgpEbUrmr1qrceGQRnQTiR11IBXslH6 iKMl67bAXGMSkXWf8osOW03htkg8fOnYBt+g/enlvKvaqm0RcGvu8iup7yt4KX1cqolzeEf X-Received: by 2002:ac2:4e94:0:b0:5b0:162e:127f with SMTP id 2adb3069b0e04-5b44e311c71mr557961e87.29.1786545972703; Wed, 12 Aug 2026 07:46:12 -0700 (PDT) Received: from archlinux ([94.180.96.85]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b44cfc27besm552179e87.21.2026.08.12.07.46.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 07:46:12 -0700 (PDT) From: Arsenii Pashchenko To: pkshih@realtek.com Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Arsenii Pashchenko Subject: [PATCH 4/4] wifi: rtw88: rtw8822c: simplify amplitude search and offset via s32 Date: Wed, 12 Aug 2026 21:45:46 +0700 Message-ID: <0bb6e2fb78d0b2def623210938204a0efbbe2034.1786545572.git.ulijg308@gmail.com> 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: quoted-printable Content-Type: text/plain; charset="utf-8" Complete the signed data transition by removing the complex rtw8822c_rf_minmax_cmp() helper. On a true linear s32 scale, finding the delta amplitude simplifies to a direct difference (max - min) without any nested circular wrap-around conditions. Refactor rtw8822c_dac_iq_offset() to directly calculate the trimmed arithmetic mean, casting back to the hardware register's offset orientation only at the final assignment using a ternary operator. Signed-off-by: Arsenii Pashchenko --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 103 +++++------------- 1 file changed, 25 insertions(+), 78 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wi= reless/realtek/rtw88/rtw8822c.c index 642ac2e2b..6fcdfc64c 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -155,38 +155,6 @@ static void rtw8822c_dac_restore_reg(struct rtw_dev *r= twdev, } } =20 -static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rtwdev, s32 value_s32, - s32 *min_s32, s32 *max_s32) -{ - u32 value =3D (u32)value_s32; - u32 *min =3D (u32 *)min_s32; - u32 *max =3D (u32 *)max_s32; - if (value >=3D 0x200) { - if (*min >=3D 0x200) { - if (*min > value) - *min =3D value; - } else { - *min =3D value; - } - if (*max >=3D 0x200) { - if (*max < value) - *max =3D value; - } - } else { - if (*min < 0x200) { - if (*min > value) - *min =3D value; - } - - if (*max >=3D 0x200) { - *max =3D value; - } else { - if (*max < value) - *max =3D value; - } - } -} - static int rtw8822c_dac_iq_cmp_s32(const void *a, const void *b) { s32 va =3D *(const s32 *)a; @@ -201,31 +169,16 @@ static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwd= ev, s32 *iv, s32 *qv) sort(qv, DACK_SN_8822C, sizeof(s32), rtw8822c_dac_iq_cmp_s32, NULL); } =20 -static void rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, s32 *vec_s32, u= 32 *val) +static s32 rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, s32 *vec) { - u32 *vec =3D (u32 *)vec_s32; - u32 p, m, t, i; + s32 sum =3D 0; =20 - m =3D 0; - p =3D 0; - for (i =3D 10; i < DACK_SN_8822C - 10; i++) { - if (vec[i] > 0x200) - m =3D (0x400 - vec[i]) + m; - else - p =3D vec[i] + p; - } + for (u32 i =3D 10; i < DACK_SN_8822C - 10; i++) + sum +=3D vec[i]; =20 - if (p > m) { - t =3D p - m; - t =3D t / (DACK_SN_8822C - 20); - } else { - t =3D m - p; - t =3D t / (DACK_SN_8822C - 20); - if (t !=3D 0x0) - t =3D 0x400 - t; - } + s32 avg =3D sum / (DACK_SN_8822C - 20); =20 - *val =3D t; + return avg >=3D 0 ? avg : 0x400 + avg; } =20 static u32 rtw8822c_get_path_write_addr(u8 path) @@ -280,7 +233,7 @@ static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwde= v, s32 value) static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s3= 2 *qv) { u32 temp; - int i =3D 0, cnt =3D 0; + u32 i =3D 0, cnt =3D 0; =20 while (i < DACK_SN_8822C && cnt < 10000) { cnt++; @@ -298,34 +251,28 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev= *rtwdev, s32 *iv, s32 *qv, u32 *i_value, u32 *q_value) { - u32 i_max =3D 0, q_max =3D 0, i_min =3D 0, q_min =3D 0; - u32 i_delta, q_delta; + s32 i_max =3D 0, q_max =3D 0, i_min =3D 0, q_min =3D 0; u32 temp; - int i, cnt =3D 0; + u32 i, cnt =3D 0; =20 do { - i_min =3D (u32)iv[0]; - i_max =3D (u32)iv[0]; - q_min =3D (u32)qv[0]; - q_max =3D (u32)qv[0]; + i_min =3D iv[0]; + i_max =3D iv[0]; + q_min =3D qv[0]; + q_max =3D qv[0]; for (i =3D 0; i < DACK_SN_8822C; i++) { - rtw8822c_rf_minmax_cmp(rtwdev, iv[i], (s32 *)&i_min, (s32 *)&i_max); - rtw8822c_rf_minmax_cmp(rtwdev, qv[i], (s32 *)&q_min, (s32 *)&q_max); + if (iv[i] < i_min) + i_min =3D iv[i]; + if (iv[i] > i_max) + i_max =3D iv[i]; + if (qv[i] < q_min) + q_min =3D qv[i]; + if (qv[i] > q_max) + q_max =3D qv[i]; } =20 - if (i_max < 0x200 && i_min < 0x200) - i_delta =3D i_max - i_min; - else if (i_max >=3D 0x200 && i_min >=3D 0x200) - i_delta =3D i_max - i_min; - else - i_delta =3D i_max + (0x400 - i_min); - - if (q_max < 0x200 && q_min < 0x200) - q_delta =3D q_max - q_min; - else if (q_max >=3D 0x200 && q_min >=3D 0x200) - q_delta =3D q_max - q_min; - else - q_delta =3D q_max + (0x400 - q_min); + u32 i_delta =3D (u32)(i_max - i_min); + u32 q_delta =3D (u32)(q_max - q_min); =20 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] i: min=3D0x%08x, max=3D0x%08x, delta=3D0x%08x\n", @@ -348,8 +295,8 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev *= rtwdev, } } while (cnt++ < 100); =20 - rtw8822c_dac_iq_offset(rtwdev, iv, i_value); - rtw8822c_dac_iq_offset(rtwdev, qv, q_value); + *i_value =3D rtw8822c_dac_iq_offset(rtwdev, iv); + *q_value =3D rtw8822c_dac_iq_offset(rtwdev, qv); } =20 static void rtw8822c_dac_cal_rf_mode(struct rtw_dev *rtwdev, --=20 2.55.0