From 48d654827e27922ad04da16c2f47b515eda1fba3 Mon Sep 17 00:00:00 2001 From: Yaroslav Chvanov Date: Sat, 29 Jan 2022 15:13:02 +0300 Subject: [PATCH] sinowealth: cache current profile index in driver data --- src/driver-sinowealth.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/driver-sinowealth.c b/src/driver-sinowealth.c index 83ec44d5..48f24b09 100644 --- a/src/driver-sinowealth.c +++ b/src/driver-sinowealth.c @@ -197,6 +197,7 @@ struct sinowealth_data { enum sinowealth_led_format led_type; enum sinowealth_sensor sensor; unsigned int config_size; + unsigned int current_profile_index; unsigned int led_count; struct sinowealth_config_report configs[SINOWEALTH_NUM_PROFILES]; }; @@ -388,6 +389,8 @@ sinowealth_get_active_profile(struct ratbag_device *device) { int rc = 0; + struct sinowealth_data *drv_data = device->drv_data; + uint8_t buf[6] = { SINOWEALTH_REPORT_ID_CMD, SINOWEALTH_CMD_PROFILE }; rc = ratbag_hidraw_set_feature_report(device, SINOWEALTH_REPORT_ID_CMD, buf, sizeof(buf)); if (rc != sizeof(buf)) { @@ -400,7 +403,11 @@ sinowealth_get_active_profile(struct ratbag_device *device) return -1; } - return buf[2] - 1; + unsigned int index = buf[2] - 1; + + drv_data->current_profile_index = index; + + return (int)index; } static int @@ -410,6 +417,8 @@ sinowealth_set_active_profile(struct ratbag_device *device, unsigned int index) int rc = 0; + struct sinowealth_data *drv_data = device->drv_data; + uint8_t buf[6] = { SINOWEALTH_REPORT_ID_CMD, SINOWEALTH_CMD_PROFILE, index + 1 }; rc = ratbag_hidraw_set_feature_report(device, SINOWEALTH_REPORT_ID_CMD, buf, sizeof(buf)); if (rc != sizeof(buf)) { @@ -417,6 +426,8 @@ sinowealth_set_active_profile(struct ratbag_device *device, unsigned int index) return -1; } + drv_data->current_profile_index = index; + return 0; }