/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * This code gives functions to avoid code duplication while interacting with * the TUXEDO NB04 wmi interfaces. * * Copyright (C) 2024-2025 Werner Sembach */ #ifndef TUXEDO_NB04_WMI_UTIL_H #define TUXEDO_NB04_WMI_UTIL_H #include #define TUX_GET_DEVICE_STATUS_DEVICE_ID_TOUCHPAD 1 #define TUX_GET_DEVICE_STATUS_DEVICE_ID_KEYBOARD 2 #define TUX_GET_DEVICE_STATUS_DEVICE_ID_APP_PAGES 3 #define TUX_GET_DEVICE_STATUS_KBL_TYPE_NONE 0 #define TUX_GET_DEVICE_STATUS_KBL_TYPE_PER_KEY 1 #define TUX_GET_DEVICE_STATUS_KBL_TYPE_FOUR_ZONE 2 #define TUX_GET_DEVICE_STATUS_KBL_TYPE_WHITE_ONLY 3 #define TUX_GET_DEVICE_STATUS_KEYBOARD_LAYOUT_ANSII 0 #define TUX_GET_DEVICE_STATUS_KEYBOARD_LAYOUT_ISO 1 #define TUX_GET_DEVICE_STATUS_COLOR_ID_RED 1 #define TUX_GET_DEVICE_STATUS_COLOR_ID_GREEN 2 #define TUX_GET_DEVICE_STATUS_COLOR_ID_YELLOW 3 #define TUX_GET_DEVICE_STATUS_COLOR_ID_BLUE 4 #define TUX_GET_DEVICE_STATUS_COLOR_ID_PURPLE 5 #define TUX_GET_DEVICE_STATUS_COLOR_ID_INDIGO 6 #define TUX_GET_DEVICE_STATUS_COLOR_ID_WHITE 7 #define TUX_GET_DEVICE_STATUS_APP_PAGES_DASHBOARD BIT(0) #define TUX_GET_DEVICE_STATUS_APP_PAGES_SYSTEMINFOS BIT(1) #define TUX_GET_DEVICE_STATUS_APP_PAGES_KBL BIT(2) #define TUX_GET_DEVICE_STATUS_APP_PAGES_HOTKEYS BIT(3) union tux_wmi_xx_8in_80out_in_t { u8 raw[8]; struct __packed { u8 device_type; u8 reserved[7]; } get_device_status_in; }; union tux_wmi_xx_8in_80out_out_t { u8 raw[80]; struct __packed { u16 return_status; u8 device_enabled; u8 kbl_type; u8 kbl_side_bar_supported; u8 keyboard_physical_layout; u8 app_pages; u8 per_key_kbl_default_color; u8 four_zone_kbl_default_color_1; u8 four_zone_kbl_default_color_2; u8 four_zone_kbl_default_color_3; u8 four_zone_kbl_default_color_4; u8 light_bar_kbl_default_color; u8 reserved_0[1]; u16 dedicated_gpu_id; u8 reserved_1[64]; } get_device_status_out; }; enum tux_wmi_xx_8in_80out_methods { TUX_GET_DEVICE_STATUS = 2, }; #define TUX_KBL_SET_MULTIPLE_KEYS_LIGHTING_SETTINGS_COUNT_MAX 120 union tux_wmi_xx_496in_80out_in_t { u8 raw[496]; struct __packed { u8 reserved[15]; u8 rgb_configs_cnt; struct tux_kbl_set_multiple_keys_in_rgb_config_t { u8 key_id; u8 red; u8 green; u8 blue; } rgb_configs[TUX_KBL_SET_MULTIPLE_KEYS_LIGHTING_SETTINGS_COUNT_MAX]; } kbl_set_multiple_keys_in; }; union tux_wmi_xx_496in_80out_out_t { u8 raw[80]; struct __packed { u8 return_value; u8 reserved[79]; } kbl_set_multiple_keys_out; }; enum tux_wmi_xx_496in_80out_methods { TUX_KBL_SET_MULTIPLE_KEYS = 6, }; int tux_wmi_xx_8in_80out(struct wmi_device *wdev, enum tux_wmi_xx_8in_80out_methods method, union tux_wmi_xx_8in_80out_in_t *in, union tux_wmi_xx_8in_80out_out_t *out); int tux_wmi_xx_496in_80out(struct wmi_device *wdev, enum tux_wmi_xx_496in_80out_methods method, union tux_wmi_xx_496in_80out_in_t *in, union tux_wmi_xx_496in_80out_out_t *out); #endif