From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 CF32226C3BD for ; Sat, 15 Aug 2026 05:35:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786772134; cv=none; b=nRu7rWg1ONpIjb6I25zFF/4ZX0Jql/hFNIH3Pe1i0Ac7qlBhTEMK45FMxvr1GD0aeJAK4lkLGCHrpVVGsIWTIIwA2y66xRXpcDVLhQx42yf6cQwsaxm3OtNr2fvJwWJlfLZ17bT8NWVzuLZQSdp336kf4fwLjtry97P1mIAIZHM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786772134; c=relaxed/simple; bh=wFN/aEIy5u0Oqx1IU2Yf+C56vfAH7D/5v6jrUHIg8pY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pVNqDsQr6tQJm5THtrla4pZ0k2XnHFxUUbR+0yXFNnbbC6QQ4Bo/UhOATftgiYGtRdLkxqgPQ1hc8prRjD9Q6/Lg//uig/MFPIk7tfkTqcCBR5gUguAbXqbpQicjldGtChwARoevf4wDd41Sae7M758VSi++fmrJLYxamYsvNjs= 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=RouWUL6i; arc=none smtp.client-ip=209.85.167.50 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="RouWUL6i" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5b29599b81cso2090997e87.1 for ; Fri, 14 Aug 2026 22:35:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786772128; x=1787376928; 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=H+q6pnwjD32ZGoePq5J852mbrLt3kF3WnMretQXsbMQ=; b=RouWUL6iZVulP3vjNRHEakzHQUoS0yPLEjLcWKnXOjr6WhTRqWZEX99HVPqNI3fERC 2Rsv3bIKR59tktTCC95UUMHGmRBEAfakOiYkYS8jr+qTHauZCg1Tdyop3s2WNrw5f5DI vq5ZpMGkd65F6MAZO1YzSGQbCPgpOCJzDeQnzq/z+Bo/2wPBDQxflBYgm814fEGdkSW3 TpXH98v1qFGrLNEqCbUGWa+KGHz045dkkxwwbVFTqTaaKRI4b4M7+Rw0Ep2XrqAZ/2ko 8WQ9tio9ZfBitSwyagw0I1ZMUDJKIc25e5A4Mjw+WTJ+W9mQ4ymDa67T1w6C4VSQ/ERi aoWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786772128; x=1787376928; 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=H+q6pnwjD32ZGoePq5J852mbrLt3kF3WnMretQXsbMQ=; b=S2IMD6C0VO3Fr4WPK7Rr9RVVtWGvd0NeJO8hB+eV2jSrYeb2DBRVzML26oM+/SO/zK C/uLQ8Gb5D6sQHy/UO75gm7sPz1DBuDQ8wKVcqY6RstHRzM7IvRBczT60OcOagG2vUOC sy+yJ/6FgNiPOS70r68ruiEO/kakrP8+uI5hu1trqxHqz+eq0jdYQ/GhQn14OTX+hovD MfTlHb9K7u8QfcBwdOAdcamxmH8bywLl6CoHivs6sXEsBcl8tl88JqNZE127uqEIW4m3 C1iaYArXKZRs37YX2TC1HiLDIICi5LV6Kq1VsUzMHODt1BYPPHxKXUzf95PywflvNHgS k4Yw== X-Forwarded-Encrypted: i=1; AHgh+Rp+1bhteeXKk0J9g2EmnC+FblA9DUobP7JG7trM/SLK+vEjKfvlmdWd44fBJ1OpePyR9WoohpjDDXMcHu0=@vger.kernel.org X-Gm-Message-State: AOJu0YySz6mCPBciTTmktXgmhto64UDxIhDX8r37YDuqxJpTO5bOnayQ dvsKgSZyPfgmNBazN4B1Fm5db0WcOeAqScHfqrqQgwEF1T9+M0ntJCQ6BLKjUI6o X-Gm-Gg: AR+sD12U9EFQVkmU115hVZq/9V6/np3ZbeOlHsXcLz09OfCd6THAoWPDoZcr6kv+J93 RPSwMn/3LRWBWkQoNy+PuObShBTHYH/aFD6F0OakhNAtHPTCHssnUOD4v2DJ+Z3pVsBJtRRAz/H ijrrsG6WVSFdk5OVaJG8TSwbGpL/zSXMYMZaH9laNx4rD8JRznhPQXN/n0+s6OGSxu+lbhmYeLr k9cpeEqyZSSrDHJb+AlqKdrbaVP23tSCHxS0TLJ1/vg6Y6kwdOwBd2zWVrm831pNtJJs87CMe8i 9oaXj0jypggm2ytsbAAzuvf0BqN1/iZOiy4YZUsbt23QN2JT/23J1OS1woXsPvv2NRCwOr1gPNB KMCxBpaSAg0/WCaMtmTdpU08rDROxM1ZFjos+Tg2x3lSm7nCbKJeLctCD9HrbObVDXmkMYAFrcA vruCYz3zFFyKb5BjcHklAbuTBb7Jpc5XOFIgY67+QF7Xd/WuunZTjUqs0gpZABn3qlAE9XwcRiQ qXfTALfU3UjKNGr/jdmOtOZkBUOk0UL06ALY6QWEYmTHtNqqQXek6RfS6RFTQ== X-Received: by 2002:a05:6512:1111:b0:5b1:589b:3579 with SMTP id 2adb3069b0e04-5b459108b44mr1569966e87.4.1786772127851; Fri, 14 Aug 2026 22:35:27 -0700 (PDT) Received: from archlinux ([94.180.44.22]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b458c0a033sm932577e87.67.2026.08.14.22.35.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 22:35:27 -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 v4 3/3] wifi: rtw88: rtw8822c: Replace custom DAC IQ sorting with kernel sort Date: Sat, 15 Aug 2026 12:35:19 +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 Replace the custom, nested bubble-sort logic in the calibration loop with direct calls to the kernel's optimized heapsort implementation inside rtw8822c_dac_cal_iq_search(). Implement a safe, overflow-proof s32 comparator using the subtraction of relationals pattern. Since the input values are already properly sign-extended into signed arrays, the custom circular index sorting rules and helper functions completely disappear, reducing lines of code. Signed-off-by: Arsenii Pashchenko --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 6ad90d321..0140f2e64 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" @@ -153,24 +154,14 @@ static void rtw8822c_dac_restore_reg(struct rtw_dev *rtwdev, } } -static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *v1, s32 *v2) +static int rtw8822c_dac_iq_cmp_s32(const void *a, const void *b) { - if (*v1 > *v2) - swap(*v1, *v2); + s32 val_a = *(const s32 *)a; + s32 val_b = *(const s32 *)b; + return (val_a > val_b) - (val_a < val_b); } -static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) -{ - u32 i, j; - - for (i = 0; i < DACK_SN_8822C - 1; i++) { - for (j = 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]); - } - } -} static u32 rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, s32 *vec) { @@ -251,7 +242,7 @@ static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) } 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) { s32 i_max = 0, q_max = 0, i_min = 0, q_min = 0; @@ -286,7 +277,8 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev *rtwdev, "[DACK] q: min=0x%08x, max=0x%08x, delta=0x%08x\n", q_min, q_max, q_delta); - rtw8822c_dac_iq_sort(rtwdev, iv, qv); + 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); if (i_delta > 5 || q_delta > 5) { temp = rtw_read32(rtwdev, 0x2dbc); -- 2.55.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) (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 D62B134752E for ; Sat, 15 Aug 2026 05:46:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786772818; cv=none; b=CYxMp9TUQ+Ufek6ec0EnV86fFJfeF03zKAHy+VuQZSZkmQHSR7iIrwjWinRNcOOzD0e3nsR4bZjvpZhixZwZxDQimjeRAnXfrpJff1cvKRHjndCk8bg7vWqtJF/lGjRYSywKZIhne0Mkn8dSbmCrQokDIdmai8920znaN+1zP/g= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786772818; c=relaxed/simple; bh=wFN/aEIy5u0Oqx1IU2Yf+C56vfAH7D/5v6jrUHIg8pY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bmOr/sxGubvFHHj9x07n8ICsON26R3Emk9lTKyXjFJ+p9pu/Q5hOQ4vUK6OaCGXW+7vfSkt63FTQo9e7VIRArcmxq95vhEPd25M/aCXnJUXuOlCNyymbCNNiIl1QpaM9T+D7Ah3F0MrQm9A0nOZNMFDjWpq/3oj6ZsXZIvgVRLA= 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=VQXNX/oR; arc=none smtp.client-ip=209.85.167.43 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="VQXNX/oR" Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-5b2aa3be376so1336235e87.0 for ; Fri, 14 Aug 2026 22:46:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786772814; x=1787377614; 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=H+q6pnwjD32ZGoePq5J852mbrLt3kF3WnMretQXsbMQ=; b=VQXNX/oRJLQUZE33QbRPIBAGSX1aSpBds/7AhqrERB8fSKHjV0WbgZMNx3sz8OlPu8 l8bLgD6aRV1rh7M1szc/paGfg6fnaHdIAZV8FcQRJcAqkTVocSMhTRM7LhmWebMIQ5mI rz9tzMFJToC2LSJ37n451sS+9pdtk/sCS4/NGQuhGR2XSas5E5vjq/QkYftD2pQA/Wsc ByphHUUxs+Vr+DuZL+a+HIwSJyNjJtD/32MzZeiPFa8CjCVomP6ISYJ96MfU/HFnkHZq 3zqagsweI5xoH+Jk2GMLfvK2CH0ZtaDgwhTPwZn1so85XBiJzC3O2YlBlTXNsrC8Oq6L os2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786772814; x=1787377614; 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=H+q6pnwjD32ZGoePq5J852mbrLt3kF3WnMretQXsbMQ=; b=M3unPZy2beizUyHglRFLMShywbZGFxEh0Hez5dL8UX4vcrz7csBVHix2w793jCSJTb 7iewq30kjS5w2tJCXEUeutaw3wP/szQDp+/peM5ykOqyJzmuHsADP9E3KZ1gYmhAFFMN Ljmp5weJCcrKuu4wXPiVBp7t7etexULp1uKBPZ9r+Z6vUKgXKe4eg7jMiqgXiPePYj9+ xUJnYtuWKU9hCYGlX+S4jH1QhI1qy5YLBdhR87NuLkaU2qcG9o4JBaIAgcoGX0uDGWH7 ig5l08EbpPAKhqVRjPPpujlzvLZhDyoevKEvKXec82qjyWXc4icAN2ECUoB6M2jQ7/z3 /1Gw== X-Forwarded-Encrypted: i=1; AHgh+RpNYyzYL1s1plJOWpWMOO8OEKdJykTvmuaXH4qWxBl/kgNjSaB76BoGd7f8HdqwPg+8IYvgA1hbRBCXkK4=@vger.kernel.org X-Gm-Message-State: AOJu0YwWshbIcjttnthCFzMPKUjf5cItv89s1QGg6krTS6rxoo1beCkl DJGJfzQVApLEMWSV2/KONuE72361TENIPZaqf/WyY4hPU27RXdetuFzb X-Gm-Gg: AR+sD13jIRuB8k9e4jJjviUA8PjBlurSnvcHzq82fMo7Hd6Ga8FLgg7WkvngjSNCaSQ QA3/9KvF3wPhK0OgvFDOnr5/xFBDNTWkwQtoRRtKe/HGG+V1mPQX3AoVPh+4nszJPTx94Pt7G+k aNG15jO03E7n0XAAbUnfbx9lrYAF/SbL0WdINK6RrLcpwd7anemVE6YKoR4aV1Q9HNOeBePoP2Y WyifxFauyKpaDLhf9dIjdXjc5LDGoqXtyM5Gs+LMnQskMAqhVTL8KEQF9Nr6Lkw1c3fvfaqeJFk /nNdAmXOchlE5gkNcWz/zdEYP2Bg9ctN8+7e188tUnf5ZkB2+S2BW9rYTCJnR2zZh0aQEb6sUxv whwcIWnmVAdOvjoChF+Fr2M+El/gKTBZmpOWyJ5iClV15nawI74xdE2Eu8GN1kiYNHt6b4qrmt1 a0H+BQo4cOi6+t/0tpXaqGcyaVRjP9j4C4t63KBv//d0s2MjhV2UNAmO3iZ3mxxENE6GC5oGdKl /CvT2WU7jq+Mgm5NMedF2tim/sM3H8EKXT4QOUr4XmLienVyQWJaQIwHN3+lw== X-Received: by 2002:a05:6512:23a2:b0:5ae:cee7:52bf with SMTP id 2adb3069b0e04-5b459108ae9mr1660538e87.9.1786772813748; Fri, 14 Aug 2026 22:46:53 -0700 (PDT) Received: from archlinux ([94.180.44.22]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b458bed96esm967527e87.40.2026.08.14.22.46.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 22:46:51 -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 v5 3/3] wifi: rtw88: rtw8822c: Replace custom DAC IQ sorting with kernel sort Date: Sat, 15 Aug 2026 12:46:34 +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 Message-ID: <20260815054634.n-vZ8wmCzOFzDTvW5FHxOm4zueovN1zjK_ix0xnRls8@z> Replace the custom, nested bubble-sort logic in the calibration loop with direct calls to the kernel's optimized heapsort implementation inside rtw8822c_dac_cal_iq_search(). Implement a safe, overflow-proof s32 comparator using the subtraction of relationals pattern. Since the input values are already properly sign-extended into signed arrays, the custom circular index sorting rules and helper functions completely disappear, reducing lines of code. Signed-off-by: Arsenii Pashchenko --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 6ad90d321..0140f2e64 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" @@ -153,24 +154,14 @@ static void rtw8822c_dac_restore_reg(struct rtw_dev *rtwdev, } } -static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *v1, s32 *v2) +static int rtw8822c_dac_iq_cmp_s32(const void *a, const void *b) { - if (*v1 > *v2) - swap(*v1, *v2); + s32 val_a = *(const s32 *)a; + s32 val_b = *(const s32 *)b; + return (val_a > val_b) - (val_a < val_b); } -static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) -{ - u32 i, j; - - for (i = 0; i < DACK_SN_8822C - 1; i++) { - for (j = 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]); - } - } -} static u32 rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, s32 *vec) { @@ -251,7 +242,7 @@ static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, s32 *iv, s32 *qv) } 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) { s32 i_max = 0, q_max = 0, i_min = 0, q_min = 0; @@ -286,7 +277,8 @@ static void rtw8822c_dac_cal_iq_search(struct rtw_dev *rtwdev, "[DACK] q: min=0x%08x, max=0x%08x, delta=0x%08x\n", q_min, q_max, q_delta); - rtw8822c_dac_iq_sort(rtwdev, iv, qv); + 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); if (i_delta > 5 || q_delta > 5) { temp = rtw_read32(rtwdev, 0x2dbc); -- 2.55.0