diff options
Diffstat (limited to 'drivers/clk/socfpga/clk-gate.c')
| -rw-r--r-- | drivers/clk/socfpga/clk-gate.c | 35 | 
1 files changed, 22 insertions, 13 deletions
diff --git a/drivers/clk/socfpga/clk-gate.c b/drivers/clk/socfpga/clk-gate.c index 0c18c55edf8c..32ccda960f28 100644 --- a/drivers/clk/socfpga/clk-gate.c +++ b/drivers/clk/socfpga/clk-gate.c @@ -126,17 +126,14 @@ void __init socfpga_gate_init(struct device_node *node)  	struct clk_init_data init;  	struct clk_ops *ops;  	int rc; -	int err;  	socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);  	if (WARN_ON(!socfpga_clk))  		return;  	ops = kmemdup(&gateclk_ops, sizeof(gateclk_ops), GFP_KERNEL); -	if (WARN_ON(!ops)) { -		kfree(socfpga_clk); -		return; -	} +	if (WARN_ON(!ops)) +		goto err_kmemdup;  	rc = of_property_read_u32_array(node, "clk-gate", clk_gate, 2);  	if (rc) @@ -182,13 +179,25 @@ void __init socfpga_gate_init(struct device_node *node)  	hw_clk = &socfpga_clk->hw.hw; -	err = clk_hw_register(NULL, hw_clk); -	if (err) { -		kfree(ops); -		kfree(socfpga_clk); -		return; +	rc = clk_hw_register(NULL, hw_clk); +	if (rc) { +		pr_err("Could not register clock:%s\n", clk_name); +		goto err_clk_hw_register;  	} -	rc = of_clk_add_provider(node, of_clk_src_simple_get, hw_clk); -	if (WARN_ON(rc)) -		return; + +	rc = of_clk_add_hw_provider(node, of_clk_hw_simple_get, hw_clk); +	if (rc) { +		pr_err("Could not register clock provider for node:%s\n", +		       clk_name); +		goto err_of_clk_add_hw_provider; +	} + +	return; + +err_of_clk_add_hw_provider: +	clk_hw_unregister(hw_clk); +err_clk_hw_register: +	kfree(ops); +err_kmemdup: +	kfree(socfpga_clk);  }  |