Unverified Commit 22ea7b9d authored by Luke D. Jones's avatar Luke D. Jones Committed by Ilpo Järvinen
Browse files

platform/x86: asus-wmi: export symbols used for read/write WMI



Export symbols for reading/writing WMI symbols using a namespace.
Existing functions:
- asus_wmi_evaluate_method
- asus_wmi_set_devstate
New function:
- asus_wmi_get_devstate_dsts

The new function is intended for use with DSTS WMI method only and
avoids requiring the asus_wmi driver data to select the WMI method.

Co-developed-by: default avatarDenis Benato <denis.benato@linux.dev>
Signed-off-by: default avatarDenis Benato <denis.benato@linux.dev>
Signed-off-by: default avatarLuke D. Jones <luke@ljones.dev>
Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Link: https://patch.msgid.link/20251102215319.3126879-2-denis.benato@linux.dev


Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent ff49362e
Loading
Loading
Loading
Loading
+43 −3
Original line number Diff line number Diff line
@@ -390,7 +390,7 @@ int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval)
{
	return asus_wmi_evaluate_method3(method_id, arg0, arg1, 0, retval);
}
EXPORT_SYMBOL_GPL(asus_wmi_evaluate_method);
EXPORT_SYMBOL_NS_GPL(asus_wmi_evaluate_method, "ASUS_WMI");

static int asus_wmi_evaluate_method5(u32 method_id,
		u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4, u32 *retval)
@@ -554,12 +554,52 @@ static int asus_wmi_get_devstate(struct asus_wmi *asus, u32 dev_id, u32 *retval)
	return 0;
}

int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param,
				 u32 *retval)
/**
 * asus_wmi_get_devstate_dsts() - Get the WMI function state.
 * @dev_id: The WMI method ID to call.
 * @retval: A pointer to where to store the value returned from WMI.
 *
 * Returns:
 * * %-ENODEV	- method ID is unsupported.
 * * %0			- successful and retval is filled.
 * * %other		- error from WMI call.
 */
int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
{
	int err;

	err = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, dev_id, 0, retval);
	if (err)
		return err;

	if ((*retval & ASUS_WMI_DSTS_PRESENCE_BIT) == 0x00)
		return -ENODEV;

	return 0;
}
EXPORT_SYMBOL_NS_GPL(asus_wmi_get_devstate_dsts, "ASUS_WMI");

/**
 * asus_wmi_set_devstate() - Set the WMI function state.
 *
 * Note: an asus_wmi_set_devstate() call must be paired with a
 * asus_wmi_get_devstate_dsts() to check if the WMI function is supported.
 *
 * @dev_id: The WMI function to call.
 * @ctrl_param: The argument to be used for this WMI function.
 * @retval: A pointer to where to store the value returned from WMI.
 *
 * Returns:
 * * %-ENODEV	- method ID is unsupported.
 * * %0			- successful and retval is filled.
 * * %other		- error from WMI call.
 */
int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
{
	return asus_wmi_evaluate_method(ASUS_WMI_METHODID_DEVS, dev_id,
					ctrl_param, retval);
}
EXPORT_SYMBOL_NS_GPL(asus_wmi_set_devstate, "ASUS_WMI");

/* Helper for special devices with magic return codes */
static int asus_wmi_get_devstate_bits(struct asus_wmi *asus,
+5 −0
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@ enum asus_ally_mcu_hack {
#if IS_REACHABLE(CONFIG_ASUS_WMI)
void set_ally_mcu_hack(enum asus_ally_mcu_hack status);
void set_ally_mcu_powersave(bool enabled);
int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval);
int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval);
int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
#else
@@ -179,6 +180,10 @@ static inline int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
{
	return -ENODEV;
}
static inline int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
{
	return -ENODEV;
}
static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
					   u32 *retval)
{