On Mon, Sep 19, 2016 at 09:12:14PM +0200, Robert Jarzmik wrote: > The OS timer rate used for the watchdog can now be fetched from the > standard clock API. This will remove the last user of > get_clock_tick_rate() in both pxa and sa11x0 architectures. > > Signed-off-by: Robert Jarzmik <robert.jarzmik@xxxxxxx> Did you test this ? Potential problem, if built into the kernel, could be that the clocks might not be ready by the time the driver is instantiated. Unless this is converted to a platform driver, it won't be able to handle a -EPROBE_DEFER from the clock subsystem. Guenter > --- > drivers/watchdog/sa1100_wdt.c | 24 +++++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/drivers/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c > index e1d39a1e9628..8965e3f536c3 100644 > --- a/drivers/watchdog/sa1100_wdt.c > +++ b/drivers/watchdog/sa1100_wdt.c > @@ -22,6 +22,7 @@ > > #include <linux/module.h> > #include <linux/moduleparam.h> > +#include <linux/clk.h> > #include <linux/types.h> > #include <linux/kernel.h> > #include <linux/fs.h> > @@ -155,12 +156,27 @@ static struct miscdevice sa1100dog_miscdev = { > }; > > static int margin __initdata = 60; /* (secs) Default is 1 minute */ > +static struct clk *clk; > > static int __init sa1100dog_init(void) > { > int ret; > > - oscr_freq = get_clock_tick_rate(); > + clk = clk_get(NULL, "OSTIMER0"); > + if (IS_ERR(clk)) { > + pr_err("SA1100/PXA2xx Watchdog Timer: clock not found: %d\n", > + (int) PTR_ERR(clk)); > + return PTR_ERR(clk); > + } > + > + ret = clk_prepare_enable(clk); > + if (ret) { > + pr_err("SA1100/PXA2xx Watchdog Timer: clock failed to prepare+enable: %d\n", > + ret); > + goto err; > + } > + > + oscr_freq = clk_get_rate(clk); > > /* > * Read the reset status, and save it for later. If > @@ -176,11 +192,17 @@ static int __init sa1100dog_init(void) > pr_info("SA1100/PXA2xx Watchdog Timer: timer margin %d sec\n", > margin); > return ret; > +err: > + clk_disable_unprepare(clk); > + clk_put(clk); > + return ret; > } > > static void __exit sa1100dog_exit(void) > { > misc_deregister(&sa1100dog_miscdev); > + clk_disable_unprepare(clk); > + clk_put(clk); > } > > module_init(sa1100dog_init); > -- > 2.1.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html