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 e0a885b72e0..f0d459bb46e 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)  static int nouveau_dsm_switch_mux(acpi_handle handle, int mux_id)  { +	mxm_wmi_call_mxmx(mux_id == NOUVEAU_DSM_LED_STAMINA ? MXM_MXDS_ADAPTER_IGD : MXM_MXDS_ADAPTER_0);  	mxm_wmi_call_mxds(mux_id == NOUVEAU_DSM_LED_STAMINA ? MXM_MXDS_ADAPTER_IGD : MXM_MXDS_ADAPTER_0);  	return nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL);  } diff --git a/drivers/platform/x86/mxm-wmi.c b/drivers/platform/x86/mxm-wmi.c index 12b6f341e72..0aea63b3729 100644 --- a/drivers/platform/x86/mxm-wmi.c +++ b/drivers/platform/x86/mxm-wmi.c @@ -32,6 +32,7 @@ MODULE_LICENSE("GPL");  MODULE_ALIAS("wmi:"MXM_WMMX_GUID);  #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ +#define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */  struct mxds_args {  	u32 func; @@ -51,7 +52,7 @@ int mxm_wmi_call_mxds(int adapter)  	acpi_status status;  	printk("calling mux switch %d\n", adapter); -	 +  	status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input,  				     &output); @@ -64,6 +65,31 @@ int mxm_wmi_call_mxds(int adapter)  }  EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); +int mxm_wmi_call_mxmx(int adapter) +{ +	struct mxds_args args = { +		.func = MXM_WMMX_FUNC_MXMX, +		.args = 0, +		.xarg = 1, +	}; +	struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; +	struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; +	acpi_status status; + +	printk("calling mux switch %d\n", adapter); + +	status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, +				     &output); + +	if (ACPI_FAILURE(status)) +		return status; + +	printk("mux mutex set switched %d\n", status); +	return 0; +			     +} +EXPORT_SYMBOL_GPL(mxm_wmi_call_mxmx); +  bool mxm_wmi_supported(void)  {  	bool guid_valid; diff --git a/include/linux/mxm-wmi.h b/include/linux/mxm-wmi.h index 51359c0718b..617a2950523 100644 --- a/include/linux/mxm-wmi.h +++ b/include/linux/mxm-wmi.h @@ -27,6 +27,7 @@  /* integrated adapter */  #define MXM_MXDS_ADAPTER_IGD 0x10  int mxm_wmi_call_mxds(int adapter); +int mxm_wmi_call_mxmx(int adapter);  bool mxm_wmi_supported(void);  #endif  |