Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (aquacomputer_d5next) Add support for Octo flow sensor pulses

Add support for reading and writing the flow sensor pulses on
the Aquacomputer Octo. Implemented by David Flemstrom [1].

[1] https://github.com/aleksamagicka/aquacomputer_d5next-hwmon/pull/95

Originally-from: David Flemstrom <david.flemstrom@gmail.com>
Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
Link: https://lore.kernel.org/r/20240417175037.32499-3-savicaleksa83@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>

authored by

Aleksa Savic and committed by
Guenter Roeck
bf7b5a12 120584c7

+15 -5
+2 -1
Documentation/hwmon/aquacomputer_d5next.rst
··· 47 47 48 48 The Octo exposes four physical and sixteen virtual temperature sensors, a flow sensor 49 49 as well as eight PWM controllable fans, along with their speed (in RPM), power, voltage 50 - and current. 50 + and current. Flow sensor pulses are also available. 51 51 52 52 The Quadro exposes four physical and sixteen virtual temperature sensors, a flow 53 53 sensor and four PWM controllable fans, along with their speed (in RPM), power, ··· 100 100 fan1_max Maximal fan speed (in RPM) 101 101 fan1_target Target fan speed (in RPM) 102 102 fan5_pulses Quadro flow sensor pulses 103 + fan9_pulses Octo flow sensor pulses 103 104 power[1-8]_input Pump/fan power (in micro Watts) 104 105 in[0-7]_input Pump/fan voltage (in milli Volts) 105 106 curr[1-8]_input Pump/fan current (in milli Amperes)
+13 -4
drivers/hwmon/aquacomputer_d5next.c
··· 214 214 215 215 /* Control report offsets for the Octo */ 216 216 #define OCTO_TEMP_CTRL_OFFSET 0xA 217 + #define OCTO_FLOW_PULSES_CTRL_OFFSET 0x6 217 218 /* Fan speed offsets (0-100%) */ 218 219 static u16 octo_ctrl_fan_offsets[] = { 0x5B, 0xB0, 0x105, 0x15A, 0x1AF, 0x204, 0x259, 0x2AE }; 219 220 ··· 862 861 } 863 862 break; 864 863 case hwmon_fan_pulses: 865 - /* Special case for Quadro flow sensor */ 866 - if (priv->kind == quadro && channel == priv->num_fans) 867 - return 0644; 864 + /* Special case for Quadro/Octo flow sensor */ 865 + if (channel == priv->num_fans) { 866 + switch (priv->kind) { 867 + case quadro: 868 + case octo: 869 + return 0644; 870 + default: 871 + break; 872 + } 873 + } 868 874 break; 869 875 case hwmon_fan_min: 870 876 case hwmon_fan_max: ··· 1302 1294 HWMON_F_INPUT | HWMON_F_LABEL, 1303 1295 HWMON_F_INPUT | HWMON_F_LABEL, 1304 1296 HWMON_F_INPUT | HWMON_F_LABEL, 1305 - HWMON_F_INPUT | HWMON_F_LABEL), 1297 + HWMON_F_INPUT | HWMON_F_LABEL | HWMON_F_PULSES), 1306 1298 HWMON_CHANNEL_INFO(power, 1307 1299 HWMON_P_INPUT | HWMON_P_LABEL, 1308 1300 HWMON_P_INPUT | HWMON_P_LABEL, ··· 1679 1671 priv->buffer_size = OCTO_CTRL_REPORT_SIZE; 1680 1672 priv->ctrl_report_delay = CTRL_REPORT_DELAY; 1681 1673 1674 + priv->flow_pulses_ctrl_offset = OCTO_FLOW_PULSES_CTRL_OFFSET; 1682 1675 priv->power_cycle_count_offset = OCTO_POWER_CYCLES; 1683 1676 1684 1677 priv->temp_label = label_temp_sensors;