Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mxm/wmi: add MXMX interface entry point.

The MXMX method appears to be a mutex of some sort.

Signed-off-by: Dave Airlie <airlied@redhat.com>

+29 -1
+1
drivers/gpu/drm/nouveau/nouveau_acpi.c
··· 150 150 151 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 154 mxm_wmi_call_mxds(mux_id == NOUVEAU_DSM_LED_STAMINA ? MXM_MXDS_ADAPTER_IGD : MXM_MXDS_ADAPTER_0); 154 155 return nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL); 155 156 }
+27 -1
drivers/platform/x86/mxm-wmi.c
··· 32 32 MODULE_ALIAS("wmi:"MXM_WMMX_GUID); 33 33 34 34 #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ 35 + #define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */ 35 36 36 37 struct mxds_args { 37 38 u32 func; ··· 52 51 acpi_status status; 53 52 54 53 printk("calling mux switch %d\n", adapter); 55 - 54 + 56 55 status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, 57 56 &output); 58 57 ··· 64 63 65 64 } 66 65 EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); 66 + 67 + int mxm_wmi_call_mxmx(int adapter) 68 + { 69 + struct mxds_args args = { 70 + .func = MXM_WMMX_FUNC_MXMX, 71 + .args = 0, 72 + .xarg = 1, 73 + }; 74 + struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; 75 + struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; 76 + acpi_status status; 77 + 78 + printk("calling mux switch %d\n", adapter); 79 + 80 + status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, 81 + &output); 82 + 83 + if (ACPI_FAILURE(status)) 84 + return status; 85 + 86 + printk("mux mutex set switched %d\n", status); 87 + return 0; 88 + 89 + } 90 + EXPORT_SYMBOL_GPL(mxm_wmi_call_mxmx); 67 91 68 92 bool mxm_wmi_supported(void) 69 93 {
+1
include/linux/mxm-wmi.h
··· 27 27 /* integrated adapter */ 28 28 #define MXM_MXDS_ADAPTER_IGD 0x10 29 29 int mxm_wmi_call_mxds(int adapter); 30 + int mxm_wmi_call_mxmx(int adapter); 30 31 bool mxm_wmi_supported(void); 31 32 32 33 #endif