diff options
Diffstat (limited to 'packages/linux/linux-rp-2.6.21/sharpsl_pm-r1.patch')
-rw-r--r-- | packages/linux/linux-rp-2.6.21/sharpsl_pm-r1.patch | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/packages/linux/linux-rp-2.6.21/sharpsl_pm-r1.patch b/packages/linux/linux-rp-2.6.21/sharpsl_pm-r1.patch new file mode 100644 index 0000000000..9e7632fe0a --- /dev/null +++ b/packages/linux/linux-rp-2.6.21/sharpsl_pm-r1.patch @@ -0,0 +1,213 @@ +Index: linux-2.6.21/arch/arm/common/sharpsl_pm.c +=================================================================== +--- linux-2.6.21.orig/arch/arm/common/sharpsl_pm.c 2007-07-03 21:42:09.000000000 +0200 ++++ linux-2.6.21/arch/arm/common/sharpsl_pm.c 2007-07-03 21:42:57.000000000 +0200 +@@ -28,10 +28,8 @@ + #include <asm/hardware.h> + #include <asm/mach-types.h> + #include <asm/irq.h> +-#include <asm/arch/pm.h> +-#include <asm/arch/pxa-regs.h> +-#include <asm/arch/sharpsl.h> + #include <asm/hardware/sharpsl_pm.h> ++#include "sharpsl_pm.h" + + /* + * Constants +@@ -153,7 +151,7 @@ + sharpsl_pm.battstat.mainbat_percent = percent; + } + +- dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %d\n", voltage, ++ dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %ld\n", voltage, + sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies); + + /* If battery is low. limit backlight intensity to save power. */ +@@ -504,7 +502,7 @@ + + static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state) + { +- dev_dbg(sharpsl_pm.dev, "Time is: %08x\n",RCNR); ++ dev_dbg(sharpsl_pm.dev, "Time is: %08lx\n",RCNR); + + dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n",sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG); + /* not charging and AC-IN! */ +@@ -518,28 +516,28 @@ + + sharpsl_pm.machinfo->presuspend(); + +- PEDR = 0xffffffff; /* clear it */ ++ clear_pedr_on_pxa(); + + sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE; + if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCHK_TIME_SUSPEND + 30))) || !alarm_enable)) { +- RTSR &= RTSR_ALE; ++ enable_alarm_irq(); + RTAR = RCNR + SHARPSL_BATCHK_TIME_SUSPEND; +- dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n",RTAR); ++ dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08lx\n",RTAR); + sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE; + } else if (alarm_enable) { +- RTSR &= RTSR_ALE; ++ enable_alarm_irq(); + RTAR = alarm_time; +- dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n",RTAR); ++ dev_dbg(sharpsl_pm.dev, "User alarm at: %08lx\n",RTAR); + } else { + dev_dbg(sharpsl_pm.dev, "No alarms set.\n"); + RTAR = 0; + } + +- pxa_pm_enter(state); ++ sharpsl_pm_enter(state); + + sharpsl_pm.machinfo->postsuspend(); + +- dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",PEDR); ++ dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",pedr_on_pxa()); + } + + static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state) +@@ -572,7 +570,7 @@ + static int corgi_pxa_pm_enter(suspend_state_t state) + { + unsigned long alarm_time = RTAR; +- unsigned int alarm_status = ((RTSR & RTSR_ALE) != 0); ++ unsigned int alarm_status = get_alarm_status(); + + dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n"); + +@@ -633,7 +631,7 @@ + } + + 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)); ++ dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check: acin: %d, discharge voltage: %d, no discharge: %ld\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))) +@@ -782,9 +780,9 @@ + + static struct pm_ops sharpsl_pm_ops = { + .pm_disk_mode = PM_DISK_FIRMWARE, +- .prepare = pxa_pm_prepare, ++ .prepare = sharpsl_pm_prepare, + .enter = corgi_pxa_pm_enter, +- .finish = pxa_pm_finish, ++ .finish = sharpsl_pm_finish, + }; + + static int __init sharpsl_pm_probe(struct platform_device *pdev) +@@ -813,7 +811,7 @@ + apm_get_power_status = sharpsl_apm_get_power_status; + + pm_set_ops(&sharpsl_pm_ops); +- ++ printk(KERN_DEBUG "sharpsl register pm_ops\n"); + mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); + + return 0; +Index: linux-2.6.21/arch/arm/common/sharpsl_pm.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.21/arch/arm/common/sharpsl_pm.h 2007-07-03 21:42:26.000000000 +0200 +@@ -0,0 +1,78 @@ ++ ++#ifdef CONFIG_ARCH_PXA ++# include <asm/arch/pm.h> ++# include <asm/arch/pxa-regs.h> ++# include <asm/arch/sharpsl.h> ++static inline void clear_pedr_on_pxa(void) ++{ ++ PEDR = 0xffffffff; /* clear it */ ++} ++ ++static inline void enable_alarm_irq(void) ++{ ++ RTSR &= RTSR_ALE; ++} ++ ++static inline int pedr_on_pxa(void) ++{ ++ return PEDR; ++} ++ ++static inline int get_alarm_status(void) ++{ ++ return ((RTSR & RTSR_ALE) != 0); ++} ++ ++static inline int sharpsl_pm_enter(suspend_state_t state) ++{ ++ return pxa_pm_enter(state); ++} ++static inline int sharpsl_pm_prepare(suspend_state_t state) ++{ ++ return pxa_pm_prepare(state); ++} ++ ++int sharpsl_pm_finish(suspend_state_t state) ++{ ++ return pxa_pm_finish(state); ++} ++#endif ++ ++#ifdef CONFIG_ARCH_SA1100 ++# include <asm/arch/SA-1100.h> ++extern int sa11x0_pm_enter(suspend_state_t state); ++ ++static inline void clear_pedr_on_pxa(void) {} ++static inline void enable_alarm_irq(void) {} ++static inline int pedr_on_pxa(void) ++{ ++ return GPLR; ++} ++ ++static inline int get_alarm_status(void) ++{ ++ return 1; ++} ++ ++static inline int sharpsl_pm_enter(suspend_state_t state) ++{ ++ return sa11x0_pm_enter(state); ++} ++ ++static inline int sharpsl_pm_prepare(suspend_state_t state) ++{ ++ switch (state) { ++ case PM_SUSPEND_MEM: ++ case PM_SUSPEND_STANDBY: ++ return 0; ++ default: ++ return -EINVAL; ++ } ++} ++ ++int sharpsl_pm_finish(suspend_state_t state) ++{ ++ return 0; ++} ++#endif ++ +Index: linux-2.6.21/arch/arm/mach-sa1100/pm.c +=================================================================== +--- linux-2.6.21.orig/arch/arm/mach-sa1100/pm.c 2007-04-26 05:08:32.000000000 +0200 ++++ linux-2.6.21/arch/arm/mach-sa1100/pm.c 2007-07-03 21:42:26.000000000 +0200 +@@ -54,7 +54,7 @@ + }; + + +-static int sa11x0_pm_enter(suspend_state_t state) ++int sa11x0_pm_enter(suspend_state_t state) + { + unsigned long gpio, sleep_save[SLEEP_SAVE_SIZE]; + struct timespec delta, rtc; +@@ -128,6 +128,7 @@ + + return 0; + } ++EXPORT_SYMBOL(sa1x00_pm_enter); + + unsigned long sleep_phys_sp(void *sp) + { |