[U-Boot] [PATCH V3 3/4] clk: imx: add i.MX8M composite clk support
Fabio Estevam
festevam at gmail.com
Fri Aug 9 16:59:20 UTC 2019
On Fri, Aug 9, 2019 at 5:02 AM Peng Fan <peng.fan at nxp.com> wrote:
> + * The clk are not binded to a dev, because it is part of composite clk
s/binded/bound
> + * use composite clk to get dev
> + */
> +static ulong imx8m_clk_composite_divider_set_rate(struct clk *clk,
> + unsigned long rate)
> +{
> + struct clk_divider *divider = (struct clk_divider *)to_clk_divider(clk);
> + struct clk_composite *composite = (struct clk_composite *)clk->data;
> + ulong parent_rate = clk_get_parent_rate(&composite->clk);
> + int prediv_value;
> + int div_value;
> + int ret;
> + u32 val;
> +
> + ret = imx8m_clk_composite_compute_dividers(rate, parent_rate,
> + &prediv_value, &div_value);
> + if (ret)
> + return -EINVAL;
What about returning ret directly instead?
> +struct clk *imx8m_clk_composite_flags(const char *name,
> + const char * const *parent_names,
> + int num_parents, void __iomem *reg,
> + unsigned long flags)
> +{
> + struct clk *clk = ERR_PTR(-ENOMEM);
> + struct clk_divider *div = NULL;
> + struct clk_gate *gate = NULL;
> + struct clk_mux *mux = NULL;
Why all these NULL assignments?
> +
> + mux = kzalloc(sizeof(*mux), GFP_KERNEL);
> + if (!mux)
> + goto fail;
It would be better like this:
mux = kzalloc(sizeof(*mux), GFP_KERNEL);
if (!mux)
return ERR_PTR(-ENOMEM);
> +
> + mux->reg = reg;
> + mux->shift = PCG_PCS_SHIFT;
> + mux->mask = PCG_PCS_MASK;
> + mux->num_parents = num_parents;
> + mux->flags = flags;
> + mux->parent_names = parent_names;
> +
> + div = kzalloc(sizeof(*div), GFP_KERNEL);
> + if (!div)
> + goto fail;
> +
> + div->reg = reg;
> + div->shift = PCG_PREDIV_SHIFT;
> + div->width = PCG_PREDIV_WIDTH;
> + div->flags = CLK_DIVIDER_ROUND_CLOSEST | flags;
> +
> + gate = kzalloc(sizeof(*gate), GFP_KERNEL);
> + if (!gate)
> + goto fail;
> +
> + gate->reg = reg;
> + gate->bit_idx = PCG_CGC_SHIFT;
> + gate->flags = flags;
> +
> + clk = clk_register_composite(NULL, name,
> + parent_names, num_parents,
> + &mux->clk, &clk_mux_ops, &div->clk,
> + &imx8m_clk_composite_divider_ops,
> + &gate->clk, &clk_gate_ops, flags);
> + if (IS_ERR(clk))
> + goto fail;
> +
> + return clk;
> +
> +fail:
> + kfree(gate);
> + kfree(div);
> + kfree(mux);
> + return ERR_CAST(clk);
ERR_CAST(clk) is only valid when for the IS_ERR(clk) path.
Please rework the error handling.
More information about the U-Boot
mailing list