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