linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / arm / common / sharpsl_pm.c
index 59b5dde..978d32e 100644 (file)
@@ -22,7 +22,6 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
-#include <linux/leds.h>
 
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
 #define SHARPSL_CHARGE_CO_CHECK_TIME           5   /* 5 msec */
 #define SHARPSL_CHARGE_RETRY_CNT               1   /* eqv. 10 min */
 
+#define SHARPSL_CHARGE_ON_VOLT         0x99  /* 2.9V */
+#define SHARPSL_CHARGE_ON_TEMP         0xe0  /* 2.9V */
+#define SHARPSL_CHARGE_ON_ACIN_HIGH    0x9b  /* 6V */
+#define SHARPSL_CHARGE_ON_ACIN_LOW     0x34  /* 2V */
+#define SHARPSL_FATAL_ACIN_VOLT        182   /* 3.45V */
+#define SHARPSL_FATAL_NOACIN_VOLT      170   /* 3.40V */
+
 /*
  * Prototypes
  */
@@ -69,19 +75,17 @@ static void sharpsl_battery_thread(void *private_);
 struct sharpsl_pm_status sharpsl_pm;
 DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL);
 DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL);
-DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger);
 
 
 static int get_percentage(int voltage)
 {
        int i = sharpsl_pm.machinfo->bat_levels - 1;
-       int bl_status = sharpsl_pm.machinfo->backlight_get_status ? sharpsl_pm.machinfo->backlight_get_status() : 0;
        struct battery_thresh *thresh;
 
        if (sharpsl_pm.charge_mode == CHRG_ON)
-               thresh = bl_status ? sharpsl_pm.machinfo->bat_levels_acin_bl : sharpsl_pm.machinfo->bat_levels_acin;
+               thresh=sharpsl_pm.machinfo->bat_levels_acin;
        else
-               thresh = bl_status ? sharpsl_pm.machinfo->bat_levels_noac_bl : sharpsl_pm.machinfo->bat_levels_noac;
+               thresh=sharpsl_pm.machinfo->bat_levels_noac;
 
        while (i > 0 && (voltage > thresh[i].voltage))
                i--;
@@ -125,7 +129,7 @@ static void sharpsl_battery_thread(void *private_)
        sharpsl_pm.battstat.ac_status = (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN) ? APM_AC_ONLINE : APM_AC_OFFLINE);
 
        /* Corgi cannot confirm when battery fully charged so periodically kick! */
-       if (!sharpsl_pm.machinfo->batfull_irq && (sharpsl_pm.charge_mode == CHRG_ON)
+       if (machine_is_corgi() && (sharpsl_pm.charge_mode == CHRG_ON)
                        && time_after(jiffies, sharpsl_pm.charge_start_time +  SHARPSL_CHARGE_ON_TIME_INTERVAL))
                schedule_work(&toggle_charger);
 
@@ -160,11 +164,11 @@ static void sharpsl_battery_thread(void *private_)
                        && ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW) ||
                        (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) {
                if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) {
-                       sharpsl_pm.machinfo->backlight_limit(1);
+                       corgibl_limit_intensity(1);
                        sharpsl_pm.flags |= SHARPSL_BL_LIMIT;
                }
        } else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) {
-               sharpsl_pm.machinfo->backlight_limit(0);
+               corgibl_limit_intensity(0);
                sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT;
        }
 
@@ -186,10 +190,10 @@ void sharpsl_pm_led(int val)
                dev_err(sharpsl_pm.dev, "Charging Error!\n");
        } else if (val == SHARPSL_LED_ON) {
                dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
-               led_trigger_event(sharpsl_charge_led_trigger, LED_FULL);
+
        } else {
                dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
-               led_trigger_event(sharpsl_charge_led_trigger, LED_OFF);
+
        }
 }
 
@@ -412,10 +416,8 @@ static int sharpsl_check_battery_temp(void)
        val = get_select_val(buff);
 
        dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val);
-       if (val > sharpsl_pm.machinfo->charge_on_temp) {
-               printk(KERN_WARNING "Not charging: temperature out of limits.\n");
+       if (val > SHARPSL_CHARGE_ON_TEMP)
                return -1;
-       }
 
        return 0;
 }
@@ -446,7 +448,7 @@ static int sharpsl_check_battery_voltage(void)
        val = get_select_val(buff);
        dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val);
 
-       if (val < sharpsl_pm.machinfo->charge_on_volt)
+       if (val < SHARPSL_CHARGE_ON_VOLT)
                return -1;
 
        return 0;
@@ -464,7 +466,7 @@ static int sharpsl_ac_check(void)
        temp = get_select_val(buff);
        dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n",temp);
 
-       if ((temp > sharpsl_pm.machinfo->charge_acin_high) || (temp < sharpsl_pm.machinfo->charge_acin_low)) {
+       if ((temp > SHARPSL_CHARGE_ON_ACIN_HIGH) || (temp < SHARPSL_CHARGE_ON_ACIN_LOW)) {
                dev_err(sharpsl_pm.dev, "Error: AC check failed.\n");
                return -1;
        }
@@ -623,8 +625,8 @@ static int sharpsl_fatal_check(void)
        temp = get_select_val(buff);
        dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check: acin: %d, discharge voltage: %d, no discharge: %d\n", acin, temp, sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT));
 
-       if ((acin && (temp < sharpsl_pm.machinfo->fatal_acin_volt)) ||
-                       (!acin && (temp < sharpsl_pm.machinfo->fatal_noacin_volt)))
+       if ((acin && (temp < SHARPSL_FATAL_ACIN_VOLT)) ||
+                       (!acin && (temp < SHARPSL_FATAL_NOACIN_VOLT)))
                return -1;
        return 0;
 }
@@ -784,8 +786,6 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev)
        init_timer(&sharpsl_pm.chrg_full_timer);
        sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer;
 
-       led_trigger_register_simple("sharpsl-charge", &sharpsl_charge_led_trigger);
-
        sharpsl_pm.machinfo->init();
 
        device_create_file(&pdev->dev, &dev_attr_battery_percentage);
@@ -807,8 +807,6 @@ static int sharpsl_pm_remove(struct platform_device *pdev)
        device_remove_file(&pdev->dev, &dev_attr_battery_percentage);
        device_remove_file(&pdev->dev, &dev_attr_battery_voltage);
 
-       led_trigger_unregister_simple(sharpsl_charge_led_trigger);
-
        sharpsl_pm.machinfo->exit();
 
        del_timer_sync(&sharpsl_pm.chrg_full_timer);