Suspend is a different problem. It does not work with or without the fix on hardy. My educated guess is that suspend not working was a kernel regression starting from 2.6.23. 2.6.22 works, 2.6.23, 2.6.24, 2.6.25 don't. Yes I've tested all of them. But not quite done yet, maybe I'll find the culprit.
What I did for power management was directly edited the kernel source and fixed the issue. You just need to make sure that EC starts in poll mode instead of interrupt mode. I'm working with 2.6.25. So I went into [kernel source]/drivers/acpi/ec.c and commented out lines 542-545 that read
Code:
if (printk_ratelimit())
pr_info(PREFIX "non-query interrupt received,"
" switching to interrupt mode\n");
set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
in function acpi_ec_gpe_handler
and added
Code:
test_bit(EC_FLAGS_GPE_MODE, &ec->flags);
on line 804 between
Code:
pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
ec->gpe, ec->command_addr, ec->data_addr);
pr_info(PREFIX "driver started in %s mode\n",
(test_bit(EC_FLAGS_GPE_MODE, &ec->flags))?"interrupt":"poll");
in function acpi_ec_add
Then you can just recompile and run the new kernel. To verify that it works
will tell you that the EC has started in Poll mode.
In fear of people messing up their computer, I do NOT recommend doing this. Do it at your own discretion.