hwmon: (aquacomputer_d5next) Device dependent control report settings
authorLeonard Anderweit <leonard.anderweit@gmail.com>
Tue, 14 Feb 2023 22:02:18 +0000 (23:02 +0100)
committerGuenter Roeck <linux@roeck-us.net>
Wed, 19 Apr 2023 14:08:32 +0000 (07:08 -0700)
Add device dependent control report id, secondary control report id,
secondary control report size and secondary control report for devices
which need different control report settings. All currently supported
devices use the same values.

Signed-off-by: Leonard Anderweit <leonard.anderweit@gmail.com>
Link: https://lore.kernel.org/r/20230214220221.15003-4-leonard.anderweit@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/aquacomputer_d5next.c

index f0c036d..535d2fc 100644 (file)
@@ -441,6 +441,10 @@ struct aqc_data {
        const char *name;
 
        int status_report_id;   /* Used for legacy devices, report is stored in buffer */
+       int ctrl_report_id;
+       int secondary_ctrl_report_id;
+       int secondary_ctrl_report_size;
+       u8 *secondary_ctrl_report;
 
        int buffer_size;
        u8 *buffer;
@@ -513,7 +517,7 @@ static int aqc_get_ctrl_data(struct aqc_data *priv)
        int ret;
 
        memset(priv->buffer, 0x00, priv->buffer_size);
-       ret = hid_hw_raw_request(priv->hdev, CTRL_REPORT_ID, priv->buffer, priv->buffer_size,
+       ret = hid_hw_raw_request(priv->hdev, priv->ctrl_report_id, priv->buffer, priv->buffer_size,
                                 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
        if (ret < 0)
                ret = -ENODATA;
@@ -535,15 +539,15 @@ static int aqc_send_ctrl_data(struct aqc_data *priv)
        put_unaligned_be16(checksum, priv->buffer + priv->checksum_offset);
 
        /* Send the patched up report back to the device */
-       ret = hid_hw_raw_request(priv->hdev, CTRL_REPORT_ID, priv->buffer, priv->buffer_size,
+       ret = hid_hw_raw_request(priv->hdev, priv->ctrl_report_id, priv->buffer, priv->buffer_size,
                                 HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
        if (ret < 0)
                return ret;
 
        /* The official software sends this report after every change, so do it here as well */
-       ret = hid_hw_raw_request(priv->hdev, SECONDARY_CTRL_REPORT_ID, secondary_ctrl_report,
-                                SECONDARY_CTRL_REPORT_SIZE, HID_FEATURE_REPORT,
-                                HID_REQ_SET_REPORT);
+       ret = hid_hw_raw_request(priv->hdev, priv->secondary_ctrl_report_id,
+                                priv->secondary_ctrl_report, priv->secondary_ctrl_report_size,
+                                HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
        return ret;
 }
 
@@ -1447,6 +1451,11 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id)
                priv->serial_number_start_offset = AQC_SERIAL_START;
                priv->firmware_version_offset = AQC_FIRMWARE_VERSION;
 
+               priv->ctrl_report_id = CTRL_REPORT_ID;
+               priv->secondary_ctrl_report_id = SECONDARY_CTRL_REPORT_ID;
+               priv->secondary_ctrl_report_size = SECONDARY_CTRL_REPORT_SIZE;
+               priv->secondary_ctrl_report = secondary_ctrl_report;
+
                if (priv->kind == aquastreamult)
                        priv->fan_structure = &aqc_aquastreamult_fan_structure;
                else