static int bcm63xx_wdt_remove(struct platform_device *pdev) { if (!nowayout) bcm63xx_wdt_pause(); misc_deregister(&bcm63xx_wdt_miscdev); bcm63xx_timer_unregister(TIMER_WDT_ID); return 0; }
static int __devinit bcm63xx_wdt_probe(struct platform_device *pdev) { int ret; struct resource *r; setup_timer(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0L); r = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!r) { dev_err(&pdev->dev, "failed to get resources\n"); return -ENODEV; } bcm63xx_wdt_device.regs = ioremap_nocache(r->start, resource_size(r)); if (!bcm63xx_wdt_device.regs) { dev_err(&pdev->dev, "failed to remap I/O resources\n"); return -ENXIO; } ret = bcm63xx_timer_register(TIMER_WDT_ID, bcm63xx_wdt_isr, NULL); if (ret < 0) { dev_err(&pdev->dev, "failed to register wdt timer isr\n"); goto unmap; } if (bcm63xx_wdt_settimeout(wdt_time)) { bcm63xx_wdt_settimeout(WDT_DEFAULT_TIME); dev_info(&pdev->dev, ": wdt_time value must be 1 <= wdt_time <= 256, using %d\n", wdt_time); } ret = misc_register(&bcm63xx_wdt_miscdev); if (ret < 0) { dev_err(&pdev->dev, "failed to register watchdog device\n"); goto unregister_timer; } dev_info(&pdev->dev, " started, timer margin: %d sec\n", WDT_DEFAULT_TIME); return 0; unregister_timer: bcm63xx_timer_unregister(TIMER_WDT_ID); unmap: iounmap(bcm63xx_wdt_device.regs); return ret; }