[PATCH 05/12] CLK: TI: APLL: add support for omap2 aplls
Nishanth Menon
nm at ti.com
Fri Feb 28 14:14:59 EST 2014
On 02/28/2014 03:22 AM, Tero Kristo wrote:
[...]
> +static void __init of_omap2_apll_setup(struct device_node *node)
> +{
> + struct dpll_data *ad = NULL;
> + struct clk_hw_omap *clk_hw = NULL;
> + struct clk_init_data *init = NULL;
> + struct clk *clk;
> + const char *parent_name;
> + u32 val;
> +
> + ad = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
> + clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
> + init = kzalloc(sizeof(*init), GFP_KERNEL);
> +
> + if (!ad || !clk_hw || !init)
> + goto cleanup;
> +
> + clk_hw->dpll_data = ad;
> + clk_hw->hw.init = init;
> + init->ops = &omap2_apll_ops;
> + init->name = node->name;
> + clk_hw->ops = &omap2_apll_hwops;
> +
> + init->num_parents = of_clk_get_parent_count(node);
> + if (init->num_parents != 1) {
> + pr_err("%s must have one parent\n", node->name);
> + goto cleanup;
> + }
> +
> + parent_name = of_clk_get_parent_name(node, 0);
> + init->parent_names = &parent_name;
> +
> + if (of_property_read_u32(node, "ti,clock-frequency", &val)) {
> + pr_err("%s missing clock-frequency\n", node->name);
> + goto cleanup;
> + }
> + clk_hw->fixed_rate = val;
> +
> + if (of_property_read_u32(node, "ti,bit-shift", &val)) {
> + pr_err("%s missing bit-shift\n", node->name);
> + goto cleanup;
> + }
> +
> + clk_hw->enable_bit = val;
> + ad->enable_mask = 0x3 << val;
> + ad->autoidle_mask = 0x3 << val;
> +
> + if (of_property_read_u32(node, "ti,idlest-shift", &val)) {
> + pr_err("%s missing idlest-shift\n", node->name);
> + goto cleanup;
> + }
> +
> + ad->idlest_mask = 1 << val;
> +
> + ad->control_reg = ti_clk_get_reg_addr(node, 0);
> + ad->autoidle_reg = ti_clk_get_reg_addr(node, 1);
> + ad->idlest_reg = ti_clk_get_reg_addr(node, 2);
> +
> + if (!ad->control_reg || !ad->autoidle_reg || !ad->idlest_reg)
> + goto cleanup;
> +
> + clk = clk_register(NULL, &clk_hw->hw);
> + if (!IS_ERR(clk)) {
> + of_clk_add_provider(node, of_clk_src_simple_get, clk);
> + kfree(init);
> + return;
> + }
> +cleanup:
> + kfree(clk_hw);
> + kfree(init);
kfree(ad)?
smatch reported (as part of the kernel_patch_verify_report:
+drivers/clk/ti/apll.c:400 of_omap2_apll_setup() warn: possible memory
leak of 'ad'
--
Regards,
Nishanth Menon
More information about the linux-arm-kernel
mailing list