Cleanup was not in the reverse order from the set-up, so not all
the gotos made sense, and also it was being avoided completely upon
failure of init_pmu().
Signed-off-by: Phil Carmody <pc+lkml@asdf.org>
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
                }
                if (gpio_reg == NULL) {
                        printk(KERN_ERR "via-pmu: Can't find GPIO reg !\n");
-                       goto fail_gpio;
+                       goto fail;
                }
        } else
                pmu_kind = PMU_UNKNOWN;
        via = ioremap(taddr, 0x2000);
        if (via == NULL) {
                printk(KERN_ERR "via-pmu: Can't map address !\n");
-               goto fail;
+               goto fail_via_remap;
        }
        
        out_8(&via[IER], IER_CLR | 0x7f);       /* disable all intrs */
 
        pmu_state = idle;
 
-       if (!init_pmu()) {
-               via = NULL;
-               return 0;
-       }
+       if (!init_pmu())
+               goto fail_init;
 
        printk(KERN_INFO "PMU driver v%d initialized for %s, firmware: %02x\n",
               PMU_DRIVER_VERSION, pbook_type[pmu_kind], pmu_version);
        sys_ctrler = SYS_CTRLER_PMU;
        
        return 1;
- fail:
-       of_node_put(vias);
+
+ fail_init:
+       iounmap(via);
+       via = NULL;
+ fail_via_remap:
        iounmap(gpio_reg);
        gpio_reg = NULL;
- fail_gpio:
+ fail:
+       of_node_put(vias);
        vias = NULL;
        return 0;
 }