The watchdog driver has been adapted for the OMAP4 way of clock calls.
In OMAP4, WDT iclk are hw controlled and no sw control is available

Signed-off-by: Abhijit Pagare <[email protected]>
---
 drivers/watchdog/omap_wdt.c |   39 +++++++++++++++++++++++++++------------
 1 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
index c6aaf28..df9f714 100644
--- a/drivers/watchdog/omap_wdt.c
+++ b/drivers/watchdog/omap_wdt.c
@@ -145,7 +145,9 @@ static int omap_wdt_open(struct inode *inode, struct file 
*file)
        if (test_and_set_bit(1, (unsigned long *)&(wdev->omap_wdt_users)))
                return -EBUSY;
 
-       clk_enable(wdev->ick);    /* Enable the interface clock */
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx())
+               clk_enable(wdev->ick);    /* Enable the interface clock */
        clk_enable(wdev->fck);    /* Enable the functional clock */
 
        /* initialize prescaler */
@@ -176,7 +178,9 @@ static int omap_wdt_release(struct inode *inode, struct 
file *file)
 
        omap_wdt_disable(wdev);
 
-       clk_disable(wdev->ick);
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx())
+               clk_disable(wdev->ick);
        clk_disable(wdev->fck);
 #else
        printk(KERN_CRIT "omap_wdt: Unexpected close, not stopping!\n");
@@ -292,11 +296,14 @@ static int __devinit omap_wdt_probe(struct 
platform_device *pdev)
        wdev->omap_wdt_users = 0;
        wdev->mem = mem;
 
-       wdev->ick = clk_get(&pdev->dev, "ick");
-       if (IS_ERR(wdev->ick)) {
-               ret = PTR_ERR(wdev->ick);
-               wdev->ick = NULL;
-               goto err_clk;
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx()) {
+               wdev->ick = clk_get(&pdev->dev, "ick");
+               if (IS_ERR(wdev->ick)) {
+                       ret = PTR_ERR(wdev->ick);
+                       wdev->ick = NULL;
+                       goto err_clk;
+               }
        }
        wdev->fck = clk_get(&pdev->dev, "fck");
        if (IS_ERR(wdev->fck)) {
@@ -313,7 +320,9 @@ static int __devinit omap_wdt_probe(struct platform_device 
*pdev)
 
        platform_set_drvdata(pdev, wdev);
 
-       clk_enable(wdev->ick);
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx())
+               clk_enable(wdev->ick);
        clk_enable(wdev->fck);
 
        omap_wdt_disable(wdev);
@@ -335,7 +344,9 @@ static int __devinit omap_wdt_probe(struct platform_device 
*pdev)
        /* autogate OCP interface clock */
        __raw_writel(0x01, wdev->base + OMAP_WATCHDOG_SYS_CONFIG);
 
-       clk_disable(wdev->ick);
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx())
+               clk_disable(wdev->ick);
        clk_disable(wdev->fck);
 
        omap_wdt_dev = pdev;
@@ -350,8 +361,10 @@ err_ioremap:
        wdev->base = NULL;
 
 err_clk:
-       if (wdev->ick)
-               clk_put(wdev->ick);
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx())
+               if (wdev->ick)
+                       clk_put(wdev->ick);
        if (wdev->fck)
                clk_put(wdev->fck);
        kfree(wdev);
@@ -385,7 +398,9 @@ static int __devexit omap_wdt_remove(struct platform_device 
*pdev)
        release_mem_region(res->start, resource_size(res));
        platform_set_drvdata(pdev, NULL);
 
-       clk_put(wdev->ick);
+       /* OMAP4 iclk are hw controlled and no sw control is available */
+       if (!cpu_is_omap44xx())
+               clk_put(wdev->ick);
        clk_put(wdev->fck);
        iounmap(wdev->base);
 
-- 
1.6.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to