@@ -57,10 +57,22 @@ static int clk_factor_set_rate(struct clk_hw *hw, unsigned long rate,
57
57
return 0 ;
58
58
}
59
59
60
+ static unsigned long clk_factor_recalc_accuracy (struct clk_hw * hw ,
61
+ unsigned long parent_accuracy )
62
+ {
63
+ struct clk_fixed_factor * fix = to_clk_fixed_factor (hw );
64
+
65
+ if (fix -> flags & CLK_FIXED_FACTOR_FIXED_ACCURACY )
66
+ return fix -> acc ;
67
+
68
+ return parent_accuracy ;
69
+ }
70
+
60
71
const struct clk_ops clk_fixed_factor_ops = {
61
72
.round_rate = clk_factor_round_rate ,
62
73
.set_rate = clk_factor_set_rate ,
63
74
.recalc_rate = clk_factor_recalc_rate ,
75
+ .recalc_accuracy = clk_factor_recalc_accuracy ,
64
76
};
65
77
EXPORT_SYMBOL_GPL (clk_fixed_factor_ops );
66
78
@@ -81,7 +93,7 @@ __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
81
93
const char * name , const char * parent_name ,
82
94
const struct clk_hw * parent_hw , int index ,
83
95
unsigned long flags , unsigned int mult , unsigned int div ,
84
- bool devm )
96
+ unsigned long acc , unsigned int fixflags , bool devm )
85
97
{
86
98
struct clk_fixed_factor * fix ;
87
99
struct clk_init_data init = { };
@@ -105,6 +117,8 @@ __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
105
117
fix -> mult = mult ;
106
118
fix -> div = div ;
107
119
fix -> hw .init = & init ;
120
+ fix -> acc = acc ;
121
+ fix -> flags = fixflags ;
108
122
109
123
init .name = name ;
110
124
init .ops = & clk_fixed_factor_ops ;
@@ -152,7 +166,7 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev,
152
166
unsigned int mult , unsigned int div )
153
167
{
154
168
return __clk_hw_register_fixed_factor (dev , NULL , name , NULL , NULL , index ,
155
- flags , mult , div , true);
169
+ flags , mult , div , 0 , 0 , true);
156
170
}
157
171
EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor_index );
158
172
@@ -174,7 +188,7 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_parent_hw(struct device *dev,
174
188
unsigned long flags , unsigned int mult , unsigned int div )
175
189
{
176
190
return __clk_hw_register_fixed_factor (dev , NULL , name , NULL , parent_hw ,
177
- -1 , flags , mult , div , true);
191
+ -1 , flags , mult , div , 0 , 0 , true);
178
192
}
179
193
EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor_parent_hw );
180
194
@@ -184,7 +198,7 @@ struct clk_hw *clk_hw_register_fixed_factor_parent_hw(struct device *dev,
184
198
{
185
199
return __clk_hw_register_fixed_factor (dev , NULL , name , NULL ,
186
200
parent_hw , -1 , flags , mult , div ,
187
- false);
201
+ 0 , 0 , false);
188
202
}
189
203
EXPORT_SYMBOL_GPL (clk_hw_register_fixed_factor_parent_hw );
190
204
@@ -193,7 +207,7 @@ struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
193
207
unsigned int mult , unsigned int div )
194
208
{
195
209
return __clk_hw_register_fixed_factor (dev , NULL , name , parent_name , NULL , -1 ,
196
- flags , mult , div , false);
210
+ flags , mult , div , 0 , 0 , false);
197
211
}
198
212
EXPORT_SYMBOL_GPL (clk_hw_register_fixed_factor );
199
213
@@ -240,7 +254,7 @@ struct clk_hw *devm_clk_hw_register_fixed_factor(struct device *dev,
240
254
unsigned int mult , unsigned int div )
241
255
{
242
256
return __clk_hw_register_fixed_factor (dev , NULL , name , parent_name , NULL , -1 ,
243
- flags , mult , div , true);
257
+ flags , mult , div , 0 , 0 , true);
244
258
}
245
259
EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor );
246
260
@@ -267,7 +281,7 @@ static struct clk_hw *_of_fixed_factor_clk_setup(struct device_node *node)
267
281
of_property_read_string (node , "clock-output-names" , & clk_name );
268
282
269
283
hw = __clk_hw_register_fixed_factor (NULL , node , clk_name , NULL , NULL , 0 ,
270
- 0 , mult , div , false);
284
+ 0 , mult , div , 0 , 0 , false);
271
285
if (IS_ERR (hw )) {
272
286
/*
273
287
* Clear OF_POPULATED flag so that clock registration can be
0 commit comments