#include <linux/platform_profile.h>
#include <linux/sysfs.h>
-static struct platform_profile_handler *cur_profile;
static DEFINE_MUTEX(profile_lock);
static const char * const profile_names[] = {
void platform_profile_notify(struct platform_profile_handler *pprof)
{
- if (!cur_profile)
- return;
scoped_cond_guard(mutex_intr, return, &profile_lock) {
_notify_class_profile(pprof->class_dev, NULL);
}
}
guard(mutex)(&profile_lock);
- /* We can only have one active profile */
- if (cur_profile)
- return -EEXIST;
/* create class interface for individual handler */
pprof->minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
sysfs_notify(acpi_kobj, NULL, "platform_profile");
- cur_profile = pprof;
-
err = sysfs_update_group(acpi_kobj, &platform_profile_group);
if (err)
goto cleanup_cur;
return 0;
cleanup_cur:
- cur_profile = NULL;
device_unregister(pprof->class_dev);
cleanup_ida:
int id;
guard(mutex)(&profile_lock);
- cur_profile = NULL;
-
id = pprof->minor;
device_unregister(pprof->class_dev);
ida_free(&platform_profile_ida, id);