mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	clk: mvebu: armada-xp: maintain clock init order
Init order of CLK_OF_DECLARE'd drivers depends on compile order. Unfortunately, clk_of_init does not allow drivers to return errors, e.g. -EPROBE_DEFER if parent clocks have not been registered, yet. To avoid init order woes for MVEBU clock drivers, we take care of proper init order ourselves. This patch joins core-clk and gating-clk init to maintain proper init order. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> Signed-off-by: Jason Cooper <jason@lakedaemon.net>
This commit is contained in:
		
							parent
							
								
									07ad6836fa
								
							
						
					
					
						commit
						0a11a6ae94
					
				
					 1 changed files with 9 additions and 11 deletions
				
			
		| 
						 | 
					@ -158,13 +158,6 @@ static const struct coreclk_soc_desc axp_coreclks = {
 | 
				
			||||||
	.num_ratios = ARRAY_SIZE(axp_coreclk_ratios),
 | 
						.num_ratios = ARRAY_SIZE(axp_coreclk_ratios),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init axp_coreclk_init(struct device_node *np)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	mvebu_coreclk_setup(np, &axp_coreclks);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
CLK_OF_DECLARE(axp_core_clk, "marvell,armada-xp-core-clock",
 | 
					 | 
				
			||||||
	       axp_coreclk_init);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Clock Gating Control
 | 
					 * Clock Gating Control
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -202,9 +195,14 @@ static const struct clk_gating_soc_desc axp_gating_desc[] __initconst = {
 | 
				
			||||||
	{ }
 | 
						{ }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init axp_clk_gating_init(struct device_node *np)
 | 
					static void __init axp_clk_init(struct device_node *np)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mvebu_clk_gating_setup(np, axp_gating_desc);
 | 
						struct device_node *cgnp =
 | 
				
			||||||
 | 
							of_find_compatible_node(NULL, NULL, "marvell,armada-xp-gating-clock");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mvebu_coreclk_setup(np, &axp_coreclks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cgnp)
 | 
				
			||||||
 | 
							mvebu_clk_gating_setup(cgnp, axp_gating_desc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
CLK_OF_DECLARE(axp_clk_gating, "marvell,armada-xp-gating-clock",
 | 
					CLK_OF_DECLARE(axp_clk, "marvell,armada-xp-core-clock", axp_clk_init);
 | 
				
			||||||
	       axp_clk_gating_init);
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue