Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 183041
b: refs/heads/master
c: 24fd1ed
h: refs/heads/master
i:
  183039: d334c03
v: v3
  • Loading branch information
Russell King committed Feb 12, 2010
1 parent c3231f9 commit 9bafc1e
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9bb787f435c86ffed079b66efa3ef6a8c577568c
refs/heads/master: 24fd1edaac79fe9554c557f9f93b3197c136c236
4 changes: 2 additions & 2 deletions trunk/arch/arm/mach-pnx4008/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -740,10 +740,10 @@ static struct clk wdt_ck = {
.name = "wdt_ck",
.parent = &per_ck,
.flags = NEEDS_INITIALIZATION,
.round_rate = &on_off_round_rate,
.set_rate = &on_off_set_rate,
.enable_shift = 0,
.enable_reg = TIMCLKCTRL_REG,
.enable = clk_reg_enable,
.disable = clk_reg_disable,
};

/* These clocks are visible outside this module
Expand Down
37 changes: 24 additions & 13 deletions trunk/drivers/watchdog/pnx4008_wdt.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,6 @@ static void wdt_enable(void)
{
spin_lock(&io_lock);

if (wdt_clk)
clk_set_rate(wdt_clk, 1);

/* stop counter, initiate counter reset */
__raw_writel(RESET_COUNT, WDTIM_CTRL(wdt_base));
/*wait for reset to complete. 100% guarantee event */
Expand All @@ -125,19 +122,25 @@ static void wdt_disable(void)
spin_lock(&io_lock);

__raw_writel(0, WDTIM_CTRL(wdt_base)); /*stop counter */
if (wdt_clk)
clk_set_rate(wdt_clk, 0);

spin_unlock(&io_lock);
}

static int pnx4008_wdt_open(struct inode *inode, struct file *file)
{
int ret;

if (test_and_set_bit(WDT_IN_USE, &wdt_status))
return -EBUSY;

clear_bit(WDT_OK_TO_CLOSE, &wdt_status);

ret = clk_enable(wdt_clk);
if (ret) {
clear_bit(WDT_IN_USE, &wdt_status);
return ret;
}

wdt_enable();

return nonseekable_open(inode, file);
Expand Down Expand Up @@ -225,6 +228,7 @@ static int pnx4008_wdt_release(struct inode *inode, struct file *file)
printk(KERN_WARNING "WATCHDOG: Device closed unexpectdly\n");

wdt_disable();
clk_disable(wdt_clk);
clear_bit(WDT_IN_USE, &wdt_status);
clear_bit(WDT_OK_TO_CLOSE, &wdt_status);

Expand Down Expand Up @@ -279,19 +283,27 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev)
release_resource(wdt_mem);
kfree(wdt_mem);
goto out;
} else
clk_set_rate(wdt_clk, 1);
}

ret = clk_enable(wdt_clk);
if (ret) {
release_resource(wdt_mem);
kfree(wdt_mem);
goto out;
}

ret = misc_register(&pnx4008_wdt_miscdev);
if (ret < 0) {
printk(KERN_ERR MODULE_NAME "cannot register misc device\n");
release_resource(wdt_mem);
kfree(wdt_mem);
clk_set_rate(wdt_clk, 0);
clk_disable(wdt_clk);
clk_put(wdt_clk);
} else {
boot_status = (__raw_readl(WDTIM_RES(wdt_base)) & WDOG_RESET) ?
WDIOF_CARDRESET : 0;
wdt_disable(); /*disable for now */
clk_disable(wdt_clk);
set_bit(WDT_DEVICE_INITED, &wdt_status);
}

Expand All @@ -302,11 +314,10 @@ static int __devinit pnx4008_wdt_probe(struct platform_device *pdev)
static int __devexit pnx4008_wdt_remove(struct platform_device *pdev)
{
misc_deregister(&pnx4008_wdt_miscdev);
if (wdt_clk) {
clk_set_rate(wdt_clk, 0);
clk_put(wdt_clk);
wdt_clk = NULL;
}

clk_disable(wdt_clk);
clk_put(wdt_clk);

if (wdt_mem) {
release_resource(wdt_mem);
kfree(wdt_mem);
Expand Down

0 comments on commit 9bafc1e

Please sign in to comment.