watchdog: update geodewdt for new MFGPT API
Update to the new cs5535_mfgpt* API. The geode-specific wording should eventually be dropped from this driver... Signed-off-by: Andres Salomon <dilinger@collabora.co.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
55639353a0
commit
9b0fd11497
2 changed files with 20 additions and 22 deletions
|
@ -368,7 +368,7 @@ config ALIM7101_WDT
|
|||
|
||||
config GEODE_WDT
|
||||
tristate "AMD Geode CS5535/CS5536 Watchdog"
|
||||
depends on MGEODE_LX
|
||||
depends on CS5535_MFGPT
|
||||
help
|
||||
This driver enables a watchdog capability built into the
|
||||
CS5535/CS5536 companion chips for the AMD Geode GX and LX
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* Watchdog timer for the Geode GX/LX with the CS5535/CS5536 companion chip
|
||||
/* Watchdog timer for machines with the CS5535/CS5536 companion chip
|
||||
*
|
||||
* Copyright (C) 2006-2007, Advanced Micro Devices, Inc.
|
||||
* Copyright (C) 2009 Andres Salomon <dilinger@collabora.co.uk>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -19,7 +20,7 @@
|
|||
#include <linux/reboot.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/geode.h>
|
||||
#include <linux/cs5535.h>
|
||||
|
||||
#define GEODEWDT_HZ 500
|
||||
#define GEODEWDT_SCALE 6
|
||||
|
@ -46,25 +47,25 @@ MODULE_PARM_DESC(nowayout,
|
|||
|
||||
static struct platform_device *geodewdt_platform_device;
|
||||
static unsigned long wdt_flags;
|
||||
static int wdt_timer;
|
||||
static struct cs5535_mfgpt_timer *wdt_timer;
|
||||
static int safe_close;
|
||||
|
||||
static void geodewdt_ping(void)
|
||||
{
|
||||
/* Stop the counter */
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||
|
||||
/* Reset the counter */
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||
|
||||
/* Enable the counter */
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN);
|
||||
}
|
||||
|
||||
static void geodewdt_disable(void)
|
||||
{
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||
}
|
||||
|
||||
static int geodewdt_set_heartbeat(int val)
|
||||
|
@ -72,10 +73,10 @@ static int geodewdt_set_heartbeat(int val)
|
|||
if (val < 1 || val > GEODEWDT_MAX_SECONDS)
|
||||
return -EINVAL;
|
||||
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, val * GEODEWDT_HZ);
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, val * GEODEWDT_HZ);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN);
|
||||
|
||||
timeout = val;
|
||||
return 0;
|
||||
|
@ -215,28 +216,25 @@ static struct miscdevice geodewdt_miscdev = {
|
|||
|
||||
static int __devinit geodewdt_probe(struct platform_device *dev)
|
||||
{
|
||||
int ret, timer;
|
||||
int ret;
|
||||
|
||||
timer = geode_mfgpt_alloc_timer(MFGPT_TIMER_ANY, MFGPT_DOMAIN_WORKING);
|
||||
|
||||
if (timer == -1) {
|
||||
wdt_timer = cs5535_mfgpt_alloc_timer(MFGPT_TIMER_ANY, MFGPT_DOMAIN_WORKING);
|
||||
if (!wdt_timer) {
|
||||
printk(KERN_ERR "geodewdt: No timers were available\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
wdt_timer = timer;
|
||||
|
||||
/* Set up the timer */
|
||||
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP,
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP,
|
||||
GEODEWDT_SCALE | (3 << 8));
|
||||
|
||||
/* Set up comparator 2 to reset when the event fires */
|
||||
geode_mfgpt_toggle_event(wdt_timer, MFGPT_CMP2, MFGPT_EVENT_RESET, 1);
|
||||
cs5535_mfgpt_toggle_event(wdt_timer, MFGPT_CMP2, MFGPT_EVENT_RESET, 1);
|
||||
|
||||
/* Set up the initial timeout */
|
||||
|
||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2,
|
||||
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_CMP2,
|
||||
timeout * GEODEWDT_HZ);
|
||||
|
||||
ret = misc_register(&geodewdt_miscdev);
|
||||
|
|
Loading…
Reference in a new issue