summaryrefslogtreecommitdiffstats
path: root/drivers/macintosh/via-pmu.c
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2006-09-01 06:27:49 +0200
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-01 20:39:09 +0200
commitd565dd3b0824b67a8442df4de83cc44f7c726fc9 (patch)
treeefe10d3e6355353a3ffd416a873d609119d9fbd9 /drivers/macintosh/via-pmu.c
parent[PATCH] dm: work around mempool_alloc, bio_alloc_bioset deadlocks (diff)
downloadlinux-d565dd3b0824b67a8442df4de83cc44f7c726fc9.tar.xz
linux-d565dd3b0824b67a8442df4de83cc44f7c726fc9.zip
[PATCH] powerpc: More via-pmu backlight fixes
The via-pmu backlight code (introduced in 2.6.18) has various design issues causing crashes on machines using it like the old Wallstreet powerbook (Michael, the author, never managed to test on these and I just got my hand on one of those old beasts). This fixes them by no longer trying to hijack the backlight device of the frontmost framebuffer (causing that framebuffer to crash) but having it's own local bits instead. Might look weird but it's better that way on those old machines, at least as a last-minute fix for 2.6.18. We might rework the whole thing later. This patch also changes the way it gets notified of sleep and wakeup in order to properly shut the backlight down on sleep and bring it back on wakeup. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/macintosh/via-pmu.c')
-rw-r--r--drivers/macintosh/via-pmu.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index ea386801e215..14610a63f580 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -1995,6 +1995,8 @@ restore_via_state(void)
out_8(&via[IER], IER_SET | SR_INT | CB1_INT);
}
+extern void pmu_backlight_set_sleep(int sleep);
+
static int
pmac_suspend_devices(void)
{
@@ -2032,6 +2034,11 @@ pmac_suspend_devices(void)
return -EBUSY;
}
+#ifdef CONFIG_PMAC_BACKLIGHT
+ /* Tell backlight code not to muck around with the chip anymore */
+ pmu_backlight_set_sleep(1);
+#endif
+
/* Call platform functions marked "on sleep" */
pmac_pfunc_i2c_suspend();
pmac_pfunc_base_suspend();
@@ -2090,6 +2097,11 @@ pmac_wakeup_devices(void)
{
mdelay(100);
+#ifdef CONFIG_PMAC_BACKLIGHT
+ /* Tell backlight code it can use the chip again */
+ pmu_backlight_set_sleep(0);
+#endif
+
/* Power back up system devices (including the PIC) */
device_power_up();