Commit ba95eb44 authored by Gergo Koteles's avatar Gergo Koteles Committed by Hans de Goede

ACPI: platform-profile: add platform_profile_cycle()

Some laptops have a key to switch platform profiles.

Add a platform_profile_cycle() function to cycle between the enabled
profiles.
Signed-off-by: default avatarGergo Koteles <soyer@irl.hu>
Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lore.kernel.org/r/5a97deddf72aa5e764d881eb39a7ba35c01a903e.1712597199.git.soyer@irl.huReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent c1ca2311
...@@ -136,6 +136,45 @@ void platform_profile_notify(void) ...@@ -136,6 +136,45 @@ void platform_profile_notify(void)
} }
EXPORT_SYMBOL_GPL(platform_profile_notify); EXPORT_SYMBOL_GPL(platform_profile_notify);
int platform_profile_cycle(void)
{
enum platform_profile_option profile;
enum platform_profile_option next;
int err;
err = mutex_lock_interruptible(&profile_lock);
if (err)
return err;
if (!cur_profile) {
mutex_unlock(&profile_lock);
return -ENODEV;
}
err = cur_profile->profile_get(cur_profile, &profile);
if (err) {
mutex_unlock(&profile_lock);
return err;
}
next = find_next_bit_wrap(cur_profile->choices, PLATFORM_PROFILE_LAST,
profile + 1);
if (WARN_ON(next == PLATFORM_PROFILE_LAST)) {
mutex_unlock(&profile_lock);
return -EINVAL;
}
err = cur_profile->profile_set(cur_profile, next);
mutex_unlock(&profile_lock);
if (!err)
sysfs_notify(acpi_kobj, NULL, "platform_profile");
return err;
}
EXPORT_SYMBOL_GPL(platform_profile_cycle);
int platform_profile_register(struct platform_profile_handler *pprof) int platform_profile_register(struct platform_profile_handler *pprof)
{ {
int err; int err;
......
...@@ -36,6 +36,7 @@ struct platform_profile_handler { ...@@ -36,6 +36,7 @@ struct platform_profile_handler {
int platform_profile_register(struct platform_profile_handler *pprof); int platform_profile_register(struct platform_profile_handler *pprof);
int platform_profile_remove(void); int platform_profile_remove(void);
int platform_profile_cycle(void);
void platform_profile_notify(void); void platform_profile_notify(void);
#endif /*_PLATFORM_PROFILE_H_*/ #endif /*_PLATFORM_PROFILE_H_*/
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