Lines Matching +full:switch +full:- +full:freq
19 unsigned long *freq) 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()
33 if (p_data->get_target_freq) { in devfreq_passive_get_target_freq()
34 ret = p_data->get_target_freq(devfreq, freq); 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()
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()
55 return -EINVAL; in devfreq_passive_get_target_freq()
59 * list of parent device. Because in this case, *freq is temporary in devfreq_passive_get_target_freq()
62 opp = devfreq_recommended_opp(parent_devfreq->dev.parent, freq, 0); in devfreq_passive_get_target_freq()
74 for (i = 0; i < parent_devfreq->profile->max_state; i++) in devfreq_passive_get_target_freq()
75 if (parent_devfreq->profile->freq_table[i] == *freq) in devfreq_passive_get_target_freq()
78 if (i == parent_devfreq->profile->max_state) { in devfreq_passive_get_target_freq()
79 ret = -EINVAL; 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()
92 *freq = child_freq; 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()
103 return -EINVAL; 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()
134 struct devfreq *parent = (struct devfreq *)data->parent; in devfreq_passive_notifier_call()
136 unsigned long freq = freqs->new; in devfreq_passive_notifier_call() local
138 switch (event) { in devfreq_passive_notifier_call()
140 if (parent->previous_freq > freq) in devfreq_passive_notifier_call()
141 update_devfreq_passive(devfreq, freq); in devfreq_passive_notifier_call()
144 if (parent->previous_freq < freq) in devfreq_passive_notifier_call()
145 update_devfreq_passive(devfreq, freq); in devfreq_passive_notifier_call()
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()
158 struct notifier_block *nb = &p_data->nb; in devfreq_passive_event_handler()
162 return -EPROBE_DEFER; in devfreq_passive_event_handler()
164 switch (event) { in devfreq_passive_event_handler()
166 if (!p_data->this) in devfreq_passive_event_handler()
167 p_data->this = devfreq; in devfreq_passive_event_handler()
169 nb->notifier_call = devfreq_passive_notifier_call; in devfreq_passive_event_handler()