static int cmos_pnp_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
 {
-       cmos_wake_setup(&pnp->dev);
+       int irq, ret;
 
        if (pnp_port_start(pnp, 0) == 0x70 && !pnp_irq_valid(pnp, 0)) {
-               unsigned int irq = 0;
+               irq = 0;
 #ifdef CONFIG_X86
                /* Some machines contain a PNP entry for the RTC, but
                 * don't define the IRQ. It should always be safe to
                if (nr_legacy_irqs())
                        irq = RTC_IRQ;
 #endif
-               return cmos_do_probe(&pnp->dev,
-                               pnp_get_resource(pnp, IORESOURCE_IO, 0), irq);
        } else {
-               return cmos_do_probe(&pnp->dev,
-                               pnp_get_resource(pnp, IORESOURCE_IO, 0),
-                               pnp_irq(pnp, 0));
+               irq = pnp_irq(pnp, 0);
        }
+
+       ret = cmos_do_probe(&pnp->dev, pnp_get_resource(pnp, IORESOURCE_IO, 0), irq);
+       if (ret)
+               return ret;
+
+       cmos_wake_setup(&pnp->dev);
+
+       return 0;
 }
 
 static void cmos_pnp_remove(struct pnp_dev *pnp)
 static int __init cmos_platform_probe(struct platform_device *pdev)
 {
        struct resource *resource;
-       int irq;
+       int irq, ret;
 
        cmos_of_init(pdev);
-       cmos_wake_setup(&pdev->dev);
 
        if (RTC_IOMAPPED)
                resource = platform_get_resource(pdev, IORESOURCE_IO, 0);
        if (irq < 0)
                irq = -1;
 
-       return cmos_do_probe(&pdev->dev, resource, irq);
+       ret = cmos_do_probe(&pdev->dev, resource, irq);
+       if (ret)
+               return ret;
+
+       cmos_wake_setup(&pdev->dev);
+
+       return 0;
 }
 
 static int cmos_platform_remove(struct platform_device *pdev)