* the value stored in those fields. This means each phase will run for at least
* one tick, so small values need to be clamped to correctly reflect the timeout.
*/
-static inline unsigned int div_round_ticks(unsigned int val, unsigned int tick_duration,
- unsigned int min_ticks)
-{
- return max(min_ticks, DIV_ROUND_UP(val, tick_duration));
-}
-
static int otto_wdt_determine_timeouts(struct watchdog_device *wdev, unsigned int timeout,
unsigned int pretimeout)
{
return -EINVAL;
tick_ms = otto_wdt_tick_ms(ctrl, prescale);
- total_ticks = div_round_ticks(timeout_ms, tick_ms, 2);
- phase1_ticks = div_round_ticks(timeout_ms - pretimeout_ms, tick_ms, 1);
- phase2_ticks = total_ticks - phase1_ticks;
+ total_ticks = max(2, DIV_ROUND_UP(timeout_ms, tick_ms));
+ phase2_ticks = max(1, pretimeout_ms / tick_ms);
+ phase1_ticks = total_ticks - phase2_ticks;
prescale_next++;
} while (phase1_ticks > OTTO_WDT_PHASE_TICKS_MAX