mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
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
|
config GEODE_WDT
|
||||||
tristate "AMD Geode CS5535/CS5536 Watchdog"
|
tristate "AMD Geode CS5535/CS5536 Watchdog"
|
||||||
depends on MGEODE_LX
|
depends on CS5535_MFGPT
|
||||||
help
|
help
|
||||||
This driver enables a watchdog capability built into the
|
This driver enables a watchdog capability built into the
|
||||||
CS5535/CS5536 companion chips for the AMD Geode GX and LX
|
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) 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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -19,7 +20,7 @@
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
#include <asm/geode.h>
|
#include <linux/cs5535.h>
|
||||||
|
|
||||||
#define GEODEWDT_HZ 500
|
#define GEODEWDT_HZ 500
|
||||||
#define GEODEWDT_SCALE 6
|
#define GEODEWDT_SCALE 6
|
||||||
|
@ -46,25 +47,25 @@ MODULE_PARM_DESC(nowayout,
|
||||||
|
|
||||||
static struct platform_device *geodewdt_platform_device;
|
static struct platform_device *geodewdt_platform_device;
|
||||||
static unsigned long wdt_flags;
|
static unsigned long wdt_flags;
|
||||||
static int wdt_timer;
|
static struct cs5535_mfgpt_timer *wdt_timer;
|
||||||
static int safe_close;
|
static int safe_close;
|
||||||
|
|
||||||
static void geodewdt_ping(void)
|
static void geodewdt_ping(void)
|
||||||
{
|
{
|
||||||
/* Stop the counter */
|
/* Stop the counter */
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||||
|
|
||||||
/* Reset the counter */
|
/* Reset the counter */
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||||
|
|
||||||
/* Enable the counter */
|
/* 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)
|
static void geodewdt_disable(void)
|
||||||
{
|
{
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int geodewdt_set_heartbeat(int val)
|
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)
|
if (val < 1 || val > GEODEWDT_MAX_SECONDS)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0);
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, val * GEODEWDT_HZ);
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, val * GEODEWDT_HZ);
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0);
|
cs5535_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, MFGPT_SETUP_CNTEN);
|
||||||
|
|
||||||
timeout = val;
|
timeout = val;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -215,28 +216,25 @@ static struct miscdevice geodewdt_miscdev = {
|
||||||
|
|
||||||
static int __devinit geodewdt_probe(struct platform_device *dev)
|
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);
|
wdt_timer = cs5535_mfgpt_alloc_timer(MFGPT_TIMER_ANY, MFGPT_DOMAIN_WORKING);
|
||||||
|
if (!wdt_timer) {
|
||||||
if (timer == -1) {
|
|
||||||
printk(KERN_ERR "geodewdt: No timers were available\n");
|
printk(KERN_ERR "geodewdt: No timers were available\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
wdt_timer = timer;
|
|
||||||
|
|
||||||
/* Set up the 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));
|
GEODEWDT_SCALE | (3 << 8));
|
||||||
|
|
||||||
/* Set up comparator 2 to reset when the event fires */
|
/* 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 */
|
/* Set up the initial timeout */
|
||||||
|
|
||||||
geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2,
|
cs5535_mfgpt_write(wdt_timer, MFGPT_REG_CMP2,
|
||||||
timeout * GEODEWDT_HZ);
|
timeout * GEODEWDT_HZ);
|
||||||
|
|
||||||
ret = misc_register(&geodewdt_miscdev);
|
ret = misc_register(&geodewdt_miscdev);
|
||||||
|
|
Loading…
Reference in a new issue