{
        int ret;
 
+       telclk_interrupt = (inb(TLCLK_REG7) & 0x0f);
+
+       alarm_events = kzalloc( sizeof(struct tlclk_alarms), GFP_KERNEL);
+       if (!alarm_events) {
+               ret = -ENOMEM;
+               goto out1;
+       }
+
        ret = register_chrdev(tlclk_major, "telco_clock", &tlclk_fops);
        if (ret < 0) {
                printk(KERN_ERR "tlclk: can't get major %d.\n", tlclk_major);
+               kfree(alarm_events);
                return ret;
        }
        tlclk_major = ret;
-       alarm_events = kzalloc( sizeof(struct tlclk_alarms), GFP_KERNEL);
-       if (!alarm_events) {
-               ret = -ENOMEM;
-               goto out1;
-       }
 
        /* Read telecom clock IRQ number (Set by BIOS) */
        if (!request_region(TLCLK_BASE, 8, "telco_clock")) {
                ret = -EBUSY;
                goto out2;
        }
-       telclk_interrupt = (inb(TLCLK_REG7) & 0x0f);
 
        if (0x0F == telclk_interrupt ) { /* not MCPBL0010 ? */
                printk(KERN_ERR "telclk_interrupt = 0x%x non-mcpbl0010 hw.\n",
        release_region(TLCLK_BASE, 8);
 out2:
        kfree(alarm_events);
-out1:
        unregister_chrdev(tlclk_major, "telco_clock");
+out1:
        return ret;
 }