diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_acpi.c | 1 | ||||
-rw-r--r-- | drivers/platform/x86/mxm-wmi.c | 28 | ||||
-rw-r--r-- | include/linux/mxm-wmi.h | 1 |
3 files changed, 29 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c index e0a885b72e0e..f0d459bb46e4 100644 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c | |||
@@ -150,6 +150,7 @@ static int nouveau_dsm(acpi_handle handle, int func, int arg, uint32_t *result) | |||
150 | 150 | ||
151 | static int nouveau_dsm_switch_mux(acpi_handle handle, int mux_id) | 151 | static int nouveau_dsm_switch_mux(acpi_handle handle, int mux_id) |
152 | { | 152 | { |
153 | mxm_wmi_call_mxmx(mux_id == NOUVEAU_DSM_LED_STAMINA ? MXM_MXDS_ADAPTER_IGD : MXM_MXDS_ADAPTER_0); | ||
153 | mxm_wmi_call_mxds(mux_id == NOUVEAU_DSM_LED_STAMINA ? MXM_MXDS_ADAPTER_IGD : MXM_MXDS_ADAPTER_0); | 154 | mxm_wmi_call_mxds(mux_id == NOUVEAU_DSM_LED_STAMINA ? MXM_MXDS_ADAPTER_IGD : MXM_MXDS_ADAPTER_0); |
154 | return nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL); | 155 | return nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL); |
155 | } | 156 | } |
diff --git a/drivers/platform/x86/mxm-wmi.c b/drivers/platform/x86/mxm-wmi.c index 12b6f341e72b..0aea63b3729a 100644 --- a/drivers/platform/x86/mxm-wmi.c +++ b/drivers/platform/x86/mxm-wmi.c | |||
@@ -32,6 +32,7 @@ MODULE_LICENSE("GPL"); | |||
32 | MODULE_ALIAS("wmi:"MXM_WMMX_GUID); | 32 | MODULE_ALIAS("wmi:"MXM_WMMX_GUID); |
33 | 33 | ||
34 | #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ | 34 | #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ |
35 | #define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */ | ||
35 | 36 | ||
36 | struct mxds_args { | 37 | struct mxds_args { |
37 | u32 func; | 38 | u32 func; |
@@ -51,7 +52,7 @@ int mxm_wmi_call_mxds(int adapter) | |||
51 | acpi_status status; | 52 | acpi_status status; |
52 | 53 | ||
53 | printk("calling mux switch %d\n", adapter); | 54 | printk("calling mux switch %d\n", adapter); |
54 | 55 | ||
55 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, | 56 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, |
56 | &output); | 57 | &output); |
57 | 58 | ||
@@ -64,6 +65,31 @@ int mxm_wmi_call_mxds(int adapter) | |||
64 | } | 65 | } |
65 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); | 66 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); |
66 | 67 | ||
68 | int mxm_wmi_call_mxmx(int adapter) | ||
69 | { | ||
70 | struct mxds_args args = { | ||
71 | .func = MXM_WMMX_FUNC_MXMX, | ||
72 | .args = 0, | ||
73 | .xarg = 1, | ||
74 | }; | ||
75 | struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; | ||
76 | struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; | ||
77 | acpi_status status; | ||
78 | |||
79 | printk("calling mux switch %d\n", adapter); | ||
80 | |||
81 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, | ||
82 | &output); | ||
83 | |||
84 | if (ACPI_FAILURE(status)) | ||
85 | return status; | ||
86 | |||
87 | printk("mux mutex set switched %d\n", status); | ||
88 | return 0; | ||
89 | |||
90 | } | ||
91 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxmx); | ||
92 | |||
67 | bool mxm_wmi_supported(void) | 93 | bool mxm_wmi_supported(void) |
68 | { | 94 | { |
69 | bool guid_valid; | 95 | bool guid_valid; |
diff --git a/include/linux/mxm-wmi.h b/include/linux/mxm-wmi.h index 51359c0718bf..617a2950523c 100644 --- a/include/linux/mxm-wmi.h +++ b/include/linux/mxm-wmi.h | |||
@@ -27,6 +27,7 @@ | |||
27 | /* integrated adapter */ | 27 | /* integrated adapter */ |
28 | #define MXM_MXDS_ADAPTER_IGD 0x10 | 28 | #define MXM_MXDS_ADAPTER_IGD 0x10 |
29 | int mxm_wmi_call_mxds(int adapter); | 29 | int mxm_wmi_call_mxds(int adapter); |
30 | int mxm_wmi_call_mxmx(int adapter); | ||
30 | bool mxm_wmi_supported(void); | 31 | bool mxm_wmi_supported(void); |
31 | 32 | ||
32 | #endif | 33 | #endif |