From nobody Tue Sep 29 14:53:49 2026 Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) (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 09A37199FAB for ; Fri, 7 Aug 2026 00:01:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786060879; cv=none; b=oiCGh/KyZpe81/jdbyFYmLgrVRwYbLPxpX1LptY5O5oUfC3Ozs2j9Ug4OImeOMNttJRmSueBxSeBQtwzmrIkH2AQGbfzg71z676CW0+WZBrEK9uGgKBVIHe2F6P7X0qhwc6aTxYTsANNTH/9j+LsyKs2mQgoB7Hrka7hyDIuoNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786060879; c=relaxed/simple; bh=TQ8cIteOUoh0RN9lFPHnaSOVGs8QySDAURgXCYGyLUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lB6XnLR+bm87sQ81XprMbdgvm+d6fy3OoQQXH+regwwJnE3ZQ2qUygIvgORvntHue9NuyGarBcLdHyE3XWZ+aafTK7OrQmYlAwKNfmPpxmz22vkzNFWRhykckhuq+AEOkTs3Alaal8wFiuOeFknilbGR1wzZdpjqQ7SZuxOdeUQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arimil.com; spf=pass smtp.mailfrom=arimil.com; dkim=pass (2048-bit key) header.d=arimil.com header.i=@arimil.com header.b=b0C+fZez; arc=none smtp.client-ip=209.85.222.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arimil.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arimil.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=arimil.com header.i=@arimil.com header.b="b0C+fZez" Received: by mail-qk1-f175.google.com with SMTP id af79cd13be357-92e55b62640so150996285a.0 for ; Thu, 06 Aug 2026 17:01:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arimil.com; s=google; t=1786060877; x=1786665677; 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=uxycei7+Mdbc9lEQ9ESQixLANLMD+YSTOeLWke3pkoY=; b=b0C+fZezNHGCOyDA1qqDGgqaxp+fWHOqJeaY/UAq3CmzDZyC4NMRjzHHIQaHBweCwh hpuFW6G51Uj3v9XsRLfR8sN9yTHaXAwWH/xjHI6p8ZKzMNxeF2GU/VHMAwq7kQa7sdCN vwwD/dqYMyiSRmDJpex51JCVQ/L1qBMnY0YHiqCDwkyFf3JcPuR2OvMpbApjxe4dZDJq kdlP6w3WVjtrWDNee+3gWpXw5EMFRARK0YicdtOeHupOlsZd9whBtCS1fAUZ4rJZn8yw joUuxEYF2WF08v1bHA3EK0iUtO/z7PofIz8fCbcCk/5zha3D/xy33l0Xm4/fSoAgOU0J X+qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786060877; x=1786665677; 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=uxycei7+Mdbc9lEQ9ESQixLANLMD+YSTOeLWke3pkoY=; b=YGlVuRswdRCcINqYJCrSRFv2wTuK278u+lBBBuFypD/d/RcGdbeW0arRpNdzxWX2uF scQ8fqSnRsvA4Y4LPNTnZCiHqhiIz+US/DATVOubEhK9Xz4jpyo9NkZ+96AVfdmW5zcg TiD/++EuhV1OG/VfNqDboL0cvbhlUt+E59iB+iWaBYqqcQhYit8yvxDSyevIfCY5CudG rtCQNwrT1V7E7WxL7NYVzy3M+d+muQ45FrHwHC7Czpv8h3ea8lRyiNCkZpv5D0FpgyuB a7AZndzepBCa1zp/6jEPLpeSgxHE+67Etb5viVOFq0HdNZsxcSmn97mziKbygowowANt OfmQ== X-Forwarded-Encrypted: i=1; AHgh+Rpfry9Q3psIzXR807BysGMPBa/1pkCJAW4JwJHalce5PwQmS1rBjg3h5zZklXk/Kg4VGACZWVnEJeZUcnk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2cCccil38+y9iap4yLWi7rMn0sNihfRWy+H32DkDstJBFfpqU LOtnXyOzk2a1Pva2k/Qb1WK83hYQbPUBjAntMb2U5tidufo282A5vWWhTRJsF4p0zzM= X-Gm-Gg: AR+sD111YXvgNLINkINEvdlj9M4iM3clxeiaTu7tpUW8fXaKyxtjvXHYU6WQ387omA9 nT7F0drkW25zZro/BgR00sR5YsK5BdZLkkfAMcKhT0WY+sMFtixdHacyuE+11crwlVV1pRKJh9S v0u/nXVr8vCtVBxmCNTKNULKX2dkfuC/eE/WIxLIM+c8/Fy8Uj7jV+qZp9F1WsxKpmuQYPJFKSW DY4X1a2eShcsgHiddZXMLCoeSKJkKZxQ6Kp0kt1CtWiKtD7Aov6POlivc5I7gkBtvmKTsRLx8Mu StOY3KOBXfTjsS4/jXtnIgoSYhk4xNR6JbW8Lp1nbuZ20BkocHhRf0u6fyiKys9XeUZsAgtm22A b4In9sOHASbfIA87UR7kVhH7W4s5HBL8qr4zUuxrOeV8iA1+YusZxYJ4ke/R7Wrj6OzHKlaQUQV uathdw2OhbLxiC+Xy99JQGr7aqcumxAj1JomshHpAo0bflBi8hWmyxMADsJ5eYD9Ac+KvctdW1J S9P2jZ3LklWjsvyc6EZpmsd5m89kLcBjrJiJWc/x170 X-Received: by 2002:a05:620a:28cd:b0:925:56bc:b8bb with SMTP id af79cd13be357-93648fafb5bmr1890073085a.9.1786060875234; Thu, 06 Aug 2026 17:01:15 -0700 (PDT) Received: from camelot.arimil.com (24.229.171.193.res-cmts.sm3.ptd.net. [24.229.171.193]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9366e279f0esm27341485a.38.2026.08.06.17.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 17:01:14 -0700 (PDT) From: Arie Miller To: Guenter Roeck Cc: Aleksa Savic , Will Smith , Jonathan Corbet , Shuah Khan , linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Arie Miller Subject: [PATCH 1/3] hwmon: (asus_rog_ryujin) Add per-device configuration Date: Thu, 6 Aug 2026 20:01:05 -0400 Message-ID: <20260807000107.1786892-2-renari@arimil.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260807000107.1786892-1-renari@arimil.com> References: <20260807000107.1786892-1-renari@arimil.com> 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" Move model-specific report offsets and capabilities into a device information structure. This prepares the driver for coolers which use a different report layout or do not include the external fan controller, while preserving the existing Ryujin II 360 behavior. Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Arie Miller --- drivers/hwmon/asus_rog_ryujin.c | 72 ++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/drivers/hwmon/asus_rog_ryujin.c b/drivers/hwmon/asus_rog_ryuji= n.c index 10a1f5aca988..b86b87e33615 100644 --- a/drivers/hwmon/asus_rog_ryujin.c +++ b/drivers/hwmon/asus_rog_ryujin.c @@ -18,15 +18,25 @@ #define USB_VENDOR_ID_ASUS_ROG 0x0b05 #define USB_PRODUCT_ID_RYUJIN_AIO 0x1988 /* ASUS ROG RYUJIN II 360 */ =20 +struct rog_ryujin_device_info { + u8 temp_offset; + u8 pump_speed_offset; + u8 fan_speed_offset; + u8 duty_channel; + bool has_controller; +}; + +static const struct rog_ryujin_device_info rog_ryujin_ii_360_info =3D { + .temp_offset =3D 3, + .pump_speed_offset =3D 5, + .fan_speed_offset =3D 7, + .duty_channel =3D 0, + .has_controller =3D true, +}; + #define STATUS_VALIDITY 1500 /* ms */ #define MAX_REPORT_LENGTH 65 =20 -/* Cooler status report offsets */ -#define RYUJIN_TEMP_SENSOR_1 3 -#define RYUJIN_TEMP_SENSOR_2 4 -#define RYUJIN_PUMP_SPEED 5 -#define RYUJIN_INTERNAL_FAN_SPEED 7 - /* Cooler duty report offsets */ #define RYUJIN_PUMP_DUTY 4 #define RYUJIN_INTERNAL_FAN_DUTY 5 @@ -81,6 +91,7 @@ static const char *const rog_ryujin_speed_label[] =3D { struct rog_ryujin_data { struct hid_device *hdev; struct device *hwmon_dev; + const struct rog_ryujin_device_info *info; /* For reinitializing the completions below */ spinlock_t status_report_request_lock; struct completion cooler_status_received; @@ -112,6 +123,8 @@ static int rog_ryujin_pwm_to_percent(long val) static umode_t rog_ryujin_is_visible(const void *data, enum hwmon_sensor_types type, u32 attr, int channel) { + const struct rog_ryujin_data *priv =3D data; + switch (type) { case hwmon_temp: switch (attr) { @@ -123,6 +136,8 @@ static umode_t rog_ryujin_is_visible(const void *data, } break; case hwmon_fan: + if (channel >=3D 2 && !priv->info->has_controller) + return 0; switch (attr) { case hwmon_fan_label: case hwmon_fan_input: @@ -132,6 +147,8 @@ static umode_t rog_ryujin_is_visible(const void *data, } break; case hwmon_pwm: + if (channel >=3D 2 && !priv->info->has_controller) + return 0; switch (attr) { case hwmon_pwm_input: return 0644; @@ -198,12 +215,14 @@ static int rog_ryujin_get_status(struct rog_ryujin_da= ta *priv) if (ret < 0) return ret; =20 - /* Retrieve controller status (speeds) */ - ret =3D - rog_ryujin_execute_cmd(priv, get_controller_speed_cmd, GET_CMD_LENGTH, - &priv->controller_status_received); - if (ret < 0) - return ret; + if (priv->info->has_controller) { + /* Retrieve controller status (speeds) */ + ret =3D rog_ryujin_execute_cmd(priv, get_controller_speed_cmd, + GET_CMD_LENGTH, + &priv->controller_status_received); + if (ret < 0) + return ret; + } =20 /* Retrieve cooler duty */ ret =3D @@ -212,12 +231,14 @@ static int rog_ryujin_get_status(struct rog_ryujin_da= ta *priv) if (ret < 0) return ret; =20 - /* Retrieve controller duty */ - ret =3D - rog_ryujin_execute_cmd(priv, get_controller_duty_cmd, GET_CMD_LENGTH, - &priv->controller_duty_received); - if (ret < 0) - return ret; + if (priv->info->has_controller) { + /* Retrieve controller duty */ + ret =3D rog_ryujin_execute_cmd(priv, get_controller_duty_cmd, + GET_CMD_LENGTH, + &priv->controller_duty_received); + if (ret < 0) + return ret; + } =20 priv->updated =3D jiffies; return 0; @@ -289,6 +310,7 @@ static int rog_ryujin_write_fixed_duty(struct rog_ryuji= n_data *priv, int channel return ret; =20 memcpy(set_cmd, set_cooler_duty_cmd, SET_CMD_LENGTH); + set_cmd[2] =3D priv->info->duty_channel; =20 /* Cooler duties are set as 0-100% */ val =3D rog_ryujin_pwm_to_percent(val); @@ -394,10 +416,12 @@ static int rog_ryujin_raw_event(struct hid_device *hd= ev, struct hid_report *repo =20 if (data[1] =3D=3D RYUJIN_GET_COOLER_STATUS_CMD_RESPONSE) { /* Received coolant temp and speeds of pump and internal fan */ - priv->temp_input[0] =3D - data[RYUJIN_TEMP_SENSOR_1] * 1000 + data[RYUJIN_TEMP_SENSOR_2] * 100; - priv->speed_input[0] =3D get_unaligned_le16(data + RYUJIN_PUMP_SPEED); - priv->speed_input[1] =3D get_unaligned_le16(data + RYUJIN_INTERNAL_FAN_S= PEED); + priv->temp_input[0] =3D data[priv->info->temp_offset] * 1000 + + data[priv->info->temp_offset + 1] * 100; + priv->speed_input[0] =3D + get_unaligned_le16(data + priv->info->pump_speed_offset); + priv->speed_input[1] =3D + get_unaligned_le16(data + priv->info->fan_speed_offset); =20 if (!completion_done(&priv->cooler_status_received)) complete_all(&priv->cooler_status_received); @@ -476,6 +500,7 @@ static int rog_ryujin_probe(struct hid_device *hdev, co= nst struct hid_device_id return -ENOMEM; =20 priv->hdev =3D hdev; + priv->info =3D (const struct rog_ryujin_device_info *)id->driver_data; hid_set_drvdata(hdev, priv); =20 /* @@ -546,7 +571,8 @@ static void rog_ryujin_remove(struct hid_device *hdev) } =20 static const struct hid_device_id rog_ryujin_table[] =3D { - { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_AIO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_AIO), + .driver_data =3D (kernel_ulong_t)&rog_ryujin_ii_360_info }, { } }; =20 --=20 2.55.0 From nobody Tue Sep 29 14:53:49 2026 Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) (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 5CD8623B61B for ; Fri, 7 Aug 2026 00:01:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786060881; cv=none; b=Kj61zB57AkRg9U5HwugmZsicl1RnDBAYTfeU0SQiQyHdxDADJ6wv87b5HKsu2++4EoMNSagPj0hm0vxzfv7USrwW0ur9a7WpDnYZdo4kgxX49u2pwFSBjZ2DEwzmKi5+ekbPU/fkVd7U0Ry1Kv/qWZDD/FW84u9eryOC231+Rxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786060881; c=relaxed/simple; bh=Z50H53I/SO7w3PdRxuVnOf38cTMq46oG3e09WmmO2vU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FmjwcnEKyJyIsYxOSA0OtLNyu4iBAcwXvq9QGzrbPL/NPV5cp4cYtjryIpxQLo/LtC9+p8RBwXu4R3ZXPWEVYmXLMS84iT18ezvQb0jEpSlUKlMNF2mC3eZKbX2AaZREei3fS/bukXjYldqkn84ZNYor69BRZXlo8L+w4zHwKyY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arimil.com; spf=pass smtp.mailfrom=arimil.com; dkim=pass (2048-bit key) header.d=arimil.com header.i=@arimil.com header.b=frVDlgML; arc=none smtp.client-ip=209.85.222.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arimil.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arimil.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=arimil.com header.i=@arimil.com header.b="frVDlgML" Received: by mail-qk1-f171.google.com with SMTP id af79cd13be357-92e99ef0902so158680085a.2 for ; Thu, 06 Aug 2026 17:01:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arimil.com; s=google; t=1786060878; x=1786665678; 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=/ISpxvCM/L/zFQQejjgVzs6fOe2HVSJayj2d6i61jn0=; b=frVDlgMLPOujAZU28qhuUmPw4IbbkDjLHICPLvIR7aYKXqwPzxGtGZvBhDB2jw5LOn /4Pp+LcJAYoyqpjTSA2yayukCt7q7yh9kGmfvcUkSXEEKBMk5rvhwaMTwPrvgwxI7Oe9 2wpv7GLw4MdXqw3iaH3v+GTutClE3W8aCo8xwtRfheTiZ+FFVGSz8J6etkfNBVT0O325 BkXSHKIyx4wNj8yFtEpYjBvjfIpS0yg8by8bzx2iNdAry0nsVPT/uWNCQB13NRNwGn78 2Vj98vHLPJMfZI6kEz2C8rmmItdatzf/aupPS1vJk7RuQk/CfrYXb0aOW7Bf8rY07lf8 vTuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786060878; x=1786665678; 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=/ISpxvCM/L/zFQQejjgVzs6fOe2HVSJayj2d6i61jn0=; b=o6C17ml0c4JDEQTLmgP1jZRGfziekmpDnQe9qFXg9UtRUKc6jYom+SeJjCXET9M4nJ 1RAJYynpBs/MP749gpwmxOK7ZyJZ1BTckIO+F2ZaRLnKIX3u2R+OGPmNyUUPAS9D6SsV oWXABfnvRgWOVqp7VJhx7V2rmlqyY4xiKyAcYGFWu5j2tIMXkKAWcecji09RaJHjEI6d clGHxizoI8dBaeYddIWp3R7MW6iXtJ03sbh/3iDagTHGedhMnufCPQfTkq0VpmooCDXR kI2VuV9aqtr5rhqrSpp6hMURzVmzMo9UwgYrtBfMKMEWA5r2Cot/BETX4z+bX6OgNQfU TP5A== X-Forwarded-Encrypted: i=1; AHgh+RoLuhsKxj2ZCLWBS+21LS6fxEsgs7GAZGvBQeOPrrjw3D5NXtWg6HKoolB8VMedKOJkrC+Bi6+QsQEVDvo=@vger.kernel.org X-Gm-Message-State: AOJu0Yx609BKVjmoapP6HF1Nh5Lbn3ZgfWViAmjS5P2eJZcun6yUeU6b vhuVI4evojZRnA+nH6eah7+RZ4wEMv5x81kdREBruD0RGK12QJI+am47iJuU69Y48hw= X-Gm-Gg: AR+sD119tenenEbttnDICKeSkpCr+iSAZFPllW7YapS3+L9aiPVDCWJdp1dv+SSKpQc Ex0M5W0sdaaagUm7qn+HVq9OC5cqWwYOwujHLFReiUjroJc0BntjZEGhC/1OA422KWAycpVb7si 7bD13ixjV+ohwcvoLB52DwUcFFcCROlRjAiQ+/mITrk2K2u6PuAlKn1XX3SgNdUJQLtikJwXL7K Oe18PGtO3uxwV4dHIY+AepnCNgW1Gtq7ciiMX4z6GKKOrl9HIzKIWDubslJ1V+pXSjv13SE0lWD KP2K5VYRK0vD/Is2HqrRXLjhFaytIZ0+VblUGMjmhCy2hhRxc0+cEHuj7O+Zetk549aWC9OvTaW DTD3UI9R9M4VHOokgMUzcmIvFbs3YOTzmQ3M2n2nwru6Iv+0GcuO7mZJ4H/Cs8oIgdL35QtPlNw mUsvQsNYbtVodbm+jMlyQoLtOrn9dEYyNJaUq736PCfHL8sWNUgQWAfvFYai4RbY8MaX4uThMTx GegImDezbnP1Fya8/I/n6gslSOopjRUww== X-Received: by 2002:a05:620a:2b86:b0:934:9011:596c with SMTP id af79cd13be357-936490e7a9cmr1911171785a.24.1786060877904; Thu, 06 Aug 2026 17:01:17 -0700 (PDT) Received: from camelot.arimil.com (24.229.171.193.res-cmts.sm3.ptd.net. [24.229.171.193]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9366e279f0esm27341485a.38.2026.08.06.17.01.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 17:01:17 -0700 (PDT) From: Arie Miller To: Guenter Roeck Cc: Aleksa Savic , Will Smith , Jonathan Corbet , Shuah Khan , linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Arie Miller Subject: [PATCH 2/3] hwmon: (asus_rog_ryujin) Add ROG Ryujin III support Date: Thu, 6 Aug 2026 20:01:06 -0400 Message-ID: <20260807000107.1786892-3-renari@arimil.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260807000107.1786892-1-renari@arimil.com> References: <20260807000107.1786892-1-renari@arimil.com> 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" The ROG Ryujin III uses different report offsets and a different cooler-duty channel from the Ryujin II. It also lacks the separate external fan controller supplied with the older model. Add model data and USB IDs for the Extreme and EVA Edition variants. Skip controller commands and hide the unavailable controller hwmon channels for these devices. Update the driver documentation, Kconfig text, and module description accordingly. Link: https://github.com/aleksamagicka/asus_rog_ryujin-hwmon/pull/9 Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Arie Miller --- Documentation/hwmon/asus_rog_ryujin.rst | 24 +++++++++++++----------- drivers/hwmon/Kconfig | 4 ++-- drivers/hwmon/asus_rog_ryujin.c | 18 ++++++++++++++++-- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/Documentation/hwmon/asus_rog_ryujin.rst b/Documentation/hwmon/= asus_rog_ryujin.rst index 9f77da070022..cfdfe3712f19 100644 --- a/Documentation/hwmon/asus_rog_ryujin.rst +++ b/Documentation/hwmon/asus_rog_ryujin.rst @@ -6,6 +6,8 @@ Kernel driver asus_rog_ryujin Supported devices: =20 * ASUS ROG RYUJIN II 360 +* ASUS ROG RYUJIN III EXTREME +* ASUS ROG RYUJIN III EVA EDITION =20 Author: Aleksa Savic =20 @@ -16,10 +18,10 @@ This driver enables hardware monitoring support for the= listed ASUS ROG RYUJIN all-in-one CPU liquid coolers. Available sensors are pump, internal and ex= ternal (controller) fan speed in RPM, their duties in PWM, as well as coolant tem= perature. =20 -Attaching external fans to the controller is optional and allows them to be -controlled from the device. If not connected, the fan-related sensors will -report zeroes. The controller is a separate hardware unit that comes bundl= ed -with the AIO and connects to it to allow fan control. +The RYUJIN II includes a separate external fan controller. Attaching fans = to +the controller is optional and allows them to be controlled from the devic= e. +If not connected, the controller-related sensors will report zeroes. The +RYUJIN III does not expose these controller channels. =20 The addressable LCD screen is not supported in this driver and should be controlled through userspace tools. @@ -33,15 +35,15 @@ supports hot swapping. Sysfs entries ------------- =20 -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D fan1_input Pump speed (in rpm) fan2_input Internal fan speed (in rpm) -fan3_input External (controller) fan 1 speed (in rpm) -fan4_input External (controller) fan 2 speed (in rpm) -fan5_input External (controller) fan 3 speed (in rpm) -fan6_input External (controller) fan 4 speed (in rpm) +fan3_input External (controller) fan 1 speed (in rpm, RYUJIN II only) +fan4_input External (controller) fan 2 speed (in rpm, RYUJIN II only) +fan5_input External (controller) fan 3 speed (in rpm, RYUJIN II only) +fan6_input External (controller) fan 4 speed (in rpm, RYUJIN II only) temp1_input Coolant temperature (in millidegrees Celsius) pwm1 Pump duty pwm2 Internal fan duty -pwm3 External (controller) fan duty -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D +pwm3 External (controller) fan duty (RYUJIN II only) +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index e60bfc31bbad..c7640fcb32e4 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -293,11 +293,11 @@ config SENSORS_ASC7621 will be called asc7621. =20 config SENSORS_ASUS_ROG_RYUJIN - tristate "ASUS ROG RYUJIN II 360 hardware monitoring driver" + tristate "ASUS ROG RYUJIN hardware monitoring driver" depends on HID help If you say yes here you get support for the fans and sensors of - the ASUS ROG RYUJIN II 360 AIO CPU liquid cooler. + supported ASUS ROG RYUJIN II and III AIO CPU liquid coolers. =20 This driver can also be built as a module. If so, the module will be called asus_rog_ryujin. diff --git a/drivers/hwmon/asus_rog_ryujin.c b/drivers/hwmon/asus_rog_ryuji= n.c index b86b87e33615..5bc60c6036de 100644 --- a/drivers/hwmon/asus_rog_ryujin.c +++ b/drivers/hwmon/asus_rog_ryujin.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * hwmon driver for Asus ROG Ryujin II 360 AIO cooler. + * hwmon driver for Asus ROG Ryujin AIO coolers. * * Copyright 2024 Aleksa Savic */ @@ -17,6 +17,8 @@ =20 #define USB_VENDOR_ID_ASUS_ROG 0x0b05 #define USB_PRODUCT_ID_RYUJIN_AIO 0x1988 /* ASUS ROG RYUJIN II 360 */ +#define USB_PRODUCT_ID_RYUJIN_III_EXTREME 0x1bcb +#define USB_PRODUCT_ID_RYUJIN_III_EVA 0x1ade =20 struct rog_ryujin_device_info { u8 temp_offset; @@ -34,6 +36,14 @@ static const struct rog_ryujin_device_info rog_ryujin_ii= _360_info =3D { .has_controller =3D true, }; =20 +static const struct rog_ryujin_device_info rog_ryujin_iii_info =3D { + .temp_offset =3D 5, + .pump_speed_offset =3D 7, + .fan_speed_offset =3D 10, + .duty_channel =3D 1, + .has_controller =3D false, +}; + #define STATUS_VALIDITY 1500 /* ms */ #define MAX_REPORT_LENGTH 65 =20 @@ -573,6 +583,10 @@ static void rog_ryujin_remove(struct hid_device *hdev) static const struct hid_device_id rog_ryujin_table[] =3D { { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_AIO), .driver_data =3D (kernel_ulong_t)&rog_ryujin_ii_360_info }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_III_EXTREM= E), + .driver_data =3D (kernel_ulong_t)&rog_ryujin_iii_info }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_III_EVA), + .driver_data =3D (kernel_ulong_t)&rog_ryujin_iii_info }, { } }; =20 @@ -602,4 +616,4 @@ module_exit(rog_ryujin_exit); =20 MODULE_LICENSE("GPL"); MODULE_AUTHOR("Aleksa Savic "); -MODULE_DESCRIPTION("Hwmon driver for Asus ROG Ryujin II 360 AIO cooler"); +MODULE_DESCRIPTION("Hwmon driver for Asus ROG Ryujin AIO coolers"); --=20 2.55.0 From nobody Tue Sep 29 14:53:49 2026 Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) (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 6826725B08D for ; Fri, 7 Aug 2026 00:01:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786060882; cv=none; b=kMITMVTlU9lQ9m4HeFOg1ykZPdMVzSZqtyoyz0thnUhup08feFu4Y+QIpUhhzRtW4tIThumKhyvi+874gRlYC1L4V/SZDCOHgjIuTTGvO6C+WjHNV0lXd7nbEFfOdeXXieN0WhB43Owt1sfhuis90a0nv9F53UvM7OZASkGbemk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786060882; c=relaxed/simple; bh=k2RXB/lBpEZb0Xvy9dDABovXMTpTDSPEDT43rkEWuCw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JyxhnsX1lBjs3iRwTZylB80KWBZA0Ezg203PuONB7v39nQSEioLB5fPCR6YCJMecm1Pv8tPChGa7y2cnt/8UHROx/c4g2BDDEC6lhDbgDbAq0J42lc7WQOfr4uM4vmEV+gKWWPvTbjyreCf2qpVT2E2SlVx6yBecZDFnXER3YCU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arimil.com; spf=pass smtp.mailfrom=arimil.com; dkim=pass (2048-bit key) header.d=arimil.com header.i=@arimil.com header.b=lSGdeLJi; arc=none smtp.client-ip=209.85.222.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arimil.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arimil.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=arimil.com header.i=@arimil.com header.b="lSGdeLJi" Received: by mail-qk1-f171.google.com with SMTP id af79cd13be357-92e6391b114so220936485a.3 for ; Thu, 06 Aug 2026 17:01:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arimil.com; s=google; t=1786060879; x=1786665679; 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=rIhsby11fc8DrjdIUcLHC64tuvgWtC8uYK9JmHgOEVw=; b=lSGdeLJiLEhiyeZz2/gsGf4nJKUtq9adeB17lZ5ejVHUcOd+mLQ7qE2GNTPdfSVvac +HyXAkd1RQqP2/kbLx+Bss2TlN6R0t5rltoOCcBi/IrApA+5h5b1Vww1ZKFtuaFXK0WH ZJXAbdBbEW58+xkUQN1sNYme9vTuUGECndpCkXT3f22HOVOgtgMPdF+uaFpYqS2ZTcgq i1FCJkm0Y208IYeYv8y/kbwSaF8kDQ1QFPWZRxkFIXb/NZyU5RfXVxNm8FTqmZAkOKkd uN5X6NPgqewipRGOAORixfEDgZCrzWk+0eBSF98dbzY/bogDWwfESGlssUq9CCDwGf72 AA/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786060879; x=1786665679; 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=rIhsby11fc8DrjdIUcLHC64tuvgWtC8uYK9JmHgOEVw=; b=ZpTBDCBIdoiciPyIq6kMZduqtkEND3Q3bb+IWCv4MF1OGqXDUjsayfsuxEiTZspcNb 6DF2dBthn7qMveC6UMaXkc4OSVR4VzBXEl1lrgCZ8Eink+QdfV1XY4FX1ym8RO2Bur+y saFz29OcYHJfXxTy8c8baTMDc7XCMC+ZJUafIM/+BlKswCdD1AviR6a0n+iKyYRz4FQG KsBiFzhXFoq/MHeRZ8SLeDGCNhPdwc3MJdGHt0uaQL8wjyaSIt+haMr4BejpnZBWPtkz WYHtGCQArqPgbRz6x49BmhV4zG3R8RkpeGN1EjZlGljzB+vCo09o6Ksfa3Frc1lZeaLS 7ikQ== X-Forwarded-Encrypted: i=1; AHgh+Rpy2MTkou3RQRh1ANitl25hj1Tlk+X6CsW2RTiZe9XnXkqLnxlRTPKjPgju5jGAAwVp7EqOMoksZAq5O6E=@vger.kernel.org X-Gm-Message-State: AOJu0YwavsEmTT7e/u6mMY6iaBWw7OksI8zjwkuYJDvZ5mh7UTw3/9my AFw/s4TwNRu1u8XJbJZD4xvW+RgIxScHWO+8//Uph9sdPoQRLyj4jdgQ9PtyA1byag4= X-Gm-Gg: AR+sD12+Cmh8MNaIxrKGU9qZWNCmQxpA/mYS91gvIlUIojdGJOVuEVgVeJv429UpImm BYtCyZ0STjIXIpOIADclAh6A5BrJUDZeM+D1YjmmESfkalxSk2BLpfZHCKypylisQN5ObilZNif kRqZTDsxxwKeKCjqRGfWxSYDjBnN/T3k0SepUp8PczSURPNpcNq+KN29/mOuXuKG3LMKh4itgeV El2JcRfF3jPSOxe2TdmUbSVFXNH3O73t8zP0R5QXae+nFE0UIchOzGUe8ihMrqySrazRVCH4VGd YPRdPGyTitEdOQodpJYJpOI71I9wnJxq9X4iRTtKGqtoLyi/7Rlp2sRNhNdRhSxDfUOSX7HuYIX jbuIVO3N8xv+wRTMCdJsv+knxxgo6kgmDVeuSo2SjOAkWRImHWaUG4+j3OcUQ65SkWq0tf4c820 EI8giLIRIXzz1NWaczgqG0YgEQqHgnJLSrk2WnAGQGjLFgy7RAQK2j3dvg7/yWntX9zEAtfu7Ui +UY5QPEZVp1XniO0vCf4In1z3QL3NC3jOkfXbT/XtJA X-Received: by 2002:a05:620a:29c9:b0:936:5771:2b42 with SMTP id af79cd13be357-93666401242mr639770185a.10.1786060879234; Thu, 06 Aug 2026 17:01:19 -0700 (PDT) Received: from camelot.arimil.com (24.229.171.193.res-cmts.sm3.ptd.net. [24.229.171.193]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9366e279f0esm27341485a.38.2026.08.06.17.01.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 17:01:18 -0700 (PDT) From: Arie Miller To: Guenter Roeck Cc: Aleksa Savic , Will Smith , Jonathan Corbet , Shuah Khan , linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Arie Miller Subject: [PATCH 3/3] hwmon: (asus_rog_ryujin) Add ROG Ryujin III White Edition Date: Thu, 6 Aug 2026 20:01:07 -0400 Message-ID: <20260807000107.1786892-4-renari@arimil.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260807000107.1786892-1-renari@arimil.com> References: <20260807000107.1786892-1-renari@arimil.com> 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" From: Will Smith The ROG Ryujin III White Edition uses the same report layout as the other supported Ryujin III variants. Add its USB device ID and list it in the driver documentation. The device was tested with the driver on the author's hardware. Link: https://github.com/aleksamagicka/asus_rog_ryujin-hwmon/pull/10 Signed-off-by: Will Smith Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Arie Miller --- Documentation/hwmon/asus_rog_ryujin.rst | 1 + drivers/hwmon/asus_rog_ryujin.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Documentation/hwmon/asus_rog_ryujin.rst b/Documentation/hwmon/= asus_rog_ryujin.rst index cfdfe3712f19..b0d7ce8dd921 100644 --- a/Documentation/hwmon/asus_rog_ryujin.rst +++ b/Documentation/hwmon/asus_rog_ryujin.rst @@ -8,6 +8,7 @@ Supported devices: * ASUS ROG RYUJIN II 360 * ASUS ROG RYUJIN III EXTREME * ASUS ROG RYUJIN III EVA EDITION +* ASUS ROG RYUJIN III WHITE EDITION =20 Author: Aleksa Savic =20 diff --git a/drivers/hwmon/asus_rog_ryujin.c b/drivers/hwmon/asus_rog_ryuji= n.c index 5bc60c6036de..9b34c6e06bf7 100644 --- a/drivers/hwmon/asus_rog_ryujin.c +++ b/drivers/hwmon/asus_rog_ryujin.c @@ -19,6 +19,7 @@ #define USB_PRODUCT_ID_RYUJIN_AIO 0x1988 /* ASUS ROG RYUJIN II 360 */ #define USB_PRODUCT_ID_RYUJIN_III_EXTREME 0x1bcb #define USB_PRODUCT_ID_RYUJIN_III_EVA 0x1ade +#define USB_PRODUCT_ID_RYUJIN_III_WHITE 0x1ada =20 struct rog_ryujin_device_info { u8 temp_offset; @@ -587,6 +588,8 @@ static const struct hid_device_id rog_ryujin_table[] = =3D { .driver_data =3D (kernel_ulong_t)&rog_ryujin_iii_info }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_III_EVA), .driver_data =3D (kernel_ulong_t)&rog_ryujin_iii_info }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS_ROG, USB_PRODUCT_ID_RYUJIN_III_WHITE), + .driver_data =3D (kernel_ulong_t)&rog_ryujin_iii_info }, { } }; =20 --=20 2.55.0