> -----Original Message----- > From: Guenter Roeck [mailto:linux@xxxxxxxxxxxx] > Sent: Wednesday, August 03, 2016 12:53 AM > > On Tue, Aug 02, 2016 at 04:07:00PM +0530, Shubhrajyoti Datta wrote: > > Add support for the clock. Currently we enable at probe and relinquish > > at remove. > > > > Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xxxxxxxxxx> > > --- > > .../devicetree/bindings/watchdog/of-xilinx-wdt.txt | 3 +++ > > drivers/watchdog/of_xilinx_wdt.c | 24 > ++++++++++++++++++++-- > > 2 files changed, 25 insertions(+), 2 deletions(-) > > > > diff --git > > a/Documentation/devicetree/bindings/watchdog/of-xilinx-wdt.txt > > b/Documentation/devicetree/bindings/watchdog/of-xilinx-wdt.txt > > index 6d63782..b0a9fa3 100644 > > --- a/Documentation/devicetree/bindings/watchdog/of-xilinx-wdt.txt > > +++ b/Documentation/devicetree/bindings/watchdog/of-xilinx-wdt.txt > > @@ -5,6 +5,8 @@ Required properties: > > - compatible : Should be "xlnx,xps-timebase-wdt-1.00.a" or > > "xlnx,xps-timebase-wdt-1.01.a". > > - reg : Physical base address and size > > +- clocks : Input clock specifier. Refer to common clock > > + bindings. > > > > Optional properties: > > - clock-frequency : Frequency of clock in Hz > > @@ -17,6 +19,7 @@ Example: > > axi-timebase-wdt@40100000 { > > clock-frequency = <50000000>; > > compatible = "xlnx,xps-timebase-wdt-1.00.a"; > > + clocks = <&clkc 15>; > > reg = <0x40100000 0x10000>; > > xlnx,wdt-enable-once = <0x0>; > > xlnx,wdt-interval = <0x1b>; > > diff --git a/drivers/watchdog/of_xilinx_wdt.c > > b/drivers/watchdog/of_xilinx_wdt.c > > index b2e1b4c..23cbb33 100644 > > --- a/drivers/watchdog/of_xilinx_wdt.c > > +++ b/drivers/watchdog/of_xilinx_wdt.c > > @@ -10,6 +10,7 @@ > > * 2 of the License, or (at your option) any later version. > > */ > > > > +#include <linux/clk.h> > > #include <linux/err.h> > > #include <linux/module.h> > > #include <linux/types.h> > > @@ -45,6 +46,7 @@ struct xwdt_device { > > u32 wdt_interval; > > spinlock_t spinlock; > > struct watchdog_device xilinx_wdt_wdd; > > + struct clk *clk; > > }; > > > > static int xilinx_wdt_start(struct watchdog_device *wdd) @@ -194,17 > > +196,30 @@ static int xwdt_probe(struct platform_device *pdev) > > > > spin_lock_init(&xdev->spinlock); > > watchdog_set_drvdata(xilinx_wdt_wdd, xdev); > > + xdev->clk = devm_clk_get(&pdev->dev, NULL); > > + if (IS_ERR(xdev->clk)) { > > + dev_err(&pdev->dev, "input clock not found\n"); > > + rc = PTR_ERR(xdev->clk); > > + return rc; > > + } > > + > > + rc = clk_prepare_enable(xdev->clk); > > + if (rc) { > > + dev_err(&pdev->dev, "unable to enable clock\n"); > > + goto err_clk_disable; > > Enable failed. Why try to disable ? Will fix > > > + } > > + > > > > Please no double empty lines. Will fix thanks. > > > rc = xwdt_selftest(xdev); > > if (rc == XWT_TIMER_FAILED) { > > dev_err(&pdev->dev, "SelfTest routine error\n"); > > - return rc; > > + goto err_clk_disable; > > } > > > > rc = watchdog_register_device(xilinx_wdt_wdd); > > if (rc) { > > dev_err(&pdev->dev, "Cannot register watchdog > (err=%d)\n", rc); > > - return rc; > > + goto err_clk_disable; > > } > > > > dev_info(&pdev->dev, "Xilinx Watchdog Timer at %p with timeout > > %ds\n", @@ -213,6 +228,10 @@ static int xwdt_probe(struct > platform_device *pdev) > > platform_set_drvdata(pdev, xdev); > > > > return 0; > > +err_clk_disable: > > + clk_disable_unprepare(xdev->clk); > > + > > + return rc; > > } > > > > static int xwdt_remove(struct platform_device *pdev) @@ -220,6 +239,7 > > @@ static int xwdt_remove(struct platform_device *pdev) > > struct xwdt_device *xdev = platform_get_drvdata(pdev); > > > > watchdog_unregister_device(&xdev->xilinx_wdt_wdd); > > + clk_disable_unprepare(xdev->clk); > > > > return 0; > > } > > -- > > 2.1.1 > > > > -- > > 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 devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html