@@ -473,18 +473,19 @@ static struct clk_hw * __init
473473at91_clk_register_master_internal (struct regmap * regmap ,
474474 const char * name , int num_parents ,
475475 const char * * parent_names ,
476+ struct clk_hw * * parent_hws ,
476477 const struct clk_master_layout * layout ,
477478 const struct clk_master_characteristics * characteristics ,
478479 const struct clk_ops * ops , spinlock_t * lock , u32 flags )
479480{
480481 struct clk_master * master ;
481- struct clk_init_data init ;
482+ struct clk_init_data init = {} ;
482483 struct clk_hw * hw ;
483484 unsigned int mckr ;
484485 unsigned long irqflags ;
485486 int ret ;
486487
487- if (!name || !num_parents || !parent_names || !lock )
488+ if (!name || !num_parents || !( parent_names || parent_hws ) || !lock )
488489 return ERR_PTR (- EINVAL );
489490
490491 master = kzalloc (sizeof (* master ), GFP_KERNEL );
@@ -493,7 +494,10 @@ at91_clk_register_master_internal(struct regmap *regmap,
493494
494495 init .name = name ;
495496 init .ops = ops ;
496- init .parent_names = parent_names ;
497+ if (parent_hws )
498+ init .parent_hws = (const struct clk_hw * * )parent_hws ;
499+ else
500+ init .parent_names = parent_names ;
497501 init .num_parents = num_parents ;
498502 init .flags = flags ;
499503
@@ -527,12 +531,13 @@ struct clk_hw * __init
527531at91_clk_register_master_pres (struct regmap * regmap ,
528532 const char * name , int num_parents ,
529533 const char * * parent_names ,
534+ struct clk_hw * * parent_hws ,
530535 const struct clk_master_layout * layout ,
531536 const struct clk_master_characteristics * characteristics ,
532537 spinlock_t * lock )
533538{
534539 return at91_clk_register_master_internal (regmap , name , num_parents ,
535- parent_names , layout ,
540+ parent_names , parent_hws , layout ,
536541 characteristics ,
537542 & master_pres_ops ,
538543 lock , CLK_SET_RATE_GATE );
@@ -541,7 +546,7 @@ at91_clk_register_master_pres(struct regmap *regmap,
541546struct clk_hw * __init
542547at91_clk_register_master_div (struct regmap * regmap ,
543548 const char * name , const char * parent_name ,
544- const struct clk_master_layout * layout ,
549+ struct clk_hw * parent_hw , const struct clk_master_layout * layout ,
545550 const struct clk_master_characteristics * characteristics ,
546551 spinlock_t * lock , u32 flags , u32 safe_div )
547552{
@@ -554,7 +559,8 @@ at91_clk_register_master_div(struct regmap *regmap,
554559 ops = & master_div_ops_chg ;
555560
556561 hw = at91_clk_register_master_internal (regmap , name , 1 ,
557- & parent_name , layout ,
562+ parent_name ? & parent_name : NULL ,
563+ parent_hw ? & parent_hw : NULL , layout ,
558564 characteristics , ops ,
559565 lock , flags );
560566
@@ -806,18 +812,19 @@ struct clk_hw * __init
806812at91_clk_sama7g5_register_master (struct regmap * regmap ,
807813 const char * name , int num_parents ,
808814 const char * * parent_names ,
815+ struct clk_hw * * parent_hws ,
809816 u32 * mux_table ,
810817 spinlock_t * lock , u8 id ,
811818 bool critical , int chg_pid )
812819{
813820 struct clk_master * master ;
814821 struct clk_hw * hw ;
815- struct clk_init_data init ;
822+ struct clk_init_data init = {} ;
816823 unsigned long flags ;
817824 unsigned int val ;
818825 int ret ;
819826
820- if (!name || !num_parents || !parent_names || !mux_table ||
827+ if (!name || !num_parents || !( parent_names || parent_hws ) || !mux_table ||
821828 !lock || id > MASTER_MAX_ID )
822829 return ERR_PTR (- EINVAL );
823830
@@ -827,7 +834,10 @@ at91_clk_sama7g5_register_master(struct regmap *regmap,
827834
828835 init .name = name ;
829836 init .ops = & sama7g5_master_ops ;
830- init .parent_names = parent_names ;
837+ if (parent_hws )
838+ init .parent_hws = (const struct clk_hw * * )parent_hws ;
839+ else
840+ init .parent_names = parent_names ;
831841 init .num_parents = num_parents ;
832842 init .flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE ;
833843 if (chg_pid >= 0 )
0 commit comments