@@ -255,24 +255,53 @@ static struct clk_hw *_ti_omap4_clkctrl_xlate(struct of_phandle_args *clkspec,
255
255
return entry -> clk ;
256
256
}
257
257
258
+ /* Get clkctrl clock base name based on clkctrl_name or dts node */
259
+ static const char * __init clkctrl_get_clock_name (struct device_node * np ,
260
+ const char * clkctrl_name ,
261
+ int offset , int index ,
262
+ bool legacy_naming )
263
+ {
264
+ char * clock_name ;
265
+
266
+ /* l4per-clkctrl:1234:0 style naming based on clkctrl_name */
267
+ if (clkctrl_name && !legacy_naming ) {
268
+ clock_name = kasprintf (GFP_KERNEL , "%s-clkctrl:%04x:%d" ,
269
+ clkctrl_name , offset , index );
270
+ strreplace (clock_name , '_' , '-' );
271
+
272
+ return clock_name ;
273
+ }
274
+
275
+ /* l4per:1234:0 old style naming based on clkctrl_name */
276
+ if (clkctrl_name )
277
+ return kasprintf (GFP_KERNEL , "%s_cm:clk:%04x:%d" ,
278
+ clkctrl_name , offset , index );
279
+
280
+ /* l4per_cm:1234:0 old style naming based on parent node name */
281
+ if (legacy_naming )
282
+ return kasprintf (GFP_KERNEL , "%pOFn:clk:%04x:%d" ,
283
+ np -> parent , offset , index );
284
+
285
+ /* l4per-clkctrl:1234:0 style naming based on node name */
286
+ return kasprintf (GFP_KERNEL , "%pOFn:%04x:%d" , np , offset , index );
287
+ }
288
+
258
289
static int __init
259
290
_ti_clkctrl_clk_register (struct omap_clkctrl_provider * provider ,
260
291
struct device_node * node , struct clk_hw * clk_hw ,
261
292
u16 offset , u8 bit , const char * const * parents ,
262
- int num_parents , const struct clk_ops * ops )
293
+ int num_parents , const struct clk_ops * ops ,
294
+ const char * clkctrl_name )
263
295
{
264
296
struct clk_init_data init = { NULL };
265
297
struct clk * clk ;
266
298
struct omap_clkctrl_clk * clkctrl_clk ;
267
299
int ret = 0 ;
268
300
269
- if (ti_clk_get_features ()-> flags & TI_CLK_CLKCTRL_COMPAT )
270
- init .name = kasprintf (GFP_KERNEL , "%pOFn:%pOFn:%04x:%d" ,
271
- node -> parent , node , offset ,
272
- bit );
273
- else
274
- init .name = kasprintf (GFP_KERNEL , "%pOFn:%04x:%d" , node ,
275
- offset , bit );
301
+ init .name = clkctrl_get_clock_name (node , clkctrl_name , offset , bit ,
302
+ ti_clk_get_features ()-> flags &
303
+ TI_CLK_CLKCTRL_COMPAT );
304
+
276
305
clkctrl_clk = kzalloc (sizeof (* clkctrl_clk ), GFP_KERNEL );
277
306
if (!init .name || !clkctrl_clk ) {
278
307
ret = - ENOMEM ;
@@ -309,7 +338,7 @@ static void __init
309
338
_ti_clkctrl_setup_gate (struct omap_clkctrl_provider * provider ,
310
339
struct device_node * node , u16 offset ,
311
340
const struct omap_clkctrl_bit_data * data ,
312
- void __iomem * reg )
341
+ void __iomem * reg , const char * clkctrl_name )
313
342
{
314
343
struct clk_hw_omap * clk_hw ;
315
344
@@ -322,15 +351,15 @@ _ti_clkctrl_setup_gate(struct omap_clkctrl_provider *provider,
322
351
323
352
if (_ti_clkctrl_clk_register (provider , node , & clk_hw -> hw , offset ,
324
353
data -> bit , data -> parents , 1 ,
325
- & omap_gate_clk_ops ))
354
+ & omap_gate_clk_ops , clkctrl_name ))
326
355
kfree (clk_hw );
327
356
}
328
357
329
358
static void __init
330
359
_ti_clkctrl_setup_mux (struct omap_clkctrl_provider * provider ,
331
360
struct device_node * node , u16 offset ,
332
361
const struct omap_clkctrl_bit_data * data ,
333
- void __iomem * reg )
362
+ void __iomem * reg , const char * clkctrl_name )
334
363
{
335
364
struct clk_omap_mux * mux ;
336
365
int num_parents = 0 ;
@@ -357,15 +386,15 @@ _ti_clkctrl_setup_mux(struct omap_clkctrl_provider *provider,
357
386
358
387
if (_ti_clkctrl_clk_register (provider , node , & mux -> hw , offset ,
359
388
data -> bit , data -> parents , num_parents ,
360
- & ti_clk_mux_ops ))
389
+ & ti_clk_mux_ops , clkctrl_name ))
361
390
kfree (mux );
362
391
}
363
392
364
393
static void __init
365
394
_ti_clkctrl_setup_div (struct omap_clkctrl_provider * provider ,
366
395
struct device_node * node , u16 offset ,
367
396
const struct omap_clkctrl_bit_data * data ,
368
- void __iomem * reg )
397
+ void __iomem * reg , const char * clkctrl_name )
369
398
{
370
399
struct clk_omap_divider * div ;
371
400
const struct omap_clkctrl_div_data * div_data = data -> data ;
@@ -393,15 +422,15 @@ _ti_clkctrl_setup_div(struct omap_clkctrl_provider *provider,
393
422
394
423
if (_ti_clkctrl_clk_register (provider , node , & div -> hw , offset ,
395
424
data -> bit , data -> parents , 1 ,
396
- & ti_clk_divider_ops ))
425
+ & ti_clk_divider_ops , clkctrl_name ))
397
426
kfree (div );
398
427
}
399
428
400
429
static void __init
401
430
_ti_clkctrl_setup_subclks (struct omap_clkctrl_provider * provider ,
402
431
struct device_node * node ,
403
432
const struct omap_clkctrl_reg_data * data ,
404
- void __iomem * reg )
433
+ void __iomem * reg , const char * clkctrl_name )
405
434
{
406
435
const struct omap_clkctrl_bit_data * bits = data -> bit_data ;
407
436
@@ -412,17 +441,17 @@ _ti_clkctrl_setup_subclks(struct omap_clkctrl_provider *provider,
412
441
switch (bits -> type ) {
413
442
case TI_CLK_GATE :
414
443
_ti_clkctrl_setup_gate (provider , node , data -> offset ,
415
- bits , reg );
444
+ bits , reg , clkctrl_name );
416
445
break ;
417
446
418
447
case TI_CLK_DIVIDER :
419
448
_ti_clkctrl_setup_div (provider , node , data -> offset ,
420
- bits , reg );
449
+ bits , reg , clkctrl_name );
421
450
break ;
422
451
423
452
case TI_CLK_MUX :
424
453
_ti_clkctrl_setup_mux (provider , node , data -> offset ,
425
- bits , reg );
454
+ bits , reg , clkctrl_name );
426
455
break ;
427
456
428
457
default :
@@ -461,42 +490,10 @@ static char * __init clkctrl_get_name(struct device_node *np)
461
490
return name ;
462
491
}
463
492
}
464
- of_node_put (np );
465
493
466
494
return NULL ;
467
495
}
468
496
469
- /* Get clkctrl clock base name based on clkctrl_name or dts node */
470
- static const char * __init clkctrl_get_clock_name (struct device_node * np ,
471
- const char * clkctrl_name ,
472
- int offset , int index ,
473
- bool legacy_naming )
474
- {
475
- char * clock_name ;
476
-
477
- /* l4per-clkctrl:1234:0 style naming based on clkctrl_name */
478
- if (clkctrl_name && !legacy_naming ) {
479
- clock_name = kasprintf (GFP_KERNEL , "%s-clkctrl:%04x:%d" ,
480
- clkctrl_name , offset , index );
481
- strreplace (clock_name , '_' , '-' );
482
-
483
- return clock_name ;
484
- }
485
-
486
- /* l4per:1234:0 old style naming based on clkctrl_name */
487
- if (clkctrl_name )
488
- return kasprintf (GFP_KERNEL , "%s_cm:clk:%04x:%d" ,
489
- clkctrl_name , offset , index );
490
-
491
- /* l4per_cm:1234:0 old style naming based on parent node name */
492
- if (legacy_naming )
493
- return kasprintf (GFP_KERNEL , "%pOFn:clk:%04x:%d" ,
494
- np -> parent , offset , index );
495
-
496
- /* l4per-clkctrl:1234:0 style naming based on node name */
497
- return kasprintf (GFP_KERNEL , "%pOFn:%04x:%d" , np , offset , index );
498
- }
499
-
500
497
static void __init _ti_omap4_clkctrl_setup (struct device_node * node )
501
498
{
502
499
struct omap_clkctrl_provider * provider ;
@@ -664,7 +661,7 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
664
661
hw -> enable_reg .ptr = provider -> base + reg_data -> offset ;
665
662
666
663
_ti_clkctrl_setup_subclks (provider , node , reg_data ,
667
- hw -> enable_reg .ptr );
664
+ hw -> enable_reg .ptr , clkctrl_name );
668
665
669
666
if (reg_data -> flags & CLKF_SW_SUP )
670
667
hw -> enable_bit = MODULEMODE_SWCTRL ;
0 commit comments