Lines Matching full:devfreq
2 * linux/drivers/devfreq/governor_passive.c
15 #include <linux/devfreq.h>
18 static int devfreq_passive_get_target_freq(struct devfreq *devfreq, in devfreq_passive_get_target_freq() argument
22 = (struct devfreq_passive_data *)devfreq->data; in devfreq_passive_get_target_freq()
23 struct devfreq *parent_devfreq = (struct devfreq *)p_data->parent; in devfreq_passive_get_target_freq()
29 * If the devfreq device with passive governor has the specific method in devfreq_passive_get_target_freq()
34 ret = p_data->get_target_freq(devfreq, freq); in devfreq_passive_get_target_freq()
39 * If the parent and passive devfreq device uses the OPP table, in devfreq_passive_get_target_freq()
44 * - parent devfreq device uses the governors except for passive. in devfreq_passive_get_target_freq()
45 * - passive devfreq device uses the passive governor. in devfreq_passive_get_target_freq()
47 * Each devfreq has the OPP table. After deciding the new frequency in devfreq_passive_get_target_freq()
48 * from the governor of parent devfreq device, the passive governor in devfreq_passive_get_target_freq()
51 * new frequency for passive devfreq device. in devfreq_passive_get_target_freq()
53 if (!devfreq->profile || !devfreq->profile->freq_table in devfreq_passive_get_target_freq()
54 || devfreq->profile->max_state <= 0) in devfreq_passive_get_target_freq()
84 if (i < devfreq->profile->max_state) { in devfreq_passive_get_target_freq()
85 child_freq = devfreq->profile->freq_table[i]; in devfreq_passive_get_target_freq()
87 count = devfreq->profile->max_state; in devfreq_passive_get_target_freq()
88 child_freq = devfreq->profile->freq_table[count - 1]; in devfreq_passive_get_target_freq()
98 static int update_devfreq_passive(struct devfreq *devfreq, unsigned long freq) in update_devfreq_passive() argument
102 if (!devfreq->governor) in update_devfreq_passive()
105 mutex_lock_nested(&devfreq->lock, SINGLE_DEPTH_NESTING); in update_devfreq_passive()
107 ret = devfreq->governor->get_target_freq(devfreq, &freq); in update_devfreq_passive()
111 ret = devfreq->profile->target(devfreq->dev.parent, &freq, 0); in update_devfreq_passive()
115 if (devfreq->profile->freq_table in update_devfreq_passive()
116 && (devfreq_update_status(devfreq, freq))) in update_devfreq_passive()
117 dev_err(&devfreq->dev, in update_devfreq_passive()
120 devfreq->previous_freq = freq; in update_devfreq_passive()
123 mutex_unlock(&devfreq->lock); in update_devfreq_passive()
133 struct devfreq *devfreq = (struct devfreq *)data->this; in devfreq_passive_notifier_call() local
134 struct devfreq *parent = (struct devfreq *)data->parent; in devfreq_passive_notifier_call()
141 update_devfreq_passive(devfreq, freq); in devfreq_passive_notifier_call()
145 update_devfreq_passive(devfreq, freq); in devfreq_passive_notifier_call()
152 static int devfreq_passive_event_handler(struct devfreq *devfreq, in devfreq_passive_event_handler() argument
156 = (struct devfreq_passive_data *)devfreq->data; in devfreq_passive_event_handler()
157 struct devfreq *parent = (struct devfreq *)p_data->parent; in devfreq_passive_event_handler()
167 p_data->this = devfreq; in devfreq_passive_event_handler()
209 MODULE_DESCRIPTION("DEVFREQ Passive governor");