Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[firefly-linux-kernel-4.4.55.git] / drivers / macintosh / via-pmu.c
index dee88e59f0d34be1359661368799d8546668eda7..f9512bfa6c3c7d86ec14da2309b54804b882f057 100644 (file)
@@ -329,10 +329,11 @@ int __init find_via_pmu(void)
                                gaddr = of_translate_address(gpiop, reg);
                        if (gaddr != OF_BAD_ADDR)
                                gpio_reg = ioremap(gaddr, 0x10);
+                       of_node_put(gpiop);
                }
                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;
@@ -340,7 +341,7 @@ int __init find_via_pmu(void)
        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 */
@@ -348,10 +349,8 @@ int __init find_via_pmu(void)
 
        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);
@@ -359,11 +358,15 @@ int __init find_via_pmu(void)
        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;
 }
@@ -2109,7 +2112,7 @@ pmu_read(struct file *file, char __user *buf,
 
        spin_lock_irqsave(&pp->lock, flags);
        add_wait_queue(&pp->wait, &wait);
-       current->state = TASK_INTERRUPTIBLE;
+       set_current_state(TASK_INTERRUPTIBLE);
 
        for (;;) {
                ret = -EAGAIN;
@@ -2138,7 +2141,7 @@ pmu_read(struct file *file, char __user *buf,
                schedule();
                spin_lock_irqsave(&pp->lock, flags);
        }
-       current->state = TASK_RUNNING;
+       __set_current_state(TASK_RUNNING);
        remove_wait_queue(&pp->wait, &wait);
        spin_unlock_irqrestore(&pp->lock, flags);