#include <linux/platform_device.h>
 #include <linux/io.h>
 
-#define DRV_VERSION "0.1"
+#define DRV_VERSION "0.2"
 
 #define RTC_REG_SIZE           0x2000
 #define RTC_OFFSET             0x1ff0
        pdata->rtc = rtc;
        pdata->last_jiffies = jiffies;
        platform_set_drvdata(pdev, pdata);
-       sysfs_create_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr);
+       ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr);
+       if (ret)
+               goto out;
        return 0;
  out:
+       if (pdata->rtc)
+               rtc_device_unregister(pdata->rtc);
        if (pdata->irq >= 0)
                free_irq(pdata->irq, pdev);
        if (ioaddr)
 
 #include <linux/platform_device.h>
 #include <linux/io.h>
 
-#define DRV_VERSION "0.1"
+#define DRV_VERSION "0.2"
 
 #define RTC_REG_SIZE           0x800
 #define RTC_OFFSET             0x7f8
                writeb(sec, ioaddr + RTC_SECONDS);
                writeb(cen & RTC_CENTURY_MASK, ioaddr + RTC_CONTROL);
        }
-       if (readb(ioaddr + RTC_DAY) & RTC_BATT_FLAG)
+       if (!(readb(ioaddr + RTC_DAY) & RTC_BATT_FLAG))
                dev_warn(&pdev->dev, "voltage-low detected.\n");
 
        rtc = rtc_device_register(pdev->name, &pdev->dev,
        pdata->rtc = rtc;
        pdata->last_jiffies = jiffies;
        platform_set_drvdata(pdev, pdata);
-       sysfs_create_bin_file(&pdev->dev.kobj, &ds1742_nvram_attr);
+       ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1742_nvram_attr);
+       if (ret)
+               goto out;
        return 0;
  out:
+       if (pdata->rtc)
+               rtc_device_unregister(pdata->rtc);
        if (ioaddr)
                iounmap(ioaddr);
        if (pdata->baseaddr)