Re: [PATCH] Radeonfb acpi vgapost

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Micheal Marineau napsal(a):

Here is a cleaned up version of the patch to repost radeon cards when
resuming from acpi s3 suspend.  I've been sitting on it for a while
hoping that I might be able to gain some insight in how to use the d2
state instead of this repost as ppc does.  On my x86 laptop with a
radeon 9000 resuming from d2 does manage to turn on the card/display,
but it becomes horridly scrambled. But right now I don't have the time
or the skill to actually get any futher than that.

And btw, posting the card still causes the system to wait for a key
press.  I don't know if that is solvable with the current post method.
Getting the existing d2 suspend/resume stuff to work might be the only
way to clear that up.
------------------------------------------------------------------------

Index: linux-2.6.13-rc3/arch/i386/kernel/acpi/sleep.c
===================================================================
--- linux-2.6.13-rc3.orig/arch/i386/kernel/acpi/sleep.c	2005-07-12 21:46:46.000000000 -0700
+++ linux-2.6.13-rc3/arch/i386/kernel/acpi/sleep.c	2005-07-29 19:03:56.000000000 -0700
@@ -5,6 +5,7 @@
 *  Copyright (C) 2001-2003 Pavel Machek <[email protected]>
 */

+#include <linux/module.h>
#include <linux/acpi.h>
#include <linux/bootmem.h>
#include <linux/dmi.h>
@@ -56,6 +57,34 @@
	zap_low_mappings();
}

+/*
+ * acpi_vgapost
+ */
+
+extern void do_vgapost_lowlevel (unsigned long);
the comment is for acpi_vgapost, not for some extern somewhat, maybe...

+
+void acpi_vgapost (unsigned long slot)
+{
+	unsigned long flags, saved_video_flags = acpi_video_flags;
+	
+	acpi_video_flags = (slot & 0xffff) << 16 | 1;
+	
+	/* Map low memory and copy information */
+	init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD);
+	memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start);
80 chars on line max, please.

+	acpi_copy_wakeup_routine(acpi_wakeup_address);
+	
+	/* Tunnel thru real mode */
+	local_irq_save(flags);
+	do_vgapost_lowlevel(acpi_wakeup_address);
+	local_irq_restore(flags);
+	
[snip]


static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend)
{
	u16 pwr_cmd;
@@ -2657,6 +2666,8 @@
		 */
		else if (rinfo->pm_mode & radeon_pm_d2)
			radeon_set_suspend(rinfo, 0);
+		if (rinfo->pm_mode & radeon_pm_post && rinfo->reinit_func != NULL)
80 too

+			rinfo->reinit_func(rinfo);

		rinfo->asleep = 0;
	} else
@@ -2777,6 +2788,13 @@
#endif
	}
#endif /* defined(CONFIG_PM) && defined(CONFIG_PPC_OF) */
[snip]

It looks good, otherwise.

--
Jiri Slaby         www.fi.muni.cz/~xslaby
~\-/~      [email protected]      ~\-/~
241B347EC88228DE51EE A49C4A73A25004CB2A10

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux