From nobody Tue Sep 29 04:39:47 2026 Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) (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 7C5E942883B for ; Wed, 12 Aug 2026 10:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786530943; cv=none; b=fEM9svRUicOk+MY+axHlFAeKyJJJ3JeBoeG/EGqOeIPjQ3HgucEFpJmieteJre6bTH1FejO42G6PyKzZASFoz1T9Q7smFq2siXqQhSiUP0j6SD8lfxa8pxhteBrllX7xC+oh2VwA38W6x5sm+lutddG7gN5uATHCEfo1gBQwTgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786530943; c=relaxed/simple; bh=GlzdpYnRslH/TnObZGBK0rnYo0AfyckpQ81/QlcSZoY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rW0ldUhlseB3iAzBKBEC5DWuaMrJ1jQzyLTasHT4+Nk1X+QaN6XUsFkOhwWaXZsnTc3MXi6mpsp6GnkS5zcE7pWb/0lVaNJ6ZHckP2BFqVFY/GWT4Pymc09ePG7zIA4LzJxs1hLRv0pJRl9C6o6lMEq8BRdY32iXHxNc4HvL3ZU= 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=nP2P1Hso; arc=none smtp.client-ip=209.85.160.180 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="nP2P1Hso" Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-51c4436d02cso5253581cf.1 for ; Wed, 12 Aug 2026 03:35:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arimil.com; s=google; t=1786530940; x=1787135740; 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=YqDexmwCkxK5cGoRgv9/ZOTLVH+NFOtiGbbUjmtnvFQ=; b=nP2P1HsoC8UV98rHPT3R5vzuOFRR3MVIPS1i1RUWG70bot0JxdpmgnTMHbrlkIiqOm 53sk08nS/rvz9bZAfm1mWdL92Yz6LH+uRa1zEOC+HNwSdvofkT9PKYiMNgbD6DdepFOI QbisPbuW8YX8rFsrIHcPsbQwEEBm+WP2vdhaOHHOvk6CMzPIeWyoRAlMoe2pbdCrSi+9 12Q7DFm29yv0Q5GANOo3IwcDN/TmsLhEgPfD2jI777Y3m7TI2y4mi4nROSNMBRFY+QwY hlLxnMSAyVBjNvaDfCyGBFyn8Ft02GksThidEO2lQjT4qQkCrpbZA2EOgGmTJHvbNrB5 1dVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786530940; x=1787135740; 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=YqDexmwCkxK5cGoRgv9/ZOTLVH+NFOtiGbbUjmtnvFQ=; b=YTrOkCAf2LjkaqRCspz1vH+ikzUFmX8nhmuHBrztCp1a9+I+VFJZG5xW8QIJ4Q7vMO fExN6kXW1T56shrXv2lj37kbXjocaJ1EZPMYj7+b0nk08uvNGNh84deaAfKfovLl9TQq F49tptD5u5APa07W2Xtvs6yUS0NM19jr6TcrrDlfxOyHrduKJ4M4VIvzPvZBqZHfWa4D H2grqtsm9IMtnw7SilQQumhe0PSqQ0KO50lbEe3qV8qbQGjdBn/GMLtOQ5xSvBBU/Y3F 64GIfTPFQ3yhQ32F8DbjsZh/z3IkPxJ7TVEmm4j7YYUdYsXDQ1kz7Duno1diOFD8ESru 5aEQ== X-Forwarded-Encrypted: i=1; AHgh+RoL4+sHAHRDOSHKiOkLsuFuzMbxzMYaqMYcJDNRbL+rDAMcBN6rPqSA5Qx9n6T6/O45duNDWx25P31kMXs=@vger.kernel.org X-Gm-Message-State: AOJu0YzdwycUSvaTY3TLWXq6NUV6nzG5t+dqF8RD6C8PrIlr1eSl6DiF RbZQfcaxHiLX4TjWP1/8pOBxDwv7TQSIQN5IgXeyY3ehnXUqFEkrcVUFI1P3sK58xF4= X-Gm-Gg: AR+sD10ZzP2AYmE86dZ+S5vxhuSRy4FLppSoNk1V1DSC0euk2fmZuzlNnsL/44d2FS3 v2iz6g1NMtFVRWPjX9dTNdmwNWAWzSmYMqPnKv5g1w9yo3XyhdBo0Ay4E/pUvJV4y3RkvevL19V l3kGm7yRYxyWP3uiIPRDKAoKm8JqyWOHXvBtuihaMW06AiPh7lSAHkAxwzsWQ2OKFcFN0ofREi/ 9Ab5lEyx4AXJ7/eSmDk3zjrFaGuQFLkVidjAyT/GiLk0hP2XMzmSuGwPrx+fAYwtxACZBVJPw95 QQTo9bVkoTUhdH0wjSwy1zl1YD1ChPypfSeIN3oY4m8ROFmcp7Lxc0/AJw11/xE5KZhfS2dl/2l Mms0BFqg+6p13W0vXv8GJHSFHolbgfzDJL1/cTDHgVl/P6Bc+ADtRyD8aJPi0kVkg8bgCEKljsn +s5BsUBXaju46VPCmOwZXF3IS+eoN3jKrWChRUXfdNm01T/RYXS4ab78PoXVR4fariofnI/XH/O kl5+T3dLrMQFqm44FYLGhj7+MtOMBXhTw== X-Received: by 2002:a05:622a:305:b0:51c:1ec5:d0f with SMTP id d75a77b69052e-52d6482ea3emr27523201cf.40.1786530940278; Wed, 12 Aug 2026 03:35:40 -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 6a1803df08f44-90a6c29e942sm18718386d6.12.2026.08.12.03.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 03:35:38 -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 v3 1/3] hwmon: (asus_rog_ryujin) Add per-device configuration Date: Wed, 12 Aug 2026 06:35:30 -0400 Message-ID: <20260812103532.395049-2-renari@arimil.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812103532.395049-1-renari@arimil.com> References: <20260812103532.395049-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. Handles an issue reported by Sashiko where an id could be missing driver_data. Link: https://lore.kernel.org/r/5a817284-a9f4-48b2-9f0f-802c5dc6963c@roeck-= us.net Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Arie Miller Reviewed-by: Aleksa Savic Tested-by: and/or Reviewed-by: feedback. I plan to apply it after --- drivers/hwmon/asus_rog_ryujin.c | 75 +++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/drivers/hwmon/asus_rog_ryujin.c b/drivers/hwmon/asus_rog_ryuji= n.c index 10a1f5aca988..80563ce38519 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); @@ -471,11 +495,15 @@ static int rog_ryujin_probe(struct hid_device *hdev, = const struct hid_device_id struct rog_ryujin_data *priv; int ret; =20 + if (!id->driver_data) + return -EINVAL; + priv =3D devm_kzalloc(&hdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) 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 +574,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 04:39:47 2026 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) (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 6394937C909 for ; Wed, 12 Aug 2026 10:35:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786530946; cv=none; b=WIkpbdGOqD+LQQzI0bsscAsZWeRGkXu+AZBNm9ZfqewWjg+pwQyyjGSyM1tEf1xZpp3vwiDdjaqv6//lGOxUY1vO9VUbL+Z9OsN4GpgtO8ESgowMEr6RfomS8uc13Rk/+mMGTMC0rdrEFZaXCeeCPb+mhPfryPrmPp+mnIvt/Ic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786530946; c=relaxed/simple; bh=FQJBQhgjZb1RX/e4wc0m6QodCj403YS0hRdwNpBEnLg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IQ5cf8e0cE8/0DfWaWFMd5Pwosr/cWlct4X5lgfIsz2vJ22j+13EXtAMmXs+b/Pgc4g9nQV96qJxQw+GQlMRpt2P/HfkojzEW9Bz2GxTqlzo+5nUZrG2qrLpHyjPozqufznwKY7p9eQy8ilSqr6X60Nd3jKbYsyxdnYZ6I7lSv0= 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=LjovySjG; arc=none smtp.client-ip=209.85.219.45 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="LjovySjG" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-8efcfdb2b43so6205336d6.3 for ; Wed, 12 Aug 2026 03:35:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arimil.com; s=google; t=1786530943; x=1787135743; 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=4qz5IS5RcDj1noT8ncMYxPnyxq+wgolMrwdoOFMS+O4=; b=LjovySjGlkOKOymAtv7CT1Wa11yufXwtyDF97DJG3BHj7+d8YHhGtRgjlsGEyZmjSj H0RHxeBKYy8RAAhHKuqUYRLqcQZVkjDh4t8mzw7rAfX4KH89qaB7yTwbGFk2Q8Y2LJok OrUq+UYNq3w6qb+5DLl+M5O+EYJOtJJliBegmjAibQehcaTpU5Lpx5q6Z3UAe1cgbrab K9hejZ8QnJxFE5kGF9vNA0yAhQiz+0juYACPfnPRku3wMV1vQoXsirRKpuBGEid/yLlZ v3qSH9WN4n3pJ8TUrd5VxeW/rzWsLbqdhd93C/nWAc8atlBw1/VJT8zeBSMtsBXubMeV hrAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786530943; x=1787135743; 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=4qz5IS5RcDj1noT8ncMYxPnyxq+wgolMrwdoOFMS+O4=; b=R9Aqq/VTuJ/HF6RXuDwm4LlioKSQ7KJDAn/iygMhNukaFGG6Hy/J40j8LICCue13ba iKPeWvIk+MUwW4Go2VGrvrlPA+/W6pAjUaao4lpDVroVX3DEtb6i60Ef32jbNETcYc6P ixA5w6vUceXL+Nlu05WBW95qNXBRxx0g4FNtVLs7Bpt2z73QPPrYQOe1lQdf7Rdign8v TNmxomi+ZB/dCC4+t9uBjrzPBtOJEGWXtc3N5vWKQgCfnftPDGgg2hBOeU2PI26ijMTe Ecv9kW01WSHOmaoOS9mzLkz2ApS+OhxdJ68gpvF5tlYVSxfFCIxbxVa7oW5vCgCIA/7f 8zRw== X-Forwarded-Encrypted: i=1; AHgh+RrZhm7EjQbxETgg54JrIjsgo6jm5n6cD7FIzTbEb1D3QYh8nRHK3YNrNY+PO8wMG2NW+gdGKbzxs7jYxKU=@vger.kernel.org X-Gm-Message-State: AOJu0YyBrXQePPgis0z19mnPILSCGDnJ5dT3b9vQ1UFtJSZr4DPXqTLQ X3TVl0g/66w97doTMJPns+Xg95ryB5yBpGevvvn0piVWFd7226oMVz5RowPhQxV4f+w= X-Gm-Gg: AR+sD12Fa/lMoohPds37NI9xCTe78nu35m7LbPIvhETZh1PoP0bmALZf1xmTH7g0kEL FQyTsb4/ZJ2fJeXsOAVXjd0U4RvA/E8lwNl31fUMZEEvWhxf17EMpsp9v8sAMq/5IfeHjZU6dDw XDAZaygpKhxjssn8mzMHy1ue7YYbakoBhAx72HokiHSjep9nClPQiSjBottO0HxTnslX4hSjTVK 920BJw1GME1A1N5t9uvy+0RHUG506PMkO6rsiO3qDArgHA+bhIV7/7LgnnvX1Dvt4+axWduhTFb /cYmM+b8HoGSektKE3TyQRyvhnuV/O/z/2TSQciUUvkTyqUQUgq3zP98fn/AVR72URJI+GuJwm7 agBkDASzi6aZA75QwxBiOA7f6Lc/UVgR6UV4BfAWcyRx0VBRwLaIOIdCkHqq8bHi1nAn7QpMVvp HWcPFwF0tDENSRoOxNK7DY+gULF628373QHydp2iFNjL3atIXlca26Md6CDALpkIK7lZM1i9lkx VRCiZ5iSE2+0asHA8xmYI/NXnMFOifPmw== X-Received: by 2002:a05:6214:5097:b0:8ef:e0d0:9fae with SMTP id 6a1803df08f44-90a6ff631ccmr30481976d6.14.1786530943279; Wed, 12 Aug 2026 03:35:43 -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 6a1803df08f44-90a6c29e942sm18718386d6.12.2026.08.12.03.35.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 03:35:41 -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 v3 2/3] hwmon: (asus_rog_ryujin) Add ROG Ryujin III support Date: Wed, 12 Aug 2026 06:35:31 -0400 Message-ID: <20260812103532.395049-3-renari@arimil.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812103532.395049-1-renari@arimil.com> References: <20260812103532.395049-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 Reviewed-by: Aleksa Savic --- 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 43418633e2e8..81a9a1d40eec 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 80563ce38519..79e5b6d6dae0 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 @@ -576,6 +586,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 @@ -605,4 +619,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 04:39:47 2026 Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) (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 9991242AF9E for ; Wed, 12 Aug 2026 10:35:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786530949; cv=none; b=f7roaJRhhOaPdbgyRbLFeVi0AatcQmNHj0vIiCyHnqZcrgaRvHohCpX8oofbOzEKfVQEp9w2bEJu37ueDRf5VICASBj6K8H8/31mNgjgvoI39vL1Et4XXNBtT/lOdFhlL2ZwsLQgkaHtUO98jjpyb57b35nhEXZUasudiFzMUf8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786530949; c=relaxed/simple; bh=A8DIEFpFNqDFRL8+i8ZGzIw9hnWN2FGFZ1t9OB5cd70=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nnPztIQd2E3D1q6kZzhMK83I8n8JFSDjjvT/guO+A1tLH9fNqzkgQ+M69tFsCxOExu367Ejio2A0qm1k3G6pv2xghOADhk52UxEWPOrUw1fUKJvuBOhClYmPGgGcEb3WNB3KObmU+8pZ2ycaA33Q0P8ZTL2mFCwIsGZ3149l+ig= 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=ExoVSDRn; arc=none smtp.client-ip=209.85.219.54 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="ExoVSDRn" Received: by mail-qv1-f54.google.com with SMTP id 6a1803df08f44-8ef7b7651ecso15673536d6.1 for ; Wed, 12 Aug 2026 03:35:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arimil.com; s=google; t=1786530945; x=1787135745; 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=t+fo2o3VZGAKByil8hU2O5hxAnTzJGxdmK3zHYdry2g=; b=ExoVSDRn0Hu5kuBxwaerOJaBWr5bVwytYQn0idi3L/RBNwixGZsDevTqKzBPz7Ako/ P8d8Ww1nrAFWnnME3BlJK/AD0o2ZEDfAwbx8TUdBlFTEHF01ChMcH3xpbmBKjQ0tWBnP YJdF8MD7qUpAC8sY3ARlRca019ywDbeC/NyeS/PYGN9/4t0G9+kw0kABJEplF4Gmidu3 Mw8F4S+2/2dLWKBU9w7hT3/2QcmYNtynXjDSNu3avJ7bO8PKLVGDztv1MRE7bXwbFlO2 I0/rSFzw7DMHHvY0wPKuq3aPJWTmFs6/ALDhAEo1sJWaaKVkq0NqK47yZ82YcZRgl7x0 iEcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786530945; x=1787135745; 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=t+fo2o3VZGAKByil8hU2O5hxAnTzJGxdmK3zHYdry2g=; b=swIHhUKQwxyi/jYMKUbGuHEqndKXDSGu69xIuoYBC5RC8yMAfDqEn8t+alL2WvUboh MekYTYFOjXAGq6rs/+krTwWM19uLcpLT8twSQsqx2nLPYSM6wG+FVXDUKVvQI3WBRJUx vcpv6c54CRp2qZRjQdej/1bgffMuvjVpQy93ITrRC50AwC+JwVORja5/bAjAD3ZaXj3x PTHPRft36t5Yjr3BqpKuT9a9RoUbX6+lklw/RtHBZ72JW8dAof3SDFCgU990v4lFJk8U D58smcYbixl1NdgR/di0DC3YoLj/hYIpwLaCwaanhlWIV6lSnfbrPaei9OoXMcT6ozyv hp3w== X-Forwarded-Encrypted: i=1; AHgh+RoSO48yf0CnLTeVqEhfUsTq2YibWugUSY1uAV2pB8lm15Us3oRK59Nhrf45XhI5NJVCxIhRnDVbOskwMYg=@vger.kernel.org X-Gm-Message-State: AOJu0YzR6/8hqNVZvTXlbRV737ryUk2wipGx+qWDPkDYrSTGr53u1c4C Hrc6FIxYugsAhWN/EVrPebP3/B24dS0vMMxX9j0vnIEN2If20Qp72ju8NkxbuQMh5bc= X-Gm-Gg: AR+sD10mI4aLE7TAoOx6CtvlmQmgFtlDTG7UADiOuTLYQZFtJlcpB2lITeb7A8S35z6 nLNMBQKmGU3Patlc+Kh07BpHmE0cRxKFi23dELL8CdQB+9wFeLSA/mJlsyUgps2NdkypPqJ1kSA lrlFQ9SmmRDSD7BdJSyRX9TSxhrZg1/CAmXnA5DVd65lPIgOauOStYwTmN8hT1GAliuCrmliYpj BY6nGNiL5X2n37bqmAHDA42bVFCD2poIDJrgFTXhKf3bjU70FwctSVXcRRlxHtKCh9Ul8izDzqp D8xpBWuED5nq9tQewh4NbQVZuD9wJYbJ92tCpu/LawLuzrq2LKmnylFF8GLos2Ro08I4l/sMoMz 2G3JCCmlnSZAAC+QNqZZ06bqqxxdB0p2f1Q5tuF4Q+e61MKzUdVhuBHdeuIJ6ao1deLmrYPTa7J qpt6n/NoLc48k40gtKNGvBSG52uOWwgV127cVjvixeBzXZq31NfPUq9IR9RnNPjMArGHk+Grco6 MwB8Zi47H6P0VT67oulUMLVvl615OOOK2hq1x3AHBnt X-Received: by 2002:a05:6214:2b82:b0:8f1:617b:2692 with SMTP id 6a1803df08f44-90a707b3c4amr27757526d6.10.1786530945437; Wed, 12 Aug 2026 03:35:45 -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 6a1803df08f44-90a6c29e942sm18718386d6.12.2026.08.12.03.35.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 03:35:44 -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 v3 3/3] hwmon: (asus_rog_ryujin) Add ROG Ryujin III White Edition Date: Wed, 12 Aug 2026 06:35:32 -0400 Message-ID: <20260812103532.395049-4-renari@arimil.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812103532.395049-1-renari@arimil.com> References: <20260812103532.395049-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 79e5b6d6dae0..702edb831394 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; @@ -590,6 +591,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