All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 models
@ 2024-04-28 10:48 Aleksa Savic
  2024-04-28 10:48 ` [PATCH 1/2] hwmon: (nzxt-kraken3) Decouple device names from kinds Aleksa Savic
  2024-04-28 10:48 ` [PATCH 2/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and Elite) models Aleksa Savic
  0 siblings, 2 replies; 5+ messages in thread
From: Aleksa Savic @ 2024-04-28 10:48 UTC (permalink / raw)
  To: linux-hwmon
  Cc: Aleksa Savic, Jonas Malaco, Jean Delvare, Guenter Roeck,
	Jonathan Corbet, linux-doc, linux-kernel

This series adds support for the 2023 models (standard and Elite) of the
NZXT Kraken all-in-one cooler lineup.

The first patch changes how the driver chooses the shown name which is
based on the model, while the second patch builds on top of that and
implements support for the new models.

Aleksa Savic (2):
  hwmon: (nzxt-kraken3) Decouple device names from kinds
  hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and
    Elite) models

 Documentation/hwmon/nzxt-kraken3.rst | 19 ++++++----
 drivers/hwmon/nzxt-kraken3.c         | 55 +++++++++++++++++++---------
 2 files changed, 48 insertions(+), 26 deletions(-)

-- 
2.44.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] hwmon: (nzxt-kraken3) Decouple device names from kinds
  2024-04-28 10:48 [PATCH 0/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 models Aleksa Savic
@ 2024-04-28 10:48 ` Aleksa Savic
  2024-04-28 18:16   ` Guenter Roeck
  2024-04-28 10:48 ` [PATCH 2/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and Elite) models Aleksa Savic
  1 sibling, 1 reply; 5+ messages in thread
From: Aleksa Savic @ 2024-04-28 10:48 UTC (permalink / raw)
  To: linux-hwmon
  Cc: Aleksa Savic, Jonas Malaco, Jean Delvare, Guenter Roeck,
	Jonathan Corbet, linux-doc, linux-kernel

Prepare for the support of new models, for which the relationship
between device name (for hwmon and debugfs) and kind (for the selection
of appropriate code paths within this driver) will no longer be 1:1.

Originally-from: Jonas Malaco <jonas@protocubo.io>
Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
 drivers/hwmon/nzxt-kraken3.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/hwmon/nzxt-kraken3.c b/drivers/hwmon/nzxt-kraken3.c
index 5806a3f32bcb..571087e3fd3e 100644
--- a/drivers/hwmon/nzxt-kraken3.c
+++ b/drivers/hwmon/nzxt-kraken3.c
@@ -27,11 +27,6 @@
 enum kinds { X53, Z53 } __packed;
 enum pwm_enable { off, manual, curve } __packed;
 
-static const char *const kraken3_device_names[] = {
-	[X53] = "x53",
-	[Z53] = "z53",
-};
-
 #define DRIVER_NAME		"nzxt_kraken3"
 #define STATUS_REPORT_ID	0x75
 #define FIRMWARE_REPORT_ID	0x11
@@ -849,14 +844,14 @@ static int firmware_version_show(struct seq_file *seqf, void *unused)
 }
 DEFINE_SHOW_ATTRIBUTE(firmware_version);
 
-static void kraken3_debugfs_init(struct kraken3_data *priv)
+static void kraken3_debugfs_init(struct kraken3_data *priv, const char *device_name)
 {
 	char name[64];
 
 	if (!priv->firmware_version[0])
 		return;		/* Nothing to display in debugfs */
 
-	scnprintf(name, sizeof(name), "%s_%s-%s", DRIVER_NAME, kraken3_device_names[priv->kind],
+	scnprintf(name, sizeof(name), "%s_%s-%s", DRIVER_NAME, device_name,
 		  dev_name(&priv->hdev->dev));
 
 	priv->debugfs = debugfs_create_dir(name, NULL);
@@ -866,6 +861,7 @@ static void kraken3_debugfs_init(struct kraken3_data *priv)
 static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id)
 {
 	struct kraken3_data *priv;
+	const char *device_name;
 	int ret;
 
 	priv = devm_kzalloc(&hdev->dev, sizeof(*priv), GFP_KERNEL);
@@ -905,9 +901,11 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id
 	case USB_PRODUCT_ID_X53:
 	case USB_PRODUCT_ID_X53_SECOND:
 		priv->kind = X53;
+		device_name = "x53";
 		break;
 	case USB_PRODUCT_ID_Z53:
 		priv->kind = Z53;
+		device_name = "z53";
 		break;
 	default:
 		break;
@@ -936,8 +934,7 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id
 	if (ret < 0)
 		hid_warn(hdev, "fw version request failed with %d\n", ret);
 
-	priv->hwmon_dev = hwmon_device_register_with_info(&hdev->dev,
-							  kraken3_device_names[priv->kind], priv,
+	priv->hwmon_dev = hwmon_device_register_with_info(&hdev->dev, device_name, priv,
 							  &kraken3_chip_info, kraken3_groups);
 	if (IS_ERR(priv->hwmon_dev)) {
 		ret = PTR_ERR(priv->hwmon_dev);
@@ -945,7 +942,7 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id
 		goto fail_and_close;
 	}
 
-	kraken3_debugfs_init(priv);
+	kraken3_debugfs_init(priv, device_name);
 
 	return 0;
 
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and Elite) models
  2024-04-28 10:48 [PATCH 0/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 models Aleksa Savic
  2024-04-28 10:48 ` [PATCH 1/2] hwmon: (nzxt-kraken3) Decouple device names from kinds Aleksa Savic
@ 2024-04-28 10:48 ` Aleksa Savic
  2024-04-28 18:17   ` Guenter Roeck
  1 sibling, 1 reply; 5+ messages in thread
From: Aleksa Savic @ 2024-04-28 10:48 UTC (permalink / raw)
  To: linux-hwmon
  Cc: Aleksa Savic, Jonas Malaco, Jean Delvare, Guenter Roeck,
	Jonathan Corbet, linux-doc, linux-kernel

Add support for NZXT Kraken 2023 (standard) and NZXT Kraken 2023 Elite
all-in-one CPU coolers. These models communicate identically to the NZXT
Kraken Z-series (Z53 code paths) in all cases except when writing the
fan curve, where setting additional bits in the report is needed.

Reviewed-by: Jonas Malaco <jonas@protocubo.io>
Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
 Documentation/hwmon/nzxt-kraken3.rst | 19 ++++++++------
 drivers/hwmon/nzxt-kraken3.c         | 38 ++++++++++++++++++++++------
 2 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/Documentation/hwmon/nzxt-kraken3.rst b/Documentation/hwmon/nzxt-kraken3.rst
index 90fd9dec15ff..57fe99d23301 100644
--- a/Documentation/hwmon/nzxt-kraken3.rst
+++ b/Documentation/hwmon/nzxt-kraken3.rst
@@ -11,17 +11,20 @@ Supported devices:
 * NZXT Kraken Z53
 * NZXT Kraken Z63
 * NZXT Kraken Z73
+* NZXT Kraken 2023
+* NZXT Kraken 2023 Elite
 
 Author: Jonas Malaco, Aleksa Savic
 
 Description
 -----------
 
-This driver enables hardware monitoring support for NZXT Kraken X53/X63/X73 and
-Z53/Z63/Z73 all-in-one CPU liquid coolers. All models expose liquid temperature
-and pump speed (in RPM), as well as PWM control (either as a fixed value
-or through a temp-PWM curve). The Z-series models additionally expose the speed
-and duty of an optionally connected fan, with the same PWM control capabilities.
+This driver enables hardware monitoring support for NZXT Kraken X53/X63/X73,
+Z53/Z63/Z73 and Kraken 2023 (standard and Elite) all-in-one CPU liquid coolers.
+All models expose liquid temperature and pump speed (in RPM), as well as PWM
+control (either as a fixed value or through a temp-PWM curve). The Z-series and
+Kraken 2023 models additionally expose the speed and duty of an optionally connected
+fan, with the same PWM control capabilities.
 
 Pump and fan duty control mode can be set through pwm[1-2]_enable, where 1 is
 for the manual control mode and 2 is for the liquid temp to PWM curve mode.
@@ -39,9 +42,9 @@ The devices can report if they are faulty. The driver supports that situation
 and will issue a warning. This can also happen when the USB cable is connected,
 but SATA power is not.
 
-The addressable RGB LEDs and LCD screen (only on Z-series models) are not
-supported in this driver, but can be controlled through existing userspace tools,
-such as `liquidctl`_.
+The addressable RGB LEDs and LCD screen (only on Z-series and Kraken 2023 models)
+are not supported in this driver, but can be controlled through existing userspace
+tools, such as `liquidctl`_.
 
 .. _liquidctl: https://github.com/liquidctl/liquidctl
 
diff --git a/drivers/hwmon/nzxt-kraken3.c b/drivers/hwmon/nzxt-kraken3.c
index 571087e3fd3e..0b3f04c740b0 100644
--- a/drivers/hwmon/nzxt-kraken3.c
+++ b/drivers/hwmon/nzxt-kraken3.c
@@ -1,8 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * hwmon driver for NZXT Kraken X53/X63/X73 and Z53/Z63/Z73 all in one coolers.
- * X53 and Z53 in code refer to all models in their respective series (shortened
- * for brevity).
+ * hwmon driver for NZXT Kraken X53/X63/X73, Z53/Z63/Z73 and 2023/2023 Elite all in one coolers.
+ * X53 and Z53 in code refer to all models in their respective series (shortened for brevity).
+ * 2023 models use the Z53 code paths.
  *
  * Copyright 2021  Jonas Malaco <jonas@protocubo.io>
  * Copyright 2022  Aleksa Savic <savicaleksa83@gmail.com>
@@ -23,8 +23,10 @@
 #define USB_PRODUCT_ID_X53		0x2007
 #define USB_PRODUCT_ID_X53_SECOND	0x2014
 #define USB_PRODUCT_ID_Z53		0x3008
+#define USB_PRODUCT_ID_KRAKEN2023	0x300E
+#define USB_PRODUCT_ID_KRAKEN2023_ELITE	0x300C
 
-enum kinds { X53, Z53 } __packed;
+enum kinds { X53, Z53, KRAKEN2023 } __packed;
 enum pwm_enable { off, manual, curve } __packed;
 
 #define DRIVER_NAME		"nzxt_kraken3"
@@ -136,6 +138,7 @@ static umode_t kraken3_is_visible(const void *data, enum hwmon_sensor_types type
 				return 0444;
 			break;
 		case Z53:
+		case KRAKEN2023:
 			/* Pump and fan */
 			if (channel < 2)
 				return 0444;
@@ -155,6 +158,7 @@ static umode_t kraken3_is_visible(const void *data, enum hwmon_sensor_types type
 					return 0644;
 				break;
 			case Z53:
+			case KRAKEN2023:
 				/* Pump and fan */
 				if (channel < 2)
 					return 0644;
@@ -242,6 +246,7 @@ static int kraken3_read_x53(struct kraken3_data *priv)
 	return 0;
 }
 
+/* Covers Z53 and KRAKEN2023 device kinds */
 static int kraken3_read_z53(struct kraken3_data *priv)
 {
 	int ret = mutex_lock_interruptible(&priv->z53_status_request_lock);
@@ -355,6 +360,13 @@ static int kraken3_write_curve(struct kraken3_data *priv, u8 *curve_array, int c
 	/* Set the correct ID for writing pump/fan duty (0x01 or 0x02, respectively) */
 	fixed_duty_cmd[SET_DUTY_ID_OFFSET] = channel + 1;
 
+	if (priv->kind == KRAKEN2023) {
+		/* These require 1s in the next one or two slots after SET_DUTY_ID_OFFSET */
+		fixed_duty_cmd[SET_DUTY_ID_OFFSET + 1] = 1;
+		if (channel == 1) /* Fan */
+			fixed_duty_cmd[SET_DUTY_ID_OFFSET + 2] = 1;
+	}
+
 	/* Copy curve to command */
 	memcpy(fixed_duty_cmd + SET_CURVE_DUTY_CMD_HEADER_LENGTH, curve_array, CUSTOM_CURVE_POINTS);
 
@@ -502,8 +514,8 @@ static umode_t kraken3_curve_props_are_visible(struct kobject *kobj, struct attr
 	struct device *dev = kobj_to_dev(kobj);
 	struct kraken3_data *priv = dev_get_drvdata(dev);
 
-	/* Only Z53 has the fan curve */
-	if (index >= CUSTOM_CURVE_POINTS && priv->kind != Z53)
+	/* X53 does not have a fan */
+	if (index >= CUSTOM_CURVE_POINTS && priv->kind == X53)
 		return 0;
 
 	return attr->mode;
@@ -769,8 +781,8 @@ static int kraken3_raw_event(struct hid_device *hdev, struct hid_report *report,
 	if (priv->kind == X53 && !completion_done(&priv->status_report_processed)) {
 		/* Mark first X-series device report as received */
 		complete_all(&priv->status_report_processed);
-	} else if (priv->kind == Z53) {
-		/* Additional readings for Z53 */
+	} else if (priv->kind == Z53 || priv->kind == KRAKEN2023) {
+		/* Additional readings for Z53 and KRAKEN2023 */
 		priv->fan_input[1] = get_unaligned_le16(data + Z53_FAN_SPEED_OFFSET);
 		priv->channel_info[1].reported_duty =
 		    kraken3_percent_to_pwm(data[Z53_FAN_DUTY_OFFSET]);
@@ -907,6 +919,14 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id
 		priv->kind = Z53;
 		device_name = "z53";
 		break;
+	case USB_PRODUCT_ID_KRAKEN2023:
+		priv->kind = KRAKEN2023;
+		device_name = "kraken2023";
+		break;
+	case USB_PRODUCT_ID_KRAKEN2023_ELITE:
+		priv->kind = KRAKEN2023;
+		device_name = "kraken2023elite";
+		break;
 	default:
 		break;
 	}
@@ -969,6 +989,8 @@ static const struct hid_device_id kraken3_table[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_NZXT, USB_PRODUCT_ID_X53) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_NZXT, USB_PRODUCT_ID_X53_SECOND) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_NZXT, USB_PRODUCT_ID_Z53) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_NZXT, USB_PRODUCT_ID_KRAKEN2023) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_NZXT, USB_PRODUCT_ID_KRAKEN2023_ELITE) },
 	{ }
 };
 
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] hwmon: (nzxt-kraken3) Decouple device names from kinds
  2024-04-28 10:48 ` [PATCH 1/2] hwmon: (nzxt-kraken3) Decouple device names from kinds Aleksa Savic
@ 2024-04-28 18:16   ` Guenter Roeck
  0 siblings, 0 replies; 5+ messages in thread
From: Guenter Roeck @ 2024-04-28 18:16 UTC (permalink / raw)
  To: Aleksa Savic
  Cc: linux-hwmon, Jonas Malaco, Jean Delvare, Jonathan Corbet,
	linux-doc, linux-kernel

On Sun, Apr 28, 2024 at 12:48:10PM +0200, Aleksa Savic wrote:
> Prepare for the support of new models, for which the relationship
> between device name (for hwmon and debugfs) and kind (for the selection
> of appropriate code paths within this driver) will no longer be 1:1.
> 
> Originally-from: Jonas Malaco <jonas@protocubo.io>
> Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>

Applied.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and Elite) models
  2024-04-28 10:48 ` [PATCH 2/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and Elite) models Aleksa Savic
@ 2024-04-28 18:17   ` Guenter Roeck
  0 siblings, 0 replies; 5+ messages in thread
From: Guenter Roeck @ 2024-04-28 18:17 UTC (permalink / raw)
  To: Aleksa Savic
  Cc: linux-hwmon, Jonas Malaco, Jean Delvare, Jonathan Corbet,
	linux-doc, linux-kernel

On Sun, Apr 28, 2024 at 12:48:11PM +0200, Aleksa Savic wrote:
> Add support for NZXT Kraken 2023 (standard) and NZXT Kraken 2023 Elite
> all-in-one CPU coolers. These models communicate identically to the NZXT
> Kraken Z-series (Z53 code paths) in all cases except when writing the
> fan curve, where setting additional bits in the report is needed.
> 
> Reviewed-by: Jonas Malaco <jonas@protocubo.io>
> Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>

Applied,

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-04-28 18:17 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-28 10:48 [PATCH 0/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 models Aleksa Savic
2024-04-28 10:48 ` [PATCH 1/2] hwmon: (nzxt-kraken3) Decouple device names from kinds Aleksa Savic
2024-04-28 18:16   ` Guenter Roeck
2024-04-28 10:48 ` [PATCH 2/2] hwmon: (nzxt-kraken3) Add support for NZXT Kraken 2023 (standard and Elite) models Aleksa Savic
2024-04-28 18:17   ` Guenter Roeck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.