Re: [PATCH] hwmon: (aquacomputer_d5next) Add support for Aquacomputer Leakshield

From: Guenter Roeck
Date: Fri May 19 2023 - 08:57:17 EST


On Tue, May 16, 2023 at 06:42:13PM +0200, Aleksa Savic wrote:
> Extend aquacomputer_d5next driver to expose various hardware sensors of the
> Aquacomputer Leakshield leak prevention system, which communicates
> through a proprietary USB HID protocol. Implemented by Noah Bergbauer [1].
>
> Two temperature sensors are exposed, along with pressure (current, min, max
> and target), reservoir volume (total and filled), pump speed and flow. Pump
> speed and flow values are user provided and allow the Leakshield to
> optimize its operation. Writing them to the device is subject of future
> patches.
>
> [1] https://github.com/aleksamagicka/aquacomputer_d5next-hwmon/pull/41
>
> Originally-from: Noah Bergbauer <main@xxxxxxxx>
> Signed-off-by: Aleksa Savic <savicaleksa83@xxxxxxxxx>
> ---
> Documentation/hwmon/aquacomputer_d5next.rst | 9 ++
> drivers/hwmon/aquacomputer_d5next.c | 117 ++++++++++++++++++--
> 2 files changed, 118 insertions(+), 8 deletions(-)
>
> diff --git a/Documentation/hwmon/aquacomputer_d5next.rst b/Documentation/hwmon/aquacomputer_d5next.rst
> index 14b37851af0c..94dc2d93d180 100644
> --- a/Documentation/hwmon/aquacomputer_d5next.rst
> +++ b/Documentation/hwmon/aquacomputer_d5next.rst
> @@ -12,6 +12,7 @@ Supported devices:
> * Aquacomputer Octo fan controller
> * Aquacomputer Quadro fan controller
> * Aquacomputer High Flow Next sensor
> +* Aquacomputer Leakshield leak prevention system
> * Aquacomputer Aquastream XT watercooling pump
> * Aquacomputer Aquastream Ultimate watercooling pump
> * Aquacomputer Poweradjust 3 fan controller
> @@ -57,6 +58,11 @@ The High Flow Next exposes +5V voltages, water quality, conductivity and flow re
> A temperature sensor can be connected to it, in which case it provides its reading
> and an estimation of the dissipated/absorbed power in the liquid cooling loop.
>
> +The Leakshield exposes two temperature sensors and coolant pressure (current, min, max and
> +target readings). It also exposes the estimated reservoir volume and how much of it is
> +filled with coolant. Pump RPM and flow can be set to enhance on-device calculations,
> +but this is not yet implemented here.
> +
> The Aquastream XT pump exposes temperature readings for the coolant, external sensor
> and fan IC. It also exposes pump and fan speeds (in RPM), voltages, as well as pump
> current.
> @@ -83,6 +89,9 @@ Sysfs entries
> temp[1-20]_input Physical/virtual temperature sensors (in millidegrees Celsius)
> temp[1-8]_offset Temperature sensor correction offset (in millidegrees Celsius)
> fan[1-8]_input Pump/fan speed (in RPM) / Flow speed (in dL/h)
> +fan1_min Minimal fan speed (in RPM)
> +fan1_max Maximal fan speed (in RPM)
> +fan1_target Target fan speed (in RPM)
> fan5_pulses Quadro flow sensor pulses
> power[1-8]_input Pump/fan power (in micro Watts)
> in[0-7]_input Pump/fan voltage (in milli Volts)
> diff --git a/drivers/hwmon/aquacomputer_d5next.c b/drivers/hwmon/aquacomputer_d5next.c
> index a4fcd4ebf76c..a981f7086114 100644
> --- a/drivers/hwmon/aquacomputer_d5next.c
> +++ b/drivers/hwmon/aquacomputer_d5next.c
> @@ -1,7 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0+
> /*
> * hwmon driver for Aquacomputer devices (D5 Next, Farbwerk, Farbwerk 360, Octo,
> - * Quadro, High Flow Next, Aquaero, Aquastream Ultimate)
> + * Quadro, High Flow Next, Aquaero, Aquastream Ultimate, Leakshield)
> *
> * Aquacomputer devices send HID reports (with ID 0x01) every second to report
> * sensor values, except for devices that communicate through the
> @@ -29,6 +29,7 @@
> #define USB_PRODUCT_ID_FARBWERK360 0xf010
> #define USB_PRODUCT_ID_OCTO 0xf011
> #define USB_PRODUCT_ID_HIGHFLOWNEXT 0xf012
> +#define USB_PRODUCT_ID_LEAKSHIELD 0xf014
> #define USB_PRODUCT_ID_AQUASTREAMXT 0xf0b6
> #define USB_PRODUCT_ID_AQUASTREAMULT 0xf00b
> #define USB_PRODUCT_ID_POWERADJUST3 0xf0bd
> @@ -36,7 +37,7 @@
> enum kinds {
> d5next, farbwerk, farbwerk360, octo, quadro,
> highflownext, aquaero, poweradjust3, aquastreamult,
> - aquastreamxt
> + aquastreamxt, leakshield
> };
>
> static const char *const aqc_device_names[] = {
> @@ -46,6 +47,7 @@ static const char *const aqc_device_names[] = {
> [octo] = "octo",
> [quadro] = "quadro",
> [highflownext] = "highflownext",
> + [leakshield] = "leakshield",
> [aquastreamxt] = "aquastreamxt",
> [aquaero] = "aquaero",
> [aquastreamult] = "aquastreamultimate",
> @@ -93,7 +95,7 @@ static u8 aquaero_secondary_ctrl_report[] = {
> #define AQC_FIRMWARE_VERSION 0xD
>
> #define AQC_SENSOR_SIZE 0x02
> -#define AQC_TEMP_SENSOR_DISCONNECTED 0x7FFF
> +#define AQC_SENSOR_NA 0x7FFF

This would have to be a separate change.

Guenter