#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/miscdevice.h>
-#include <linux/notifier.h>
#include <linux/platform_device.h>
-#include <linux/reboot.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/uaccess.h>
struct tegra_wdt {
struct miscdevice miscdev;
- struct notifier_block notifier;
struct resource *res_src;
struct resource *res_wdt;
unsigned long users;
#endif
-static int tegra_wdt_notify(struct notifier_block *this,
- unsigned long code, void *dev)
-{
- struct tegra_wdt *wdt = container_of(this, struct tegra_wdt, notifier);
-
- if (code == SYS_DOWN || code == SYS_HALT)
- tegra_wdt_disable(wdt);
- return NOTIFY_DONE;
-}
-
static int tegra_wdt_open(struct inode *inode, struct file *file)
{
struct miscdevice *mdev = file->private_data;
}
wdt->miscdev.fops = &tegra_wdt_fops;
- wdt->notifier.notifier_call = tegra_wdt_notify;
-
res_src = request_mem_region(res_src->start, resource_size(res_src),
pdev->name);
res_wdt = request_mem_region(res_wdt->start, resource_size(res_wdt),
wdt->res_wdt = res_wdt;
wdt->status = WDT_DISABLED;
- ret = register_reboot_notifier(&wdt->notifier);
- if (ret) {
- dev_err(&pdev->dev, "cannot register reboot notifier\n");
- goto fail;
- }
-
ret = misc_register(&wdt->miscdev);
if (ret) {
dev_err(&pdev->dev, "failed to register misc device\n");
- unregister_reboot_notifier(&wdt->notifier);
goto fail;
}
tegra_wdt_disable(wdt);
- unregister_reboot_notifier(&wdt->notifier);
misc_deregister(&wdt->miscdev);
iounmap(wdt->wdt_source);
iounmap(wdt->wdt_timer);