Re: [PATCH v2 1/1] watchdog: realtek-otto: Change to use regmap API
From: Sander Vanheule
Date: Tue May 19 2026 - 15:03:25 EST
Hi Rustam,
On Tue, 2026-05-19 at 23:23 +0500, Rustam Adilov wrote:
[...]
> @@ -74,24 +75,17 @@ struct otto_wdt_ctrl {
> static int otto_wdt_start(struct watchdog_device *wdev)
> {
> struct otto_wdt_ctrl *ctrl = watchdog_get_drvdata(wdev);
> - u32 v;
> -
> - v = ioread32(ctrl->base + OTTO_WDT_REG_CTRL);
> - v |= OTTO_WDT_CTRL_ENABLE;
> - iowrite32(v, ctrl->base + OTTO_WDT_REG_CTRL);
>
> + regmap_set_bits(ctrl->regmap, OTTO_WDT_REG_CTRL,
> OTTO_WDT_CTRL_ENABLE);
> return 0;
iowrite32() doesn't return anything, but regmap_set_bits() does.
You can turn this into
return regmap_set_bits(...);
> }
>
> static int otto_wdt_stop(struct watchdog_device *wdev)
> {
> struct otto_wdt_ctrl *ctrl = watchdog_get_drvdata(wdev);
> - u32 v;
> -
> - v = ioread32(ctrl->base + OTTO_WDT_REG_CTRL);
> - v &= ~OTTO_WDT_CTRL_ENABLE;
> - iowrite32(v, ctrl->base + OTTO_WDT_REG_CTRL);
>
> + regmap_clear_bits(ctrl->regmap, OTTO_WDT_REG_CTRL,
> + OTTO_WDT_CTRL_ENABLE);
> return 0;
Same as above.
This is probably short enough to keep is on one line? (< 100 characters)
> }
>
> @@ -99,8 +93,7 @@ static int otto_wdt_ping(struct watchdog_device *wdev)
> {
> struct otto_wdt_ctrl *ctrl = watchdog_get_drvdata(wdev);
>
> - iowrite32(OTTO_WDT_CNTR_PING, ctrl->base + OTTO_WDT_REG_CNTR);
> -
> + regmap_write(ctrl->regmap, OTTO_WDT_REG_CNTR, OTTO_WDT_CNTR_PING);
> return 0;
Same as above.
> }
>
> @@ -126,7 +119,7 @@ static int otto_wdt_determine_timeouts(struct
> watchdog_device *wdev, unsigned in
> unsigned int total_ticks;
> unsigned int prescale;
> unsigned int tick_ms;
> - u32 v;
> + u32 mask, val;
>
> do {
> prescale = prescale_next;
> @@ -142,14 +135,11 @@ static int otto_wdt_determine_timeouts(struct
> watchdog_device *wdev, unsigned in
> } while (phase1_ticks > OTTO_WDT_PHASE_TICKS_MAX
> || phase2_ticks > OTTO_WDT_PHASE_TICKS_MAX);
>
> - v = ioread32(ctrl->base + OTTO_WDT_REG_CTRL);
> -
> - v &= ~(OTTO_WDT_CTRL_PRESCALE | OTTO_WDT_CTRL_PHASE1 |
> OTTO_WDT_CTRL_PHASE2);
> - v |= FIELD_PREP(OTTO_WDT_CTRL_PHASE1, phase1_ticks - 1);
> - v |= FIELD_PREP(OTTO_WDT_CTRL_PHASE2, phase2_ticks - 1);
> - v |= FIELD_PREP(OTTO_WDT_CTRL_PRESCALE, prescale);
> -
> - iowrite32(v, ctrl->base + OTTO_WDT_REG_CTRL);
> + mask = OTTO_WDT_CTRL_PRESCALE | OTTO_WDT_CTRL_PHASE1 |
> OTTO_WDT_CTRL_PHASE2;
> + val = FIELD_PREP(OTTO_WDT_CTRL_PHASE1, phase1_ticks - 1);
> + val |= FIELD_PREP(OTTO_WDT_CTRL_PHASE2, phase2_ticks - 1);
> + val |= FIELD_PREP(OTTO_WDT_CTRL_PRESCALE, prescale);
> + regmap_update_bits(ctrl->regmap, OTTO_WDT_REG_CTRL, mask, val);
To be consistent, you would also need to propagate the result of
regmap_update_bits() if it's an error. Same for the other regmap_*() calls.
Best,
Sander