Unverified Commit 61c461a9 authored by Hridesh MG's avatar Hridesh MG Committed by Ilpo Järvinen
Browse files

platform/x86: acer-wmi: simplify platform profile cycling

Make use of platform_profile_cycle() to simplify the logic used for
cycling through the different platform profiles. Also remove the
unnecessary handling for AC power, as the hardware accepts different
profiles regardless of whether AC is plugged in.

Link: https://lore.kernel.org/platform-driver-x86/20e3ac66-b040-49a9-ab00-0adcfdaed2ff@gmx.de/


Signed-off-by: default avatarHridesh MG <hridesh699@gmail.com>
Reviewed-by: default avatarKurt Borja <kuurtb@gmail.com>
Link: https://lore.kernel.org/r/20250113-platform_profile-v4-3-23be0dff19f1@gmail.com


Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent cd44e09b
Loading
Loading
Loading
Loading
+19 −59
Original line number Diff line number Diff line
@@ -2044,77 +2044,37 @@ static int acer_platform_profile_setup(struct platform_device *device)
static int acer_thermal_profile_change(void)
{
	/*
	 * This mode key can rotate each mode or toggle turbo mode.
	 * On battery, only ECO and BALANCED mode are available.
	 * This mode key will either cycle through each mode or toggle the turbo profile.
	 */
	if (quirks->predator_v4) {
		u8 current_tp;
		int tp, err;
		u64 on_AC;
		int err, tp;

		err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_PLATFORM_PROFILE,
						   &current_tp);
		if (cycle_gaming_thermal_profile) {
			platform_profile_cycle();
		} else {
			err = WMID_gaming_get_misc_setting(
				ACER_WMID_MISC_SETTING_PLATFORM_PROFILE, &current_tp);
			if (err)
				return err;

		/* Check power source */
		err = WMID_gaming_get_sys_info(ACER_WMID_CMD_GET_PREDATOR_V4_BAT_STATUS, &on_AC);
		if (err < 0)
			return err;

		switch (current_tp) {
		case ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO:
			if (!on_AC)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
			else if (cycle_gaming_thermal_profile)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_ECO;
			else
			if (current_tp == ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO)
				tp = last_non_turbo_profile;
			break;
		case ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE:
			if (!on_AC)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
			else
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
			break;
		case ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED:
			if (!on_AC)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_ECO;
			else if (cycle_gaming_thermal_profile)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE;
			else
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
			break;
		case ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET:
			if (!on_AC)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
			else if (cycle_gaming_thermal_profile)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
			else
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
			break;
		case ACER_PREDATOR_V4_THERMAL_PROFILE_ECO:
			if (!on_AC)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
			else if (cycle_gaming_thermal_profile)
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET;
			else
				tp = ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
			break;
		default:
			return -EOPNOTSUPP;
		}

		err = WMID_gaming_set_misc_setting(ACER_WMID_MISC_SETTING_PLATFORM_PROFILE, tp);
			err = WMID_gaming_set_misc_setting(
				ACER_WMID_MISC_SETTING_PLATFORM_PROFILE, tp);
			if (err)
				return err;

		/* Store non-turbo profile for turbo mode toggle*/
		if (tp != ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO)
			last_non_turbo_profile = tp;
			/* Store last profile for toggle */
			if (current_tp != ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO)
				last_non_turbo_profile = current_tp;

			platform_profile_notify(&platform_profile_handler);
		}
	}

	return 0;
}