Lines Matching full:devfreq
3 * linux/drivers/devfreq/governor_passive.c
12 #include <linux/devfreq.h>
15 static int devfreq_passive_get_target_freq(struct devfreq *devfreq, in devfreq_passive_get_target_freq() argument
19 = (struct devfreq_passive_data *)devfreq->data; in devfreq_passive_get_target_freq()
20 struct devfreq *parent_devfreq = (struct devfreq *)p_data->parent; in devfreq_passive_get_target_freq()
26 * If the devfreq device with passive governor has the specific method in devfreq_passive_get_target_freq()
31 ret = p_data->get_target_freq(devfreq, freq); in devfreq_passive_get_target_freq()
36 * If the parent and passive devfreq device uses the OPP table, in devfreq_passive_get_target_freq()
41 * - parent devfreq device uses the governors except for passive. in devfreq_passive_get_target_freq()
42 * - passive devfreq device uses the passive governor. in devfreq_passive_get_target_freq()
44 * Each devfreq has the OPP table. After deciding the new frequency in devfreq_passive_get_target_freq()
45 * from the governor of parent devfreq device, the passive governor in devfreq_passive_get_target_freq()
48 * new frequency for passive devfreq device. in devfreq_passive_get_target_freq()
50 if (!devfreq->profile || !devfreq->profile->freq_table in devfreq_passive_get_target_freq()
51 || devfreq->profile->max_state <= 0) in devfreq_passive_get_target_freq()
81 if (i < devfreq->profile->max_state) { in devfreq_passive_get_target_freq()
82 child_freq = devfreq->profile->freq_table[i]; in devfreq_passive_get_target_freq()
84 count = devfreq->profile->max_state; in devfreq_passive_get_target_freq()
85 child_freq = devfreq->profile->freq_table[count - 1]; in devfreq_passive_get_target_freq()
95 static int update_devfreq_passive(struct devfreq *devfreq, unsigned long freq) in update_devfreq_passive() argument
99 if (!devfreq->governor) in update_devfreq_passive()
102 mutex_lock_nested(&devfreq->lock, SINGLE_DEPTH_NESTING); in update_devfreq_passive()
104 ret = devfreq->governor->get_target_freq(devfreq, &freq); in update_devfreq_passive()
108 ret = devfreq->profile->target(devfreq->dev.parent, &freq, 0); in update_devfreq_passive()
112 if (devfreq->profile->freq_table in update_devfreq_passive()
113 && (devfreq_update_status(devfreq, freq))) in update_devfreq_passive()
114 dev_err(&devfreq->dev, in update_devfreq_passive()
117 devfreq->previous_freq = freq; in update_devfreq_passive()
120 mutex_unlock(&devfreq->lock); in update_devfreq_passive()
130 struct devfreq *devfreq = (struct devfreq *)data->this; in devfreq_passive_notifier_call() local
131 struct devfreq *parent = (struct devfreq *)data->parent; in devfreq_passive_notifier_call()
138 update_devfreq_passive(devfreq, freq); in devfreq_passive_notifier_call()
142 update_devfreq_passive(devfreq, freq); in devfreq_passive_notifier_call()
149 static int devfreq_passive_event_handler(struct devfreq *devfreq, in devfreq_passive_event_handler() argument
153 = (struct devfreq_passive_data *)devfreq->data; in devfreq_passive_event_handler()
154 struct devfreq *parent = (struct devfreq *)p_data->parent; in devfreq_passive_event_handler()
164 p_data->this = devfreq; in devfreq_passive_event_handler()
206 MODULE_DESCRIPTION("DEVFREQ Passive governor");