Lines Matching +full:devfreq +full:- +full:event
1 // SPDX-License-Identifier: GPL-2.0-only
3 * linux/drivers/devfreq/governor_userspace.c
11 #include <linux/devfreq.h>
22 static int devfreq_userspace_func(struct devfreq *df, unsigned long *freq) in devfreq_userspace_func()
24 struct userspace_data *data = df->governor_data; in devfreq_userspace_func()
26 if (data->valid) in devfreq_userspace_func()
27 *freq = data->user_frequency; in devfreq_userspace_func()
29 *freq = df->previous_freq; /* No user freq specified yet */ in devfreq_userspace_func()
37 struct devfreq *devfreq = to_devfreq(dev); in store_freq() local
42 mutex_lock(&devfreq->lock); in store_freq()
43 data = devfreq->governor_data; in store_freq()
46 data->user_frequency = wanted; in store_freq()
47 data->valid = true; in store_freq()
48 err = update_devfreq(devfreq); in store_freq()
51 mutex_unlock(&devfreq->lock); in store_freq()
58 struct devfreq *devfreq = to_devfreq(dev); in show_freq() local
62 mutex_lock(&devfreq->lock); in show_freq()
63 data = devfreq->governor_data; in show_freq()
65 if (data->valid) in show_freq()
66 err = sprintf(buf, "%lu\n", data->user_frequency); in show_freq()
69 mutex_unlock(&devfreq->lock); in show_freq()
83 static int userspace_init(struct devfreq *devfreq) in userspace_init() argument
90 err = -ENOMEM; in userspace_init()
93 data->valid = false; in userspace_init()
94 devfreq->governor_data = data; in userspace_init()
96 err = sysfs_create_group(&devfreq->dev.kobj, &dev_attr_group); in userspace_init()
101 static void userspace_exit(struct devfreq *devfreq) in userspace_exit() argument
107 if (devfreq->dev.kobj.sd) in userspace_exit()
108 sysfs_remove_group(&devfreq->dev.kobj, &dev_attr_group); in userspace_exit()
110 kfree(devfreq->governor_data); in userspace_exit()
111 devfreq->governor_data = NULL; in userspace_exit()
114 static int devfreq_userspace_handler(struct devfreq *devfreq, in devfreq_userspace_handler() argument
115 unsigned int event, void *data) in devfreq_userspace_handler() argument
119 switch (event) { in devfreq_userspace_handler()
121 ret = userspace_init(devfreq); in devfreq_userspace_handler()
124 userspace_exit(devfreq); in devfreq_userspace_handler()