lkml.org 
[lkml]   [2022]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/31] clk: mediatek: gate: Implement unregister API
    Date
    The gate clk type within the MediaTek clk driver library only has a
    register function, and no corresponding unregister function. This
    means there is no way for its users to properly implement cleanup
    and removal.

    Add a matching unregister function for the gate type clk.

    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    ---
    drivers/clk/mediatek/clk-gate.c | 35 +++++++++++++++++++++++++++++++++
    drivers/clk/mediatek/clk-gate.h | 3 +++
    2 files changed, 38 insertions(+)

    diff --git a/drivers/clk/mediatek/clk-gate.c b/drivers/clk/mediatek/clk-gate.c
    index e51cfd8c653c..ed1ad5535d41 100644
    --- a/drivers/clk/mediatek/clk-gate.c
    +++ b/drivers/clk/mediatek/clk-gate.c
    @@ -193,6 +193,21 @@ static struct clk *mtk_clk_register_gate(const char *name,
    return clk;
    }

    +static void mtk_clk_unregister_gate(struct clk *clk)
    +{
    + struct mtk_clk_gate *cg;
    + struct clk_hw *hw;
    +
    + hw = __clk_get_hw(clk);
    + if (!hw)
    + return;
    +
    + cg = to_mtk_clk_gate(hw);
    +
    + clk_unregister(clk);
    + kfree(cg);
    +}
    +
    int mtk_clk_register_gates_with_dev(struct device_node *node,
    const struct mtk_gate *clks, int num,
    struct clk_onecell_data *clk_data,
    @@ -244,4 +259,24 @@ int mtk_clk_register_gates(struct device_node *node,
    }
    EXPORT_SYMBOL_GPL(mtk_clk_register_gates);

    +void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
    + struct clk_onecell_data *clk_data)
    +{
    + int i;
    +
    + if (!clk_data)
    + return;
    +
    + for (i = num; i > 0; i--) {
    + const struct mtk_gate *gate = &clks[i - 1];
    +
    + if (IS_ERR_OR_NULL(clk_data->clks[gate->id]))
    + continue;
    +
    + mtk_clk_unregister_gate(clk_data->clks[gate->id]);
    + clk_data->clks[gate->id] = ERR_PTR(-ENOENT);
    + }
    +}
    +EXPORT_SYMBOL_GPL(mtk_clk_unregister_gates);
    +
    MODULE_LICENSE("GPL");
    diff --git a/drivers/clk/mediatek/clk-gate.h b/drivers/clk/mediatek/clk-gate.h
    index 3d75521ba20c..344adffb6578 100644
    --- a/drivers/clk/mediatek/clk-gate.h
    +++ b/drivers/clk/mediatek/clk-gate.h
    @@ -55,4 +55,7 @@ int mtk_clk_register_gates_with_dev(struct device_node *node,
    struct clk_onecell_data *clk_data,
    struct device *dev);

    +void mtk_clk_unregister_gates(const struct mtk_gate *clks, int num,
    + struct clk_onecell_data *clk_data);
    +
    #endif /* __DRV_CLK_GATE_H */
    --
    2.35.0.rc0.227.g00780c9af4-goog
    \
     
     \ /
      Last update: 2022-01-22 10:18    [W:3.088 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site