@@ -91,13 +91,12 @@ static void devm_clk_hw_register_fixed_factor_release(struct device *dev, void *
91
91
static struct clk_hw *
92
92
__clk_hw_register_fixed_factor (struct device * dev , struct device_node * np ,
93
93
const char * name , const char * parent_name ,
94
- const struct clk_hw * parent_hw , int index ,
94
+ const struct clk_hw * parent_hw , const struct clk_parent_data * pdata ,
95
95
unsigned long flags , unsigned int mult , unsigned int div ,
96
96
unsigned long acc , unsigned int fixflags , bool devm )
97
97
{
98
98
struct clk_fixed_factor * fix ;
99
99
struct clk_init_data init = { };
100
- struct clk_parent_data pdata = { .index = index };
101
100
struct clk_hw * hw ;
102
101
int ret ;
103
102
@@ -128,7 +127,7 @@ __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
128
127
else if (parent_hw )
129
128
init .parent_hws = & parent_hw ;
130
129
else
131
- init .parent_data = & pdata ;
130
+ init .parent_data = pdata ;
132
131
init .num_parents = 1 ;
133
132
134
133
hw = & fix -> hw ;
@@ -165,7 +164,9 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev,
165
164
const char * name , unsigned int index , unsigned long flags ,
166
165
unsigned int mult , unsigned int div )
167
166
{
168
- return __clk_hw_register_fixed_factor (dev , NULL , name , NULL , NULL , index ,
167
+ const struct clk_parent_data pdata = { .index = index };
168
+
169
+ return __clk_hw_register_fixed_factor (dev , NULL , name , NULL , NULL , & pdata ,
169
170
flags , mult , div , 0 , 0 , true);
170
171
}
171
172
EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor_index );
@@ -187,30 +188,59 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_parent_hw(struct device *dev,
187
188
const char * name , const struct clk_hw * parent_hw ,
188
189
unsigned long flags , unsigned int mult , unsigned int div )
189
190
{
191
+ const struct clk_parent_data pdata = { .index = -1 };
192
+
190
193
return __clk_hw_register_fixed_factor (dev , NULL , name , NULL , parent_hw ,
191
- -1 , flags , mult , div , 0 , 0 , true);
194
+ & pdata , flags , mult , div , 0 , 0 , true);
192
195
}
193
196
EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor_parent_hw );
194
197
195
198
struct clk_hw * clk_hw_register_fixed_factor_parent_hw (struct device * dev ,
196
199
const char * name , const struct clk_hw * parent_hw ,
197
200
unsigned long flags , unsigned int mult , unsigned int div )
198
201
{
199
- return __clk_hw_register_fixed_factor (dev , NULL , name , NULL ,
200
- parent_hw , -1 , flags , mult , div ,
201
- 0 , 0 , false);
202
+ const struct clk_parent_data pdata = { .index = -1 };
203
+
204
+ return __clk_hw_register_fixed_factor (dev , NULL , name , NULL , parent_hw ,
205
+ & pdata , flags , mult , div , 0 , 0 , false);
202
206
}
203
207
EXPORT_SYMBOL_GPL (clk_hw_register_fixed_factor_parent_hw );
204
208
205
209
struct clk_hw * clk_hw_register_fixed_factor (struct device * dev ,
206
210
const char * name , const char * parent_name , unsigned long flags ,
207
211
unsigned int mult , unsigned int div )
208
212
{
209
- return __clk_hw_register_fixed_factor (dev , NULL , name , parent_name , NULL , -1 ,
210
- flags , mult , div , 0 , 0 , false);
213
+ const struct clk_parent_data pdata = { .index = -1 };
214
+
215
+ return __clk_hw_register_fixed_factor (dev , NULL , name , parent_name , NULL ,
216
+ & pdata , flags , mult , div , 0 , 0 , false);
211
217
}
212
218
EXPORT_SYMBOL_GPL (clk_hw_register_fixed_factor );
213
219
220
+ struct clk_hw * clk_hw_register_fixed_factor_fwname (struct device * dev ,
221
+ struct device_node * np , const char * name , const char * fw_name ,
222
+ unsigned long flags , unsigned int mult , unsigned int div )
223
+ {
224
+ const struct clk_parent_data pdata = { .index = -1 , .fw_name = fw_name };
225
+
226
+ return __clk_hw_register_fixed_factor (dev , np , name , NULL , NULL ,
227
+ & pdata , flags , mult , div , 0 , 0 , false);
228
+ }
229
+ EXPORT_SYMBOL_GPL (clk_hw_register_fixed_factor_fwname );
230
+
231
+ struct clk_hw * clk_hw_register_fixed_factor_with_accuracy_fwname (struct device * dev ,
232
+ struct device_node * np , const char * name , const char * fw_name ,
233
+ unsigned long flags , unsigned int mult , unsigned int div ,
234
+ unsigned long acc )
235
+ {
236
+ const struct clk_parent_data pdata = { .index = -1 , .fw_name = fw_name };
237
+
238
+ return __clk_hw_register_fixed_factor (dev , np , name , NULL , NULL ,
239
+ & pdata , flags , mult , div , acc ,
240
+ CLK_FIXED_FACTOR_FIXED_ACCURACY , false);
241
+ }
242
+ EXPORT_SYMBOL_GPL (clk_hw_register_fixed_factor_with_accuracy_fwname );
243
+
214
244
struct clk * clk_register_fixed_factor (struct device * dev , const char * name ,
215
245
const char * parent_name , unsigned long flags ,
216
246
unsigned int mult , unsigned int div )
@@ -253,16 +283,43 @@ struct clk_hw *devm_clk_hw_register_fixed_factor(struct device *dev,
253
283
const char * name , const char * parent_name , unsigned long flags ,
254
284
unsigned int mult , unsigned int div )
255
285
{
256
- return __clk_hw_register_fixed_factor (dev , NULL , name , parent_name , NULL , -1 ,
257
- flags , mult , div , 0 , 0 , true);
286
+ const struct clk_parent_data pdata = { .index = -1 };
287
+
288
+ return __clk_hw_register_fixed_factor (dev , NULL , name , parent_name , NULL ,
289
+ & pdata , flags , mult , div , 0 , 0 , true);
258
290
}
259
291
EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor );
260
292
293
+ struct clk_hw * devm_clk_hw_register_fixed_factor_fwname (struct device * dev ,
294
+ struct device_node * np , const char * name , const char * fw_name ,
295
+ unsigned long flags , unsigned int mult , unsigned int div )
296
+ {
297
+ const struct clk_parent_data pdata = { .index = -1 , .fw_name = fw_name };
298
+
299
+ return __clk_hw_register_fixed_factor (dev , np , name , NULL , NULL ,
300
+ & pdata , flags , mult , div , 0 , 0 , true);
301
+ }
302
+ EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor_fwname );
303
+
304
+ struct clk_hw * devm_clk_hw_register_fixed_factor_with_accuracy_fwname (struct device * dev ,
305
+ struct device_node * np , const char * name , const char * fw_name ,
306
+ unsigned long flags , unsigned int mult , unsigned int div ,
307
+ unsigned long acc )
308
+ {
309
+ const struct clk_parent_data pdata = { .index = -1 , .fw_name = fw_name };
310
+
311
+ return __clk_hw_register_fixed_factor (dev , np , name , NULL , NULL ,
312
+ & pdata , flags , mult , div , acc ,
313
+ CLK_FIXED_FACTOR_FIXED_ACCURACY , true);
314
+ }
315
+ EXPORT_SYMBOL_GPL (devm_clk_hw_register_fixed_factor_with_accuracy_fwname );
316
+
261
317
#ifdef CONFIG_OF
262
318
static struct clk_hw * _of_fixed_factor_clk_setup (struct device_node * node )
263
319
{
264
320
struct clk_hw * hw ;
265
321
const char * clk_name = node -> name ;
322
+ const struct clk_parent_data pdata = { .index = 0 };
266
323
u32 div , mult ;
267
324
int ret ;
268
325
@@ -280,8 +337,8 @@ static struct clk_hw *_of_fixed_factor_clk_setup(struct device_node *node)
280
337
281
338
of_property_read_string (node , "clock-output-names" , & clk_name );
282
339
283
- hw = __clk_hw_register_fixed_factor (NULL , node , clk_name , NULL , NULL , 0 ,
284
- 0 , mult , div , 0 , 0 , false);
340
+ hw = __clk_hw_register_fixed_factor (NULL , node , clk_name , NULL , NULL ,
341
+ & pdata , 0 , mult , div , 0 , 0 , false);
285
342
if (IS_ERR (hw )) {
286
343
/*
287
344
* Clear OF_POPULATED flag so that clock registration can be
0 commit comments