• Home
  • Raw
  • Download

Lines Matching refs:st

26 void wf_pid_init(struct wf_pid_state *st, struct wf_pid_param *param)  in wf_pid_init()  argument
28 memset(st, 0, sizeof(struct wf_pid_state)); in wf_pid_init()
29 st->param = *param; in wf_pid_init()
30 st->first = 1; in wf_pid_init()
34 s32 wf_pid_run(struct wf_pid_state *st, s32 new_sample) in wf_pid_run() argument
38 int i, hlen = st->param.history_len; in wf_pid_run()
41 error = new_sample - st->param.itarget; in wf_pid_run()
44 if (st->first) { in wf_pid_run()
46 st->samples[i] = new_sample; in wf_pid_run()
47 st->errors[i] = error; in wf_pid_run()
49 st->first = 0; in wf_pid_run()
50 st->index = 0; in wf_pid_run()
52 st->index = (st->index + 1) % hlen; in wf_pid_run()
53 st->samples[st->index] = new_sample; in wf_pid_run()
54 st->errors[st->index] = error; in wf_pid_run()
59 integ += st->errors[(st->index + hlen - i) % hlen]; in wf_pid_run()
60 integ *= st->param.interval; in wf_pid_run()
63 deriv = st->errors[st->index] - in wf_pid_run()
64 st->errors[(st->index + hlen - 1) % hlen]; in wf_pid_run()
65 deriv /= st->param.interval; in wf_pid_run()
68 target = (s32)((integ * (s64)st->param.gr + deriv * (s64)st->param.gd + in wf_pid_run()
69 error * (s64)st->param.gp) >> 36); in wf_pid_run()
70 if (st->param.additive) in wf_pid_run()
71 target += st->target; in wf_pid_run()
72 target = max(target, st->param.min); in wf_pid_run()
73 target = min(target, st->param.max); in wf_pid_run()
74 st->target = target; in wf_pid_run()
76 return st->target; in wf_pid_run()
80 void wf_cpu_pid_init(struct wf_cpu_pid_state *st, in wf_cpu_pid_init() argument
83 memset(st, 0, sizeof(struct wf_cpu_pid_state)); in wf_cpu_pid_init()
84 st->param = *param; in wf_cpu_pid_init()
85 st->first = 1; in wf_cpu_pid_init()
89 s32 wf_cpu_pid_run(struct wf_cpu_pid_state *st, s32 new_power, s32 new_temp) in wf_cpu_pid_run() argument
93 int i, hlen = st->param.history_len; in wf_cpu_pid_run()
96 error = st->param.pmaxadj - new_power; in wf_cpu_pid_run()
99 if (st->first) { in wf_cpu_pid_run()
101 st->powers[i] = new_power; in wf_cpu_pid_run()
102 st->errors[i] = error; in wf_cpu_pid_run()
104 st->temps[0] = st->temps[1] = new_temp; in wf_cpu_pid_run()
105 st->first = 0; in wf_cpu_pid_run()
106 st->index = st->tindex = 0; in wf_cpu_pid_run()
108 st->index = (st->index + 1) % hlen; in wf_cpu_pid_run()
109 st->powers[st->index] = new_power; in wf_cpu_pid_run()
110 st->errors[st->index] = error; in wf_cpu_pid_run()
111 st->tindex = (st->tindex + 1) % 2; in wf_cpu_pid_run()
112 st->temps[st->tindex] = new_temp; in wf_cpu_pid_run()
117 integ += st->errors[(st->index + hlen - i) % hlen]; in wf_cpu_pid_run()
118 integ *= st->param.interval; in wf_cpu_pid_run()
119 integ *= st->param.gr; in wf_cpu_pid_run()
120 sval = st->param.tmax - (s32)(integ >> 20); in wf_cpu_pid_run()
121 adj = min(st->param.ttarget, sval); in wf_cpu_pid_run()
126 deriv = st->temps[st->tindex] - in wf_cpu_pid_run()
127 st->temps[(st->tindex + 2 - 1) % 2]; in wf_cpu_pid_run()
128 deriv /= st->param.interval; in wf_cpu_pid_run()
129 deriv *= st->param.gd; in wf_cpu_pid_run()
132 prop = st->last_delta = (new_temp - adj); in wf_cpu_pid_run()
133 prop *= st->param.gp; in wf_cpu_pid_run()
138 target = st->target + (s32)((deriv + prop) >> 36); in wf_cpu_pid_run()
139 target = max(target, st->param.min); in wf_cpu_pid_run()
140 target = min(target, st->param.max); in wf_cpu_pid_run()
141 st->target = target; in wf_cpu_pid_run()
143 return st->target; in wf_cpu_pid_run()