@@ -117,13 +117,14 @@ static unsigned long clk_pllv3_recalc_rate(struct clk_hw *hw,
117
117
return (div == 1 ) ? parent_rate * 22 : parent_rate * 20 ;
118
118
}
119
119
120
- static long clk_pllv3_round_rate (struct clk_hw * hw , unsigned long rate ,
121
- unsigned long * prate )
120
+ static int clk_pllv3_determine_rate (struct clk_hw * hw ,
121
+ struct clk_rate_request * req )
122
122
{
123
- unsigned long parent_rate = * prate ;
123
+ unsigned long parent_rate = req -> best_parent_rate ;
124
124
125
- return (rate >= parent_rate * 22 ) ? parent_rate * 22 :
126
- parent_rate * 20 ;
125
+ req -> rate = (req -> rate >= parent_rate * 22 ) ? parent_rate * 22 : parent_rate * 20 ;
126
+
127
+ return 0 ;
127
128
}
128
129
129
130
static int clk_pllv3_set_rate (struct clk_hw * hw , unsigned long rate ,
@@ -152,7 +153,7 @@ static const struct clk_ops clk_pllv3_ops = {
152
153
.unprepare = clk_pllv3_unprepare ,
153
154
.is_prepared = clk_pllv3_is_prepared ,
154
155
.recalc_rate = clk_pllv3_recalc_rate ,
155
- .round_rate = clk_pllv3_round_rate ,
156
+ .determine_rate = clk_pllv3_determine_rate ,
156
157
.set_rate = clk_pllv3_set_rate ,
157
158
};
158
159
@@ -165,21 +166,23 @@ static unsigned long clk_pllv3_sys_recalc_rate(struct clk_hw *hw,
165
166
return parent_rate * div / 2 ;
166
167
}
167
168
168
- static long clk_pllv3_sys_round_rate (struct clk_hw * hw , unsigned long rate ,
169
- unsigned long * prate )
169
+ static int clk_pllv3_sys_determine_rate (struct clk_hw * hw ,
170
+ struct clk_rate_request * req )
170
171
{
171
- unsigned long parent_rate = * prate ;
172
+ unsigned long parent_rate = req -> best_parent_rate ;
172
173
unsigned long min_rate = parent_rate * 54 / 2 ;
173
174
unsigned long max_rate = parent_rate * 108 / 2 ;
174
175
u32 div ;
175
176
176
- if (rate > max_rate )
177
- rate = max_rate ;
178
- else if (rate < min_rate )
179
- rate = min_rate ;
180
- div = rate * 2 / parent_rate ;
177
+ if (req -> rate > max_rate )
178
+ req -> rate = max_rate ;
179
+ else if (req -> rate < min_rate )
180
+ req -> rate = min_rate ;
181
+ div = req -> rate * 2 / parent_rate ;
181
182
182
- return parent_rate * div / 2 ;
183
+ req -> rate = parent_rate * div / 2 ;
184
+
185
+ return 0 ;
183
186
}
184
187
185
188
static int clk_pllv3_sys_set_rate (struct clk_hw * hw , unsigned long rate ,
@@ -207,7 +210,7 @@ static const struct clk_ops clk_pllv3_sys_ops = {
207
210
.unprepare = clk_pllv3_unprepare ,
208
211
.is_prepared = clk_pllv3_is_prepared ,
209
212
.recalc_rate = clk_pllv3_sys_recalc_rate ,
210
- .round_rate = clk_pllv3_sys_round_rate ,
213
+ .determine_rate = clk_pllv3_sys_determine_rate ,
211
214
.set_rate = clk_pllv3_sys_set_rate ,
212
215
};
213
216
@@ -226,27 +229,27 @@ static unsigned long clk_pllv3_av_recalc_rate(struct clk_hw *hw,
226
229
return parent_rate * div + (unsigned long )temp64 ;
227
230
}
228
231
229
- static long clk_pllv3_av_round_rate (struct clk_hw * hw , unsigned long rate ,
230
- unsigned long * prate )
232
+ static int clk_pllv3_av_determine_rate (struct clk_hw * hw ,
233
+ struct clk_rate_request * req )
231
234
{
232
- unsigned long parent_rate = * prate ;
235
+ unsigned long parent_rate = req -> best_parent_rate ;
233
236
unsigned long min_rate = parent_rate * 27 ;
234
237
unsigned long max_rate = parent_rate * 54 ;
235
238
u32 div ;
236
239
u32 mfn , mfd = 1000000 ;
237
240
u32 max_mfd = 0x3FFFFFFF ;
238
241
u64 temp64 ;
239
242
240
- if (rate > max_rate )
241
- rate = max_rate ;
242
- else if (rate < min_rate )
243
- rate = min_rate ;
243
+ if (req -> rate > max_rate )
244
+ req -> rate = max_rate ;
245
+ else if (req -> rate < min_rate )
246
+ req -> rate = min_rate ;
244
247
245
248
if (parent_rate <= max_mfd )
246
249
mfd = parent_rate ;
247
250
248
- div = rate / parent_rate ;
249
- temp64 = (u64 ) (rate - div * parent_rate );
251
+ div = req -> rate / parent_rate ;
252
+ temp64 = (u64 ) (req -> rate - div * parent_rate );
250
253
temp64 *= mfd ;
251
254
temp64 = div64_ul (temp64 , parent_rate );
252
255
mfn = temp64 ;
@@ -255,7 +258,9 @@ static long clk_pllv3_av_round_rate(struct clk_hw *hw, unsigned long rate,
255
258
temp64 *= mfn ;
256
259
do_div (temp64 , mfd );
257
260
258
- return parent_rate * div + (unsigned long )temp64 ;
261
+ req -> rate = parent_rate * div + (unsigned long )temp64 ;
262
+
263
+ return 0 ;
259
264
}
260
265
261
266
static int clk_pllv3_av_set_rate (struct clk_hw * hw , unsigned long rate ,
@@ -296,7 +301,7 @@ static const struct clk_ops clk_pllv3_av_ops = {
296
301
.unprepare = clk_pllv3_unprepare ,
297
302
.is_prepared = clk_pllv3_is_prepared ,
298
303
.recalc_rate = clk_pllv3_av_recalc_rate ,
299
- .round_rate = clk_pllv3_av_round_rate ,
304
+ .determine_rate = clk_pllv3_av_determine_rate ,
300
305
.set_rate = clk_pllv3_av_set_rate ,
301
306
};
302
307
@@ -355,12 +360,15 @@ static unsigned long clk_pllv3_vf610_recalc_rate(struct clk_hw *hw,
355
360
return clk_pllv3_vf610_mf_to_rate (parent_rate , mf );
356
361
}
357
362
358
- static long clk_pllv3_vf610_round_rate (struct clk_hw * hw , unsigned long rate ,
359
- unsigned long * prate )
363
+ static int clk_pllv3_vf610_determine_rate (struct clk_hw * hw ,
364
+ struct clk_rate_request * req )
360
365
{
361
- struct clk_pllv3_vf610_mf mf = clk_pllv3_vf610_rate_to_mf (* prate , rate );
366
+ struct clk_pllv3_vf610_mf mf = clk_pllv3_vf610_rate_to_mf (req -> best_parent_rate ,
367
+ req -> rate );
368
+
369
+ req -> rate = clk_pllv3_vf610_mf_to_rate (req -> best_parent_rate , mf );
362
370
363
- return clk_pllv3_vf610_mf_to_rate ( * prate , mf ) ;
371
+ return 0 ;
364
372
}
365
373
366
374
static int clk_pllv3_vf610_set_rate (struct clk_hw * hw , unsigned long rate ,
@@ -389,7 +397,7 @@ static const struct clk_ops clk_pllv3_vf610_ops = {
389
397
.unprepare = clk_pllv3_unprepare ,
390
398
.is_prepared = clk_pllv3_is_prepared ,
391
399
.recalc_rate = clk_pllv3_vf610_recalc_rate ,
392
- .round_rate = clk_pllv3_vf610_round_rate ,
400
+ .determine_rate = clk_pllv3_vf610_determine_rate ,
393
401
.set_rate = clk_pllv3_vf610_set_rate ,
394
402
};
395
403
0 commit comments