Commit | Line | Data |
---|---|---|
1a59d1b8 | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
99b38b4a DA |
2 | /* |
3 | * MXM WMI driver | |
4 | * | |
5 | * Copyright(C) 2010 Red Hat. | |
99b38b4a DA |
6 | */ |
7 | #include <linux/kernel.h> | |
8 | #include <linux/module.h> | |
9 | #include <linux/init.h> | |
475879d6 | 10 | #include <linux/mxm-wmi.h> |
8b48463f | 11 | #include <linux/acpi.h> |
99b38b4a DA |
12 | |
13 | MODULE_AUTHOR("Dave Airlie"); | |
14 | MODULE_DESCRIPTION("MXM WMI Driver"); | |
15 | MODULE_LICENSE("GPL"); | |
16 | ||
17 | #define MXM_WMMX_GUID "F6CB5C3C-9CAE-4EBD-B577-931EA32A2CC0" | |
18 | ||
19 | MODULE_ALIAS("wmi:"MXM_WMMX_GUID); | |
20 | ||
21 | #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ | |
000703f4 | 22 | #define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */ |
99b38b4a DA |
23 | |
24 | struct mxds_args { | |
25 | u32 func; | |
26 | u32 args; | |
27 | u32 xarg; | |
28 | }; | |
29 | ||
30 | int mxm_wmi_call_mxds(int adapter) | |
31 | { | |
32 | struct mxds_args args = { | |
33 | .func = MXM_WMMX_FUNC_MXDS, | |
34 | .args = 0, | |
35 | .xarg = 1, | |
36 | }; | |
37 | struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; | |
99b38b4a DA |
38 | acpi_status status; |
39 | ||
40 | printk("calling mux switch %d\n", adapter); | |
000703f4 | 41 | |
727cc014 | 42 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x0, adapter, &input, NULL); |
99b38b4a DA |
43 | |
44 | if (ACPI_FAILURE(status)) | |
45 | return status; | |
46 | ||
47 | printk("mux switched %d\n", status); | |
48 | return 0; | |
49 | ||
50 | } | |
51 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); | |
52 | ||
000703f4 DA |
53 | int mxm_wmi_call_mxmx(int adapter) |
54 | { | |
55 | struct mxds_args args = { | |
56 | .func = MXM_WMMX_FUNC_MXMX, | |
57 | .args = 0, | |
58 | .xarg = 1, | |
59 | }; | |
60 | struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; | |
000703f4 DA |
61 | acpi_status status; |
62 | ||
63 | printk("calling mux switch %d\n", adapter); | |
64 | ||
727cc014 | 65 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x0, adapter, &input, NULL); |
000703f4 DA |
66 | |
67 | if (ACPI_FAILURE(status)) | |
68 | return status; | |
69 | ||
70 | printk("mux mutex set switched %d\n", status); | |
71 | return 0; | |
72 | ||
73 | } | |
74 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxmx); | |
75 | ||
99b38b4a DA |
76 | bool mxm_wmi_supported(void) |
77 | { | |
78 | bool guid_valid; | |
79 | guid_valid = wmi_has_guid(MXM_WMMX_GUID); | |
80 | return guid_valid; | |
81 | } | |
82 | EXPORT_SYMBOL_GPL(mxm_wmi_supported); | |
83 | ||
84 | static int __init mxm_wmi_init(void) | |
85 | { | |
86 | return 0; | |
87 | } | |
88 | ||
89 | static void __exit mxm_wmi_exit(void) | |
90 | { | |
91 | } | |
92 | ||
93 | module_init(mxm_wmi_init); | |
94 | module_exit(mxm_wmi_exit); |