From 44e028ee116cddb55f6f81f46594175038c328b4 Mon Sep 17 00:00:00 2001 From: Aleksa Savic Date: Sun, 11 Feb 2024 21:22:12 +0100 Subject: [PATCH] nzxt-kraken3: Add support for NZXT Kraken 2023 (normal and elite) models Signed-off-by: Aleksa Savic --- docs/nzxt-kraken3.rst | 2 ++ nzxt-kraken3.c | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/nzxt-kraken3.rst b/docs/nzxt-kraken3.rst index 90fd9de..9d19d1d 100644 --- a/docs/nzxt-kraken3.rst +++ b/docs/nzxt-kraken3.rst @@ -11,6 +11,8 @@ Supported devices: * NZXT Kraken Z53 * NZXT Kraken Z63 * NZXT Kraken Z73 +* NZXT Kraken 2023 +* NZXT Kraken 2023 Elite Author: Jonas Malaco, Aleksa Savic diff --git a/nzxt-kraken3.c b/nzxt-kraken3.c index 5806a3f..7946ceb 100644 --- a/nzxt-kraken3.c +++ b/nzxt-kraken3.c @@ -23,13 +23,17 @@ #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, kraken2023elite } __packed; enum pwm_enable { off, manual, curve } __packed; static const char *const kraken3_device_names[] = { [X53] = "x53", [Z53] = "z53", + [kraken2023] = "kraken2023", + [kraken2023elite] = "kraken2023elite" }; #define DRIVER_NAME "nzxt_kraken3" @@ -360,6 +364,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 || priv->kind == kraken2023elite) { + /* 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); @@ -909,6 +920,12 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id case USB_PRODUCT_ID_Z53: priv->kind = Z53; break; + case USB_PRODUCT_ID_KRAKEN2023: + priv->kind = kraken2023; + break; + case USB_PRODUCT_ID_KRAKEN2023_ELITE: + priv->kind = kraken2023elite; + break; default: break; } @@ -972,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) }, { } };