mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
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: Gergo Koteles <soyer@irl.hu> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://lore.kernel.org/r/5a97deddf72aa5e764d881eb39a7ba35c01a903e.1712597199.git.soyer@irl.hu Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
c1ca23111a
commit
ba95eb4467
@ -136,6 +136,45 @@ void platform_profile_notify(void)
|
||||
}
|
||||
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 err;
|
||||
|
@ -36,6 +36,7 @@ struct platform_profile_handler {
|
||||
|
||||
int platform_profile_register(struct platform_profile_handler *pprof);
|
||||
int platform_profile_remove(void);
|
||||
int platform_profile_cycle(void);
|
||||
void platform_profile_notify(void);
|
||||
|
||||
#endif /*_PLATFORM_PROFILE_H_*/
|
||||
|
Loading…
Reference in New Issue
Block a user