vserver 1.9.3
[linux-2.6.git] / drivers / macintosh / via-pmu.c
index b983167..9f4147e 100644 (file)
@@ -52,7 +52,6 @@
 #include <asm/system.h>
 #include <asm/sections.h>
 #include <asm/irq.h>
-#include <asm/hardirq.h>
 #include <asm/pmac_feature.h>
 #include <asm/uaccess.h>
 #include <asm/mmu_context.h>
@@ -138,7 +137,6 @@ static int data_len;
 static volatile int adb_int_pending;
 static volatile int disable_poll;
 static struct adb_request bright_req_1, bright_req_2;
-static unsigned long async_req_locks;
 static struct device_node *vias;
 static int pmu_kind = PMU_UNKNOWN;
 static int pmu_fully_inited = 0;
@@ -155,6 +153,7 @@ static int drop_interrupts;
 static int option_lid_wakeup = 1;
 static int sleep_in_progress;
 static int can_sleep;
+static unsigned long async_req_locks;
 #endif /* CONFIG_PMAC_PBOOK */
 static unsigned int pmu_irq_stats[11];
 
@@ -492,14 +491,11 @@ static int __init via_pmu_dev_init(void)
        }
 #endif /* CONFIG_PMAC_PBOOK */
        /* Create /proc/pmu */
-       proc_pmu_root = proc_mkdir("pmu", 0);
+       proc_pmu_root = proc_mkdir("pmu", NULL);
        if (proc_pmu_root) {
-               int i;
-               proc_pmu_info = create_proc_read_entry("info", 0, proc_pmu_root,
-                                       proc_get_info, NULL);
-               proc_pmu_irqstats = create_proc_read_entry("interrupts", 0, proc_pmu_root,
-                                       proc_get_irqstats, NULL);
 #ifdef CONFIG_PMAC_PBOOK
+               int i;
+
                for (i=0; i<pmu_battery_count; i++) {
                        char title[16];
                        sprintf(title, "battery_%d", i);
@@ -507,6 +503,11 @@ static int __init via_pmu_dev_init(void)
                                                proc_get_batt, (void *)i);
                }
 #endif /* CONFIG_PMAC_PBOOK */
+
+               proc_pmu_info = create_proc_read_entry("info", 0, proc_pmu_root,
+                                       proc_get_info, NULL);
+               proc_pmu_irqstats = create_proc_read_entry("interrupts", 0, proc_pmu_root,
+                                       proc_get_irqstats, NULL);
                proc_pmu_options = create_proc_entry("options", 0600, proc_pmu_root);
                if (proc_pmu_options) {
                        proc_pmu_options->nlink = 1;
@@ -549,7 +550,7 @@ init_pmu(void)
                }
                if (pmu_state == idle)
                        adb_int_pending = 1;
-               via_pmu_interrupt(0, 0, 0);
+               via_pmu_interrupt(0, NULL, NULL);
                udelay(10);
        }
 
@@ -746,6 +747,8 @@ done_battery_state_smart(struct adb_request* req)
                pmu_power_flags &= ~PMU_PWR_AC_PRESENT;
 
 
+       capa = max = amperage = voltage = 0;
+       
        if (req->reply[1] & 0x04) {
                bat_flags |= PMU_BATT_PRESENT;
                switch(req->reply[0]) {
@@ -765,8 +768,7 @@ done_battery_state_smart(struct adb_request* req)
                                        req->reply_len, req->reply[0], req->reply[1], req->reply[2], req->reply[3]);
                                break;
                }
-       } else
-               capa = max = amperage = voltage = 0;
+       }
 
        if ((req->reply[1] & 0x01) && (amperage > 0))
                bat_flags |= PMU_BATT_CHARGING;
@@ -1122,7 +1124,7 @@ pmu_queue_request(struct adb_request *req)
                return -EINVAL;
        }
 
-       req->next = 0;
+       req->next = NULL;
        req->sent = 0;
        req->complete = 0;
 
@@ -1225,7 +1227,7 @@ pmu_poll(void)
                return;
        if (disable_poll)
                return;
-       via_pmu_interrupt(0, 0, 0);
+       via_pmu_interrupt(0, NULL, NULL);
 }
 
 void __openfirmware
@@ -1238,7 +1240,7 @@ pmu_poll_adb(void)
        /* Kicks ADB read when PMU is suspended */
        adb_int_pending = 1;
        do {
-               via_pmu_interrupt(0, 0, 0);
+               via_pmu_interrupt(0, NULL, NULL);
        } while (pmu_suspended && (adb_int_pending || pmu_state != idle
                || req_awaiting_reply));
 }
@@ -1249,7 +1251,7 @@ pmu_wait_complete(struct adb_request *req)
        if (!via)
                return;
        while((pmu_state != idle && pmu_state != locked) || !req->complete)
-               via_pmu_interrupt(0, 0, 0);
+               via_pmu_interrupt(0, NULL, NULL);
 }
 
 /* This function loops until the PMU is idle and prevents it from
@@ -1278,7 +1280,7 @@ pmu_suspend(void)
                spin_unlock_irqrestore(&pmu_lock, flags);
                if (req_awaiting_reply)
                        adb_int_pending = 1;
-               via_pmu_interrupt(0, 0, 0);
+               via_pmu_interrupt(0, NULL, NULL);
                spin_lock_irqsave(&pmu_lock, flags);
                if (!adb_int_pending && pmu_state == idle && !req_awaiting_reply) {
 #ifdef SUSPEND_USES_PMU
@@ -1377,7 +1379,7 @@ next:
                                printk(KERN_ERR "PMU: extra ADB reply\n");
                                return;
                        }
-                       req_awaiting_reply = 0;
+                       req_awaiting_reply = NULL;
                        if (len <= 2)
                                req->reply_len = 0;
                        else {
@@ -1445,7 +1447,7 @@ static struct adb_request* __pmac
 pmu_sr_intr(struct pt_regs *regs)
 {
        struct adb_request *req;
-       int bite;
+       int bite = 0;
 
        if (via[B] & TREQ) {
                printk(KERN_ERR "PMU: spurious SR intr (%x)\n", via[B]);
@@ -1662,7 +1664,7 @@ gpio1_interrupt(int irq, void *arg, struct pt_regs *regs)
                pmu_irq_stats[1]++;
                adb_int_pending = 1;
                spin_unlock_irqrestore(&pmu_lock, flags);
-               via_pmu_interrupt(0, 0, 0);
+               via_pmu_interrupt(0, NULL, NULL);
                return IRQ_HANDLED;
        }
        return IRQ_NONE;
@@ -2071,7 +2073,7 @@ pmu_unregister_sleep_notifier(struct pmu_sleep_notifier* n)
        if (n->list.next == 0)
                return -ENOENT;
        list_del(&n->list);
-       n->list.next = 0;
+       n->list.next = NULL;
        return 0;
 }
 
@@ -2406,7 +2408,7 @@ pmac_wakeup_devices(void)
 
        /* Force a poll of ADB interrupts */
        adb_int_pending = 1;
-       via_pmu_interrupt(0, 0, 0);
+       via_pmu_interrupt(0, NULL, NULL);
 
        /* Restart jiffies & scheduling */
        wakeup_decrementer();
@@ -2857,7 +2859,7 @@ pmu_release(struct inode *inode, struct file *file)
 
        lock_kernel();
        if (pp != 0) {
-               file->private_data = 0;
+               file->private_data = NULL;
                spin_lock_irqsave(&all_pvt_lock, flags);
                list_del(&pp->list);
                spin_unlock_irqrestore(&all_pvt_lock, flags);
@@ -2880,6 +2882,7 @@ pmu_ioctl(struct inode * inode, struct file *filp,
                     u_int cmd, u_long arg)
 {
        struct pmu_private *pp = filp->private_data;
+       __u32 __user *argp = (__u32 __user *)arg;
        int error;
 
        switch (cmd) {
@@ -2906,7 +2909,7 @@ pmu_ioctl(struct inode * inode, struct file *filp,
                sleep_in_progress = 0;
                return error;
        case PMU_IOC_CAN_SLEEP:
-               return put_user((u32)can_sleep, (__u32 *)arg);
+               return put_user((u32)can_sleep, argp);
 
 #ifdef CONFIG_PMAC_BACKLIGHT
        /* Backlight should have its own device or go via
@@ -2918,13 +2921,13 @@ pmu_ioctl(struct inode * inode, struct file *filp,
                error = get_backlight_level();
                if (error < 0)
                        return error;
-               return put_user(error, (__u32 *)arg);
+               return put_user(error, argp);
        case PMU_IOC_SET_BACKLIGHT:
        {
                __u32 value;
                if (sleep_in_progress)
                        return -EBUSY;
-               error = get_user(value, (__u32 *)arg);
+               error = get_user(value, argp);
                if (!error)
                        error = set_backlight_level(value);
                return error;
@@ -2943,9 +2946,9 @@ pmu_ioctl(struct inode * inode, struct file *filp,
 #endif /* CONFIG_INPUT_ADBHID */
 #endif /* CONFIG_PMAC_BACKLIGHT */
        case PMU_IOC_GET_MODEL:
-               return put_user(pmu_kind, (__u32 *)arg);
+               return put_user(pmu_kind, argp);
        case PMU_IOC_HAS_ADB:
-               return put_user(pmu_has_adb, (__u32 *)arg);
+               return put_user(pmu_has_adb, argp);
        }
        return -EINVAL;
 }