static char esb_expect_close;
 static struct platform_device *esb_platform_device;
 
-
 /* module parameters */
 /* 30 sec default heartbeat (1 < heartbeat < 2*1023) */
 #define WATCHDOG_HEARTBEAT 30
        writeb(ESB_UNLOCK2, ESB_RELOAD_REG);
 }
 
-static void esb_timer_start(void)
+static int esb_timer_start(void)
 {
        u8 val;
 
+       spin_lock(&esb_lock);
+       esb_unlock_registers();
+       writew(ESB_WDT_RELOAD, ESB_RELOAD_REG);
        /* Enable or Enable + Lock? */
        val = 0x02 | (nowayout ? 0x01 : 0x00);
        pci_write_config_byte(esb_pci, ESB_LOCK_REG, val);
+       spin_unlock(&esb_lock);
+       return 0;
 }
 
 static int esb_timer_stop(void)
                return -EBUSY;
 
        /* Reload and activate timer */
-       esb_timer_keepalive();
        esb_timer_start();
 
        return nonseekable_open(inode, file);
                }
 
                if (new_options & WDIOS_ENABLECARD) {
-                       esb_timer_keepalive();
                        esb_timer_start();
                        retval = 0;
                }