xref: /linux/drivers/platform/x86/tuxedo/nb04/wmi_util.h (revision 1193e205dbb6feca917dc8e1862ffcdf2194234b)
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