Ãhel kenal pÃeval (pÃhapÃev, 23. jaanuar 2005, 16:54-0500), kirjutas
Volker Braun:
> Update: I compiled a kernel with the radeonfb-massive-update-of-pm-
> code.patch. Now I can successfully resume from acpi S3 again. The power
> drain issue remains, it still uses about 5W in the suspend state.

radeonfb power management is not enabled on PC platform.
I cooked up some code to turn D2 sleep mode on for selected PC-s and
managed to get my ThinkPad to work.
Try this patch on top of radeonfb-massive.
NB! The patch has a model specific triger, so You MUST add Your laptop
model number to the top of the drivers/video/aty/radeon_pm.c.

-- 
 Antti Andreimann - Security Expert
      Using Linux since 1993
  Member of ELUG since 29.01.2000
--- linux-2.6.11-rc2-tank/drivers/video/aty/radeon_pm.c.orig	2005-01-23 14:55:57.000000000 +0200
+++ linux-2.6.11-rc2-tank/drivers/video/aty/radeon_pm.c	2005-01-23 21:53:47.000000000 +0200
@@ -25,8 +25,31 @@
 #include <asm/pmac_feature.h>
 #endif
 
+/* For detecting supported PC laptops */
+#ifdef CONFIG_X86
+#include <linux/dmi.h>
+#endif
+
 #include "ati_ids.h"
 
+#ifdef CONFIG_X86
+/* This array holds a list of supported PC laptops.
+ * Currently only few IBM models are tested.
+ * If you want to experiment, use dmidecode to find out
+ * vendor and product codes for Your laptop.
+ */
+static struct dmi_system_id __devinitdata radeonfb_dmi_table[] = {
+	{
+		.ident = "IBM ThinkPad T41 (2373-2FG)",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "23732FG"),
+		},
+	},
+	{ },
+};
+#endif
+
 void radeon_pm_disable_dynamic_mode(struct radeonfb_info *rinfo)
 {
 	u32 tmp;
@@ -2748,6 +2771,24 @@
 		OUTREG(TV_DAC_CNTL, INREG(TV_DAC_CNTL) | 0x07000000);
 	}
 #endif /* defined(CONFIG_PM) && defined(CONFIG_PPC_OF) */
+
+/* The PM code also works on some PC laptops.
+ * Only a few models are actually tested so Your mileage may vary.
+ * We can do D2 on at least M7 and M9 on some IBM ThinkPad T41 models.
+ */
+#if defined(CONFIG_PM) && defined(CONFIG_X86)
+	if (dmi_check_system(radeonfb_dmi_table)) {
+		if (rinfo->is_mobility && rinfo->pm_reg &&
+		    rinfo->family <= CHIP_FAMILY_RV250)
+			rinfo->pm_mode |= radeon_pm_d2;
+
+		/* Power down TV DAC, that saves a significant amount of power,
+		 * we'll have something better once we actually have some TVOut
+		 * support
+		 */
+		OUTREG(TV_DAC_CNTL, INREG(TV_DAC_CNTL) | 0x07000000);
+	}
+#endif /* defined(CONFIG_PM) && defined(CONFIG_X86) */
 }
 
 void radeonfb_pm_exit(struct radeonfb_info *rinfo)

Reply via email to