Message ID | 20250105153019.19206-14-kuurtb@gmail.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | platform/x86: alienware-wmi driver rework | expand |
On 1/5/2025 09:30, Kurt Borja wrote: > Refactor thermal control methods to use alienware_wmi_command() instead > of alienware_wmax_command(). > > Drop alienware_wmax_command() as there is no more users left. > > Reviewed-by: Armin Wolf <W_Armin@gmx.de> > Signed-off-by: Kurt Borja <kuurtb@gmail.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/platform/x86/dell/alienware-wmi.c | 87 ++++++++--------------- > 1 file changed, 30 insertions(+), 57 deletions(-) > > diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c > index 5918750a3bb1..c75ad7ef3d54 100644 > --- a/drivers/platform/x86/dell/alienware-wmi.c > +++ b/drivers/platform/x86/dell/alienware-wmi.c > @@ -665,34 +665,6 @@ static enum led_brightness global_led_get(struct led_classdev *led_cdev) > return priv->global_brightness; > } > > -static acpi_status alienware_wmax_command(void *in_args, size_t in_size, > - u32 command, u32 *out_data) > -{ > - acpi_status status; > - union acpi_object *obj; > - struct acpi_buffer input; > - struct acpi_buffer output; > - > - input.length = in_size; > - input.pointer = in_args; > - if (out_data) { > - output.length = ACPI_ALLOCATE_BUFFER; > - output.pointer = NULL; > - status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, > - command, &input, &output); > - if (ACPI_SUCCESS(status)) { > - obj = (union acpi_object *)output.pointer; > - if (obj && obj->type == ACPI_TYPE_INTEGER) > - *out_data = (u32)obj->integer.value; > - } > - kfree(output.pointer); > - } else { > - status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, > - command, &input, NULL); > - } > - return status; > -} > - > /* > * The HDMI mux sysfs node indicates the status of the HDMI input mux. > * It can toggle between standard system GPU output and HDMI input. > @@ -938,7 +910,8 @@ static bool is_wmax_thermal_code(u32 code) > return false; > } > > -static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) > +static int wmax_thermal_information(struct wmi_device *wdev, u8 operation, > + u8 arg, u32 *out_data) > { > struct wmax_u32_args in_args = { > .operation = operation, > @@ -946,14 +919,12 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) > .arg2 = 0, > .arg3 = 0, > }; > - acpi_status status; > - > - status = alienware_wmax_command(&in_args, sizeof(in_args), > - WMAX_METHOD_THERMAL_INFORMATION, > - out_data); > + int ret; > > - if (ACPI_FAILURE(status)) > - return -EIO; > + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, > + &in_args, sizeof(in_args), out_data); > + if (ret < 0) > + return ret; > > if (*out_data == WMAX_FAILURE_CODE) > return -EBADRQC; > @@ -961,7 +932,7 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) > return 0; > } > > -static int wmax_thermal_control(u8 profile) > +static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) > { > struct wmax_u32_args in_args = { > .operation = WMAX_OPERATION_ACTIVATE_PROFILE, > @@ -969,15 +940,13 @@ static int wmax_thermal_control(u8 profile) > .arg2 = 0, > .arg3 = 0, > }; > - acpi_status status; > u32 out_data; > + int ret; > > - status = alienware_wmax_command(&in_args, sizeof(in_args), > - WMAX_METHOD_THERMAL_CONTROL, > - &out_data); > - > - if (ACPI_FAILURE(status)) > - return -EIO; > + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, > + &in_args, sizeof(in_args), &out_data); > + if (ret) > + return ret; > > if (out_data == WMAX_FAILURE_CODE) > return -EBADRQC; > @@ -985,7 +954,8 @@ static int wmax_thermal_control(u8 profile) > return 0; > } > > -static int wmax_game_shift_status(u8 operation, u32 *out_data) > +static int wmax_game_shift_status(struct wmi_device *wdev, u8 operation, > + u32 *out_data) > { > struct wmax_u32_args in_args = { > .operation = operation, > @@ -993,14 +963,13 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) > .arg2 = 0, > .arg3 = 0, > }; > - acpi_status status; > + int ret; > > - status = alienware_wmax_command(&in_args, sizeof(in_args), > - WMAX_METHOD_GAME_SHIFT_STATUS, > - out_data); > + ret = alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, > + &in_args, sizeof(in_args), out_data); > > - if (ACPI_FAILURE(status)) > - return -EIO; > + if (ret < 0) > + return ret; > > if (*out_data == WMAX_FAILURE_CODE) > return -EOPNOTSUPP; > @@ -1011,10 +980,11 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) > static int thermal_profile_get(struct platform_profile_handler *pprof, > enum platform_profile_option *profile) > { > + struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); > u32 out_data; > int ret; > > - ret = wmax_thermal_information(WMAX_OPERATION_CURRENT_PROFILE, > + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFILE, > 0, &out_data); > > if (ret < 0) > @@ -1043,7 +1013,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, > u32 gmode_status; > int ret; > > - ret = wmax_game_shift_status(WMAX_OPERATION_GET_GAME_SHIFT_STATUS, > + ret = wmax_game_shift_status(priv->wdev, > + WMAX_OPERATION_GET_GAME_SHIFT_STATUS, > &gmode_status); > > if (ret < 0) > @@ -1051,7 +1022,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, > > if ((profile == PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || > (profile != PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { > - ret = wmax_game_shift_status(WMAX_OPERATION_TOGGLE_GAME_SHIFT, > + ret = wmax_game_shift_status(priv->wdev, > + WMAX_OPERATION_TOGGLE_GAME_SHIFT, > &gmode_status); > > if (ret < 0) > @@ -1059,7 +1031,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, > } > } > > - return wmax_thermal_control(priv->supported_thermal_profiles[profile]); > + return wmax_thermal_control(priv->wdev, > + priv->supported_thermal_profiles[profile]); > } > > static int create_thermal_profile(struct wmi_device *wdev) > @@ -1072,7 +1045,7 @@ static int create_thermal_profile(struct wmi_device *wdev) > u32 out_data; > int ret; > > - ret = wmax_thermal_information(WMAX_OPERATION_SYS_DESCRIPTION, > + ret = wmax_thermal_information(wdev, WMAX_OPERATION_SYS_DESCRIPTION, > 0, (u32 *) &sys_desc); > if (ret < 0) > return ret; > @@ -1080,7 +1053,7 @@ static int create_thermal_profile(struct wmi_device *wdev) > first_mode = sys_desc[0] + sys_desc[1]; > > for (u32 i = 0; i < sys_desc[3]; i++) { > - ret = wmax_thermal_information(WMAX_OPERATION_LIST_IDS, > + ret = wmax_thermal_information(wdev, WMAX_OPERATION_LIST_IDS, > i + first_mode, &out_data); > > if (ret == -EIO)
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 5918750a3bb1..c75ad7ef3d54 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -665,34 +665,6 @@ static enum led_brightness global_led_get(struct led_classdev *led_cdev) return priv->global_brightness; } -static acpi_status alienware_wmax_command(void *in_args, size_t in_size, - u32 command, u32 *out_data) -{ - acpi_status status; - union acpi_object *obj; - struct acpi_buffer input; - struct acpi_buffer output; - - input.length = in_size; - input.pointer = in_args; - if (out_data) { - output.length = ACPI_ALLOCATE_BUFFER; - output.pointer = NULL; - status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - command, &input, &output); - if (ACPI_SUCCESS(status)) { - obj = (union acpi_object *)output.pointer; - if (obj && obj->type == ACPI_TYPE_INTEGER) - *out_data = (u32)obj->integer.value; - } - kfree(output.pointer); - } else { - status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - command, &input, NULL); - } - return status; -} - /* * The HDMI mux sysfs node indicates the status of the HDMI input mux. * It can toggle between standard system GPU output and HDMI input. @@ -938,7 +910,8 @@ static bool is_wmax_thermal_code(u32 code) return false; } -static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) +static int wmax_thermal_information(struct wmi_device *wdev, u8 operation, + u8 arg, u32 *out_data) { struct wmax_u32_args in_args = { .operation = operation, @@ -946,14 +919,12 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) .arg2 = 0, .arg3 = 0, }; - acpi_status status; - - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_THERMAL_INFORMATION, - out_data); + int ret; - if (ACPI_FAILURE(status)) - return -EIO; + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; if (*out_data == WMAX_FAILURE_CODE) return -EBADRQC; @@ -961,7 +932,7 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) return 0; } -static int wmax_thermal_control(u8 profile) +static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) { struct wmax_u32_args in_args = { .operation = WMAX_OPERATION_ACTIVATE_PROFILE, @@ -969,15 +940,13 @@ static int wmax_thermal_control(u8 profile) .arg2 = 0, .arg3 = 0, }; - acpi_status status; u32 out_data; + int ret; - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_THERMAL_CONTROL, - &out_data); - - if (ACPI_FAILURE(status)) - return -EIO; + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, + &in_args, sizeof(in_args), &out_data); + if (ret) + return ret; if (out_data == WMAX_FAILURE_CODE) return -EBADRQC; @@ -985,7 +954,8 @@ static int wmax_thermal_control(u8 profile) return 0; } -static int wmax_game_shift_status(u8 operation, u32 *out_data) +static int wmax_game_shift_status(struct wmi_device *wdev, u8 operation, + u32 *out_data) { struct wmax_u32_args in_args = { .operation = operation, @@ -993,14 +963,13 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) .arg2 = 0, .arg3 = 0, }; - acpi_status status; + int ret; - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_GAME_SHIFT_STATUS, - out_data); + ret = alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); - if (ACPI_FAILURE(status)) - return -EIO; + if (ret < 0) + return ret; if (*out_data == WMAX_FAILURE_CODE) return -EOPNOTSUPP; @@ -1011,10 +980,11 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) static int thermal_profile_get(struct platform_profile_handler *pprof, enum platform_profile_option *profile) { + struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); u32 out_data; int ret; - ret = wmax_thermal_information(WMAX_OPERATION_CURRENT_PROFILE, + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFILE, 0, &out_data); if (ret < 0) @@ -1043,7 +1013,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, u32 gmode_status; int ret; - ret = wmax_game_shift_status(WMAX_OPERATION_GET_GAME_SHIFT_STATUS, + ret = wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS, &gmode_status); if (ret < 0) @@ -1051,7 +1022,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, if ((profile == PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || (profile != PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { - ret = wmax_game_shift_status(WMAX_OPERATION_TOGGLE_GAME_SHIFT, + ret = wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_TOGGLE_GAME_SHIFT, &gmode_status); if (ret < 0) @@ -1059,7 +1031,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, } } - return wmax_thermal_control(priv->supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->wdev, + priv->supported_thermal_profiles[profile]); } static int create_thermal_profile(struct wmi_device *wdev) @@ -1072,7 +1045,7 @@ static int create_thermal_profile(struct wmi_device *wdev) u32 out_data; int ret; - ret = wmax_thermal_information(WMAX_OPERATION_SYS_DESCRIPTION, + ret = wmax_thermal_information(wdev, WMAX_OPERATION_SYS_DESCRIPTION, 0, (u32 *) &sys_desc); if (ret < 0) return ret; @@ -1080,7 +1053,7 @@ static int create_thermal_profile(struct wmi_device *wdev) first_mode = sys_desc[0] + sys_desc[1]; for (u32 i = 0; i < sys_desc[3]; i++) { - ret = wmax_thermal_information(WMAX_OPERATION_LIST_IDS, + ret = wmax_thermal_information(wdev, WMAX_OPERATION_LIST_IDS, i + first_mode, &out_data); if (ret == -EIO)