lkml.org 
[lkml]   [2021]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[v14 08/21] clk: mediatek: Add mtk_clk_simple_probe() to simplify clock providers
    Date
    Most of subsystem clock providers only need to register clock gates
    in their probe() function.
    To reduce the duplicated code by add a generic function.

    Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com>
    Signed-off-by: Chun-Jie Chen <chun-jie.chen@mediatek.com>
    ---
    drivers/clk/mediatek/clk-mtk.c | 23 +++++++++++++++++++++++
    drivers/clk/mediatek/clk-mtk.h | 8 ++++++++
    2 files changed, 31 insertions(+)

    diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
    index 37d2aa32175e..4b6096c44d74 100644
    --- a/drivers/clk/mediatek/clk-mtk.c
    +++ b/drivers/clk/mediatek/clk-mtk.c
    @@ -13,6 +13,7 @@
    #include <linux/clkdev.h>
    #include <linux/mfd/syscon.h>
    #include <linux/device.h>
    +#include <linux/of_device.h>

    #include "clk-mtk.h"
    #include "clk-gate.h"
    @@ -286,3 +287,25 @@ void mtk_clk_register_dividers(const struct mtk_clk_divider *mcds,
    clk_data->clks[mcd->id] = clk;
    }
    }
    +
    +int mtk_clk_simple_probe(struct platform_device *pdev)
    +{
    + const struct mtk_clk_desc *mcd;
    + struct clk_onecell_data *clk_data;
    + struct device_node *node = pdev->dev.of_node;
    + int r;
    +
    + mcd = of_device_get_match_data(&pdev->dev);
    + if (!mcd)
    + return -EINVAL;
    +
    + clk_data = mtk_alloc_clk_data(mcd->num_clks);
    + if (!clk_data)
    + return -ENOMEM;
    +
    + r = mtk_clk_register_gates(node, mcd->clks, mcd->num_clks, clk_data);
    + if (r)
    + return r;
    +
    + return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
    +}
    diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
    index 31c7cb304508..7de41c3b3206 100644
    --- a/drivers/clk/mediatek/clk-mtk.h
    +++ b/drivers/clk/mediatek/clk-mtk.h
    @@ -10,6 +10,7 @@
    #include <linux/regmap.h>
    #include <linux/bitops.h>
    #include <linux/clk-provider.h>
    +#include <linux/platform_device.h>

    struct clk;
    struct clk_onecell_data;
    @@ -250,4 +251,11 @@ void mtk_register_reset_controller(struct device_node *np,
    void mtk_register_reset_controller_set_clr(struct device_node *np,
    unsigned int num_regs, int regofs);

    +struct mtk_clk_desc {
    + const struct mtk_gate *clks;
    + size_t num_clks;
    +};
    +
    +int mtk_clk_simple_probe(struct platform_device *pdev);
    +
    #endif /* __DRV_CLK_MTK_H */
    --
    2.18.0
    \
     
     \ /
      Last update: 2021-07-26 12:58    [W:4.074 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site