lkml.org 
[lkml]   [2022]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 3/7] watchdog: npcm: Enable clock if provided
    Date
    On the Nuvoton WPCM450 SoC, with its upcoming clock driver, peripheral
    clocks are individually gated and ungated. Therefore, the watchdog
    driver must be able to ungate the watchdog clock.

    Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
    ---

    v2:
    - Add clk_disable_unprepare call, suggested by Guenter Roeck

    v1:
    - https://lore.kernel.org/lkml/20220422183012.444674-4-j.neuschaefer@gmx.net/
    ---
    drivers/watchdog/npcm_wdt.c | 12 ++++++++++++
    1 file changed, 12 insertions(+)

    diff --git a/drivers/watchdog/npcm_wdt.c b/drivers/watchdog/npcm_wdt.c
    index 28a24caa2627c..ee08d9805f966 100644
    --- a/drivers/watchdog/npcm_wdt.c
    +++ b/drivers/watchdog/npcm_wdt.c
    @@ -3,6 +3,7 @@
    // Copyright (c) 2018 IBM Corp.

    #include <linux/bitops.h>
    +#include <linux/clk.h>
    #include <linux/delay.h>
    #include <linux/interrupt.h>
    #include <linux/kernel.h>
    @@ -43,6 +44,7 @@
    struct npcm_wdt {
    struct watchdog_device wdd;
    void __iomem *reg;
    + struct clk *clk;
    };

    static inline struct npcm_wdt *to_npcm_wdt(struct watchdog_device *wdd)
    @@ -66,6 +68,9 @@ static int npcm_wdt_start(struct watchdog_device *wdd)
    struct npcm_wdt *wdt = to_npcm_wdt(wdd);
    u32 val;

    + if (wdt->clk)
    + clk_prepare_enable(wdt->clk);
    +
    if (wdd->timeout < 2)
    val = 0x800;
    else if (wdd->timeout < 3)
    @@ -100,6 +105,9 @@ static int npcm_wdt_stop(struct watchdog_device *wdd)

    writel(0, wdt->reg);

    + if (wdt->clk)
    + clk_disable_unprepare(wdt->clk);
    +
    return 0;
    }

    @@ -191,6 +199,10 @@ static int npcm_wdt_probe(struct platform_device *pdev)
    if (IS_ERR(wdt->reg))
    return PTR_ERR(wdt->reg);

    + wdt->clk = devm_clk_get_optional(&pdev->dev, NULL);
    + if (IS_ERR(wdt->clk))
    + return PTR_ERR(wdt->clk);
    +
    irq = platform_get_irq(pdev, 0);
    if (irq < 0)
    return irq;
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-04-29 19:22    [W:2.179 / U:0.612 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site