1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Alienware WMI special features driver 4 * 5 * Copyright (C) 2014 Dell Inc <Dell.Client.Kernel@dell.com> 6 * Copyright (C) 2024 Kurt Borja <kuurtb@gmail.com> 7 */ 8 9 #ifndef _ALIENWARE_WMI_H_ 10 #define _ALIENWARE_WMI_H_ 11 12 #include <linux/leds.h> 13 #include <linux/platform_device.h> 14 #include <linux/wmi.h> 15 16 #define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" 17 #define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" 18 #define WMAX_CONTROL_GUID "A70591CE-A997-11DA-B012-B622A1EF5492" 19 20 enum INTERFACE_FLAGS { 21 LEGACY, 22 WMAX, 23 }; 24 25 enum LEGACY_CONTROL_STATES { 26 LEGACY_RUNNING = 1, 27 LEGACY_BOOTING = 0, 28 LEGACY_SUSPEND = 3, 29 }; 30 31 enum WMAX_CONTROL_STATES { 32 WMAX_RUNNING = 0xFF, 33 WMAX_BOOTING = 0, 34 WMAX_SUSPEND = 3, 35 }; 36 37 struct alienfx_quirks { 38 u8 num_zones; 39 bool hdmi_mux; 40 bool amplifier; 41 bool deepslp; 42 }; 43 44 struct color_platform { 45 u8 blue; 46 u8 green; 47 u8 red; 48 } __packed; 49 50 struct alienfx_priv { 51 struct platform_device *pdev; 52 struct led_classdev global_led; 53 struct color_platform colors[4]; 54 u8 global_brightness; 55 u8 lighting_control_state; 56 }; 57 58 struct alienfx_ops { 59 int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, 60 u8 location); 61 int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, 62 u8 brightness); 63 }; 64 65 struct alienfx_platdata { 66 struct wmi_device *wdev; 67 struct alienfx_ops ops; 68 }; 69 70 extern u8 alienware_interface; 71 extern struct alienfx_quirks *alienfx; 72 73 int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, 74 void *in_args, size_t in_size, u32 *out_data); 75 76 int alienware_alienfx_setup(struct alienfx_platdata *pdata); 77 78 #if IS_ENABLED(CONFIG_ALIENWARE_WMI_LEGACY) 79 int __init alienware_legacy_wmi_init(void); 80 void __exit alienware_legacy_wmi_exit(void); 81 #else 82 static inline int alienware_legacy_wmi_init(void) 83 { 84 return -ENODEV; 85 } 86 87 static inline void alienware_legacy_wmi_exit(void) 88 { 89 } 90 #endif 91 92 #if IS_ENABLED(CONFIG_ALIENWARE_WMI_WMAX) 93 extern const struct attribute_group wmax_hdmi_attribute_group; 94 extern const struct attribute_group wmax_amplifier_attribute_group; 95 extern const struct attribute_group wmax_deepsleep_attribute_group; 96 97 #define WMAX_DEV_GROUPS &wmax_hdmi_attribute_group, \ 98 &wmax_amplifier_attribute_group, \ 99 &wmax_deepsleep_attribute_group, 100 101 int __init alienware_wmax_wmi_init(void); 102 void __exit alienware_wmax_wmi_exit(void); 103 #else 104 #define WMAX_DEV_GROUPS 105 106 static inline int alienware_wmax_wmi_init(void) 107 { 108 return -ENODEV; 109 } 110 111 112 static inline void alienware_wmax_wmi_exit(void) 113 { 114 } 115 #endif 116 117 #endif 118