watchdog: ixp4xx: Rewrite driver to use core
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 26 Aug 2019 14:38:14 +0000 (16:38 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 4 Aug 2021 10:20:13 +0000 (12:20 +0200)
commit21a0a29d16c672b0c6e3662ea55969dccdbc5547
tree7ce6ae15f84b9bf86030d3bd0102a031807f54b1
parent1c953bda90ca7e4a2574a738e41a04a2bbc03bd2
watchdog: ixp4xx: Rewrite driver to use core

This rewrites the IXP4xx watchdog driver as follows:

- Spawn the watchdog driver as a platform device from the timer
  driver. It's one device in the hardware, and the fact that
  Linux splits the handling into two different devices is
  a Linux pecularity, and thus it becomes a Linux pecularity
  to spawn a separate watchdog driver.

- Spawn the watchdog driver from the timer driver at probe().
  This is well after the timer driver as actually registered and
  started and we know the register base is available.

- Instead of looping back callbacks to the timer drivers for all
  watchdog calls, pass the register base to the watchdog driver
  and manage the registers there. The two drivers aren't even
  interested in the same register so the spinlock is totally
  surplus, delete it.

- Replace pretty much all of the content in the watchdog driver
  with a simple, modern watchdog driver utilizing the watchdog
  core instead of registering its own misc device and ioctl()
  handling.

- Drop module parameters as the same already exist in the
  watchdog core.

What remains is a slim elegant (IMO) watchdog driver using the
watchdog core, spawning from device tree or boardfile alike.

Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/clocksource/timer-ixp4xx.c
drivers/watchdog/Kconfig
drivers/watchdog/ixp4xx_wdt.c