summary refs log tree commit diff
path: root/drivers/sbus
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-08-29 15:40:24 -0700
committerDavid S. Miller <davem@davemloft.net>2008-08-29 15:40:24 -0700
commit957183f32e136450eb9a4b8eed52dfac46834eed (patch)
tree8c0b70602f1c2043e5bab7337580ca666e70ca99 /drivers/sbus
parente42311d75107ca78868ded0286b691aad2df1f29 (diff)
downloadlinux-957183f32e136450eb9a4b8eed52dfac46834eed.tar.gz
riowatchdog: Move under drivers/watchdog
The config stuff was already in drivers/watchdog/Kconfig

Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/sbus')
-rw-r--r--drivers/sbus/char/Makefile1
-rw-r--r--drivers/sbus/char/riowatchdog.c259
2 files changed, 0 insertions, 260 deletions
diff --git a/drivers/sbus/char/Makefile b/drivers/sbus/char/Makefile
index e15bd5e39463..b29c186b6956 100644
--- a/drivers/sbus/char/Makefile
+++ b/drivers/sbus/char/Makefile
@@ -12,7 +12,6 @@ bbc-objs := bbc_i2c.o bbc_envctrl.o
 obj-$(CONFIG_ENVCTRL)			+= envctrl.o
 obj-$(CONFIG_DISPLAY7SEG)		+= display7seg.o
 obj-$(CONFIG_WATCHDOG_CP1XXX)		+= cpwatchdog.o
-obj-$(CONFIG_WATCHDOG_RIO)		+= riowatchdog.o
 obj-$(CONFIG_OBP_FLASH)			+= flash.o
 obj-$(CONFIG_SUN_OPENPROMIO)		+= openprom.o
 obj-$(CONFIG_SUN_MOSTEK_RTC)		+= rtc.o
diff --git a/drivers/sbus/char/riowatchdog.c b/drivers/sbus/char/riowatchdog.c
deleted file mode 100644
index b53af832a3af..000000000000
--- a/drivers/sbus/char/riowatchdog.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* riowatchdog.c - driver for hw watchdog inside Super I/O of RIO
- *
- * Copyright (C) 2001, 2008 David S. Miller (davem@davemloft.net)
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/fs.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/miscdevice.h>
-#include <linux/smp_lock.h>
-#include <linux/watchdog.h>
-#include <linux/of.h>
-#include <linux/of_device.h>
-
-#include <asm/io.h>
-#include <asm/uaccess.h>
-
-
-/* RIO uses the NatSemi Super I/O power management logical device
- * as its' watchdog.
- *
- * When the watchdog triggers, it asserts a line to the BBC (Boot Bus
- * Controller) of the machine.  The BBC can only be configured to
- * trigger a power-on reset when the signal is asserted.  The BBC
- * can be configured to ignore the signal entirely as well.
- *
- * The only Super I/O device register we care about is at index
- * 0x05 (WDTO_INDEX) which is the watchdog time-out in minutes (1-255).
- * If set to zero, this disables the watchdog.  When set, the system
- * must periodically (before watchdog expires) clear (set to zero) and
- * re-set the watchdog else it will trigger.
- *
- * There are two other indexed watchdog registers inside this Super I/O
- * logical device, but they are unused.  The first, at index 0x06 is
- * the watchdog control and can be used to make the watchdog timer re-set
- * when the PS/2 mouse or serial lines show activity.  The second, at
- * index 0x07 is merely a sampling of the line from the watchdog to the
- * BBC.
- *
- * The watchdog device generates no interrupts.
- */
-
-MODULE_AUTHOR("David S. Miller <davem@davemloft.net>");
-MODULE_DESCRIPTION("Hardware watchdog driver for Sun RIO");
-MODULE_SUPPORTED_DEVICE("watchdog");
-MODULE_LICENSE("GPL");
-
-#define RIOWD_NAME	"pmc"
-#define PFX		RIOWD_NAME ": "
-
-struct riowd {
-	void __iomem		*regs;
-	spinlock_t		lock;
-};
-
-static struct riowd *riowd_device;
-
-#define WDTO_INDEX	0x05
-
-static int riowd_timeout = 1;		/* in minutes */
-module_param(riowd_timeout, int, 0);
-MODULE_PARM_DESC(riowd_timeout, "Watchdog timeout in minutes");
-
-static void riowd_writereg(struct riowd *p, u8 val, int index)
-{
-	unsigned long flags;
-
-	spin_lock_irqsave(&p->lock, flags);
-	writeb(index, p->regs + 0);
-	writeb(val, p->regs + 1);
-	spin_unlock_irqrestore(&p->lock, flags);
-}
-
-static int riowd_open(struct inode *inode, struct file *filp)
-{
-	cycle_kernel_lock();
-	nonseekable_open(inode, filp);
-	return 0;
-}
-
-static int riowd_release(struct inode *inode, struct file *filp)
-{
-	return 0;
-}
-
-static int riowd_ioctl(struct inode *inode, struct file *filp,
-		       unsigned int cmd, unsigned long arg)
-{
-	static struct watchdog_info info = {
-		.options		= WDIOF_SETTIMEOUT,
-		.firmware_version	= 1,
-		.identity		= "riowd",
-	};
-	void __user *argp = (void __user *)arg;
-	struct riowd *p = riowd_device;
-	unsigned int options;
-	int new_margin;
-
-	switch (cmd) {
-	case WDIOC_GETSUPPORT:
-		if (copy_to_user(argp, &info, sizeof(info)))
-			return -EFAULT;
-		break;
-
-	case WDIOC_GETSTATUS:
-	case WDIOC_GETBOOTSTATUS:
-		if (put_user(0, (int __user *)argp))
-			return -EFAULT;
-		break;
-
-	case WDIOC_KEEPALIVE:
-		riowd_writereg(p, riowd_timeout, WDTO_INDEX);
-		break;
-
-	case WDIOC_SETOPTIONS:
-		if (copy_from_user(&options, argp, sizeof(options)))
-			return -EFAULT;
-
-		if (options & WDIOS_DISABLECARD)
-			riowd_writereg(p, 0, WDTO_INDEX);
-		else if (options & WDIOS_ENABLECARD)
-			riowd_writereg(p, riowd_timeout, WDTO_INDEX);
-		else
-			return -EINVAL;
-
-		break;
-
-	case WDIOC_SETTIMEOUT:
-		if (get_user(new_margin, (int __user *)argp))
-			return -EFAULT;
-		if ((new_margin < 60) || (new_margin > (255 * 60)))
-			return -EINVAL;
-		riowd_timeout = (new_margin + 59) / 60;
-		riowd_writereg(p, riowd_timeout, WDTO_INDEX);
-		/* Fall */
-
-	case WDIOC_GETTIMEOUT:
-		return put_user(riowd_timeout * 60, (int __user *)argp);
-
-	default:
-		return -EINVAL;
-	};
-
-	return 0;
-}
-
-static ssize_t riowd_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
-{
-	struct riowd *p = riowd_device;
-
-	if (count) {
-		riowd_writereg(p, riowd_timeout, WDTO_INDEX);
-		return 1;
-	}
-
-	return 0;
-}
-
-static const struct file_operations riowd_fops = {
-	.owner =	THIS_MODULE,
-	.llseek =	no_llseek,
-	.ioctl =	riowd_ioctl,
-	.open =		riowd_open,
-	.write =	riowd_write,
-	.release =	riowd_release,
-};
-
-static struct miscdevice riowd_miscdev = {
-	.minor	= WATCHDOG_MINOR,
-	.name	= "watchdog",
-	.fops	= &riowd_fops
-};
-
-static int __devinit riowd_probe(struct of_device *op,
-				 const struct of_device_id *match)
-{
-	struct riowd *p;
-	int err = -EINVAL;
-
-	if (riowd_device)
-		goto out;
-
-	err = -ENOMEM;
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
-	if (!p)
-		goto out;
-
-	spin_lock_init(&p->lock);
-
-	p->regs = of_ioremap(&op->resource[0], 0, 2, "riowd");
-	if (!p->regs) {
-		printk(KERN_ERR PFX "Cannot map registers.\n");
-		goto out_free;
-	}
-
-	err = misc_register(&riowd_miscdev);
-	if (err) {
-		printk(KERN_ERR PFX "Cannot register watchdog misc device.\n");
-		goto out_iounmap;
-	}
-
-	printk(KERN_INFO PFX "Hardware watchdog [%i minutes], "
-	       "regs at %p\n", riowd_timeout, p->regs);
-
-	dev_set_drvdata(&op->dev, p);
-	riowd_device = p;
-	err = 0;
-
-out_iounmap:
-	of_iounmap(&op->resource[0], p->regs, 2);
-
-out_free:
-	kfree(p);
-
-out:
-	return err;
-}
-
-static int __devexit riowd_remove(struct of_device *op)
-{
-	struct riowd *p = dev_get_drvdata(&op->dev);
-
-	misc_deregister(&riowd_miscdev);
-	of_iounmap(&op->resource[0], p->regs, 2);
-	kfree(p);
-
-	return 0;
-}
-
-static struct of_device_id riowd_match[] = {
-	{
-		.name = "pmc",
-	},
-	{},
-};
-MODULE_DEVICE_TABLE(of, riowd_match);
-
-static struct of_platform_driver riowd_driver = {
-	.name		= "riowd",
-	.match_table	= riowd_match,
-	.probe		= riowd_probe,
-	.remove		= __devexit_p(riowd_remove),
-};
-
-static int __init riowd_init(void)
-{
-	return of_register_driver(&riowd_driver, &of_bus_type);
-}
-
-static void __exit riowd_exit(void)
-{
-	of_unregister_driver(&riowd_driver);
-}
-
-module_init(riowd_init);
-module_exit(riowd_exit);