Author: richard
Date: Mon May 11 14:13:39 2009
New Revision: 5716

URL: http://svn.slimdevices.com/jive?rev=5716&view=rev
Log:
Bug: 11980
Description:
Wake up from suspend every three hours to check the battery level, shutdown if 
it gets too low.


Modified:
    7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/arch/arm/plat-s3c24xx/pm.c
    7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/char/jive/jive_mgmt.c
    7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/rtc/rtc-s3c.c
    7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/video/logo/logo.c

Modified: 
7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/arch/arm/plat-s3c24xx/pm.c
URL: 
http://svn.slimdevices.com/jive/7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/arch/arm/plat-s3c24xx/pm.c?rev=5716&r1=5715&r2=5716&view=diff
==============================================================================
--- 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/arch/arm/plat-s3c24xx/pm.c 
(original)
+++ 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/arch/arm/plat-s3c24xx/pm.c Mon 
May 11 14:13:39 2009
@@ -35,6 +35,7 @@
 #include <linux/ioport.h>
 #include <linux/delay.h>
 #include <linux/serial_core.h>
+#include <linux/bcd.h>
 
 #include <asm/cacheflush.h>
 #include <asm/hardware.h>
@@ -45,6 +46,7 @@
 #include <asm/arch/regs-gpio.h>
 #include <asm/arch/regs-mem.h>
 #include <asm/arch/regs-irq.h>
+#include <asm/arch/regs-rtc.h>
 
 #include <asm/mach/time.h>
 
@@ -118,6 +120,7 @@
        SAVE_ITEM(S3C2410_DCLKCON),
 };
 
+#define CONFIG_S3C2410_PM_DEBUG
 #ifdef CONFIG_S3C2410_PM_DEBUG
 
 #define SAVE_UART(va) \
@@ -612,8 +615,47 @@
        return 0;
 }
 
+
+extern void __iomem *s3c_rtc_base;
+extern bool jive_is_battery_flat(int *pbat);
+
+static int jive_pm_enter(suspend_state_t state)
+{
+       void __iomem *rtc_base = s3c_rtc_base;
+       unsigned int rtc_hour, alm_hour, alrm_en;
+       int rtc_wakeup, bat_lvl, bat_flat;
+
+       do {
+               /* set rtc alarm to wake up every three hours */
+               rtc_hour = readb(rtc_base + S3C2410_RTCHOUR);
+               BCD_TO_BIN(rtc_hour);
+
+               alm_hour = (rtc_hour + 3) % 12;
+               alrm_en = S3C2410_RTCALM_HOUREN | S3C2410_RTCALM_ALMEN;
+               DBG("rtc_hour=%d alm_hour=%d\n", rtc_hour, alm_hour);
+
+               writeb(BIN2BCD(alm_hour), rtc_base + S3C2410_ALMHOUR);
+               writeb(alrm_en, rtc_base + S3C2410_RTCALM);
+
+               /* suspend */
+               s3c2410_pm_enter(state);
+
+               /* woken by rtc? */
+               rtc_wakeup = (__raw_readl(S3C2410_SRCPND) == 0);
+
+               /* check battery */
+               bat_flat = jive_is_battery_flat(&bat_lvl);
+               DBG("battery flat=%d level=%d\n", bat_flat, bat_lvl);
+
+               if (bat_flat) {
+                       kernel_power_off();
+               }
+       } while (rtc_wakeup);
+}
+
+
 static struct pm_ops s3c2410_pm_ops = {
-       .enter          = s3c2410_pm_enter,
+       .enter          = jive_pm_enter,
        .valid          = pm_valid_only_mem,
 };
 

Modified: 
7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/char/jive/jive_mgmt.c
URL: 
http://svn.slimdevices.com/jive/7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/char/jive/jive_mgmt.c?rev=5716&r1=5715&r2=5716&view=diff
==============================================================================
--- 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/char/jive/jive_mgmt.c 
(original)
+++ 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/char/jive/jive_mgmt.c 
Mon May 11 14:13:39 2009
@@ -634,7 +634,7 @@
 /* Called from logo.c to determine if the battery is flat during boot.
  * Note this is called before jive_mgmt_init.
  */
-bool jive_is_battery_flat(void) {
+bool jive_is_battery_flat(int *pbat) {
        int bat, nacpr;
 
        bat = get_battery();
@@ -647,6 +647,10 @@
 
        printk("battery flat? %s (level=%d nacpr=%d)\n", 
battery_flat?"yes":"no", bat, nacpr);
 
+       if (pbat) {
+               *pbat = bat;
+       }
+
        return battery_flat;
 }
 

Modified: 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/rtc/rtc-s3c.c
URL: 
http://svn.slimdevices.com/jive/7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/rtc/rtc-s3c.c?rev=5716&r1=5715&r2=5716&view=diff
==============================================================================
--- 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/rtc/rtc-s3c.c 
(original)
+++ 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/rtc/rtc-s3c.c Mon May 
11 14:13:39 2009
@@ -36,7 +36,7 @@
 
 static struct resource *s3c_rtc_mem;
 
-static void __iomem *s3c_rtc_base;
+void __iomem *s3c_rtc_base;
 static int s3c_rtc_alarmno = NO_IRQ;
 static int s3c_rtc_tickno  = NO_IRQ;
 static int s3c_rtc_freq    = 1;

Modified: 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/video/logo/logo.c
URL: 
http://svn.slimdevices.com/jive/7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/video/logo/logo.c?rev=5716&r1=5715&r2=5716&view=diff
==============================================================================
--- 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/video/logo/logo.c 
(original)
+++ 7.3/trunk/squeezeos/src/s3c2412/linux-2.6.22/drivers/video/logo/logo.c Mon 
May 11 14:13:39 2009
@@ -22,7 +22,7 @@
 #endif
 
 #ifdef CONFIG_LOGO_LOGITECH_CLUT224
-extern bool jive_is_battery_flat(void);
+extern bool jive_is_battery_flat(int *pbat);
 #endif
 
 extern const struct linux_logo logo_linux_mono;
@@ -108,7 +108,7 @@
 #endif
 #ifdef CONFIG_LOGO_LOGITECH_CLUT224
                {
-                       if (jive_is_battery_flat()) {
+                       if (jive_is_battery_flat(NULL)) {
                                logo = &logo_battery_clut224;
                        }
                        else {

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/jive-checkins

Reply via email to