Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
}
+27 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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