sh: hp6xx: Fix up hp6xx_apm build failure.
[sfrench/cifs-2.6.git] / arch / sh / boards / hp6xx / hp6xx_apm.c
index d1c1460c8a06ecf7905fe303f62ce9af03eb6f1f..177f4f028e0dd5769d6d530290b6b6fec9097318 100644 (file)
@@ -2,6 +2,7 @@
  * bios-less APM driver for hp680
  *
  * Copyright 2005 (c) Andriy Skulysh <askulysh@gmail.com>
+ * Copyright 2008 (c) Kristoffer Ericson <kristoffer.ericson@gmail.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License.
 #include <asm/adc.h>
 #include <asm/hp6xx.h>
 
-#define SH7709_PGDR                    0xa400012c
-
+/* percentage values */
 #define APM_CRITICAL                   10
 #define APM_LOW                                30
 
-#define HP680_BATTERY_MAX              875
-#define HP680_BATTERY_MIN              600
-#define HP680_BATTERY_AC_ON            900
+/* resonably sane values */
+#define HP680_BATTERY_MAX              898
+#define HP680_BATTERY_MIN              486
+#define HP680_BATTERY_AC_ON            1023
 
 #define MODNAME "hp6x0_apm"
 
+#define PGDR   0xa400012c
+
 static void hp6x0_apm_get_power_status(struct apm_power_info *info)
 {
        int battery, backup, charging, percentage;
@@ -38,17 +41,26 @@ static void hp6x0_apm_get_power_status(struct apm_power_info *info)
        percentage = 100 * (battery - HP680_BATTERY_MIN) /
                           (HP680_BATTERY_MAX - HP680_BATTERY_MIN);
 
+       /* % of full battery */
+       info->battery_life = percentage;
+
+       /* We want our estimates in minutes */
+       info->units = 0;
+
+       /* Extremely(!!) rough estimate, we will replace this with a datalist later on */
+       info->time = (2 * battery);
+
        info->ac_line_status = (battery > HP680_BATTERY_AC_ON) ?
                         APM_AC_ONLINE : APM_AC_OFFLINE;
 
-       pgdr = ctrl_inb(SH7709_PGDR);
+       pgdr = ctrl_inb(PGDR);
        if (pgdr & PGDR_MAIN_BATTERY_OUT) {
                info->battery_status    = APM_BATTERY_STATUS_NOT_PRESENT;
                info->battery_flag      = 0x80;
        } else if (charging < 8) {
                info->battery_status    = APM_BATTERY_STATUS_CHARGING;
                info->battery_flag      = 0x08;
-               info->ac_line_status = 0xff;
+               info->ac_line_status    = 0x01;
        } else if (percentage <= APM_CRITICAL) {
                info->battery_status    = APM_BATTERY_STATUS_CRITICAL;
                info->battery_flag      = 0x04;
@@ -59,13 +71,11 @@ static void hp6x0_apm_get_power_status(struct apm_power_info *info)
                info->battery_status    = APM_BATTERY_STATUS_HIGH;
                info->battery_flag      = 0x01;
        }
-
-       info->units = 0;
 }
 
 static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev)
 {
-       if (!apm_suspended)
+       if (!APM_DISABLED)
                apm_queue_event(APM_USER_SUSPEND);
 
        return IRQ_HANDLED;
@@ -91,7 +101,6 @@ static int __init hp6x0_apm_init(void)
 static void __exit hp6x0_apm_exit(void)
 {
        free_irq(HP680_BTN_IRQ, 0);
-       apm_get_info = NULL;
 }
 
 module_init(hp6x0_apm_init);