hwmon: (aquacomputer_d5next) Add support for Octo flow sensor

Add support for reading the flow sensor value 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-2-savicaleksa83@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Aleksa Savic 2024-04-17 19:50:35 +02:00 committed by Guenter Roeck
parent 70118f85e6
commit 120584c728
2 changed files with 25 additions and 17 deletions

View File

@ -45,9 +45,9 @@ seems to require sending it a complete configuration. That includes addressable
RGB LEDs, for which there is no standard sysfs interface. Thus, that task is RGB LEDs, for which there is no standard sysfs interface. Thus, that task is
better suited for userspace tools. better suited for userspace tools.
The Octo exposes four physical and sixteen virtual temperature sensors, as well as The Octo exposes four physical and sixteen virtual temperature sensors, a flow sensor
eight PWM controllable fans, along with their speed (in RPM), power, voltage and as well as eight PWM controllable fans, along with their speed (in RPM), power, voltage
current. and current.
The Quadro exposes four physical and sixteen virtual temperature sensors, a flow The Quadro exposes four physical and sixteen virtual temperature sensors, a flow
sensor and four PWM controllable fans, along with their speed (in RPM), power, sensor and four PWM controllable fans, along with their speed (in RPM), power,
@ -95,7 +95,7 @@ Sysfs entries
================ ============================================================== ================ ==============================================================
temp[1-20]_input Physical/virtual temperature sensors (in millidegrees Celsius) temp[1-20]_input Physical/virtual temperature sensors (in millidegrees Celsius)
temp[1-8]_offset Temperature sensor correction offset (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) fan[1-9]_input Pump/fan speed (in RPM) / Flow speed (in dL/h)
fan1_min Minimal fan speed (in RPM) fan1_min Minimal fan speed (in RPM)
fan1_max Maximal fan speed (in RPM) fan1_max Maximal fan speed (in RPM)
fan1_target Target fan speed (in RPM) fan1_target Target fan speed (in RPM)

View File

@ -202,12 +202,14 @@ static u16 aquastreamult_sensor_fan_offsets[] = { AQUASTREAMULT_FAN_OFFSET };
#define OCTO_NUM_FANS 8 #define OCTO_NUM_FANS 8
#define OCTO_NUM_SENSORS 4 #define OCTO_NUM_SENSORS 4
#define OCTO_NUM_VIRTUAL_SENSORS 16 #define OCTO_NUM_VIRTUAL_SENSORS 16
#define OCTO_NUM_FLOW_SENSORS 1
#define OCTO_CTRL_REPORT_SIZE 0x65F #define OCTO_CTRL_REPORT_SIZE 0x65F
/* Sensor report offsets for the Octo */ /* Sensor report offsets for the Octo */
#define OCTO_POWER_CYCLES 0x18 #define OCTO_POWER_CYCLES 0x18
#define OCTO_SENSOR_START 0x3D #define OCTO_SENSOR_START 0x3D
#define OCTO_VIRTUAL_SENSORS_START 0x45 #define OCTO_VIRTUAL_SENSORS_START 0x45
#define OCTO_FLOW_SENSOR_OFFSET 0x7B
static u16 octo_sensor_fan_offsets[] = { 0x7D, 0x8A, 0x97, 0xA4, 0xB1, 0xBE, 0xCB, 0xD8 }; static u16 octo_sensor_fan_offsets[] = { 0x7D, 0x8A, 0x97, 0xA4, 0xB1, 0xBE, 0xCB, 0xD8 };
/* Control report offsets for the Octo */ /* Control report offsets for the Octo */
@ -363,18 +365,6 @@ static const char *const label_aquaero_calc_temp_sensors[] = {
"Calc. virtual sensor 4" "Calc. virtual sensor 4"
}; };
/* Labels for Octo and Quadro (except speed) */
static const char *const label_fan_speed[] = {
"Fan 1 speed",
"Fan 2 speed",
"Fan 3 speed",
"Fan 4 speed",
"Fan 5 speed",
"Fan 6 speed",
"Fan 7 speed",
"Fan 8 speed"
};
static const char *const label_fan_power[] = { static const char *const label_fan_power[] = {
"Fan 1 power", "Fan 1 power",
"Fan 2 power", "Fan 2 power",
@ -408,6 +398,19 @@ static const char *const label_fan_current[] = {
"Fan 8 current" "Fan 8 current"
}; };
/* Labels for Octo fan speeds */
static const char *const label_octo_speeds[] = {
"Fan 1 speed",
"Fan 2 speed",
"Fan 3 speed",
"Fan 4 speed",
"Fan 5 speed",
"Fan 6 speed",
"Fan 7 speed",
"Fan 8 speed",
"Flow speed [dL/h]",
};
/* Labels for Quadro fan speeds */ /* Labels for Quadro fan speeds */
static const char *const label_quadro_speeds[] = { static const char *const label_quadro_speeds[] = {
"Fan 1 speed", "Fan 1 speed",
@ -844,6 +847,7 @@ static umode_t aqc_is_visible(const void *data, enum hwmon_sensor_types type, u3
return 0444; return 0444;
break; break;
case aquaero: case aquaero:
case octo:
case quadro: case quadro:
case highflow: case highflow:
/* Special case to support flow sensors */ /* Special case to support flow sensors */
@ -1289,6 +1293,7 @@ static const struct hwmon_channel_info * const aqc_info[] = {
HWMON_F_INPUT | HWMON_F_LABEL | HWMON_F_PULSES, HWMON_F_INPUT | HWMON_F_LABEL | HWMON_F_PULSES,
HWMON_F_INPUT | HWMON_F_LABEL, HWMON_F_INPUT | HWMON_F_LABEL,
HWMON_F_INPUT | HWMON_F_LABEL, HWMON_F_INPUT | HWMON_F_LABEL,
HWMON_F_INPUT | HWMON_F_LABEL,
HWMON_F_INPUT | HWMON_F_LABEL), HWMON_F_INPUT | HWMON_F_LABEL),
HWMON_CHANNEL_INFO(power, HWMON_CHANNEL_INFO(power,
HWMON_P_INPUT | HWMON_P_LABEL, HWMON_P_INPUT | HWMON_P_LABEL,
@ -1658,6 +1663,9 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id)
priv->temp_sensor_start_offset = OCTO_SENSOR_START; priv->temp_sensor_start_offset = OCTO_SENSOR_START;
priv->num_virtual_temp_sensors = OCTO_NUM_VIRTUAL_SENSORS; priv->num_virtual_temp_sensors = OCTO_NUM_VIRTUAL_SENSORS;
priv->virtual_temp_sensor_start_offset = OCTO_VIRTUAL_SENSORS_START; priv->virtual_temp_sensor_start_offset = OCTO_VIRTUAL_SENSORS_START;
priv->num_flow_sensors = OCTO_NUM_FLOW_SENSORS;
priv->flow_sensors_start_offset = OCTO_FLOW_SENSOR_OFFSET;
priv->temp_ctrl_offset = OCTO_TEMP_CTRL_OFFSET; priv->temp_ctrl_offset = OCTO_TEMP_CTRL_OFFSET;
priv->buffer_size = OCTO_CTRL_REPORT_SIZE; priv->buffer_size = OCTO_CTRL_REPORT_SIZE;
@ -1667,7 +1675,7 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id)
priv->temp_label = label_temp_sensors; priv->temp_label = label_temp_sensors;
priv->virtual_temp_label = label_virtual_temp_sensors; priv->virtual_temp_label = label_virtual_temp_sensors;
priv->speed_label = label_fan_speed; priv->speed_label = label_octo_speeds;
priv->power_label = label_fan_power; priv->power_label = label_fan_power;
priv->voltage_label = label_fan_voltage; priv->voltage_label = label_fan_voltage;
priv->current_label = label_fan_current; priv->current_label = label_fan_current;