lkml.org 
[lkml]   [2022]   [Dec]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] watchdog: lpc18xx: Use devm_clk_get_enabled() helper
    Date
    The devm_clk_get_enabled() helper:
    - calls devm_clk_get()
    - calls clk_prepare_enable() and registers what is needed in order to
    call clk_disable_unprepare() when needed, as a managed resource.

    This simplifies the code and avoids the need of a dedicated function used
    with devm_add_action_or_reset().

    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    ---
    Note that the order of operations is slightly modified by this patch. The
    "reg" clk is now prepare_enable()'ed before clk_get("wdtclk").
    ---
    drivers/watchdog/lpc18xx_wdt.c | 30 ++----------------------------
    1 file changed, 2 insertions(+), 28 deletions(-)

    diff --git a/drivers/watchdog/lpc18xx_wdt.c b/drivers/watchdog/lpc18xx_wdt.c
    index 60b6d74f267d..1b9b5f21a0df 100644
    --- a/drivers/watchdog/lpc18xx_wdt.c
    +++ b/drivers/watchdog/lpc18xx_wdt.c
    @@ -197,16 +197,10 @@ static const struct watchdog_ops lpc18xx_wdt_ops = {
    .restart = lpc18xx_wdt_restart,
    };

    -static void lpc18xx_clk_disable_unprepare(void *data)
    -{
    - clk_disable_unprepare(data);
    -}
    -
    static int lpc18xx_wdt_probe(struct platform_device *pdev)
    {
    struct lpc18xx_wdt_dev *lpc18xx_wdt;
    struct device *dev = &pdev->dev;
    - int ret;

    lpc18xx_wdt = devm_kzalloc(dev, sizeof(*lpc18xx_wdt), GFP_KERNEL);
    if (!lpc18xx_wdt)
    @@ -216,38 +210,18 @@ static int lpc18xx_wdt_probe(struct platform_device *pdev)
    if (IS_ERR(lpc18xx_wdt->base))
    return PTR_ERR(lpc18xx_wdt->base);

    - lpc18xx_wdt->reg_clk = devm_clk_get(dev, "reg");
    + lpc18xx_wdt->reg_clk = devm_clk_get_enabled(dev, "reg");
    if (IS_ERR(lpc18xx_wdt->reg_clk)) {
    dev_err(dev, "failed to get the reg clock\n");
    return PTR_ERR(lpc18xx_wdt->reg_clk);
    }

    - lpc18xx_wdt->wdt_clk = devm_clk_get(dev, "wdtclk");
    + lpc18xx_wdt->wdt_clk = devm_clk_get_enabled(dev, "wdtclk");
    if (IS_ERR(lpc18xx_wdt->wdt_clk)) {
    dev_err(dev, "failed to get the wdt clock\n");
    return PTR_ERR(lpc18xx_wdt->wdt_clk);
    }

    - ret = clk_prepare_enable(lpc18xx_wdt->reg_clk);
    - if (ret) {
    - dev_err(dev, "could not prepare or enable sys clock\n");
    - return ret;
    - }
    - ret = devm_add_action_or_reset(dev, lpc18xx_clk_disable_unprepare,
    - lpc18xx_wdt->reg_clk);
    - if (ret)
    - return ret;
    -
    - ret = clk_prepare_enable(lpc18xx_wdt->wdt_clk);
    - if (ret) {
    - dev_err(dev, "could not prepare or enable wdt clock\n");
    - return ret;
    - }
    - ret = devm_add_action_or_reset(dev, lpc18xx_clk_disable_unprepare,
    - lpc18xx_wdt->wdt_clk);
    - if (ret)
    - return ret;
    -
    /* We use the clock rate to calculate timeouts */
    lpc18xx_wdt->clk_rate = clk_get_rate(lpc18xx_wdt->wdt_clk);
    if (lpc18xx_wdt->clk_rate == 0) {
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-03-26 23:24    [W:6.754 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site