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:
Andres Salomon 2009-12-18 13:02:38 -05:00 committed by Linus Torvalds
parent 55639353a0
commit 9b0fd11497
2 changed files with 20 additions and 22 deletions

View file

@ -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

View file

@ -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);