Commit 000703f4 authored by Dave Airlie's avatar Dave Airlie

mxm/wmi: add MXMX interface entry point.

The MXMX method appears to be a mutex of some sort.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent f19467c5
...@@ -150,6 +150,7 @@ static int nouveau_dsm(acpi_handle handle, int func, int arg, uint32_t *result) ...@@ -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) 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); 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); return nouveau_dsm(handle, NOUVEAU_DSM_LED, mux_id, NULL);
} }
......
...@@ -32,6 +32,7 @@ MODULE_LICENSE("GPL"); ...@@ -32,6 +32,7 @@ MODULE_LICENSE("GPL");
MODULE_ALIAS("wmi:"MXM_WMMX_GUID); MODULE_ALIAS("wmi:"MXM_WMMX_GUID);
#define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */
#define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */
struct mxds_args { struct mxds_args {
u32 func; u32 func;
...@@ -51,7 +52,7 @@ int mxm_wmi_call_mxds(int adapter) ...@@ -51,7 +52,7 @@ int mxm_wmi_call_mxds(int adapter)
acpi_status status; acpi_status status;
printk("calling mux switch %d\n", adapter); printk("calling mux switch %d\n", adapter);
status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input, status = wmi_evaluate_method(MXM_WMMX_GUID, 0x1, adapter, &input,
&output); &output);
...@@ -64,6 +65,31 @@ int mxm_wmi_call_mxds(int adapter) ...@@ -64,6 +65,31 @@ int mxm_wmi_call_mxds(int adapter)
} }
EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); 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 mxm_wmi_supported(void)
{ {
bool guid_valid; bool guid_valid;
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
/* integrated adapter */ /* integrated adapter */
#define MXM_MXDS_ADAPTER_IGD 0x10 #define MXM_MXDS_ADAPTER_IGD 0x10
int mxm_wmi_call_mxds(int adapter); int mxm_wmi_call_mxds(int adapter);
int mxm_wmi_call_mxmx(int adapter);
bool mxm_wmi_supported(void); bool mxm_wmi_supported(void);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment