1*cfd84b3fSWerner Sembach /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*cfd84b3fSWerner Sembach /* 3*cfd84b3fSWerner Sembach * This code gives functions to avoid code duplication while interacting with 4*cfd84b3fSWerner Sembach * the TUXEDO NB04 wmi interfaces. 5*cfd84b3fSWerner Sembach * 6*cfd84b3fSWerner Sembach * Copyright (C) 2024-2025 Werner Sembach <wse@tuxedocomputers.com> 7*cfd84b3fSWerner Sembach */ 8*cfd84b3fSWerner Sembach 9*cfd84b3fSWerner Sembach #ifndef TUXEDO_NB04_WMI_UTIL_H 10*cfd84b3fSWerner Sembach #define TUXEDO_NB04_WMI_UTIL_H 11*cfd84b3fSWerner Sembach 12*cfd84b3fSWerner Sembach #include <linux/wmi.h> 13*cfd84b3fSWerner Sembach 14*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_DEVICE_ID_TOUCHPAD 1 15*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_DEVICE_ID_KEYBOARD 2 16*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_DEVICE_ID_APP_PAGES 3 17*cfd84b3fSWerner Sembach 18*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_KBL_TYPE_NONE 0 19*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_KBL_TYPE_PER_KEY 1 20*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_KBL_TYPE_FOUR_ZONE 2 21*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_KBL_TYPE_WHITE_ONLY 3 22*cfd84b3fSWerner Sembach 23*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_KEYBOARD_LAYOUT_ANSII 0 24*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_KEYBOARD_LAYOUT_ISO 1 25*cfd84b3fSWerner Sembach 26*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_RED 1 27*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_GREEN 2 28*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_YELLOW 3 29*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_BLUE 4 30*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_PURPLE 5 31*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_INDIGO 6 32*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_COLOR_ID_WHITE 7 33*cfd84b3fSWerner Sembach 34*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_APP_PAGES_DASHBOARD BIT(0) 35*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_APP_PAGES_SYSTEMINFOS BIT(1) 36*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_APP_PAGES_KBL BIT(2) 37*cfd84b3fSWerner Sembach #define TUX_GET_DEVICE_STATUS_APP_PAGES_HOTKEYS BIT(3) 38*cfd84b3fSWerner Sembach 39*cfd84b3fSWerner Sembach union tux_wmi_xx_8in_80out_in_t { 40*cfd84b3fSWerner Sembach u8 raw[8]; 41*cfd84b3fSWerner Sembach struct __packed { 42*cfd84b3fSWerner Sembach u8 device_type; 43*cfd84b3fSWerner Sembach u8 reserved[7]; 44*cfd84b3fSWerner Sembach } get_device_status_in; 45*cfd84b3fSWerner Sembach }; 46*cfd84b3fSWerner Sembach 47*cfd84b3fSWerner Sembach union tux_wmi_xx_8in_80out_out_t { 48*cfd84b3fSWerner Sembach u8 raw[80]; 49*cfd84b3fSWerner Sembach struct __packed { 50*cfd84b3fSWerner Sembach u16 return_status; 51*cfd84b3fSWerner Sembach u8 device_enabled; 52*cfd84b3fSWerner Sembach u8 kbl_type; 53*cfd84b3fSWerner Sembach u8 kbl_side_bar_supported; 54*cfd84b3fSWerner Sembach u8 keyboard_physical_layout; 55*cfd84b3fSWerner Sembach u8 app_pages; 56*cfd84b3fSWerner Sembach u8 per_key_kbl_default_color; 57*cfd84b3fSWerner Sembach u8 four_zone_kbl_default_color_1; 58*cfd84b3fSWerner Sembach u8 four_zone_kbl_default_color_2; 59*cfd84b3fSWerner Sembach u8 four_zone_kbl_default_color_3; 60*cfd84b3fSWerner Sembach u8 four_zone_kbl_default_color_4; 61*cfd84b3fSWerner Sembach u8 light_bar_kbl_default_color; 62*cfd84b3fSWerner Sembach u8 reserved_0[1]; 63*cfd84b3fSWerner Sembach u16 dedicated_gpu_id; 64*cfd84b3fSWerner Sembach u8 reserved_1[64]; 65*cfd84b3fSWerner Sembach } get_device_status_out; 66*cfd84b3fSWerner Sembach }; 67*cfd84b3fSWerner Sembach 68*cfd84b3fSWerner Sembach enum tux_wmi_xx_8in_80out_methods { 69*cfd84b3fSWerner Sembach TUX_GET_DEVICE_STATUS = 2, 70*cfd84b3fSWerner Sembach }; 71*cfd84b3fSWerner Sembach 72*cfd84b3fSWerner Sembach #define TUX_KBL_SET_MULTIPLE_KEYS_LIGHTING_SETTINGS_COUNT_MAX 120 73*cfd84b3fSWerner Sembach 74*cfd84b3fSWerner Sembach union tux_wmi_xx_496in_80out_in_t { 75*cfd84b3fSWerner Sembach u8 raw[496]; 76*cfd84b3fSWerner Sembach struct __packed { 77*cfd84b3fSWerner Sembach u8 reserved[15]; 78*cfd84b3fSWerner Sembach u8 rgb_configs_cnt; 79*cfd84b3fSWerner Sembach struct tux_kbl_set_multiple_keys_in_rgb_config_t { 80*cfd84b3fSWerner Sembach u8 key_id; 81*cfd84b3fSWerner Sembach u8 red; 82*cfd84b3fSWerner Sembach u8 green; 83*cfd84b3fSWerner Sembach u8 blue; 84*cfd84b3fSWerner Sembach } rgb_configs[TUX_KBL_SET_MULTIPLE_KEYS_LIGHTING_SETTINGS_COUNT_MAX]; 85*cfd84b3fSWerner Sembach } kbl_set_multiple_keys_in; 86*cfd84b3fSWerner Sembach }; 87*cfd84b3fSWerner Sembach 88*cfd84b3fSWerner Sembach union tux_wmi_xx_496in_80out_out_t { 89*cfd84b3fSWerner Sembach u8 raw[80]; 90*cfd84b3fSWerner Sembach struct __packed { 91*cfd84b3fSWerner Sembach u8 return_value; 92*cfd84b3fSWerner Sembach u8 reserved[79]; 93*cfd84b3fSWerner Sembach } kbl_set_multiple_keys_out; 94*cfd84b3fSWerner Sembach }; 95*cfd84b3fSWerner Sembach 96*cfd84b3fSWerner Sembach enum tux_wmi_xx_496in_80out_methods { 97*cfd84b3fSWerner Sembach TUX_KBL_SET_MULTIPLE_KEYS = 6, 98*cfd84b3fSWerner Sembach }; 99*cfd84b3fSWerner Sembach 100*cfd84b3fSWerner Sembach int tux_wmi_xx_8in_80out(struct wmi_device *wdev, 101*cfd84b3fSWerner Sembach enum tux_wmi_xx_8in_80out_methods method, 102*cfd84b3fSWerner Sembach union tux_wmi_xx_8in_80out_in_t *in, 103*cfd84b3fSWerner Sembach union tux_wmi_xx_8in_80out_out_t *out); 104*cfd84b3fSWerner Sembach int tux_wmi_xx_496in_80out(struct wmi_device *wdev, 105*cfd84b3fSWerner Sembach enum tux_wmi_xx_496in_80out_methods method, 106*cfd84b3fSWerner Sembach union tux_wmi_xx_496in_80out_in_t *in, 107*cfd84b3fSWerner Sembach union tux_wmi_xx_496in_80out_out_t *out); 108*cfd84b3fSWerner Sembach 109*cfd84b3fSWerner Sembach #endif 110